UNPKG

2.91 kBSource Map (JSON)View Raw
1{"version":3,"names":["React","CHILD_STATE","Symbol","useRouteCache","routes","cache","useMemo","current","Map","process","env","NODE_ENV","reduce","acc","route","previous","get","set","state","proxy","Object","defineProperty","enumerable","value","Array","from","values"],"sources":["useRouteCache.tsx"],"sourcesContent":["import type {\n NavigationState,\n ParamListBase,\n Route,\n} from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport type { RouteProp } from './types';\n\ntype RouteCache = Map<Route<string>, RouteProp<ParamListBase>>;\n\n/**\n * Utilites such as `getFocusedRouteNameFromRoute` need to access state.\n * So we need a way to suppress the warning for those use cases.\n * This is fine since they are internal utilities and this is not public API.\n */\nexport const CHILD_STATE = Symbol('CHILD_STATE');\n\n/**\n * Hook to cache route props for each screen in the navigator.\n * This lets add warnings and modifications to the route object but keep references between renders.\n */\nexport default function useRouteCache<State extends NavigationState>(\n routes: State['routes']\n) {\n // Cache object which holds route objects for each screen\n const cache = React.useMemo(() => ({ current: new Map() as RouteCache }), []);\n\n if (process.env.NODE_ENV === 'production') {\n // We don't want the overhead of creating extra maps every render in prod\n return routes;\n }\n\n cache.current = routes.reduce((acc, route) => {\n const previous = cache.current.get(route);\n\n if (previous) {\n // If a cached route object already exists, reuse it\n acc.set(route, previous);\n } else {\n const { state, ...proxy } = route;\n\n Object.defineProperty(proxy, CHILD_STATE, {\n enumerable: false,\n value: state,\n });\n\n acc.set(route, proxy);\n }\n\n return acc;\n }, new Map() as RouteCache);\n\n return Array.from(cache.current.values());\n}\n"],"mappings":"AAKA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;;AAMA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,WAAW,GAAGC,MAAM,CAAC,aAAD,CAA1B;AAEP;AACA;AACA;AACA;;AACA,eAAe,SAASC,aAAT,CACbC,MADa,EAEb;EACA;EACA,MAAMC,KAAK,GAAGL,KAAK,CAACM,OAAN,CAAc,OAAO;IAAEC,OAAO,EAAE,IAAIC,GAAJ;EAAX,CAAP,CAAd,EAA4D,EAA5D,CAAd;;EAEA,IAAIC,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,YAA7B,EAA2C;IACzC;IACA,OAAOP,MAAP;EACD;;EAEDC,KAAK,CAACE,OAAN,GAAgBH,MAAM,CAACQ,MAAP,CAAc,CAACC,GAAD,EAAMC,KAAN,KAAgB;IAC5C,MAAMC,QAAQ,GAAGV,KAAK,CAACE,OAAN,CAAcS,GAAd,CAAkBF,KAAlB,CAAjB;;IAEA,IAAIC,QAAJ,EAAc;MACZ;MACAF,GAAG,CAACI,GAAJ,CAAQH,KAAR,EAAeC,QAAf;IACD,CAHD,MAGO;MACL,MAAM;QAAEG,KAAF;QAAS,GAAGC;MAAZ,IAAsBL,KAA5B;MAEAM,MAAM,CAACC,cAAP,CAAsBF,KAAtB,EAA6BlB,WAA7B,EAA0C;QACxCqB,UAAU,EAAE,KAD4B;QAExCC,KAAK,EAAEL;MAFiC,CAA1C;MAKAL,GAAG,CAACI,GAAJ,CAAQH,KAAR,EAAeK,KAAf;IACD;;IAED,OAAON,GAAP;EACD,CAlBe,EAkBb,IAAIL,GAAJ,EAlBa,CAAhB;EAoBA,OAAOgB,KAAK,CAACC,IAAN,CAAWpB,KAAK,CAACE,OAAN,CAAcmB,MAAd,EAAX,CAAP;AACD"}
\No newline at end of file