{"ast":null,"code":"\"use strict\";\n\nimport { nanoid } from 'nanoid/non-secure';\nimport * as React from 'react';\nimport useLatestCallback from 'use-latest-callback';\nimport { NavigationHelpersContext } from \"./NavigationHelpersContext.js\";\nimport { NavigationRouteContext } from \"./NavigationRouteContext.js\";\nimport { PreventRemoveContext } from \"./PreventRemoveContext.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst transformPreventedRoutes = preventedRoutesMap => {\n  const preventedRoutesToTransform = [...preventedRoutesMap.values()];\n  const preventedRoutes = preventedRoutesToTransform.reduce((acc, {\n    routeKey,\n    preventRemove\n  }) => {\n    acc[routeKey] = {\n      preventRemove: acc[routeKey]?.preventRemove || preventRemove\n    };\n    return acc;\n  }, {});\n  return preventedRoutes;\n};\nexport function PreventRemoveProvider({\n  children\n}) {\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  const setParentPrevented = preventRemoveContextValue?.setPreventRemove;\n  const setPreventRemove = useLatestCallback((id, routeKey, preventRemove) => {\n    if (preventRemove && (navigation == null || 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      if (routeKey === prevPrevented.get(id)?.routeKey && preventRemove === prevPrevented.get(id)?.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(({\n    preventRemove\n  }) => preventRemove);\n  React.useEffect(() => {\n    if (route?.key !== undefined && setParentPrevented !== undefined) {\n      setParentPrevented(parentId, route.key, isPrevented);\n      return () => {\n        setParentPrevented(parentId, route.key, false);\n      };\n    }\n    return;\n  }, [parentId, isPrevented, route?.key, setParentPrevented]);\n  const value = React.useMemo(() => ({\n    setPreventRemove,\n    preventedRoutes: transformPreventedRoutes(preventedRoutesMap)\n  }), [setPreventRemove, preventedRoutesMap]);\n  return _jsx(PreventRemoveContext.Provider, {\n    value: value,\n    children: children\n  });\n}","map":{"version":3,"names":["nanoid","React","useLatestCallback","NavigationHelpersContext","NavigationRouteContext","PreventRemoveContext","jsx","_jsx","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","Provider"],"sources":["/Users/pmouli/Documents/GitHub.nosync/boots-strapper/mobile/node_modules/@react-navigation/core/src/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 {\n  type PreventedRoutes,\n  PreventRemoveContext,\n} 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 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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","ignoreList":[]},"metadata":{"hasCjsExports":false},"sourceType":"module","externalDependencies":[]}