{"ast":null,"code":"import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nimport * as React from 'react';\nimport NavigationBuilderContext from \"./NavigationBuilderContext\";\nimport NavigationContext from \"./NavigationContext\";\nimport NavigationRouteContext from \"./NavigationRouteContext\";\nimport SceneView from \"./SceneView\";\nimport useNavigationCache from \"./useNavigationCache\";\nimport useRouteCache from \"./useRouteCache\";\nexport default function useDescriptors(_ref) {\n var state = _ref.state,\n screens = _ref.screens,\n navigation = _ref.navigation,\n screenOptions = _ref.screenOptions,\n defaultScreenOptions = _ref.defaultScreenOptions,\n onAction = _ref.onAction,\n getState = _ref.getState,\n setState = _ref.setState,\n addListener = _ref.addListener,\n addKeyedListener = _ref.addKeyedListener,\n onRouteFocus = _ref.onRouteFocus,\n router = _ref.router,\n emitter = _ref.emitter;\n var _React$useState = React.useState({}),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n options = _React$useState2[0],\n setOptions = _React$useState2[1];\n var _React$useContext = React.useContext(NavigationBuilderContext),\n onDispatchAction = _React$useContext.onDispatchAction,\n onOptionsChange = _React$useContext.onOptionsChange,\n stackRef = _React$useContext.stackRef;\n var context = React.useMemo(function () {\n return {\n navigation: navigation,\n onAction: onAction,\n addListener: addListener,\n addKeyedListener: addKeyedListener,\n onRouteFocus: onRouteFocus,\n onDispatchAction: onDispatchAction,\n onOptionsChange: onOptionsChange,\n stackRef: stackRef\n };\n }, [navigation, onAction, addListener, addKeyedListener, onRouteFocus, onDispatchAction, onOptionsChange, stackRef]);\n var navigations = useNavigationCache({\n state: state,\n getState: getState,\n navigation: navigation,\n setOptions: setOptions,\n router: router,\n emitter: emitter\n });\n var routes = useRouteCache(state.routes);\n return routes.reduce(function (acc, route, i) {\n var config = screens[route.name];\n var screen = config.props;\n var navigation = navigations[route.key];\n var optionsList = [screenOptions].concat(_toConsumableArray(config.options ? config.options.filter(Boolean) : []), [screen.options, options[route.key]]);\n var customOptions = optionsList.reduce(function (acc, curr) {\n return Object.assign(acc, typeof curr !== 'function' ? curr : curr({\n route: route,\n navigation: navigation\n }));\n }, {});\n var mergedOptions = _objectSpread(_objectSpread({}, typeof defaultScreenOptions === 'function' ? defaultScreenOptions({\n route: route,\n navigation: navigation,\n options: customOptions\n }) : defaultScreenOptions), customOptions);\n var clearOptions = function clearOptions() {\n return setOptions(function (o) {\n if (route.key in o) {\n var _route$key = route.key,\n _ = o[_route$key],\n rest = _objectWithoutProperties(o, [_route$key].map(_toPropertyKey));\n return rest;\n }\n return o;\n });\n };\n acc[route.key] = {\n route: route,\n navigation: navigation,\n render: function render() {\n return React.createElement(NavigationBuilderContext.Provider, {\n key: route.key,\n value: context\n }, React.createElement(NavigationContext.Provider, {\n value: navigation\n }, React.createElement(NavigationRouteContext.Provider, {\n value: route\n }, React.createElement(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 },\n options: mergedOptions\n };\n return acc;\n }, {});\n}","map":{"version":3,"sources":["useDescriptors.tsx"],"names":["React","NavigationBuilderContext","NavigationContext","NavigationRouteContext","SceneView","useNavigationCache","useRouteCache","useDescriptors","state","screens","navigation","screenOptions","defaultScreenOptions","onAction","getState","setState","addListener","addKeyedListener","onRouteFocus","router","emitter","options","setOptions","useState","onDispatchAction","onOptionsChange","stackRef","useContext","context","useMemo","navigations","routes","reduce","acc","route","i","config","name","screen","props","key","optionsList","filter","Boolean","customOptions","curr","Object","assign","mergedOptions","clearOptions","o","_","rest","render"],"mappings":"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","sourceRoot":"../../src","sourcesContent":["import * as React from 'react';\nimport NavigationBuilderContext from './NavigationBuilderContext';\nimport NavigationContext from './NavigationContext';\nimport NavigationRouteContext from './NavigationRouteContext';\nimport SceneView from './SceneView';\nimport useNavigationCache from './useNavigationCache';\nimport useRouteCache from './useRouteCache';\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(_ref) {\n let {\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 } = _ref;\n const [options, setOptions] = React.useState({});\n const {\n onDispatchAction,\n onOptionsChange,\n stackRef\n } = React.useContext(NavigationBuilderContext);\n const context = React.useMemo(() => ({\n navigation,\n onAction,\n addListener,\n addKeyedListener,\n onRouteFocus,\n onDispatchAction,\n onOptionsChange,\n stackRef\n }), [navigation, onAction, addListener, addKeyedListener, onRouteFocus, onDispatchAction, onOptionsChange, stackRef]);\n const navigations = useNavigationCache({\n state,\n getState,\n navigation,\n setOptions,\n router,\n emitter\n });\n const routes = useRouteCache(state.routes);\n return routes.reduce((acc, route, i) => {\n const config = screens[route.name];\n const screen = config.props;\n const navigation = navigations[route.key];\n const optionsList = [\n // The default `screenOptions` passed to the navigator\n screenOptions,\n // The `screenOptions` props passed to `Group` elements\n ...(config.options ? config.options.filter(Boolean) : []),\n // The `options` prop passed to `Screen` elements,\n screen.options,\n // The options set via `navigation.setOptions`\n options[route.key]];\n const customOptions = optionsList.reduce((acc, curr) => Object.assign(acc, typeof curr !== 'function' ? curr : curr({\n route,\n navigation\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 }) : defaultScreenOptions),\n ...customOptions\n };\n const clearOptions = () => setOptions(o => {\n if (route.key in o) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n [route.key]: _,\n ...rest\n } = o;\n return rest;\n }\n return o;\n });\n acc[route.key] = {\n route,\n // @ts-expect-error: it's missing action helpers, fix later\n navigation,\n render() {\n return /*#__PURE__*/React.createElement(NavigationBuilderContext.Provider, {\n key: route.key,\n value: context\n }, /*#__PURE__*/React.createElement(NavigationContext.Provider, {\n value: navigation\n }, /*#__PURE__*/React.createElement(NavigationRouteContext.Provider, {\n value: route\n }, /*#__PURE__*/React.createElement(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 },\n options: mergedOptions\n };\n return acc;\n }, {});\n}\n//# sourceMappingURL=useDescriptors.js.map"]},"metadata":{},"sourceType":"module"}