{"ast":null,"code":"import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport { nanoid } from 'nanoid/non-secure';\nimport * as React from 'react';\nimport useLatestCallback from 'use-latest-callback';\nimport NavigationHelpersContext from \"./NavigationHelpersContext\";\nimport NavigationRouteContext from \"./NavigationRouteContext\";\nimport PreventRemoveContext from \"./PreventRemoveContext\";\nvar transformPreventedRoutes = function transformPreventedRoutes(preventedRoutesMap) {\n var preventedRoutesToTransform = _toConsumableArray(preventedRoutesMap.values());\n var preventedRoutes = preventedRoutesToTransform.reduce(function (acc, _ref) {\n var _acc$routeKey;\n var routeKey = _ref.routeKey,\n preventRemove = _ref.preventRemove;\n acc[routeKey] = {\n preventRemove: ((_acc$routeKey = acc[routeKey]) === null || _acc$routeKey === void 0 ? void 0 : _acc$routeKey.preventRemove) || preventRemove\n };\n return acc;\n }, {});\n return preventedRoutes;\n};\nexport default function PreventRemoveProvider(_ref2) {\n var children = _ref2.children;\n var _React$useState = React.useState(function () {\n return nanoid();\n }),\n _React$useState2 = _slicedToArray(_React$useState, 1),\n parentId = _React$useState2[0];\n var _React$useState3 = React.useState(new Map()),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n preventedRoutesMap = _React$useState4[0],\n setPreventedRoutesMap = _React$useState4[1];\n var navigation = React.useContext(NavigationHelpersContext);\n var route = React.useContext(NavigationRouteContext);\n var preventRemoveContextValue = React.useContext(PreventRemoveContext);\n var setParentPrevented = preventRemoveContextValue === null || preventRemoveContextValue === void 0 ? void 0 : preventRemoveContextValue.setPreventRemove;\n var setPreventRemove = useLatestCallback(function (id, routeKey, preventRemove) {\n if (preventRemove && (navigation == null || navigation !== null && navigation !== void 0 && navigation.getState().routes.every(function (route) {\n return route.key !== routeKey;\n }))) {\n throw new Error(\"Couldn't find a route with the key \" + routeKey + \". Is your component inside NavigationContent?\");\n }\n setPreventedRoutesMap(function (prevPrevented) {\n var _prevPrevented$get, _prevPrevented$get2;\n if (routeKey === ((_prevPrevented$get = prevPrevented.get(id)) === null || _prevPrevented$get === void 0 ? void 0 : _prevPrevented$get.routeKey) && preventRemove === ((_prevPrevented$get2 = prevPrevented.get(id)) === null || _prevPrevented$get2 === void 0 ? void 0 : _prevPrevented$get2.preventRemove)) {\n return prevPrevented;\n }\n var nextPrevented = new Map(prevPrevented);\n if (preventRemove) {\n nextPrevented.set(id, {\n routeKey: routeKey,\n preventRemove: preventRemove\n });\n } else {\n nextPrevented.delete(id);\n }\n return nextPrevented;\n });\n });\n var isPrevented = _toConsumableArray(preventedRoutesMap.values()).some(function (_ref3) {\n var preventRemove = _ref3.preventRemove;\n return preventRemove;\n });\n React.useEffect(function () {\n if ((route === null || route === void 0 ? void 0 : route.key) !== undefined && setParentPrevented !== undefined) {\n setParentPrevented(parentId, route.key, isPrevented);\n return function () {\n setParentPrevented(parentId, route.key, false);\n };\n }\n return;\n }, [parentId, isPrevented, route === null || route === void 0 ? void 0 : route.key, setParentPrevented]);\n var value = React.useMemo(function () {\n return {\n setPreventRemove: setPreventRemove,\n preventedRoutes: transformPreventedRoutes(preventedRoutesMap)\n };\n }, [setPreventRemove, preventedRoutesMap]);\n return React.createElement(PreventRemoveContext.Provider, {\n value: value\n }, children);\n}","map":{"version":3,"sources":["PreventRemoveProvider.tsx"],"names":["nanoid","React","useLatestCallback","NavigationHelpersContext","NavigationRouteContext","PreventRemoveContext","transformPreventedRoutes","preventedRoutesMap","preventedRoutesToTransform","values","preventedRoutes","reduce","acc","routeKey","preventRemove","PreventRemoveProvider","children","parentId","useState","setPreventedRoutesMap","Map","navigation","useContext","route","preventRemoveContextValue","setParentPrevented","setPreventRemove","id","getState","routes","every","key","Error","prevPrevented","get","nextPrevented","set","delete","isPrevented","some","useEffect","undefined","value","useMemo"],"mappings":"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","sourceRoot":"../../src","sourcesContent":["import { nanoid } from 'nanoid/non-secure';\nimport * as React from 'react';\nimport useLatestCallback from 'use-latest-callback';\nimport NavigationHelpersContext from './NavigationHelpersContext';\nimport NavigationRouteContext from './NavigationRouteContext';\nimport PreventRemoveContext from './PreventRemoveContext';\n/**\n * Util function to transform map of prevented routes to a simpler object.\n */\nconst transformPreventedRoutes = preventedRoutesMap => {\n const preventedRoutesToTransform = [...preventedRoutesMap.values()];\n const preventedRoutes = preventedRoutesToTransform.reduce((acc, _ref) => {\n var _acc$routeKey;\n let {\n routeKey,\n preventRemove\n } = _ref;\n acc[routeKey] = {\n preventRemove: ((_acc$routeKey = acc[routeKey]) === null || _acc$routeKey === void 0 ? void 0 : _acc$routeKey.preventRemove) || preventRemove\n };\n return acc;\n }, {});\n return preventedRoutes;\n};\n\n/**\n * Component used for managing which routes have to be prevented from removal in native-stack.\n */\nexport default function PreventRemoveProvider(_ref2) {\n let {\n children\n } = _ref2;\n const [parentId] = React.useState(() => nanoid());\n const [preventedRoutesMap, setPreventedRoutesMap] = React.useState(new Map());\n const navigation = React.useContext(NavigationHelpersContext);\n const route = React.useContext(NavigationRouteContext);\n const preventRemoveContextValue = React.useContext(PreventRemoveContext);\n // take `setPreventRemove` from parent context - if exist it means we're in a nested context\n const setParentPrevented = preventRemoveContextValue === null || preventRemoveContextValue === void 0 ? void 0 : preventRemoveContextValue.setPreventRemove;\n const setPreventRemove = useLatestCallback((id, routeKey, preventRemove) => {\n if (preventRemove && (navigation == null || navigation !== null && navigation !== void 0 && navigation.getState().routes.every(route => route.key !== routeKey))) {\n throw new Error(`Couldn't find a route with the key ${routeKey}. Is your component inside NavigationContent?`);\n }\n setPreventedRoutesMap(prevPrevented => {\n var _prevPrevented$get, _prevPrevented$get2;\n // values haven't changed - do nothing\n if (routeKey === ((_prevPrevented$get = prevPrevented.get(id)) === null || _prevPrevented$get === void 0 ? void 0 : _prevPrevented$get.routeKey) && preventRemove === ((_prevPrevented$get2 = prevPrevented.get(id)) === null || _prevPrevented$get2 === void 0 ? void 0 : _prevPrevented$get2.preventRemove)) {\n return prevPrevented;\n }\n const nextPrevented = new Map(prevPrevented);\n if (preventRemove) {\n nextPrevented.set(id, {\n routeKey,\n preventRemove\n });\n } else {\n nextPrevented.delete(id);\n }\n return nextPrevented;\n });\n });\n const isPrevented = [...preventedRoutesMap.values()].some(_ref3 => {\n let {\n preventRemove\n } = _ref3;\n return preventRemove;\n });\n React.useEffect(() => {\n if ((route === null || route === void 0 ? void 0 : route.key) !== undefined && setParentPrevented !== undefined) {\n // when route is defined (and setParentPrevented) it means we're in a nested stack\n // route.key then will be the route key of parent\n setParentPrevented(parentId, route.key, isPrevented);\n return () => {\n setParentPrevented(parentId, route.key, false);\n };\n }\n return;\n }, [parentId, isPrevented, route === null || route === void 0 ? void 0 : route.key, setParentPrevented]);\n const value = React.useMemo(() => ({\n setPreventRemove,\n preventedRoutes: transformPreventedRoutes(preventedRoutesMap)\n }), [setPreventRemove, preventedRoutesMap]);\n return /*#__PURE__*/React.createElement(PreventRemoveContext.Provider, {\n value: value\n }, children);\n}\n//# sourceMappingURL=PreventRemoveProvider.js.map"]},"metadata":{},"sourceType":"module"}