UNPKG

7.07 kBSource Map (JSON)View Raw
1{"version":3,"names":["transformPreventedRoutes","preventedRoutesMap","preventedRoutesToTransform","values","preventedRoutes","reduce","acc","routeKey","preventRemove","PreventRemoveProvider","children","parentId","React","useState","nanoid","setPreventedRoutesMap","Map","navigation","useContext","NavigationHelpersContext","route","NavigationRouteContext","preventRemoveContextValue","PreventRemoveContext","setParentPrevented","setPreventRemove","useLatestCallback","id","getState","routes","every","key","Error","prevPrevented","get","nextPrevented","set","delete","isPrevented","some","useEffect","undefined","value","useMemo"],"sources":["PreventRemoveProvider.tsx"],"sourcesContent":["import { nanoid } from 'nanoid/non-secure';\nimport * as React from 'react';\nimport useLatestCallback from 'use-latest-callback';\n\nimport NavigationHelpersContext from './NavigationHelpersContext';\nimport NavigationRouteContext from './NavigationRouteContext';\nimport PreventRemoveContext, { PreventedRoutes } from './PreventRemoveContext';\n\ntype Props = {\n children: React.ReactNode;\n};\n\ntype PreventedRoutesMap = Map<\n string,\n {\n routeKey: string;\n preventRemove: boolean;\n }\n>;\n\n/**\n * Util function to transform map of prevented routes to a simpler object.\n */\nconst transformPreventedRoutes = (\n preventedRoutesMap: PreventedRoutesMap\n): PreventedRoutes => {\n const preventedRoutesToTransform = [...preventedRoutesMap.values()];\n\n const preventedRoutes = preventedRoutesToTransform.reduce<PreventedRoutes>(\n (acc, { routeKey, preventRemove }) => {\n acc[routeKey] = {\n preventRemove: acc[routeKey]?.preventRemove || preventRemove,\n };\n return acc;\n },\n {}\n );\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({ children }: Props) {\n const [parentId] = React.useState(() => nanoid());\n const [preventedRoutesMap, setPreventedRoutesMap] =\n React.useState<PreventedRoutesMap>(new Map());\n\n const navigation = React.useContext(NavigationHelpersContext);\n const route = React.useContext(NavigationRouteContext);\n\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?.setPreventRemove;\n\n const setPreventRemove = useLatestCallback(\n (id: string, routeKey: string, preventRemove: boolean): void => {\n if (\n preventRemove &&\n (navigation == null ||\n navigation\n ?.getState()\n .routes.every((route) => route.key !== routeKey))\n ) {\n throw new Error(\n `Couldn't find a route with the key ${routeKey}. Is your component inside NavigationContent?`\n );\n }\n\n setPreventedRoutesMap((prevPrevented) => {\n // values haven't changed - do nothing\n if (\n routeKey === prevPrevented.get(id)?.routeKey &&\n preventRemove === prevPrevented.get(id)?.preventRemove\n ) {\n return prevPrevented;\n }\n\n const nextPrevented = new Map(prevPrevented);\n\n if (preventRemove) {\n nextPrevented.set(id, {\n routeKey,\n preventRemove,\n });\n } else {\n nextPrevented.delete(id);\n }\n\n return nextPrevented;\n });\n }\n );\n\n const isPrevented = [...preventedRoutesMap.values()].some(\n ({ preventRemove }) => preventRemove\n );\n\n React.useEffect(() => {\n if (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\n return;\n }, [parentId, isPrevented, route?.key, setParentPrevented]);\n\n const value = React.useMemo(\n () => ({\n setPreventRemove,\n preventedRoutes: transformPreventedRoutes(preventedRoutesMap),\n }),\n [setPreventRemove, preventedRoutesMap]\n );\n\n return (\n <PreventRemoveContext.Provider value={value}>\n {children}\n </PreventRemoveContext.Provider>\n );\n}\n"],"mappings":"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"}
\No newline at end of file