UNPKG

9.8 kBSource Map (JSON)View Raw
1{"version":3,"names":["useDescriptors","state","screens","navigation","screenOptions","defaultScreenOptions","onAction","getState","setState","addListener","addKeyedListener","onRouteFocus","router","emitter","options","setOptions","React","useState","onDispatchAction","onOptionsChange","stackRef","useContext","NavigationBuilderContext","context","useMemo","navigations","useNavigationCache","routes","useRouteCache","reduce","acc","route","i","config","name","screen","props","key","optionsList","filter","Boolean","customOptions","curr","Object","assign","mergedOptions","clearOptions","o","_","rest","render"],"sources":["useDescriptors.tsx"],"sourcesContent":["import type {\n NavigationAction,\n NavigationState,\n ParamListBase,\n Router,\n} from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport NavigationBuilderContext, {\n AddKeyedListener,\n AddListener,\n} from './NavigationBuilderContext';\nimport NavigationContext from './NavigationContext';\nimport NavigationRouteContext from './NavigationRouteContext';\nimport SceneView from './SceneView';\nimport type {\n Descriptor,\n EventMapBase,\n NavigationHelpers,\n NavigationProp,\n RouteConfig,\n RouteProp,\n} from './types';\nimport type { NavigationEventEmitter } from './useEventEmitter';\nimport useNavigationCache from './useNavigationCache';\nimport useRouteCache from './useRouteCache';\n\nexport type ScreenConfigWithParent<\n State extends NavigationState,\n ScreenOptions extends {},\n EventMap extends EventMapBase\n> = {\n keys: (string | undefined)[];\n options: (ScreenOptionsOrCallback<ScreenOptions> | undefined)[] | undefined;\n props: RouteConfig<ParamListBase, string, State, ScreenOptions, EventMap>;\n};\n\ntype ScreenOptionsOrCallback<ScreenOptions extends {}> =\n | ScreenOptions\n | ((props: {\n route: RouteProp<ParamListBase, string>;\n navigation: any;\n }) => ScreenOptions);\n\ntype Options<\n State extends NavigationState,\n ScreenOptions extends {},\n EventMap extends EventMapBase\n> = {\n state: State;\n screens: Record<\n string,\n ScreenConfigWithParent<State, ScreenOptions, EventMap>\n >;\n navigation: NavigationHelpers<ParamListBase>;\n screenOptions?: ScreenOptionsOrCallback<ScreenOptions>;\n defaultScreenOptions?:\n | ScreenOptions\n | ((props: {\n route: RouteProp<ParamListBase>;\n navigation: any;\n options: ScreenOptions;\n }) => ScreenOptions);\n onAction: (action: NavigationAction) => boolean;\n getState: () => State;\n setState: (state: State) => void;\n addListener: AddListener;\n addKeyedListener: AddKeyedListener;\n onRouteFocus: (key: string) => void;\n router: Router<State, NavigationAction>;\n emitter: NavigationEventEmitter<EventMap>;\n};\n\n/**\n * Hook to create descriptor objects for the child routes.\n *\n * A descriptor object provides 3 things:\n * - Helper method to render a screen\n * - Options specified by the screen for the navigator\n * - Navigation object intended for the route\n */\nexport default function useDescriptors<\n State extends NavigationState,\n ActionHelpers extends Record<string, () => void>,\n ScreenOptions extends {},\n EventMap extends EventMapBase\n>({\n state,\n screens,\n navigation,\n screenOptions,\n defaultScreenOptions,\n onAction,\n getState,\n setState,\n addListener,\n addKeyedListener,\n onRouteFocus,\n router,\n emitter,\n}: Options<State, ScreenOptions, EventMap>) {\n const [options, setOptions] = React.useState<Record<string, object>>({});\n const { onDispatchAction, onOptionsChange, stackRef } = React.useContext(\n NavigationBuilderContext\n );\n\n const context = React.useMemo(\n () => ({\n navigation,\n onAction,\n addListener,\n addKeyedListener,\n onRouteFocus,\n onDispatchAction,\n onOptionsChange,\n stackRef,\n }),\n [\n navigation,\n onAction,\n addListener,\n addKeyedListener,\n onRouteFocus,\n onDispatchAction,\n onOptionsChange,\n stackRef,\n ]\n );\n\n const navigations = useNavigationCache<State, ScreenOptions, EventMap>({\n state,\n getState,\n navigation,\n setOptions,\n router,\n emitter,\n });\n\n const routes = useRouteCache(state.routes);\n\n return routes.reduce<\n Record<\n string,\n Descriptor<\n ScreenOptions,\n NavigationProp<\n ParamListBase,\n string,\n string | undefined,\n State,\n ScreenOptions,\n EventMap\n > &\n ActionHelpers,\n RouteProp<ParamListBase>\n >\n >\n >((acc, route, i) => {\n const config = screens[route.name];\n const screen = config.props;\n const navigation = navigations[route.key];\n\n const optionsList = [\n // The default `screenOptions` passed to the navigator\n screenOptions,\n // The `screenOptions` props passed to `Group` elements\n ...((config.options\n ? config.options.filter(Boolean)\n : []) as ScreenOptionsOrCallback<ScreenOptions>[]),\n // The `options` prop passed to `Screen` elements,\n screen.options,\n // The options set via `navigation.setOptions`\n options[route.key],\n ];\n\n const customOptions = optionsList.reduce<ScreenOptions>(\n (acc, curr) =>\n Object.assign(\n acc,\n typeof curr !== 'function' ? curr : curr({ route, navigation })\n ),\n {} as ScreenOptions\n );\n\n const mergedOptions = {\n ...(typeof defaultScreenOptions === 'function'\n ? // @ts-expect-error: ts gives incorrect error here\n defaultScreenOptions({\n route,\n navigation,\n options: customOptions,\n })\n : defaultScreenOptions),\n ...customOptions,\n };\n\n const clearOptions = () =>\n setOptions((o) => {\n if (route.key in o) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [route.key]: _, ...rest } = o;\n return rest;\n }\n\n return o;\n });\n\n acc[route.key] = {\n route,\n // @ts-expect-error: it's missing action helpers, fix later\n navigation,\n render() {\n return (\n <NavigationBuilderContext.Provider key={route.key} value={context}>\n <NavigationContext.Provider value={navigation}>\n <NavigationRouteContext.Provider value={route}>\n <SceneView\n navigation={navigation}\n route={route}\n screen={screen}\n routeState={state.routes[i].state}\n getState={getState}\n setState={setState}\n options={mergedOptions}\n clearOptions={clearOptions}\n />\n </NavigationRouteContext.Provider>\n </NavigationContext.Provider>\n </NavigationBuilderContext.Provider>\n );\n },\n options: mergedOptions as ScreenOptions,\n };\n\n return acc;\n }, {});\n}\n"],"mappings":"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"}
\No newline at end of file