@react-navigation/core 6.1.0 → 6.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/BaseNavigationContainer.js +13 -9
- package/lib/commonjs/BaseNavigationContainer.js.map +1 -1
- package/lib/commonjs/CurrentRenderContext.js.map +1 -1
- package/lib/commonjs/EnsureSingleNavigator.js +5 -4
- package/lib/commonjs/EnsureSingleNavigator.js.map +1 -1
- package/lib/commonjs/NavigationContainerRefContext.js.map +1 -1
- package/lib/commonjs/NavigationContext.js.map +1 -1
- package/lib/commonjs/NavigationHelpersContext.js.map +1 -1
- package/lib/commonjs/NavigationRouteContext.js.map +1 -1
- package/lib/commonjs/SceneView.js +11 -10
- package/lib/commonjs/SceneView.js.map +1 -1
- package/lib/commonjs/UnhandledActionContext.js.map +1 -1
- package/lib/commonjs/createNavigationContainerRef.js +11 -6
- package/lib/commonjs/createNavigationContainerRef.js.map +1 -1
- package/lib/commonjs/fromEntries.js +3 -1
- package/lib/commonjs/fromEntries.js.map +1 -1
- package/lib/commonjs/getActionFromState.js +2 -1
- package/lib/commonjs/getActionFromState.js.map +1 -1
- package/lib/commonjs/getPathFromState.js +13 -3
- package/lib/commonjs/getPathFromState.js.map +1 -1
- package/lib/commonjs/getStateFromPath.js +12 -2
- package/lib/commonjs/getStateFromPath.js.map +1 -1
- package/lib/commonjs/index.js +24 -24
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/useChildListeners.js.map +1 -1
- package/lib/commonjs/useCurrentRender.js +6 -5
- package/lib/commonjs/useCurrentRender.js.map +1 -1
- package/lib/commonjs/useDescriptors.js +16 -15
- package/lib/commonjs/useDescriptors.js.map +1 -1
- package/lib/commonjs/useEventEmitter.js +7 -6
- package/lib/commonjs/useEventEmitter.js.map +1 -1
- package/lib/commonjs/useFocusEvents.js +5 -4
- package/lib/commonjs/useFocusEvents.js.map +1 -1
- package/lib/commonjs/useFocusedListenersChildrenAdapter.js +5 -4
- package/lib/commonjs/useFocusedListenersChildrenAdapter.js.map +1 -1
- package/lib/commonjs/useKeyedChildListeners.js.map +1 -1
- package/lib/commonjs/useNavigationBuilder.js +9 -5
- package/lib/commonjs/useNavigationBuilder.js.map +1 -1
- package/lib/commonjs/useNavigationCache.js +17 -10
- package/lib/commonjs/useNavigationCache.js.map +1 -1
- package/lib/commonjs/useNavigationHelpers.js +10 -7
- package/lib/commonjs/useNavigationHelpers.js.map +1 -1
- package/lib/commonjs/useOnAction.js +13 -11
- package/lib/commonjs/useOnAction.js.map +1 -1
- package/lib/commonjs/useOnGetState.js +5 -4
- package/lib/commonjs/useOnGetState.js.map +1 -1
- package/lib/commonjs/useOnPreventRemove.js +6 -5
- package/lib/commonjs/useOnPreventRemove.js.map +1 -1
- package/lib/commonjs/useOnRouteFocus.js +7 -6
- package/lib/commonjs/useOnRouteFocus.js.map +1 -1
- package/lib/commonjs/useOptionsGetters.js +6 -5
- package/lib/commonjs/useOptionsGetters.js.map +1 -1
- package/lib/commonjs/useRouteCache.js +1 -1
- package/lib/commonjs/useScheduleUpdate.js +1 -1
- package/lib/commonjs/validatePathConfig.js +5 -2
- package/lib/commonjs/validatePathConfig.js.map +1 -1
- package/lib/module/BaseNavigationContainer.js +13 -9
- package/lib/module/BaseNavigationContainer.js.map +1 -1
- package/lib/module/CurrentRenderContext.js.map +1 -1
- package/lib/module/EnsureSingleNavigator.js +4 -3
- package/lib/module/EnsureSingleNavigator.js.map +1 -1
- package/lib/module/NavigationContainerRefContext.js.map +1 -1
- package/lib/module/NavigationContext.js.map +1 -1
- package/lib/module/NavigationHelpersContext.js.map +1 -1
- package/lib/module/NavigationRouteContext.js.map +1 -1
- package/lib/module/SceneView.js +11 -10
- package/lib/module/SceneView.js.map +1 -1
- package/lib/module/UnhandledActionContext.js.map +1 -1
- package/lib/module/createNavigationContainerRef.js +10 -5
- package/lib/module/createNavigationContainerRef.js.map +1 -1
- package/lib/module/fromEntries.js +3 -1
- package/lib/module/fromEntries.js.map +1 -1
- package/lib/module/getActionFromState.js +2 -1
- package/lib/module/getActionFromState.js.map +1 -1
- package/lib/module/getPathFromState.js +13 -3
- package/lib/module/getPathFromState.js.map +1 -1
- package/lib/module/getStateFromPath.js +12 -2
- package/lib/module/getStateFromPath.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/module/useChildListeners.js.map +1 -1
- package/lib/module/useCurrentRender.js +6 -5
- package/lib/module/useCurrentRender.js.map +1 -1
- package/lib/module/useDescriptors.js +16 -15
- package/lib/module/useDescriptors.js.map +1 -1
- package/lib/module/useEventEmitter.js +7 -6
- package/lib/module/useEventEmitter.js.map +1 -1
- package/lib/module/useFocusEvents.js +5 -4
- package/lib/module/useFocusEvents.js.map +1 -1
- package/lib/module/useFocusedListenersChildrenAdapter.js +5 -4
- package/lib/module/useFocusedListenersChildrenAdapter.js.map +1 -1
- package/lib/module/useKeyedChildListeners.js.map +1 -1
- package/lib/module/useNavigationBuilder.js +9 -5
- package/lib/module/useNavigationBuilder.js.map +1 -1
- package/lib/module/useNavigationCache.js +17 -10
- package/lib/module/useNavigationCache.js.map +1 -1
- package/lib/module/useNavigationHelpers.js +10 -7
- package/lib/module/useNavigationHelpers.js.map +1 -1
- package/lib/module/useOnAction.js +13 -11
- package/lib/module/useOnAction.js.map +1 -1
- package/lib/module/useOnGetState.js +5 -4
- package/lib/module/useOnGetState.js.map +1 -1
- package/lib/module/useOnPreventRemove.js +6 -5
- package/lib/module/useOnPreventRemove.js.map +1 -1
- package/lib/module/useOnRouteFocus.js +7 -6
- package/lib/module/useOnRouteFocus.js.map +1 -1
- package/lib/module/useOptionsGetters.js +6 -5
- package/lib/module/useOptionsGetters.js.map +1 -1
- package/lib/module/validatePathConfig.js +5 -2
- package/lib/module/validatePathConfig.js.map +1 -1
- package/package.json +4 -4
- package/src/CurrentRenderContext.tsx +3 -2
- package/src/EnsureSingleNavigator.tsx +7 -8
- package/src/NavigationContainerRefContext.tsx +3 -4
- package/src/NavigationContext.tsx +3 -2
- package/src/NavigationHelpersContext.tsx +3 -2
- package/src/NavigationRouteContext.tsx +3 -2
- package/src/UnhandledActionContext.tsx +3 -4
- package/src/createNavigationContainerRef.tsx +3 -1
- package/src/types.tsx +6 -6
- package/src/useChildListeners.tsx +3 -5
- package/src/useKeyedChildListeners.tsx +6 -8
- package/src/useNavigationBuilder.tsx +18 -9
|
@@ -33,14 +33,15 @@ export default function useEventEmitter(listen) {
|
|
|
33
33
|
removeListener
|
|
34
34
|
};
|
|
35
35
|
}, []);
|
|
36
|
-
const emit = React.useCallback(
|
|
37
|
-
type,
|
|
38
|
-
data,
|
|
39
|
-
target,
|
|
40
|
-
canPreventDefault
|
|
41
|
-
}) => {
|
|
36
|
+
const emit = React.useCallback(_ref => {
|
|
42
37
|
var _items$target, _listenRef$current;
|
|
43
38
|
|
|
39
|
+
let {
|
|
40
|
+
type,
|
|
41
|
+
data,
|
|
42
|
+
target,
|
|
43
|
+
canPreventDefault
|
|
44
|
+
} = _ref;
|
|
44
45
|
const items = listeners.current[type] || {}; // Copy the current list of callbacks in case they are mutated during execution
|
|
45
46
|
|
|
46
47
|
const callbacks = target !== undefined ? (_items$target = items[target]) === null || _items$target === void 0 ? void 0 : _items$target.slice() : [].concat(...Object.keys(items).map(t => items[t])).filter((cb, i, self) => self.lastIndexOf(cb) === i);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useEventEmitter.tsx"],"names":["React","useEventEmitter","listen","listenRef","useRef","useEffect","current","listeners","create","useCallback","target","removeListener","type","callback","callbacks","undefined","index","indexOf","splice","addListener","push","emit","data","canPreventDefault","items","slice","concat","Object","keys","map","t","filter","cb","i","self","lastIndexOf","event","defineProperty","enumerable","get","defaultPrevented","defineProperties","preventDefault","value","forEach","useMemo"],"mappings":"AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;;AAWA;AACA;AACA;AACA,eAAe,SAASC,eAAT,CACbC,MADa,EAEc;AAC3B,QAAMC,SAAS,GAAGH,KAAK,CAACI,MAAN,CAAaF,MAAb,CAAlB;AAEAF,EAAAA,KAAK,CAACK,SAAN,CAAgB,MAAM;AACpBF,IAAAA,SAAS,CAACG,OAAV,GAAoBJ,MAApB;AACD,GAFD;AAIA,QAAMK,SAAS,GAAGP,KAAK,CAACI,MAAN,CAAwD,EAAxD,CAAlB;AAEA,QAAMI,MAAM,GAAGR,KAAK,CAACS,WAAN,CAAmBC,MAAD,IAAoB;AACnD,UAAMC,cAAc,GAAG,CAACC,IAAD,EAAeC,QAAf,KAAiD;AACtE,YAAMC,SAAS,GAAGP,SAAS,CAACD,OAAV,CAAkBM,IAAlB,IACdL,SAAS,CAACD,OAAV,CAAkBM,IAAlB,EAAwBF,MAAxB,CADc,GAEdK,SAFJ;;AAIA,UAAI,CAACD,SAAL,EAAgB;AACd;AACD;;AAED,YAAME,KAAK,GAAGF,SAAS,CAACG,OAAV,CAAkBJ,QAAlB,CAAd;AAEAC,MAAAA,SAAS,CAACI,MAAV,CAAiBF,KAAjB,EAAwB,CAAxB;AACD,KAZD;;AAcA,UAAMG,WAAW,GAAG,CAACP,IAAD,EAAeC,QAAf,KAAiD;AACnEN,MAAAA,SAAS,CAACD,OAAV,CAAkBM,IAAlB,IAA0BL,SAAS,CAACD,OAAV,CAAkBM,IAAlB,KAA2B,EAArD;AACAL,MAAAA,SAAS,CAACD,OAAV,CAAkBM,IAAlB,EAAwBF,MAAxB,IAAkCH,SAAS,CAACD,OAAV,CAAkBM,IAAlB,EAAwBF,MAAxB,KAAmC,EAArE;AACAH,MAAAA,SAAS,CAACD,OAAV,CAAkBM,IAAlB,EAAwBF,MAAxB,EAAgCU,IAAhC,CAAqCP,QAArC;AAEA,aAAO,MAAMF,cAAc,CAACC,IAAD,EAAOC,QAAP,CAA3B;AACD,KAND;;AAQA,WAAO;AACLM,MAAAA,WADK;AAELR,MAAAA;AAFK,KAAP;AAID,GA3Bc,EA2BZ,EA3BY,CAAf;AA6BA,QAAMU,IAAI,GAAGrB,KAAK,CAACS,WAAN,CACX,
|
|
1
|
+
{"version":3,"sources":["useEventEmitter.tsx"],"names":["React","useEventEmitter","listen","listenRef","useRef","useEffect","current","listeners","create","useCallback","target","removeListener","type","callback","callbacks","undefined","index","indexOf","splice","addListener","push","emit","data","canPreventDefault","items","slice","concat","Object","keys","map","t","filter","cb","i","self","lastIndexOf","event","defineProperty","enumerable","get","defaultPrevented","defineProperties","preventDefault","value","forEach","useMemo"],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport type { EventArg, EventConsumer, EventEmitter } from './types';\n\nexport type NavigationEventEmitter<T extends Record<string, any>> =\n EventEmitter<T> & {\n create: (target: string) => EventConsumer<T>;\n };\n\ntype Listeners = ((e: any) => void)[];\n\n/**\n * Hook to manage the event system used by the navigator to notify screens of various events.\n */\nexport default function useEventEmitter<T extends Record<string, any>>(\n listen?: (e: any) => void\n): NavigationEventEmitter<T> {\n const listenRef = React.useRef(listen);\n\n React.useEffect(() => {\n listenRef.current = listen;\n });\n\n const listeners = React.useRef<Record<string, Record<string, Listeners>>>({});\n\n const create = React.useCallback((target: string) => {\n const removeListener = (type: string, callback: (data: any) => void) => {\n const callbacks = listeners.current[type]\n ? listeners.current[type][target]\n : undefined;\n\n if (!callbacks) {\n return;\n }\n\n const index = callbacks.indexOf(callback);\n\n callbacks.splice(index, 1);\n };\n\n const addListener = (type: string, callback: (data: any) => void) => {\n listeners.current[type] = listeners.current[type] || {};\n listeners.current[type][target] = listeners.current[type][target] || [];\n listeners.current[type][target].push(callback);\n\n return () => removeListener(type, callback);\n };\n\n return {\n addListener,\n removeListener,\n };\n }, []);\n\n const emit = React.useCallback(\n ({\n type,\n data,\n target,\n canPreventDefault,\n }: {\n type: string;\n data?: any;\n target?: string;\n canPreventDefault?: boolean;\n }) => {\n const items = listeners.current[type] || {};\n\n // Copy the current list of callbacks in case they are mutated during execution\n const callbacks =\n target !== undefined\n ? items[target]?.slice()\n : ([] as Listeners)\n .concat(...Object.keys(items).map((t) => items[t]))\n .filter((cb, i, self) => self.lastIndexOf(cb) === i);\n\n const event: EventArg<any, any, any> = {\n get type() {\n return type;\n },\n };\n\n if (target !== undefined) {\n Object.defineProperty(event, 'target', {\n enumerable: true,\n get() {\n return target;\n },\n });\n }\n\n if (data !== undefined) {\n Object.defineProperty(event, 'data', {\n enumerable: true,\n get() {\n return data;\n },\n });\n }\n\n if (canPreventDefault) {\n let defaultPrevented = false;\n\n Object.defineProperties(event, {\n defaultPrevented: {\n enumerable: true,\n get() {\n return defaultPrevented;\n },\n },\n preventDefault: {\n enumerable: true,\n value() {\n defaultPrevented = true;\n },\n },\n });\n }\n\n listenRef.current?.(event);\n\n callbacks?.forEach((cb) => cb(event));\n\n return event as any;\n },\n []\n );\n\n return React.useMemo(() => ({ create, emit }), [create, emit]);\n}\n"]}
|
|
@@ -4,10 +4,11 @@ import NavigationContext from './NavigationContext';
|
|
|
4
4
|
/**
|
|
5
5
|
* Hook to take care of emitting `focus` and `blur` events.
|
|
6
6
|
*/
|
|
7
|
-
export default function useFocusEvents({
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
export default function useFocusEvents(_ref) {
|
|
8
|
+
let {
|
|
9
|
+
state,
|
|
10
|
+
emitter
|
|
11
|
+
} = _ref;
|
|
11
12
|
const navigation = React.useContext(NavigationContext);
|
|
12
13
|
const lastFocusedKeyRef = React.useRef();
|
|
13
14
|
const currentFocusedKey = state.routes[state.index].key; // When the parent screen changes its focus state, we also need to change child's focus
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useFocusEvents.tsx"],"names":["React","NavigationContext","useFocusEvents","state","emitter","navigation","useContext","lastFocusedKeyRef","useRef","currentFocusedKey","routes","index","key","useEffect","addListener","current","emit","type","target","undefined","lastFocusedKey","isFocused"],"mappings":"AACA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAEA,OAAOC,iBAAP,MAA8B,qBAA9B;;AASA;AACA;AACA;AACA,eAAe,SAASC,cAAT,
|
|
1
|
+
{"version":3,"sources":["useFocusEvents.tsx"],"names":["React","NavigationContext","useFocusEvents","state","emitter","navigation","useContext","lastFocusedKeyRef","useRef","currentFocusedKey","routes","index","key","useEffect","addListener","current","emit","type","target","undefined","lastFocusedKey","isFocused"],"mappings":"AACA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAEA,OAAOC,iBAAP,MAA8B,qBAA9B;;AASA;AACA;AACA;AACA,eAAe,SAASC,cAAT,OAGI;AAAA,MAHmD;AACpEC,IAAAA,KADoE;AAEpEC,IAAAA;AAFoE,GAGnD;AACjB,QAAMC,UAAU,GAAGL,KAAK,CAACM,UAAN,CAAiBL,iBAAjB,CAAnB;AACA,QAAMM,iBAAiB,GAAGP,KAAK,CAACQ,MAAN,EAA1B;AAEA,QAAMC,iBAAiB,GAAGN,KAAK,CAACO,MAAN,CAAaP,KAAK,CAACQ,KAAnB,EAA0BC,GAApD,CAJiB,CAMjB;AACA;;AACAZ,EAAAA,KAAK,CAACa,SAAN,CACE,MACER,UADF,aACEA,UADF,uBACEA,UAAU,CAAES,WAAZ,CAAwB,OAAxB,EAAiC,MAAM;AACrCP,IAAAA,iBAAiB,CAACQ,OAAlB,GAA4BN,iBAA5B;AACAL,IAAAA,OAAO,CAACY,IAAR,CAAa;AAAEC,MAAAA,IAAI,EAAE,OAAR;AAAiBC,MAAAA,MAAM,EAAET;AAAzB,KAAb;AACD,GAHD,CAFJ,EAME,CAACA,iBAAD,EAAoBL,OAApB,EAA6BC,UAA7B,CANF;AASAL,EAAAA,KAAK,CAACa,SAAN,CACE,MACER,UADF,aACEA,UADF,uBACEA,UAAU,CAAES,WAAZ,CAAwB,MAAxB,EAAgC,MAAM;AACpCP,IAAAA,iBAAiB,CAACQ,OAAlB,GAA4BI,SAA5B;AACAf,IAAAA,OAAO,CAACY,IAAR,CAAa;AAAEC,MAAAA,IAAI,EAAE,MAAR;AAAgBC,MAAAA,MAAM,EAAET;AAAxB,KAAb;AACD,GAHD,CAFJ,EAME,CAACA,iBAAD,EAAoBL,OAApB,EAA6BC,UAA7B,CANF;AASAL,EAAAA,KAAK,CAACa,SAAN,CAAgB,MAAM;AACpB,UAAMO,cAAc,GAAGb,iBAAiB,CAACQ,OAAzC;AAEAR,IAAAA,iBAAiB,CAACQ,OAAlB,GAA4BN,iBAA5B,CAHoB,CAKpB;AACA;;AACA,QAAIW,cAAc,KAAKD,SAAnB,IAAgC,CAACd,UAArC,EAAiD;AAC/CD,MAAAA,OAAO,CAACY,IAAR,CAAa;AAAEC,QAAAA,IAAI,EAAE,OAAR;AAAiBC,QAAAA,MAAM,EAAET;AAAzB,OAAb;AACD,KATmB,CAWpB;AACA;;;AACA,QACEW,cAAc,KAAKX,iBAAnB,IACA,EAAEJ,UAAU,GAAGA,UAAU,CAACgB,SAAX,EAAH,GAA4B,IAAxC,CAFF,EAGE;AACA;AACD;;AAED,QAAID,cAAc,KAAKD,SAAvB,EAAkC;AAChC;AACA;AACD;;AAEDf,IAAAA,OAAO,CAACY,IAAR,CAAa;AAAEC,MAAAA,IAAI,EAAE,MAAR;AAAgBC,MAAAA,MAAM,EAAEE;AAAxB,KAAb;AACAhB,IAAAA,OAAO,CAACY,IAAR,CAAa;AAAEC,MAAAA,IAAI,EAAE,OAAR;AAAiBC,MAAAA,MAAM,EAAET;AAAzB,KAAb;AACD,GA3BD,EA2BG,CAACA,iBAAD,EAAoBL,OAApB,EAA6BC,UAA7B,CA3BH;AA4BD","sourcesContent":["import type { NavigationState } from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport NavigationContext from './NavigationContext';\nimport type { EventMapCore } from './types';\nimport type { NavigationEventEmitter } from './useEventEmitter';\n\ntype Options<State extends NavigationState> = {\n state: State;\n emitter: NavigationEventEmitter<EventMapCore<State>>;\n};\n\n/**\n * Hook to take care of emitting `focus` and `blur` events.\n */\nexport default function useFocusEvents<State extends NavigationState>({\n state,\n emitter,\n}: Options<State>) {\n const navigation = React.useContext(NavigationContext);\n const lastFocusedKeyRef = React.useRef<string | undefined>();\n\n const currentFocusedKey = state.routes[state.index].key;\n\n // When the parent screen changes its focus state, we also need to change child's focus\n // Coz the child screen can't be focused if the parent screen is out of focus\n React.useEffect(\n () =>\n navigation?.addListener('focus', () => {\n lastFocusedKeyRef.current = currentFocusedKey;\n emitter.emit({ type: 'focus', target: currentFocusedKey });\n }),\n [currentFocusedKey, emitter, navigation]\n );\n\n React.useEffect(\n () =>\n navigation?.addListener('blur', () => {\n lastFocusedKeyRef.current = undefined;\n emitter.emit({ type: 'blur', target: currentFocusedKey });\n }),\n [currentFocusedKey, emitter, navigation]\n );\n\n React.useEffect(() => {\n const lastFocusedKey = lastFocusedKeyRef.current;\n\n lastFocusedKeyRef.current = currentFocusedKey;\n\n // We wouldn't have `lastFocusedKey` on initial mount\n // Fire focus event for the current route on mount if there's no parent navigator\n if (lastFocusedKey === undefined && !navigation) {\n emitter.emit({ type: 'focus', target: currentFocusedKey });\n }\n\n // We should only emit events when the focused key changed and navigator is focused\n // When navigator is not focused, screens inside shouldn't receive focused status either\n if (\n lastFocusedKey === currentFocusedKey ||\n !(navigation ? navigation.isFocused() : true)\n ) {\n return;\n }\n\n if (lastFocusedKey === undefined) {\n // Only fire events after initial mount\n return;\n }\n\n emitter.emit({ type: 'blur', target: lastFocusedKey });\n emitter.emit({ type: 'focus', target: currentFocusedKey });\n }, [currentFocusedKey, emitter, navigation]);\n}\n"]}
|
|
@@ -4,10 +4,11 @@ import NavigationBuilderContext from './NavigationBuilderContext';
|
|
|
4
4
|
/**
|
|
5
5
|
* Hook for passing focus callback to children
|
|
6
6
|
*/
|
|
7
|
-
export default function useFocusedListenersChildrenAdapter({
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
export default function useFocusedListenersChildrenAdapter(_ref) {
|
|
8
|
+
let {
|
|
9
|
+
navigation,
|
|
10
|
+
focusedListeners
|
|
11
|
+
} = _ref;
|
|
11
12
|
const {
|
|
12
13
|
addListener
|
|
13
14
|
} = React.useContext(NavigationBuilderContext);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useFocusedListenersChildrenAdapter.tsx"],"names":["React","NavigationBuilderContext","useFocusedListenersChildrenAdapter","navigation","focusedListeners","addListener","useContext","listener","useCallback","callback","isFocused","handled","result","useEffect"],"mappings":"AACA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAEA,OAAOC,wBAAP,MAGO,4BAHP;;AAWA;AACA;AACA;AACA,eAAe,SAASC,kCAAT,
|
|
1
|
+
{"version":3,"sources":["useFocusedListenersChildrenAdapter.tsx"],"names":["React","NavigationBuilderContext","useFocusedListenersChildrenAdapter","navigation","focusedListeners","addListener","useContext","listener","useCallback","callback","isFocused","handled","result","useEffect"],"mappings":"AACA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAEA,OAAOC,wBAAP,MAGO,4BAHP;;AAWA;AACA;AACA;AACA,eAAe,SAASC,kCAAT,OAGH;AAAA,MAH+C;AACzDC,IAAAA,UADyD;AAEzDC,IAAAA;AAFyD,GAG/C;AACV,QAAM;AAAEC,IAAAA;AAAF,MAAkBL,KAAK,CAACM,UAAN,CAAiBL,wBAAjB,CAAxB;AAEA,QAAMM,QAAQ,GAAGP,KAAK,CAACQ,WAAN,CACdC,QAAD,IAA8C;AAC5C,QAAIN,UAAU,CAACO,SAAX,EAAJ,EAA4B;AAC1B,WAAK,MAAMH,QAAX,IAAuBH,gBAAvB,EAAyC;AACvC,cAAM;AAAEO,UAAAA,OAAF;AAAWC,UAAAA;AAAX,YAAsBL,QAAQ,CAACE,QAAD,CAApC;;AAEA,YAAIE,OAAJ,EAAa;AACX,iBAAO;AAAEA,YAAAA,OAAF;AAAWC,YAAAA;AAAX,WAAP;AACD;AACF;;AAED,aAAO;AAAED,QAAAA,OAAO,EAAE,IAAX;AAAiBC,QAAAA,MAAM,EAAEH,QAAQ,CAACN,UAAD;AAAjC,OAAP;AACD,KAVD,MAUO;AACL,aAAO;AAAEQ,QAAAA,OAAO,EAAE,KAAX;AAAkBC,QAAAA,MAAM,EAAE;AAA1B,OAAP;AACD;AACF,GAfc,EAgBf,CAACR,gBAAD,EAAmBD,UAAnB,CAhBe,CAAjB;AAmBAH,EAAAA,KAAK,CAACa,SAAN,CACE,MAAMR,WAAN,aAAMA,WAAN,uBAAMA,WAAW,CAAG,OAAH,EAAYE,QAAZ,CADnB,EAEE,CAACF,WAAD,EAAcE,QAAd,CAFF;AAID","sourcesContent":["import type { ParamListBase } from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport NavigationBuilderContext, {\n FocusedNavigationCallback,\n FocusedNavigationListener,\n} from './NavigationBuilderContext';\nimport type { NavigationHelpers } from './types';\n\ntype Options = {\n navigation: NavigationHelpers<ParamListBase>;\n focusedListeners: FocusedNavigationListener[];\n};\n\n/**\n * Hook for passing focus callback to children\n */\nexport default function useFocusedListenersChildrenAdapter({\n navigation,\n focusedListeners,\n}: Options) {\n const { addListener } = React.useContext(NavigationBuilderContext);\n\n const listener = React.useCallback(\n (callback: FocusedNavigationCallback<any>) => {\n if (navigation.isFocused()) {\n for (const listener of focusedListeners) {\n const { handled, result } = listener(callback);\n\n if (handled) {\n return { handled, result };\n }\n }\n\n return { handled: true, result: callback(navigation) };\n } else {\n return { handled: false, result: null };\n }\n },\n [focusedListeners, navigation]\n );\n\n React.useEffect(\n () => addListener?.('focus', listener),\n [addListener, listener]\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useKeyedChildListeners.tsx"],"names":["React","useKeyedChildListeners","current","keyedListeners","useRef","getState","beforeRemove","addKeyedListener","useCallback","type","key","listener","undefined"],"mappings":"AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;;AAIA;AACA;AACA;AACA,eAAe,SAASC,sBAAT,GAAkC;AAC/C,QAAM;AAAEC,IAAAA,OAAO,EAAEC;AAAX,MAA8BH,KAAK,CAACI,MAAN,
|
|
1
|
+
{"version":3,"sources":["useKeyedChildListeners.tsx"],"names":["React","useKeyedChildListeners","current","keyedListeners","useRef","getState","beforeRemove","addKeyedListener","useCallback","type","key","listener","undefined"],"mappings":"AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;;AAIA;AACA;AACA;AACA,eAAe,SAASC,sBAAT,GAAkC;AAC/C,QAAM;AAAEC,IAAAA,OAAO,EAAEC;AAAX,MAA8BH,KAAK,CAACI,MAAN,CAKjC;AACDC,IAAAA,QAAQ,EAAE,EADT;AAEDC,IAAAA,YAAY,EAAE;AAFb,GALiC,CAApC;AAUA,QAAMC,gBAAgB,GAAGP,KAAK,CAACQ,WAAN,CACvB,CACEC,IADF,EAEEC,GAFF,EAGEC,QAHF,KAIK;AACHR,IAAAA,cAAc,CAACM,IAAD,CAAd,CAAqBC,GAArB,IAA4BC,QAA5B;AAEA,WAAO,MAAM;AACXR,MAAAA,cAAc,CAACM,IAAD,CAAd,CAAqBC,GAArB,IAA4BE,SAA5B;AACD,KAFD;AAGD,GAXsB,EAYvB,CAACT,cAAD,CAZuB,CAAzB;AAeA,SAAO;AACLA,IAAAA,cADK;AAELI,IAAAA;AAFK,GAAP;AAID","sourcesContent":["import * as React from 'react';\n\nimport type { KeyedListenerMap } from './NavigationBuilderContext';\n\n/**\n * Hook which lets child navigators add getters to be called for obtaining rehydrated state.\n */\nexport default function useKeyedChildListeners() {\n const { current: keyedListeners } = React.useRef<{\n [K in keyof KeyedListenerMap]: Record<\n string,\n KeyedListenerMap[K] | undefined\n >;\n }>({\n getState: {},\n beforeRemove: {},\n });\n\n const addKeyedListener = React.useCallback(\n <T extends keyof KeyedListenerMap>(\n type: T,\n key: string,\n listener: KeyedListenerMap[T]\n ) => {\n keyedListeners[type][key] = listener;\n\n return () => {\n keyedListeners[type][key] = undefined;\n };\n },\n [keyedListeners]\n );\n\n return {\n keyedListeners,\n addKeyedListener,\n };\n}\n"]}
|
|
@@ -108,11 +108,15 @@ const getRouteConfigsFromChildren = (children, groupKey, groupOptions) => {
|
|
|
108
108
|
throw new Error(`Got an invalid value for 'getComponent' prop for the screen '${name}'. It must be a function returning a React Component.`);
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
if (typeof component === 'function'
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
111
|
+
if (typeof component === 'function') {
|
|
112
|
+
if (component.name === 'component') {
|
|
113
|
+
// Inline anonymous functions passed in the `component` prop will have the name of the prop
|
|
114
|
+
// It's relatively safe to assume that it's not a component since it should also have PascalCase name
|
|
115
|
+
// We won't catch all scenarios here, but this should catch a good chunk of incorrect use.
|
|
116
|
+
console.warn(`Looks like you're passing an inline function for 'component' prop for the screen '${name}' (e.g. component={() => <SomeComponent />}). Passing an inline function will cause the component state to be lost on re-render and cause perf issues since it's re-created every render. You can pass the function as children to 'Screen' instead to achieve the desired behaviour.`);
|
|
117
|
+
} else if (/^[a-z]/.test(component.name)) {
|
|
118
|
+
console.warn(`Got a component with the name '${component.name}' for the screen '${name}'. React Components must start with an uppercase letter. If you're passing a regular function and not a component, pass it as children to 'Screen' instead. Otherwise capitalize your component's name.`);
|
|
119
|
+
}
|
|
116
120
|
}
|
|
117
121
|
} else {
|
|
118
122
|
throw new Error(`Couldn't find a 'component', 'getComponent' or 'children' prop for the screen '${name}'. This can happen if you passed 'undefined'. You likely forgot to export your component from the file it's defined in, or mixed up default import and named import when importing.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useNavigationBuilder.tsx"],"names":["CommonActions","React","isValidElementType","Group","isArrayEqual","isRecordEqual","NavigationHelpersContext","NavigationRouteContext","NavigationStateContext","Screen","PrivateValueStore","useChildListeners","useComponent","useCurrentRender","useDescriptors","useEventEmitter","useFocusedListenersChildrenAdapter","useFocusEvents","useKeyedChildListeners","useNavigationHelpers","useOnAction","useOnGetState","useOnRouteFocus","useRegisterNavigator","useScheduleUpdate","isValidKey","key","undefined","getRouteConfigsFromChildren","children","groupKey","groupOptions","configs","Children","toArray","reduce","acc","child","isValidElement","type","props","navigationKey","Error","JSON","stringify","name","push","keys","options","Fragment","screenOptions","String","process","env","NODE_ENV","forEach","config","component","getComponent","console","warn","useNavigationBuilder","createRouter","navigatorKey","route","useContext","screenListeners","rest","current","router","useRef","params","state","initial","screen","initialRouteName","routeConfigs","screens","routeNames","map","routeKeyList","curr","join","routeParamList","initialParams","routeGetIdList","Object","assign","getId","length","isStateValid","useCallback","isStateInitialized","stale","currentState","getState","getCurrentState","setState","setCurrentState","setKey","getKey","getIsInitial","stateCleanedUp","cleanUpState","initializedState","isFirstStateInitialization","useMemo","initialRouteParamList","initialParamsFromParams","getInitialState","getRehydratedState","previousRouteKeyListRef","useEffect","previousRouteKeyList","nextState","getStateForRouteNamesChange","routeKeyChanges","filter","hasOwnProperty","previousNestedParamsRef","previousParams","action","reset","navigate","path","updatedState","getStateForAction","shouldUpdate","setTimeout","initializedStateRef","emitter","e","target","routes","find","index","navigation","descriptors","listeners","concat","cb","i","self","lastIndexOf","listener","emit","data","childListeners","addListener","keyedListeners","addKeyedListener","onAction","actionListeners","beforeRemoveListeners","beforeRemove","routerConfigOptions","onRouteFocus","focusedListeners","focus","getStateListeners","defaultScreenOptions","NavigationContent","Provider","value"],"mappings":"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","sourcesContent":["import {\n CommonActions,\n DefaultRouterOptions,\n NavigationAction,\n NavigationState,\n ParamListBase,\n PartialState,\n Route,\n Router,\n RouterConfigOptions,\n RouterFactory,\n} from '@react-navigation/routers';\nimport * as React from 'react';\nimport { isValidElementType } from 'react-is';\n\nimport Group from './Group';\nimport isArrayEqual from './isArrayEqual';\nimport isRecordEqual from './isRecordEqual';\nimport NavigationHelpersContext from './NavigationHelpersContext';\nimport NavigationRouteContext from './NavigationRouteContext';\nimport NavigationStateContext from './NavigationStateContext';\nimport Screen from './Screen';\nimport {\n DefaultNavigatorOptions,\n EventMapBase,\n EventMapCore,\n NavigatorScreenParams,\n PrivateValueStore,\n RouteConfig,\n} from './types';\nimport useChildListeners from './useChildListeners';\nimport useComponent from './useComponent';\nimport useCurrentRender from './useCurrentRender';\nimport useDescriptors, { ScreenConfigWithParent } from './useDescriptors';\nimport useEventEmitter from './useEventEmitter';\nimport useFocusedListenersChildrenAdapter from './useFocusedListenersChildrenAdapter';\nimport useFocusEvents from './useFocusEvents';\nimport useKeyedChildListeners from './useKeyedChildListeners';\nimport useNavigationHelpers from './useNavigationHelpers';\nimport useOnAction from './useOnAction';\nimport useOnGetState from './useOnGetState';\nimport useOnRouteFocus from './useOnRouteFocus';\nimport useRegisterNavigator from './useRegisterNavigator';\nimport useScheduleUpdate from './useScheduleUpdate';\n\n// This is to make TypeScript compiler happy\n// eslint-disable-next-line babel/no-unused-expressions\nPrivateValueStore;\n\ntype NavigatorRoute<State extends NavigationState> = {\n key: string;\n params?: NavigatorScreenParams<ParamListBase, State>;\n};\n\nconst isValidKey = (key: unknown) =>\n key === undefined || (typeof key === 'string' && key !== '');\n\n/**\n * Extract route config object from React children elements.\n *\n * @param children React Elements to extract the config from.\n */\nconst getRouteConfigsFromChildren = <\n State extends NavigationState,\n ScreenOptions extends {},\n EventMap extends EventMapBase\n>(\n children: React.ReactNode,\n groupKey?: string,\n groupOptions?: ScreenConfigWithParent<\n State,\n ScreenOptions,\n EventMap\n >['options']\n) => {\n const configs = React.Children.toArray(children).reduce<\n ScreenConfigWithParent<State, ScreenOptions, EventMap>[]\n >((acc, child) => {\n if (React.isValidElement(child)) {\n if (child.type === Screen) {\n // We can only extract the config from `Screen` elements\n // If something else was rendered, it's probably a bug\n\n if (!isValidKey(child.props.navigationKey)) {\n throw new Error(\n `Got an invalid 'navigationKey' prop (${JSON.stringify(\n child.props.navigationKey\n )}) for the screen '${\n child.props.name\n }'. It must be a non-empty string or 'undefined'.`\n );\n }\n\n acc.push({\n keys: [groupKey, child.props.navigationKey],\n options: groupOptions,\n props: child.props as RouteConfig<\n ParamListBase,\n string,\n State,\n ScreenOptions,\n EventMap\n >,\n });\n return acc;\n }\n\n if (child.type === React.Fragment || child.type === Group) {\n if (!isValidKey(child.props.navigationKey)) {\n throw new Error(\n `Got an invalid 'navigationKey' prop (${JSON.stringify(\n child.props.navigationKey\n )}) for the group. It must be a non-empty string or 'undefined'.`\n );\n }\n\n // When we encounter a fragment or group, we need to dive into its children to extract the configs\n // This is handy to conditionally define a group of screens\n acc.push(\n ...getRouteConfigsFromChildren<State, ScreenOptions, EventMap>(\n child.props.children,\n child.props.navigationKey,\n child.type !== Group\n ? groupOptions\n : groupOptions != null\n ? [...groupOptions, child.props.screenOptions]\n : [child.props.screenOptions]\n )\n );\n return acc;\n }\n }\n\n throw new Error(\n `A navigator can only contain 'Screen', 'Group' or 'React.Fragment' as its direct children (found ${\n React.isValidElement(child)\n ? `'${\n typeof child.type === 'string' ? child.type : child.type?.name\n }'${\n child.props?.name ? ` for the screen '${child.props.name}'` : ''\n }`\n : typeof child === 'object'\n ? JSON.stringify(child)\n : `'${String(child)}'`\n }). To render this component in the navigator, pass it in the 'component' prop to 'Screen'.`\n );\n }, []);\n\n if (process.env.NODE_ENV !== 'production') {\n configs.forEach((config) => {\n const { name, children, component, getComponent } = config.props;\n\n if (typeof name !== 'string' || !name) {\n throw new Error(\n `Got an invalid name (${JSON.stringify(\n name\n )}) for the screen. It must be a non-empty string.`\n );\n }\n\n if (\n children != null ||\n component !== undefined ||\n getComponent !== undefined\n ) {\n if (children != null && component !== undefined) {\n throw new Error(\n `Got both 'component' and 'children' props for the screen '${name}'. You must pass only one of them.`\n );\n }\n\n if (children != null && getComponent !== undefined) {\n throw new Error(\n `Got both 'getComponent' and 'children' props for the screen '${name}'. You must pass only one of them.`\n );\n }\n\n if (component !== undefined && getComponent !== undefined) {\n throw new Error(\n `Got both 'component' and 'getComponent' props for the screen '${name}'. You must pass only one of them.`\n );\n }\n\n if (children != null && typeof children !== 'function') {\n throw new Error(\n `Got an invalid value for 'children' prop for the screen '${name}'. It must be a function returning a React Element.`\n );\n }\n\n if (component !== undefined && !isValidElementType(component)) {\n throw new Error(\n `Got an invalid value for 'component' prop for the screen '${name}'. It must be a valid React Component.`\n );\n }\n\n if (getComponent !== undefined && typeof getComponent !== 'function') {\n throw new Error(\n `Got an invalid value for 'getComponent' prop for the screen '${name}'. It must be a function returning a React Component.`\n );\n }\n\n if (typeof component === 'function' && component.name === 'component') {\n // Inline anonymous functions passed in the `component` prop will have the name of the prop\n // It's relatively safe to assume that it's not a component since it should also have PascalCase name\n // We won't catch all scenarios here, but this should catch a good chunk of incorrect use.\n console.warn(\n `Looks like you're passing an inline function for 'component' prop for the screen '${name}' (e.g. component={() => <SomeComponent />}). Passing an inline function will cause the component state to be lost on re-render and cause perf issues since it's re-created every render. You can pass the function as children to 'Screen' instead to achieve the desired behaviour.`\n );\n }\n } else {\n throw new Error(\n `Couldn't find a 'component', 'getComponent' or 'children' prop for the screen '${name}'. This can happen if you passed 'undefined'. You likely forgot to export your component from the file it's defined in, or mixed up default import and named import when importing.`\n );\n }\n });\n }\n\n return configs;\n};\n\n/**\n * Hook for building navigators.\n *\n * @param createRouter Factory method which returns router object.\n * @param options Options object containing `children` and additional options for the router.\n * @returns An object containing `state`, `navigation`, `descriptors` objects.\n */\nexport default function useNavigationBuilder<\n State extends NavigationState,\n RouterOptions extends DefaultRouterOptions,\n ActionHelpers extends Record<string, () => void>,\n ScreenOptions extends {},\n EventMap extends Record<string, any>\n>(\n createRouter: RouterFactory<State, any, RouterOptions>,\n options: DefaultNavigatorOptions<\n ParamListBase,\n State,\n ScreenOptions,\n EventMap\n > &\n RouterOptions\n) {\n const navigatorKey = useRegisterNavigator();\n\n const route = React.useContext(NavigationRouteContext) as\n | NavigatorRoute<State>\n | undefined;\n\n const { children, screenListeners, ...rest } = options;\n const { current: router } = React.useRef<Router<State, any>>(\n createRouter({\n ...(rest as unknown as RouterOptions),\n ...(route?.params &&\n route.params.state == null &&\n route.params.initial !== false &&\n typeof route.params.screen === 'string'\n ? { initialRouteName: route.params.screen }\n : null),\n })\n );\n\n const routeConfigs =\n getRouteConfigsFromChildren<State, ScreenOptions, EventMap>(children);\n\n const screens = routeConfigs.reduce<\n Record<string, ScreenConfigWithParent<State, ScreenOptions, EventMap>>\n >((acc, config) => {\n if (config.props.name in acc) {\n throw new Error(\n `A navigator cannot contain multiple 'Screen' components with the same name (found duplicate screen named '${config.props.name}')`\n );\n }\n\n acc[config.props.name] = config;\n return acc;\n }, {});\n\n const routeNames = routeConfigs.map((config) => config.props.name);\n const routeKeyList = routeNames.reduce<Record<string, React.Key | undefined>>(\n (acc, curr) => {\n acc[curr] = screens[curr].keys.map((key) => key ?? '').join(':');\n return acc;\n },\n {}\n );\n const routeParamList = routeNames.reduce<Record<string, object | undefined>>(\n (acc, curr) => {\n const { initialParams } = screens[curr].props;\n acc[curr] = initialParams;\n return acc;\n },\n {}\n );\n const routeGetIdList = routeNames.reduce<\n RouterConfigOptions['routeGetIdList']\n >(\n (acc, curr) =>\n Object.assign(acc, {\n [curr]: screens[curr].props.getId,\n }),\n {}\n );\n\n if (!routeNames.length) {\n throw new Error(\n \"Couldn't find any screens for the navigator. Have you defined any screens as its children?\"\n );\n }\n\n const isStateValid = React.useCallback(\n (state) => state.type === undefined || state.type === router.type,\n [router.type]\n );\n\n const isStateInitialized = React.useCallback(\n (state) =>\n state !== undefined && state.stale === false && isStateValid(state),\n [isStateValid]\n );\n\n const {\n state: currentState,\n getState: getCurrentState,\n setState: setCurrentState,\n setKey,\n getKey,\n getIsInitial,\n } = React.useContext(NavigationStateContext);\n\n const stateCleanedUp = React.useRef(false);\n\n const cleanUpState = React.useCallback(() => {\n setCurrentState(undefined);\n stateCleanedUp.current = true;\n }, [setCurrentState]);\n\n const setState = React.useCallback(\n (state: NavigationState | PartialState<NavigationState> | undefined) => {\n if (stateCleanedUp.current) {\n // State might have been already cleaned up due to unmount\n // We do not want to expose API allowing to override this\n // This would lead to old data preservation on main navigator unmount\n return;\n }\n setCurrentState(state);\n },\n [setCurrentState]\n );\n\n const [initializedState, isFirstStateInitialization] = React.useMemo(() => {\n const initialRouteParamList = routeNames.reduce<\n Record<string, object | undefined>\n >((acc, curr) => {\n const { initialParams } = screens[curr].props;\n const initialParamsFromParams =\n route?.params?.state == null &&\n route?.params?.initial !== false &&\n route?.params?.screen === curr\n ? route.params.params\n : undefined;\n\n acc[curr] =\n initialParams !== undefined || initialParamsFromParams !== undefined\n ? {\n ...initialParams,\n ...initialParamsFromParams,\n }\n : undefined;\n\n return acc;\n }, {});\n\n // If the current state isn't initialized on first render, we initialize it\n // We also need to re-initialize it if the state passed from parent was changed (maybe due to reset)\n // Otherwise assume that the state was provided as initial state\n // So we need to rehydrate it to make it usable\n if (\n (currentState === undefined || !isStateValid(currentState)) &&\n route?.params?.state == null\n ) {\n return [\n router.getInitialState({\n routeNames,\n routeParamList: initialRouteParamList,\n routeGetIdList,\n }),\n true,\n ];\n } else {\n return [\n router.getRehydratedState(\n route?.params?.state ?? (currentState as PartialState<State>),\n {\n routeNames,\n routeParamList: initialRouteParamList,\n routeGetIdList,\n }\n ),\n false,\n ];\n }\n // We explicitly don't include routeNames, route.params etc. in the dep list\n // below. We want to avoid forcing a new state to be calculated in those cases\n // Instead, we handle changes to these in the nextState code below. Note\n // that some changes to routeConfigs are explicitly ignored, such as changes\n // to initialParams\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentState, router, isStateValid]);\n\n const previousRouteKeyListRef = React.useRef(routeKeyList);\n\n React.useEffect(() => {\n previousRouteKeyListRef.current = routeKeyList;\n });\n\n const previousRouteKeyList = previousRouteKeyListRef.current;\n\n let state =\n // If the state isn't initialized, or stale, use the state we initialized instead\n // The state won't update until there's a change needed in the state we have initalized locally\n // So it'll be `undefined` or stale until the first navigation event happens\n isStateInitialized(currentState)\n ? (currentState as State)\n : (initializedState as State);\n\n let nextState: State = state;\n\n if (\n !isArrayEqual(state.routeNames, routeNames) ||\n !isRecordEqual(routeKeyList, previousRouteKeyList)\n ) {\n // When the list of route names change, the router should handle it to remove invalid routes\n nextState = router.getStateForRouteNamesChange(state, {\n routeNames,\n routeParamList,\n routeGetIdList,\n routeKeyChanges: Object.keys(routeKeyList).filter(\n (name) =>\n previousRouteKeyList.hasOwnProperty(name) &&\n routeKeyList[name] !== previousRouteKeyList[name]\n ),\n });\n }\n\n const previousNestedParamsRef = React.useRef(route?.params);\n\n React.useEffect(() => {\n previousNestedParamsRef.current = route?.params;\n }, [route?.params]);\n\n if (route?.params) {\n const previousParams = previousNestedParamsRef.current;\n\n let action: CommonActions.Action | undefined;\n\n if (\n typeof route.params.state === 'object' &&\n route.params.state != null &&\n route.params !== previousParams\n ) {\n // If the route was updated with new state, we should reset to it\n action = CommonActions.reset(route.params.state);\n } else if (\n typeof route.params.screen === 'string' &&\n ((route.params.initial === false && isFirstStateInitialization) ||\n route.params !== previousParams)\n ) {\n // If the route was updated with new screen name and/or params, we should navigate there\n action = CommonActions.navigate({\n name: route.params.screen,\n params: route.params.params,\n path: route.params.path,\n });\n }\n\n // The update should be limited to current navigator only, so we call the router manually\n const updatedState = action\n ? router.getStateForAction(nextState, action, {\n routeNames,\n routeParamList,\n routeGetIdList,\n })\n : null;\n\n nextState =\n updatedState !== null\n ? router.getRehydratedState(updatedState, {\n routeNames,\n routeParamList,\n routeGetIdList,\n })\n : nextState;\n }\n\n const shouldUpdate = state !== nextState;\n\n useScheduleUpdate(() => {\n if (shouldUpdate) {\n // If the state needs to be updated, we'll schedule an update\n setState(nextState);\n }\n });\n\n // The up-to-date state will come in next render, but we don't need to wait for it\n // We can't use the outdated state since the screens have changed, which will cause error due to mismatched config\n // So we override the state object we return to use the latest state as soon as possible\n state = nextState;\n\n React.useEffect(() => {\n setKey(navigatorKey);\n\n if (!getIsInitial()) {\n // If it's not initial render, we need to update the state\n // This will make sure that our container gets notifier of state changes due to new mounts\n // This is necessary for proper screen tracking, URL updates etc.\n setState(nextState);\n }\n\n return () => {\n // We need to clean up state for this navigator on unmount\n // We do it in a timeout because we need to detect if another navigator mounted in the meantime\n // For example, if another navigator has started rendering, we should skip cleanup\n // Otherwise, our cleanup step will cleanup state for the other navigator and re-initialize it\n setTimeout(() => {\n if (getCurrentState() !== undefined && getKey() === navigatorKey) {\n cleanUpState();\n }\n }, 0);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // We initialize this ref here to avoid a new getState getting initialized\n // whenever initializedState changes. We want getState to have access to the\n // latest initializedState, but don't need it to change when that happens\n const initializedStateRef = React.useRef<State>();\n initializedStateRef.current = initializedState;\n\n const getState = React.useCallback((): State => {\n const currentState = getCurrentState();\n\n return isStateInitialized(currentState)\n ? (currentState as State)\n : (initializedStateRef.current as State);\n }, [getCurrentState, isStateInitialized]);\n\n const emitter = useEventEmitter<EventMapCore<State>>((e) => {\n let routeNames = [];\n\n let route: Route<string> | undefined;\n\n if (e.target) {\n route = state.routes.find((route) => route.key === e.target);\n\n if (route?.name) {\n routeNames.push(route.name);\n }\n } else {\n route = state.routes[state.index];\n routeNames.push(\n ...Object.keys(screens).filter((name) => route?.name === name)\n );\n }\n\n if (route == null) {\n return;\n }\n\n const navigation = descriptors[route.key].navigation;\n\n const listeners = ([] as (((e: any) => void) | undefined)[])\n .concat(\n // Get an array of listeners for all screens + common listeners on navigator\n ...[\n screenListeners,\n ...routeNames.map((name) => {\n const { listeners } = screens[name].props;\n return listeners;\n }),\n ].map((listeners) => {\n const map =\n typeof listeners === 'function'\n ? listeners({ route: route as any, navigation })\n : listeners;\n\n return map\n ? Object.keys(map)\n .filter((type) => type === e.type)\n .map((type) => map?.[type])\n : undefined;\n })\n )\n // We don't want same listener to be called multiple times for same event\n // So we remove any duplicate functions from the array\n .filter((cb, i, self) => cb && self.lastIndexOf(cb) === i);\n\n listeners.forEach((listener) => listener?.(e));\n });\n\n useFocusEvents({ state, emitter });\n\n React.useEffect(() => {\n emitter.emit({ type: 'state', data: { state } });\n }, [emitter, state]);\n\n const { listeners: childListeners, addListener } = useChildListeners();\n\n const { keyedListeners, addKeyedListener } = useKeyedChildListeners();\n\n const onAction = useOnAction({\n router,\n getState,\n setState,\n key: route?.key,\n actionListeners: childListeners.action,\n beforeRemoveListeners: keyedListeners.beforeRemove,\n routerConfigOptions: {\n routeNames,\n routeParamList,\n routeGetIdList,\n },\n emitter,\n });\n\n const onRouteFocus = useOnRouteFocus({\n router,\n key: route?.key,\n getState,\n setState,\n });\n\n const navigation = useNavigationHelpers<\n State,\n ActionHelpers,\n NavigationAction,\n EventMap\n >({\n onAction,\n getState,\n emitter,\n router,\n });\n\n useFocusedListenersChildrenAdapter({\n navigation,\n focusedListeners: childListeners.focus,\n });\n\n useOnGetState({\n getState,\n getStateListeners: keyedListeners.getState,\n });\n\n const descriptors = useDescriptors<\n State,\n ActionHelpers,\n ScreenOptions,\n EventMap\n >({\n state,\n screens,\n navigation,\n screenOptions: options.screenOptions,\n defaultScreenOptions: options.defaultScreenOptions,\n onAction,\n getState,\n setState,\n onRouteFocus,\n addListener,\n addKeyedListener,\n router,\n // @ts-expect-error: this should have both core and custom events, but too much work right now\n emitter,\n });\n\n useCurrentRender({\n state,\n navigation,\n descriptors,\n });\n\n const NavigationContent = useComponent(NavigationHelpersContext.Provider, {\n value: navigation,\n });\n\n return {\n state,\n navigation,\n descriptors,\n NavigationContent,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["useNavigationBuilder.tsx"],"names":["CommonActions","React","isValidElementType","Group","isArrayEqual","isRecordEqual","NavigationHelpersContext","NavigationRouteContext","NavigationStateContext","Screen","PrivateValueStore","useChildListeners","useComponent","useCurrentRender","useDescriptors","useEventEmitter","useFocusedListenersChildrenAdapter","useFocusEvents","useKeyedChildListeners","useNavigationHelpers","useOnAction","useOnGetState","useOnRouteFocus","useRegisterNavigator","useScheduleUpdate","isValidKey","key","undefined","getRouteConfigsFromChildren","children","groupKey","groupOptions","configs","Children","toArray","reduce","acc","child","isValidElement","type","props","navigationKey","Error","JSON","stringify","name","push","keys","options","Fragment","screenOptions","String","process","env","NODE_ENV","forEach","config","component","getComponent","console","warn","test","useNavigationBuilder","createRouter","navigatorKey","route","useContext","screenListeners","rest","current","router","useRef","params","state","initial","screen","initialRouteName","routeConfigs","screens","routeNames","map","routeKeyList","curr","join","routeParamList","initialParams","routeGetIdList","Object","assign","getId","length","isStateValid","useCallback","isStateInitialized","stale","currentState","getState","getCurrentState","setState","setCurrentState","setKey","getKey","getIsInitial","stateCleanedUp","cleanUpState","initializedState","isFirstStateInitialization","useMemo","initialRouteParamList","initialParamsFromParams","getInitialState","getRehydratedState","previousRouteKeyListRef","useEffect","previousRouteKeyList","nextState","getStateForRouteNamesChange","routeKeyChanges","filter","hasOwnProperty","previousNestedParamsRef","previousParams","action","reset","navigate","path","updatedState","getStateForAction","shouldUpdate","setTimeout","initializedStateRef","emitter","e","target","routes","find","index","navigation","descriptors","listeners","concat","cb","i","self","lastIndexOf","listener","emit","data","childListeners","addListener","keyedListeners","addKeyedListener","onAction","actionListeners","beforeRemoveListeners","beforeRemove","routerConfigOptions","onRouteFocus","focusedListeners","focus","getStateListeners","defaultScreenOptions","NavigationContent","Provider","value"],"mappings":"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","sourcesContent":["import {\n CommonActions,\n DefaultRouterOptions,\n NavigationAction,\n NavigationState,\n ParamListBase,\n PartialState,\n Route,\n Router,\n RouterConfigOptions,\n RouterFactory,\n} from '@react-navigation/routers';\nimport * as React from 'react';\nimport { isValidElementType } from 'react-is';\n\nimport Group from './Group';\nimport isArrayEqual from './isArrayEqual';\nimport isRecordEqual from './isRecordEqual';\nimport NavigationHelpersContext from './NavigationHelpersContext';\nimport NavigationRouteContext from './NavigationRouteContext';\nimport NavigationStateContext from './NavigationStateContext';\nimport Screen from './Screen';\nimport {\n DefaultNavigatorOptions,\n EventMapBase,\n EventMapCore,\n NavigatorScreenParams,\n PrivateValueStore,\n RouteConfig,\n} from './types';\nimport useChildListeners from './useChildListeners';\nimport useComponent from './useComponent';\nimport useCurrentRender from './useCurrentRender';\nimport useDescriptors, { ScreenConfigWithParent } from './useDescriptors';\nimport useEventEmitter from './useEventEmitter';\nimport useFocusedListenersChildrenAdapter from './useFocusedListenersChildrenAdapter';\nimport useFocusEvents from './useFocusEvents';\nimport useKeyedChildListeners from './useKeyedChildListeners';\nimport useNavigationHelpers from './useNavigationHelpers';\nimport useOnAction from './useOnAction';\nimport useOnGetState from './useOnGetState';\nimport useOnRouteFocus from './useOnRouteFocus';\nimport useRegisterNavigator from './useRegisterNavigator';\nimport useScheduleUpdate from './useScheduleUpdate';\n\n// This is to make TypeScript compiler happy\n// eslint-disable-next-line babel/no-unused-expressions\nPrivateValueStore;\n\ntype NavigatorRoute<State extends NavigationState> = {\n key: string;\n params?: NavigatorScreenParams<ParamListBase, State>;\n};\n\nconst isValidKey = (key: unknown) =>\n key === undefined || (typeof key === 'string' && key !== '');\n\n/**\n * Extract route config object from React children elements.\n *\n * @param children React Elements to extract the config from.\n */\nconst getRouteConfigsFromChildren = <\n State extends NavigationState,\n ScreenOptions extends {},\n EventMap extends EventMapBase\n>(\n children: React.ReactNode,\n groupKey?: string,\n groupOptions?: ScreenConfigWithParent<\n State,\n ScreenOptions,\n EventMap\n >['options']\n) => {\n const configs = React.Children.toArray(children).reduce<\n ScreenConfigWithParent<State, ScreenOptions, EventMap>[]\n >((acc, child) => {\n if (React.isValidElement(child)) {\n if (child.type === Screen) {\n // We can only extract the config from `Screen` elements\n // If something else was rendered, it's probably a bug\n\n if (!isValidKey(child.props.navigationKey)) {\n throw new Error(\n `Got an invalid 'navigationKey' prop (${JSON.stringify(\n child.props.navigationKey\n )}) for the screen '${\n child.props.name\n }'. It must be a non-empty string or 'undefined'.`\n );\n }\n\n acc.push({\n keys: [groupKey, child.props.navigationKey],\n options: groupOptions,\n props: child.props as RouteConfig<\n ParamListBase,\n string,\n State,\n ScreenOptions,\n EventMap\n >,\n });\n return acc;\n }\n\n if (child.type === React.Fragment || child.type === Group) {\n if (!isValidKey(child.props.navigationKey)) {\n throw new Error(\n `Got an invalid 'navigationKey' prop (${JSON.stringify(\n child.props.navigationKey\n )}) for the group. It must be a non-empty string or 'undefined'.`\n );\n }\n\n // When we encounter a fragment or group, we need to dive into its children to extract the configs\n // This is handy to conditionally define a group of screens\n acc.push(\n ...getRouteConfigsFromChildren<State, ScreenOptions, EventMap>(\n child.props.children,\n child.props.navigationKey,\n child.type !== Group\n ? groupOptions\n : groupOptions != null\n ? [...groupOptions, child.props.screenOptions]\n : [child.props.screenOptions]\n )\n );\n return acc;\n }\n }\n\n throw new Error(\n `A navigator can only contain 'Screen', 'Group' or 'React.Fragment' as its direct children (found ${\n React.isValidElement(child)\n ? `'${\n typeof child.type === 'string' ? child.type : child.type?.name\n }'${\n child.props?.name ? ` for the screen '${child.props.name}'` : ''\n }`\n : typeof child === 'object'\n ? JSON.stringify(child)\n : `'${String(child)}'`\n }). To render this component in the navigator, pass it in the 'component' prop to 'Screen'.`\n );\n }, []);\n\n if (process.env.NODE_ENV !== 'production') {\n configs.forEach((config) => {\n const { name, children, component, getComponent } = config.props;\n\n if (typeof name !== 'string' || !name) {\n throw new Error(\n `Got an invalid name (${JSON.stringify(\n name\n )}) for the screen. It must be a non-empty string.`\n );\n }\n\n if (\n children != null ||\n component !== undefined ||\n getComponent !== undefined\n ) {\n if (children != null && component !== undefined) {\n throw new Error(\n `Got both 'component' and 'children' props for the screen '${name}'. You must pass only one of them.`\n );\n }\n\n if (children != null && getComponent !== undefined) {\n throw new Error(\n `Got both 'getComponent' and 'children' props for the screen '${name}'. You must pass only one of them.`\n );\n }\n\n if (component !== undefined && getComponent !== undefined) {\n throw new Error(\n `Got both 'component' and 'getComponent' props for the screen '${name}'. You must pass only one of them.`\n );\n }\n\n if (children != null && typeof children !== 'function') {\n throw new Error(\n `Got an invalid value for 'children' prop for the screen '${name}'. It must be a function returning a React Element.`\n );\n }\n\n if (component !== undefined && !isValidElementType(component)) {\n throw new Error(\n `Got an invalid value for 'component' prop for the screen '${name}'. It must be a valid React Component.`\n );\n }\n\n if (getComponent !== undefined && typeof getComponent !== 'function') {\n throw new Error(\n `Got an invalid value for 'getComponent' prop for the screen '${name}'. It must be a function returning a React Component.`\n );\n }\n\n if (typeof component === 'function') {\n if (component.name === 'component') {\n // Inline anonymous functions passed in the `component` prop will have the name of the prop\n // It's relatively safe to assume that it's not a component since it should also have PascalCase name\n // We won't catch all scenarios here, but this should catch a good chunk of incorrect use.\n console.warn(\n `Looks like you're passing an inline function for 'component' prop for the screen '${name}' (e.g. component={() => <SomeComponent />}). Passing an inline function will cause the component state to be lost on re-render and cause perf issues since it's re-created every render. You can pass the function as children to 'Screen' instead to achieve the desired behaviour.`\n );\n } else if (/^[a-z]/.test(component.name)) {\n console.warn(\n `Got a component with the name '${component.name}' for the screen '${name}'. React Components must start with an uppercase letter. If you're passing a regular function and not a component, pass it as children to 'Screen' instead. Otherwise capitalize your component's name.`\n );\n }\n }\n } else {\n throw new Error(\n `Couldn't find a 'component', 'getComponent' or 'children' prop for the screen '${name}'. This can happen if you passed 'undefined'. You likely forgot to export your component from the file it's defined in, or mixed up default import and named import when importing.`\n );\n }\n });\n }\n\n return configs;\n};\n\n/**\n * Hook for building navigators.\n *\n * @param createRouter Factory method which returns router object.\n * @param options Options object containing `children` and additional options for the router.\n * @returns An object containing `state`, `navigation`, `descriptors` objects.\n */\nexport default function useNavigationBuilder<\n State extends NavigationState,\n RouterOptions extends DefaultRouterOptions,\n ActionHelpers extends Record<string, () => void>,\n ScreenOptions extends {},\n EventMap extends Record<string, any>\n>(\n createRouter: RouterFactory<State, any, RouterOptions>,\n options: DefaultNavigatorOptions<\n ParamListBase,\n State,\n ScreenOptions,\n EventMap\n > &\n RouterOptions\n) {\n const navigatorKey = useRegisterNavigator();\n\n const route = React.useContext(NavigationRouteContext) as\n | NavigatorRoute<State>\n | undefined;\n\n const { children, screenListeners, ...rest } = options;\n const { current: router } = React.useRef<Router<State, any>>(\n createRouter({\n ...(rest as unknown as RouterOptions),\n ...(route?.params &&\n route.params.state == null &&\n route.params.initial !== false &&\n typeof route.params.screen === 'string'\n ? { initialRouteName: route.params.screen }\n : null),\n })\n );\n\n const routeConfigs = getRouteConfigsFromChildren<\n State,\n ScreenOptions,\n EventMap\n >(children);\n\n const screens = routeConfigs.reduce<\n Record<string, ScreenConfigWithParent<State, ScreenOptions, EventMap>>\n >((acc, config) => {\n if (config.props.name in acc) {\n throw new Error(\n `A navigator cannot contain multiple 'Screen' components with the same name (found duplicate screen named '${config.props.name}')`\n );\n }\n\n acc[config.props.name] = config;\n return acc;\n }, {});\n\n const routeNames = routeConfigs.map((config) => config.props.name);\n const routeKeyList = routeNames.reduce<Record<string, React.Key | undefined>>(\n (acc, curr) => {\n acc[curr] = screens[curr].keys.map((key) => key ?? '').join(':');\n return acc;\n },\n {}\n );\n const routeParamList = routeNames.reduce<Record<string, object | undefined>>(\n (acc, curr) => {\n const { initialParams } = screens[curr].props;\n acc[curr] = initialParams;\n return acc;\n },\n {}\n );\n const routeGetIdList = routeNames.reduce<\n RouterConfigOptions['routeGetIdList']\n >(\n (acc, curr) =>\n Object.assign(acc, {\n [curr]: screens[curr].props.getId,\n }),\n {}\n );\n\n if (!routeNames.length) {\n throw new Error(\n \"Couldn't find any screens for the navigator. Have you defined any screens as its children?\"\n );\n }\n\n const isStateValid = React.useCallback(\n (state) => state.type === undefined || state.type === router.type,\n [router.type]\n );\n\n const isStateInitialized = React.useCallback(\n (state) =>\n state !== undefined && state.stale === false && isStateValid(state),\n [isStateValid]\n );\n\n const {\n state: currentState,\n getState: getCurrentState,\n setState: setCurrentState,\n setKey,\n getKey,\n getIsInitial,\n } = React.useContext(NavigationStateContext);\n\n const stateCleanedUp = React.useRef(false);\n\n const cleanUpState = React.useCallback(() => {\n setCurrentState(undefined);\n stateCleanedUp.current = true;\n }, [setCurrentState]);\n\n const setState = React.useCallback(\n (state: NavigationState | PartialState<NavigationState> | undefined) => {\n if (stateCleanedUp.current) {\n // State might have been already cleaned up due to unmount\n // We do not want to expose API allowing to override this\n // This would lead to old data preservation on main navigator unmount\n return;\n }\n setCurrentState(state);\n },\n [setCurrentState]\n );\n\n const [initializedState, isFirstStateInitialization] = React.useMemo(() => {\n const initialRouteParamList = routeNames.reduce<\n Record<string, object | undefined>\n >((acc, curr) => {\n const { initialParams } = screens[curr].props;\n const initialParamsFromParams =\n route?.params?.state == null &&\n route?.params?.initial !== false &&\n route?.params?.screen === curr\n ? route.params.params\n : undefined;\n\n acc[curr] =\n initialParams !== undefined || initialParamsFromParams !== undefined\n ? {\n ...initialParams,\n ...initialParamsFromParams,\n }\n : undefined;\n\n return acc;\n }, {});\n\n // If the current state isn't initialized on first render, we initialize it\n // We also need to re-initialize it if the state passed from parent was changed (maybe due to reset)\n // Otherwise assume that the state was provided as initial state\n // So we need to rehydrate it to make it usable\n if (\n (currentState === undefined || !isStateValid(currentState)) &&\n route?.params?.state == null\n ) {\n return [\n router.getInitialState({\n routeNames,\n routeParamList: initialRouteParamList,\n routeGetIdList,\n }),\n true,\n ];\n } else {\n return [\n router.getRehydratedState(\n route?.params?.state ?? (currentState as PartialState<State>),\n {\n routeNames,\n routeParamList: initialRouteParamList,\n routeGetIdList,\n }\n ),\n false,\n ];\n }\n // We explicitly don't include routeNames, route.params etc. in the dep list\n // below. We want to avoid forcing a new state to be calculated in those cases\n // Instead, we handle changes to these in the nextState code below. Note\n // that some changes to routeConfigs are explicitly ignored, such as changes\n // to initialParams\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentState, router, isStateValid]);\n\n const previousRouteKeyListRef = React.useRef(routeKeyList);\n\n React.useEffect(() => {\n previousRouteKeyListRef.current = routeKeyList;\n });\n\n const previousRouteKeyList = previousRouteKeyListRef.current;\n\n let state =\n // If the state isn't initialized, or stale, use the state we initialized instead\n // The state won't update until there's a change needed in the state we have initalized locally\n // So it'll be `undefined` or stale until the first navigation event happens\n isStateInitialized(currentState)\n ? (currentState as State)\n : (initializedState as State);\n\n let nextState: State = state;\n\n if (\n !isArrayEqual(state.routeNames, routeNames) ||\n !isRecordEqual(routeKeyList, previousRouteKeyList)\n ) {\n // When the list of route names change, the router should handle it to remove invalid routes\n nextState = router.getStateForRouteNamesChange(state, {\n routeNames,\n routeParamList,\n routeGetIdList,\n routeKeyChanges: Object.keys(routeKeyList).filter(\n (name) =>\n previousRouteKeyList.hasOwnProperty(name) &&\n routeKeyList[name] !== previousRouteKeyList[name]\n ),\n });\n }\n\n const previousNestedParamsRef = React.useRef(route?.params);\n\n React.useEffect(() => {\n previousNestedParamsRef.current = route?.params;\n }, [route?.params]);\n\n if (route?.params) {\n const previousParams = previousNestedParamsRef.current;\n\n let action: CommonActions.Action | undefined;\n\n if (\n typeof route.params.state === 'object' &&\n route.params.state != null &&\n route.params !== previousParams\n ) {\n // If the route was updated with new state, we should reset to it\n action = CommonActions.reset(route.params.state);\n } else if (\n typeof route.params.screen === 'string' &&\n ((route.params.initial === false && isFirstStateInitialization) ||\n route.params !== previousParams)\n ) {\n // If the route was updated with new screen name and/or params, we should navigate there\n action = CommonActions.navigate({\n name: route.params.screen,\n params: route.params.params,\n path: route.params.path,\n });\n }\n\n // The update should be limited to current navigator only, so we call the router manually\n const updatedState = action\n ? router.getStateForAction(nextState, action, {\n routeNames,\n routeParamList,\n routeGetIdList,\n })\n : null;\n\n nextState =\n updatedState !== null\n ? router.getRehydratedState(updatedState, {\n routeNames,\n routeParamList,\n routeGetIdList,\n })\n : nextState;\n }\n\n const shouldUpdate = state !== nextState;\n\n useScheduleUpdate(() => {\n if (shouldUpdate) {\n // If the state needs to be updated, we'll schedule an update\n setState(nextState);\n }\n });\n\n // The up-to-date state will come in next render, but we don't need to wait for it\n // We can't use the outdated state since the screens have changed, which will cause error due to mismatched config\n // So we override the state object we return to use the latest state as soon as possible\n state = nextState;\n\n React.useEffect(() => {\n setKey(navigatorKey);\n\n if (!getIsInitial()) {\n // If it's not initial render, we need to update the state\n // This will make sure that our container gets notifier of state changes due to new mounts\n // This is necessary for proper screen tracking, URL updates etc.\n setState(nextState);\n }\n\n return () => {\n // We need to clean up state for this navigator on unmount\n // We do it in a timeout because we need to detect if another navigator mounted in the meantime\n // For example, if another navigator has started rendering, we should skip cleanup\n // Otherwise, our cleanup step will cleanup state for the other navigator and re-initialize it\n setTimeout(() => {\n if (getCurrentState() !== undefined && getKey() === navigatorKey) {\n cleanUpState();\n }\n }, 0);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // We initialize this ref here to avoid a new getState getting initialized\n // whenever initializedState changes. We want getState to have access to the\n // latest initializedState, but don't need it to change when that happens\n const initializedStateRef = React.useRef<State>();\n initializedStateRef.current = initializedState;\n\n const getState = React.useCallback((): State => {\n const currentState = getCurrentState();\n\n return isStateInitialized(currentState)\n ? (currentState as State)\n : (initializedStateRef.current as State);\n }, [getCurrentState, isStateInitialized]);\n\n const emitter = useEventEmitter<EventMapCore<State>>((e) => {\n let routeNames = [];\n\n let route: Route<string> | undefined;\n\n if (e.target) {\n route = state.routes.find((route) => route.key === e.target);\n\n if (route?.name) {\n routeNames.push(route.name);\n }\n } else {\n route = state.routes[state.index];\n routeNames.push(\n ...Object.keys(screens).filter((name) => route?.name === name)\n );\n }\n\n if (route == null) {\n return;\n }\n\n const navigation = descriptors[route.key].navigation;\n\n const listeners = ([] as (((e: any) => void) | undefined)[])\n .concat(\n // Get an array of listeners for all screens + common listeners on navigator\n ...[\n screenListeners,\n ...routeNames.map((name) => {\n const { listeners } = screens[name].props;\n return listeners;\n }),\n ].map((listeners) => {\n const map =\n typeof listeners === 'function'\n ? listeners({ route: route as any, navigation })\n : listeners;\n\n return map\n ? Object.keys(map)\n .filter((type) => type === e.type)\n .map((type) => map?.[type])\n : undefined;\n })\n )\n // We don't want same listener to be called multiple times for same event\n // So we remove any duplicate functions from the array\n .filter((cb, i, self) => cb && self.lastIndexOf(cb) === i);\n\n listeners.forEach((listener) => listener?.(e));\n });\n\n useFocusEvents({ state, emitter });\n\n React.useEffect(() => {\n emitter.emit({ type: 'state', data: { state } });\n }, [emitter, state]);\n\n const { listeners: childListeners, addListener } = useChildListeners();\n\n const { keyedListeners, addKeyedListener } = useKeyedChildListeners();\n\n const onAction = useOnAction({\n router,\n getState,\n setState,\n key: route?.key,\n actionListeners: childListeners.action,\n beforeRemoveListeners: keyedListeners.beforeRemove,\n routerConfigOptions: {\n routeNames,\n routeParamList,\n routeGetIdList,\n },\n emitter,\n });\n\n const onRouteFocus = useOnRouteFocus({\n router,\n key: route?.key,\n getState,\n setState,\n });\n\n const navigation = useNavigationHelpers<\n State,\n ActionHelpers,\n NavigationAction,\n EventMap\n >({\n onAction,\n getState,\n emitter,\n router,\n });\n\n useFocusedListenersChildrenAdapter({\n navigation,\n focusedListeners: childListeners.focus,\n });\n\n useOnGetState({\n getState,\n getStateListeners: keyedListeners.getState,\n });\n\n const descriptors = useDescriptors<\n State,\n ActionHelpers,\n ScreenOptions,\n EventMap\n >({\n state,\n screens,\n navigation,\n screenOptions: options.screenOptions,\n defaultScreenOptions: options.defaultScreenOptions,\n onAction,\n getState,\n setState,\n onRouteFocus,\n addListener,\n addKeyedListener,\n router,\n // @ts-expect-error: this should have both core and custom events, but too much work right now\n emitter,\n });\n\n useCurrentRender({\n state,\n navigation,\n descriptors,\n });\n\n const NavigationContent = useComponent(NavigationHelpersContext.Provider, {\n value: navigation,\n });\n\n return {\n state,\n navigation,\n descriptors,\n NavigationContent,\n };\n}\n"]}
|
|
@@ -7,14 +7,15 @@ import NavigationBuilderContext from './NavigationBuilderContext';
|
|
|
7
7
|
* It's important to cache them to make sure navigation objects don't change between renders.
|
|
8
8
|
* This lets us apply optimizations like `React.memo` to minimize re-rendering screens.
|
|
9
9
|
*/
|
|
10
|
-
export default function useNavigationCache({
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
10
|
+
export default function useNavigationCache(_ref) {
|
|
11
|
+
let {
|
|
12
|
+
state,
|
|
13
|
+
getState,
|
|
14
|
+
navigation,
|
|
15
|
+
setOptions,
|
|
16
|
+
router,
|
|
17
|
+
emitter
|
|
18
|
+
} = _ref;
|
|
18
19
|
const {
|
|
19
20
|
stackRef
|
|
20
21
|
} = React.useContext(NavigationBuilderContext); // Cache object which holds navigation objects for each screen
|
|
@@ -71,8 +72,14 @@ export default function useNavigationCache({
|
|
|
71
72
|
};
|
|
72
73
|
|
|
73
74
|
const helpers = Object.keys(actions).reduce((acc, name) => {
|
|
74
|
-
acc[name] =
|
|
75
|
-
|
|
75
|
+
acc[name] = function () {
|
|
76
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
77
|
+
args[_key] = arguments[_key];
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return withStack(() => // @ts-expect-error: name is a valid key, but TypeScript is dumb
|
|
81
|
+
dispatch(actions[name](...args)));
|
|
82
|
+
};
|
|
76
83
|
|
|
77
84
|
return acc;
|
|
78
85
|
}, {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useNavigationCache.tsx"],"names":["CommonActions","React","NavigationBuilderContext","useNavigationCache","state","getState","navigation","setOptions","router","emitter","stackRef","useContext","cache","useMemo","current","actions","actionCreators","routes","reduce","acc","route","previous","key","emit","rest","dispatch","thunk","action","source","withStack","callback","isStackSet","process","env","NODE_ENV","Error","stack","undefined","helpers","Object","keys","name","args","create","options","o","isFocused","index"],"mappings":"AAAA,SACEA,aADF,QAMO,2BANP;AAOA,OAAO,KAAKC,KAAZ,MAAuB,OAAvB;AAEA,OAAOC,wBAAP,MAAqC,4BAArC;;AA4BA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,kBAAT,
|
|
1
|
+
{"version":3,"sources":["useNavigationCache.tsx"],"names":["CommonActions","React","NavigationBuilderContext","useNavigationCache","state","getState","navigation","setOptions","router","emitter","stackRef","useContext","cache","useMemo","current","actions","actionCreators","routes","reduce","acc","route","previous","key","emit","rest","dispatch","thunk","action","source","withStack","callback","isStackSet","process","env","NODE_ENV","Error","stack","undefined","helpers","Object","keys","name","args","create","options","o","isFocused","index"],"mappings":"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","sourcesContent":["import {\n CommonActions,\n NavigationAction,\n NavigationState,\n ParamListBase,\n Router,\n} from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport NavigationBuilderContext from './NavigationBuilderContext';\nimport type { NavigationHelpers, NavigationProp } from './types';\nimport type { NavigationEventEmitter } from './useEventEmitter';\n\ntype Options<\n State extends NavigationState,\n EventMap extends Record<string, any>\n> = {\n state: State;\n getState: () => State;\n navigation: NavigationHelpers<ParamListBase> &\n Partial<NavigationProp<ParamListBase, string, any, any, any>>;\n setOptions: (\n cb: (options: Record<string, object>) => Record<string, object>\n ) => void;\n router: Router<State, NavigationAction>;\n emitter: NavigationEventEmitter<EventMap>;\n};\n\ntype NavigationCache<\n State extends NavigationState,\n ScreenOptions extends {},\n EventMap extends Record<string, any>\n> = Record<\n string,\n NavigationProp<ParamListBase, string, State, ScreenOptions, EventMap>\n>;\n\n/**\n * Hook to cache navigation objects for each screen in the navigator.\n * It's important to cache them to make sure navigation objects don't change between renders.\n * This lets us apply optimizations like `React.memo` to minimize re-rendering screens.\n */\nexport default function useNavigationCache<\n State extends NavigationState,\n ScreenOptions extends {},\n EventMap extends Record<string, any>\n>({\n state,\n getState,\n navigation,\n setOptions,\n router,\n emitter,\n}: Options<State, EventMap>) {\n const { stackRef } = React.useContext(NavigationBuilderContext);\n\n // Cache object which holds navigation objects for each screen\n // We use `React.useMemo` instead of `React.useRef` coz we want to invalidate it when deps change\n // In reality, these deps will rarely change, if ever\n const cache = React.useMemo(\n () => ({ current: {} as NavigationCache<State, ScreenOptions, EventMap> }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [getState, navigation, setOptions, router, emitter]\n );\n\n const actions = {\n ...router.actionCreators,\n ...CommonActions,\n };\n\n cache.current = state.routes.reduce<\n NavigationCache<State, ScreenOptions, EventMap>\n >((acc, route) => {\n const previous = cache.current[route.key];\n\n type Thunk =\n | NavigationAction\n | ((state: State) => NavigationAction | null | undefined);\n\n if (previous) {\n // If a cached navigation object already exists, reuse it\n acc[route.key] = previous;\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { emit, ...rest } = navigation;\n\n const dispatch = (thunk: Thunk) => {\n const action = typeof thunk === 'function' ? thunk(getState()) : thunk;\n\n if (action != null) {\n navigation.dispatch({ source: route.key, ...action });\n }\n };\n\n const withStack = (callback: () => void) => {\n let isStackSet = false;\n\n try {\n if (\n process.env.NODE_ENV !== 'production' &&\n stackRef &&\n !stackRef.current\n ) {\n // Capture the stack trace for devtools\n stackRef.current = new Error().stack;\n isStackSet = true;\n }\n\n callback();\n } finally {\n if (isStackSet && stackRef) {\n stackRef.current = undefined;\n }\n }\n };\n\n const helpers = Object.keys(actions).reduce<Record<string, () => void>>(\n (acc, name) => {\n acc[name] = (...args: any) =>\n withStack(() =>\n // @ts-expect-error: name is a valid key, but TypeScript is dumb\n dispatch(actions[name](...args))\n );\n\n return acc;\n },\n {}\n );\n\n acc[route.key] = {\n ...rest,\n ...helpers,\n // FIXME: too much work to fix the types for now\n ...(emitter.create(route.key) as any),\n dispatch: (thunk: Thunk) => withStack(() => dispatch(thunk)),\n setOptions: (options: object) =>\n setOptions((o) => ({\n ...o,\n [route.key]: { ...o[route.key], ...options },\n })),\n isFocused: () => {\n const state = getState();\n\n if (state.routes[state.index].key !== route.key) {\n return false;\n }\n\n // If the current screen is focused, we also need to check if parent navigator is focused\n // This makes sure that we return the focus state in the whole tree, not just this navigator\n return navigation ? navigation.isFocused() : true;\n },\n };\n }\n\n return acc;\n }, {});\n\n return cache.current;\n}\n"]}
|
|
@@ -11,12 +11,13 @@ PrivateValueStore;
|
|
|
11
11
|
* Navigation object with helper methods to be used by a navigator.
|
|
12
12
|
* This object includes methods for common actions as well as methods the parent screen's navigation object.
|
|
13
13
|
*/
|
|
14
|
-
export default function useNavigationHelpers({
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
14
|
+
export default function useNavigationHelpers(_ref) {
|
|
15
|
+
let {
|
|
16
|
+
onAction,
|
|
17
|
+
getState,
|
|
18
|
+
emitter,
|
|
19
|
+
router
|
|
20
|
+
} = _ref;
|
|
20
21
|
const onUnhandledAction = React.useContext(UnhandledActionContext);
|
|
21
22
|
const parentNavigationHelpers = React.useContext(NavigationContext);
|
|
22
23
|
return React.useMemo(() => {
|
|
@@ -34,7 +35,9 @@ export default function useNavigationHelpers({
|
|
|
34
35
|
};
|
|
35
36
|
const helpers = Object.keys(actions).reduce((acc, name) => {
|
|
36
37
|
// @ts-expect-error: name is a valid key, but TypeScript is dumb
|
|
37
|
-
acc[name] = (
|
|
38
|
+
acc[name] = function () {
|
|
39
|
+
return dispatch(actions[name](...arguments));
|
|
40
|
+
};
|
|
38
41
|
|
|
39
42
|
return acc;
|
|
40
43
|
}, {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useNavigationHelpers.tsx"],"names":["CommonActions","React","NavigationContext","PrivateValueStore","UnhandledActionContext","useNavigationHelpers","onAction","getState","emitter","router","onUnhandledAction","useContext","parentNavigationHelpers","useMemo","dispatch","op","action","handled","actions","actionCreators","helpers","Object","keys","reduce","acc","name","
|
|
1
|
+
{"version":3,"sources":["useNavigationHelpers.tsx"],"names":["CommonActions","React","NavigationContext","PrivateValueStore","UnhandledActionContext","useNavigationHelpers","onAction","getState","emitter","router","onUnhandledAction","useContext","parentNavigationHelpers","useMemo","dispatch","op","action","handled","actions","actionCreators","helpers","Object","keys","reduce","acc","name","emit","isFocused","canGoBack","state","getStateForAction","goBack","routeNames","routeParamList","routeGetIdList","getParent"],"mappings":"AAAA,SACEA,aADF,QAMO,2BANP;AAOA,OAAO,KAAKC,KAAZ,MAAuB,OAAvB;AAEA,OAAOC,iBAAP,MAA8B,qBAA9B;AACA,SAA4CC,iBAA5C,QAAqE,SAArE;AACA,OAAOC,sBAAP,MAAmC,0BAAnC;AAGA;AACA;AACAD,iBAAiB;;AASjB;AACA;AACA;AACA;AACA,eAAe,SAASE,oBAAT,OAKoD;AAAA,MAAjE;AAAEC,IAAAA,QAAF;AAAYC,IAAAA,QAAZ;AAAsBC,IAAAA,OAAtB;AAA+BC,IAAAA;AAA/B,GAAiE;AACjE,QAAMC,iBAAiB,GAAGT,KAAK,CAACU,UAAN,CAAiBP,sBAAjB,CAA1B;AACA,QAAMQ,uBAAuB,GAAGX,KAAK,CAACU,UAAN,CAAiBT,iBAAjB,CAAhC;AAEA,SAAOD,KAAK,CAACY,OAAN,CAAc,MAAM;AACzB,UAAMC,QAAQ,GAAIC,EAAD,IAA6C;AAC5D,YAAMC,MAAM,GAAG,OAAOD,EAAP,KAAc,UAAd,GAA2BA,EAAE,CAACR,QAAQ,EAAT,CAA7B,GAA4CQ,EAA3D;AAEA,YAAME,OAAO,GAAGX,QAAQ,CAACU,MAAD,CAAxB;;AAEA,UAAI,CAACC,OAAL,EAAc;AACZP,QAAAA,iBAAiB,SAAjB,IAAAA,iBAAiB,WAAjB,YAAAA,iBAAiB,CAAGM,MAAH,CAAjB;AACD;AACF,KARD;;AAUA,UAAME,OAAO,GAAG,EACd,GAAGT,MAAM,CAACU,cADI;AAEd,SAAGnB;AAFW,KAAhB;AAKA,UAAMoB,OAAO,GAAGC,MAAM,CAACC,IAAP,CAAYJ,OAAZ,EAAqBK,MAArB,CACd,CAACC,GAAD,EAAMC,IAAN,KAAe;AACb;AACAD,MAAAA,GAAG,CAACC,IAAD,CAAH,GAAY;AAAA,eAAkBX,QAAQ,CAACI,OAAO,CAACO,IAAD,CAAP,CAAc,YAAd,CAAD,CAA1B;AAAA,OAAZ;;AACA,aAAOD,GAAP;AACD,KALa,EAMd,EANc,CAAhB;AASA,WAAO,EACL,GAAGZ,uBADE;AAEL,SAAGQ,OAFE;AAGLN,MAAAA,QAHK;AAILY,MAAAA,IAAI,EAAElB,OAAO,CAACkB,IAJT;AAKLC,MAAAA,SAAS,EAAEf,uBAAuB,GAC9BA,uBAAuB,CAACe,SADM,GAE9B,MAAM,IAPL;AAQLC,MAAAA,SAAS,EAAE,MAAM;AACf,cAAMC,KAAK,GAAGtB,QAAQ,EAAtB;AAEA,eACEE,MAAM,CAACqB,iBAAP,CAAyBD,KAAzB,EAAgC7B,aAAa,CAAC+B,MAAd,EAAhC,EAAkE;AAChEC,UAAAA,UAAU,EAAEH,KAAK,CAACG,UAD8C;AAEhEC,UAAAA,cAAc,EAAE,EAFgD;AAGhEC,UAAAA,cAAc,EAAE;AAHgD,SAAlE,MAIO,IAJP,KAKAtB,uBALA,aAKAA,uBALA,uBAKAA,uBAAuB,CAAEgB,SAAzB,EALA,KAMA,KAPF;AASD,OApBI;AAqBLO,MAAAA,SAAS,EAAE,MAAMvB,uBArBZ;AAsBLL,MAAAA;AAtBK,KAAP;AA0BD,GAnDM,EAmDJ,CACDC,OAAO,CAACkB,IADP,EAEDnB,QAFC,EAGDD,QAHC,EAIDI,iBAJC,EAKDE,uBALC,EAMDH,MANC,CAnDI,CAAP;AA2DD","sourcesContent":["import {\n CommonActions,\n NavigationAction,\n NavigationState,\n ParamListBase,\n Router,\n} from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport NavigationContext from './NavigationContext';\nimport { NavigationHelpers, NavigationProp, PrivateValueStore } from './types';\nimport UnhandledActionContext from './UnhandledActionContext';\nimport type { NavigationEventEmitter } from './useEventEmitter';\n\n// This is to make TypeScript compiler happy\n// eslint-disable-next-line babel/no-unused-expressions\nPrivateValueStore;\n\ntype Options<State extends NavigationState, Action extends NavigationAction> = {\n onAction: (action: NavigationAction) => boolean;\n getState: () => State;\n emitter: NavigationEventEmitter<any>;\n router: Router<State, Action>;\n};\n\n/**\n * Navigation object with helper methods to be used by a navigator.\n * This object includes methods for common actions as well as methods the parent screen's navigation object.\n */\nexport default function useNavigationHelpers<\n State extends NavigationState,\n ActionHelpers extends Record<string, () => void>,\n Action extends NavigationAction,\n EventMap extends Record<string, any>\n>({ onAction, getState, emitter, router }: Options<State, Action>) {\n const onUnhandledAction = React.useContext(UnhandledActionContext);\n const parentNavigationHelpers = React.useContext(NavigationContext);\n\n return React.useMemo(() => {\n const dispatch = (op: Action | ((state: State) => Action)) => {\n const action = typeof op === 'function' ? op(getState()) : op;\n\n const handled = onAction(action);\n\n if (!handled) {\n onUnhandledAction?.(action);\n }\n };\n\n const actions = {\n ...router.actionCreators,\n ...CommonActions,\n };\n\n const helpers = Object.keys(actions).reduce<Record<string, () => void>>(\n (acc, name) => {\n // @ts-expect-error: name is a valid key, but TypeScript is dumb\n acc[name] = (...args: any) => dispatch(actions[name](...args));\n return acc;\n },\n {}\n );\n\n return {\n ...parentNavigationHelpers,\n ...helpers,\n dispatch,\n emit: emitter.emit,\n isFocused: parentNavigationHelpers\n ? parentNavigationHelpers.isFocused\n : () => true,\n canGoBack: () => {\n const state = getState();\n\n return (\n router.getStateForAction(state, CommonActions.goBack() as Action, {\n routeNames: state.routeNames,\n routeParamList: {},\n routeGetIdList: {},\n }) !== null ||\n parentNavigationHelpers?.canGoBack() ||\n false\n );\n },\n getParent: () => parentNavigationHelpers as any,\n getState,\n } as NavigationHelpers<ParamListBase, EventMap> &\n (NavigationProp<ParamListBase, string, any, any, any> | undefined) &\n ActionHelpers;\n }, [\n emitter.emit,\n getState,\n onAction,\n onUnhandledAction,\n parentNavigationHelpers,\n router,\n ]);\n}\n"]}
|
|
@@ -11,16 +11,17 @@ import useOnPreventRemove, { shouldPreventRemove } from './useOnPreventRemove';
|
|
|
11
11
|
*
|
|
12
12
|
* When the action handler handles as action, it returns `true`, otherwise `false`.
|
|
13
13
|
*/
|
|
14
|
-
export default function useOnAction({
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
14
|
+
export default function useOnAction(_ref) {
|
|
15
|
+
let {
|
|
16
|
+
router,
|
|
17
|
+
getState,
|
|
18
|
+
setState,
|
|
19
|
+
key,
|
|
20
|
+
actionListeners,
|
|
21
|
+
beforeRemoveListeners,
|
|
22
|
+
routerConfigOptions,
|
|
23
|
+
emitter
|
|
24
|
+
} = _ref;
|
|
24
25
|
const {
|
|
25
26
|
onAction: onActionParent,
|
|
26
27
|
onRouteFocus: onRouteFocusParent,
|
|
@@ -31,7 +32,8 @@ export default function useOnAction({
|
|
|
31
32
|
React.useEffect(() => {
|
|
32
33
|
routerConfigOptionsRef.current = routerConfigOptions;
|
|
33
34
|
});
|
|
34
|
-
const onAction = React.useCallback((action
|
|
35
|
+
const onAction = React.useCallback(function (action) {
|
|
36
|
+
let visitedNavigators = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Set();
|
|
35
37
|
const state = getState(); // Since actions can bubble both up and down, they could come to the same navigator again
|
|
36
38
|
// We keep track of navigators which have already tried to handle the action and return if it's already visited
|
|
37
39
|
|