@react-navigation/core 8.0.0-alpha.35 → 8.0.0-alpha.37
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/module/BaseNavigationContainer.js +2 -1
- package/lib/module/BaseNavigationContainer.js.map +1 -1
- package/lib/module/PreventRemoveProvider.js +1 -2
- package/lib/module/PreventRemoveProvider.js.map +1 -1
- package/lib/module/getPathFromState.js +11 -7
- package/lib/module/getPathFromState.js.map +1 -1
- package/lib/module/getStateFromPath.js +1 -1
- package/lib/module/getStateFromPath.js.map +1 -1
- package/lib/module/isRecordEqual.js +1 -1
- package/lib/module/isRecordEqual.js.map +1 -1
- package/lib/module/queryString.js +71 -0
- package/lib/module/queryString.js.map +1 -0
- package/lib/module/useDescriptors.js +34 -10
- package/lib/module/useDescriptors.js.map +1 -1
- package/lib/module/useOptionsGetters.js +7 -1
- package/lib/module/useOptionsGetters.js.map +1 -1
- package/lib/module/usePreventRemove.js +1 -2
- package/lib/module/usePreventRemove.js.map +1 -1
- package/lib/module/useRegisterNavigator.js +1 -2
- package/lib/module/useRegisterNavigator.js.map +1 -1
- package/lib/typescript/src/BaseNavigationContainer.d.ts.map +1 -1
- package/lib/typescript/src/PreventRemoveProvider.d.ts.map +1 -1
- package/lib/typescript/src/getPathFromState.d.ts.map +1 -1
- package/lib/typescript/src/isRecordEqual.d.ts.map +1 -1
- package/lib/typescript/src/queryString.d.ts +5 -0
- package/lib/typescript/src/queryString.d.ts.map +1 -0
- package/lib/typescript/src/useDescriptors.d.ts.map +1 -1
- package/lib/typescript/src/useOptionsGetters.d.ts.map +1 -1
- package/lib/typescript/src/usePreventRemove.d.ts.map +1 -1
- package/lib/typescript/src/useRegisterNavigator.d.ts.map +1 -1
- package/package.json +2 -4
- package/src/BaseNavigationContainer.tsx +4 -2
- package/src/PreventRemoveProvider.tsx +2 -2
- package/src/getPathFromState.tsx +7 -5
- package/src/getStateFromPath.tsx +1 -1
- package/src/isRecordEqual.tsx +3 -1
- package/src/queryString.ts +109 -0
- package/src/useDescriptors.tsx +94 -22
- package/src/useOptionsGetters.tsx +7 -1
- package/src/usePreventRemove.tsx +1 -2
- package/src/useRegisterNavigator.tsx +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useLatestCallback","NavigationBuilderContext","useNavigationBuilderContext","NavigationProvider","SceneView","ThemeContext","useNavigationCache","useRouteCache","jsx","_jsx","useDescriptors","screens","state","navigation","screenOptions","screenLayout","onAction","getState","setState","subscribe","addListener","addKeyedListener","onRouteFocus","router","emitter","theme","use","options","setOptions","useState","onDispatchAction","onEmitEvent","onOptionsChange","scheduleUpdate","flushUpdates","getIsStateEmitted","withStackTrace","context","useMemo","navigations","routes","cachedRoutes","getFocusedRouteKey","index","key","getOptions","route","overrides","config","name","screen","props","optionsList","filter","Boolean","reduce","acc","curr","Object","assign","render","customOptions","routeState","Error","clearOptions","o","_","rest","
|
|
1
|
+
{"version":3,"names":["React","useLatestCallback","isArrayEqual","isRecordEqual","NavigationBuilderContext","useNavigationBuilderContext","NavigationProvider","SceneView","ThemeContext","useNavigationCache","useRouteCache","jsx","_jsx","useDescriptors","screens","state","navigation","screenOptions","screenLayout","onAction","getState","setState","subscribe","addListener","addKeyedListener","onRouteFocus","router","emitter","theme","use","options","setOptions","useState","onDispatchAction","onEmitEvent","onOptionsChange","scheduleUpdate","flushUpdates","getIsStateEmitted","withStackTrace","context","useMemo","navigations","routes","cachedRoutes","getFocusedRouteKey","index","key","cache","current","getOptions","route","overrides","config","name","screen","props","optionsList","filter","Boolean","reduce","acc","curr","Object","assign","render","customOptions","routeState","layout","Error","clearOptions","o","_","rest","element","children","Provider","value","next","descriptors","i","deps","component","getComponent","previous","descriptor","useInsertionEffect"],"sourceRoot":"../../src","sources":["useDescriptors.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -57,6 +57,12 @@ export function useOptionsGetters({
|
|
|
57
57
|
}, [getCurrentOptions, parentAddOptionsGetter, key]);
|
|
58
58
|
const addOptionsGetter = React.useCallback((key, getter) => {
|
|
59
59
|
optionsGettersFromChildRef.current[key] = getter;
|
|
60
|
+
|
|
61
|
+
// Hidden screens may register without running their passive effects.
|
|
62
|
+
// Wait until the commit finishes before reporting their options.
|
|
63
|
+
if (onOptionsChange !== undefined) {
|
|
64
|
+
void Promise.resolve().then(onOptionsChange);
|
|
65
|
+
}
|
|
60
66
|
return () => {
|
|
61
67
|
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
62
68
|
delete optionsGettersFromChildRef.current[key];
|
|
@@ -64,7 +70,7 @@ export function useOptionsGetters({
|
|
|
64
70
|
// Other getters and the focused route may still change during cleanup.
|
|
65
71
|
// Wait until the commit finishes before reporting the remaining options.
|
|
66
72
|
if (onOptionsChange !== undefined) {
|
|
67
|
-
|
|
73
|
+
void Promise.resolve().then(onOptionsChange);
|
|
68
74
|
}
|
|
69
75
|
};
|
|
70
76
|
}, [onOptionsChange]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","NavigationBuilderContext","NavigationStateContext","IsFocusedContext","useOptionsGetters","key","options","getFocusedRouteKey","isFocused","use","optionsRef","useRef","optionsGettersFromChildRef","onOptionsChange","addOptionsGetter","parentAddOptionsGetter","useInsertionEffect","current","useEffect","getOptionsFromListener","useCallback","result","getCurrentOptions","optionsFromListener","getter","undefined","
|
|
1
|
+
{"version":3,"names":["React","NavigationBuilderContext","NavigationStateContext","IsFocusedContext","useOptionsGetters","key","options","getFocusedRouteKey","isFocused","use","optionsRef","useRef","optionsGettersFromChildRef","onOptionsChange","addOptionsGetter","parentAddOptionsGetter","useInsertionEffect","current","useEffect","getOptionsFromListener","useCallback","result","getCurrentOptions","optionsFromListener","getter","undefined","Promise","resolve","then"],"sourceRoot":"../../src","sources":["useOptionsGetters.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { nanoid } from 'nanoid/non-secure';
|
|
4
3
|
import * as React from 'react';
|
|
5
4
|
import useLatestCallback from 'use-latest-callback';
|
|
6
5
|
import { useNavigation } from "./useNavigation.js";
|
|
@@ -14,7 +13,7 @@ import { useRoute } from "./useRoute.js";
|
|
|
14
13
|
* @param callback Function which is executed when screen was prevented from being removed.
|
|
15
14
|
*/
|
|
16
15
|
export function usePreventRemove(preventRemove, callback) {
|
|
17
|
-
const
|
|
16
|
+
const id = React.useId();
|
|
18
17
|
const navigation = useNavigation();
|
|
19
18
|
const {
|
|
20
19
|
key: routeKey
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["React","useLatestCallback","useNavigation","usePreventRemoveContext","useRoute","usePreventRemove","preventRemove","callback","id","useId","navigation","key","routeKey","setPreventRemove","notifyPreventRemove","useInsertionEffect","useEffect","beforeRemoveListener","e","preventDefault","data","addListener"],"sourceRoot":"../../src","sources":["usePreventRemove.tsx"],"mappings":";;AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,iBAAiB,MAAM,qBAAqB;AAGnD,SAASC,aAAa,QAAQ,oBAAiB;AAC/C,SAASC,uBAAuB,QAAQ,8BAA2B;AACnE,SAASC,QAAQ,QAAQ,eAAY;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAC9BC,aAAsB,EACtBC,QAAmE,EACnE;EACA,MAAMC,EAAE,GAAGR,KAAK,CAACS,KAAK,CAAC,CAAC;EAExB,MAAMC,UAAU,GAAGR,aAAa,CAAC,CAAC;EAClC,MAAM;IAAES,GAAG,EAAEC;EAAS,CAAC,GAAGR,QAAQ,CAAC,CAAC;EAEpC,MAAM;IAAES,gBAAgB;IAAEC;EAAoB,CAAC,GAAGX,uBAAuB,CAAC,CAAC;EAE3EH,KAAK,CAACe,kBAAkB,CAAC,MAAM;IAC7BF,gBAAgB,CAACL,EAAE,EAAEI,QAAQ,EAAEN,aAAa,CAAC;IAE7C,OAAO,MAAM;MACXO,gBAAgB,CAACL,EAAE,EAAEI,QAAQ,EAAE,KAAK,CAAC;IACvC,CAAC;EACH,CAAC,EAAE,CAACC,gBAAgB,EAAEL,EAAE,EAAEI,QAAQ,EAAEN,aAAa,CAAC,CAAC;EAEnDN,KAAK,CAACgB,SAAS,CAAC,MAAM;IACpBF,mBAAmB,CAAC,CAAC;IAErB,OAAO,MAAM;MACXA,mBAAmB,CAAC,CAAC;IACvB,CAAC;EACH,CAAC,EAAE,CAACN,EAAE,EAAEI,QAAQ,EAAEN,aAAa,EAAEQ,mBAAmB,CAAC,CAAC;EAEtD,MAAMG,oBAAoB,GAAGhB,iBAAiB,CAE3CiB,CAAC,IAAK;IACP,IAAI,CAACZ,aAAa,EAAE;MAClB;IACF;IAEAY,CAAC,CAACC,cAAc,CAAC,CAAC;IAElBZ,QAAQ,CAAC;MAAEa,IAAI,EAAEF,CAAC,CAACE;IAAK,CAAC,CAAC;EAC5B,CAAC,CAAC;EAEFpB,KAAK,CAACe,kBAAkB,CACtB,MAAML,UAAU,EAAEW,WAAW,CAAC,cAAc,EAAEJ,oBAAoB,CAAC,EACnE,CAACP,UAAU,EAAEO,oBAAoB,CACnC,CAAC;AACH","ignoreList":[]}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { nanoid } from 'nanoid/non-secure';
|
|
4
3
|
import * as React from 'react';
|
|
5
4
|
import { SingleNavigatorContext } from "./EnsureSingleNavigator.js";
|
|
6
5
|
|
|
@@ -9,7 +8,7 @@ import { SingleNavigatorContext } from "./EnsureSingleNavigator.js";
|
|
|
9
8
|
* This is used to prevent multiple navigators under a single container or screen.
|
|
10
9
|
*/
|
|
11
10
|
export function useRegisterNavigator() {
|
|
12
|
-
const
|
|
11
|
+
const key = React.useId();
|
|
13
12
|
const container = React.use(SingleNavigatorContext);
|
|
14
13
|
if (container === undefined) {
|
|
15
14
|
throw new Error("Couldn't register the navigator. Have you wrapped your app with 'NavigationContainer'?\n\nThis can also happen if there are multiple copies of '@react-navigation' packages installed.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["React","SingleNavigatorContext","useRegisterNavigator","key","useId","container","use","undefined","Error","useInsertionEffect","register","unregister"],"sourceRoot":"../../src","sources":["useRegisterNavigator.tsx"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAASC,sBAAsB,QAAQ,4BAAyB;;AAEhE;AACA;AACA;AACA;AACA,OAAO,SAASC,oBAAoBA,CAAA,EAAG;EACrC,MAAMC,GAAG,GAAGH,KAAK,CAACI,KAAK,CAAC,CAAC;EAEzB,MAAMC,SAAS,GAAGL,KAAK,CAACM,GAAG,CAACL,sBAAsB,CAAC;EAEnD,IAAII,SAAS,KAAKE,SAAS,EAAE;IAC3B,MAAM,IAAIC,KAAK,CACb,wLACF,CAAC;EACH;EAEAR,KAAK,CAACS,kBAAkB,CAAC,MAAM;IAC7B,MAAM;MAAEC,QAAQ;MAAEC;IAAW,CAAC,GAAGN,SAAS;IAE1CK,QAAQ,CAACP,GAAG,CAAC;IAEb,OAAO,MAAMQ,UAAU,CAACR,GAAG,CAAC;EAC9B,CAAC,EAAE,CAACE,SAAS,EAAEF,GAAG,CAAC,CAAC;EAEpB,OAAOA,GAAG;AACZ","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseNavigationContainer.d.ts","sourceRoot":"","sources":["../../../src/BaseNavigationContainer.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAkB/B,OAAO,KAAK,EAIV,wBAAwB,EACxB,sBAAsB,EACtB,aAAa,EACd,MAAM,YAAS,CAAC;AAYjB,KAAK,KAAK,CAAC,SAAS,SAAS,EAAE,IAAI,wBAAwB,GAAG;IAC5D,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC;CACpD,CAAC;AAgCF;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,SAAS,EAAE,GAAG,aAAa,EAAE,EAC5E,YAAY,EACZ,aAAa,EACb,OAAO,EACP,iBAAiB,EACjB,KAAK,EACL,QAAQ,EACR,GAAG,GACJ,EAAE,KAAK,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"BaseNavigationContainer.d.ts","sourceRoot":"","sources":["../../../src/BaseNavigationContainer.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAkB/B,OAAO,KAAK,EAIV,wBAAwB,EACxB,sBAAsB,EACtB,aAAa,EACd,MAAM,YAAS,CAAC;AAYjB,KAAK,KAAK,CAAC,SAAS,SAAS,EAAE,IAAI,wBAAwB,GAAG;IAC5D,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC;CACpD,CAAC;AAgCF;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,SAAS,EAAE,GAAG,aAAa,EAAE,EAC5E,YAAY,EACZ,aAAa,EACb,OAAO,EACP,iBAAiB,EACjB,KAAK,EACL,QAAQ,EACR,GAAG,GACJ,EAAE,KAAK,CAAC,SAAS,CAAC,qBA8flB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PreventRemoveProvider.d.ts","sourceRoot":"","sources":["../../../src/PreventRemoveProvider.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PreventRemoveProvider.d.ts","sourceRoot":"","sources":["../../../src/PreventRemoveProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAmBF;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,qBA6FxD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPathFromState.d.ts","sourceRoot":"","sources":["../../../src/getPathFromState.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAS/E,OAAO,KAAK,EAAc,aAAa,EAAE,MAAM,YAAS,CAAC;AAGzD,KAAK,OAAO,CAAC,SAAS,SAAS,EAAE,IAAI;IACnC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;CACnC,CAAC;AAEF,KAAK,KAAK,GAAG,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,CAAC;AAyF5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,SAAS,EAAE,EACnD,KAAK,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAC3B,MAAM,
|
|
1
|
+
{"version":3,"file":"getPathFromState.d.ts","sourceRoot":"","sources":["../../../src/getPathFromState.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAS/E,OAAO,KAAK,EAAc,aAAa,EAAE,MAAM,YAAS,CAAC;AAGzD,KAAK,OAAO,CAAC,SAAS,SAAS,EAAE,IAAI;IACnC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;CACnC,CAAC;AAEF,KAAK,KAAK,GAAG,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,CAAC;AAyF5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,SAAS,EAAE,EACnD,KAAK,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAC3B,MAAM,CA6TR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isRecordEqual.d.ts","sourceRoot":"","sources":["../../../src/isRecordEqual.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,aAAa,CAC3B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"isRecordEqual.d.ts","sourceRoot":"","sources":["../../../src/isRecordEqual.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,aAAa,CAC3B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,WAgB3B"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
type QueryValue = string | null | (string | null)[];
|
|
2
|
+
export declare function parse(query: string): Record<string, QueryValue>;
|
|
3
|
+
export declare function stringify(params: Record<string, string | string[] | null>): string;
|
|
4
|
+
export {};
|
|
5
|
+
//# sourceMappingURL=queryString.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryString.d.ts","sourceRoot":"","sources":["../../../src/queryString.ts"],"names":[],"mappings":"AAAA,KAAK,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;AA2CpD,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAiC/D;AAED,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,GAC/C,MAAM,CA4BR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDescriptors.d.ts","sourceRoot":"","sources":["../../../src/useDescriptors.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,aAAa,EAEb,MAAM,EACP,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useDescriptors.d.ts","sourceRoot":"","sources":["../../../src/useDescriptors.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOptionsGetters.d.ts","sourceRoot":"","sources":["../../../src/useOptionsGetters.tsx"],"names":[],"mappings":"AAMA,KAAK,OAAO,GAAG;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CAC/C,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAChC,GAAG,EACH,OAAO,EACP,kBAAkB,GACnB,EAAE,OAAO;4BA+DA,MAAM,UAAU,MAAM,MAAM,GAAG,SAAS,GAAG,IAAI;;
|
|
1
|
+
{"version":3,"file":"useOptionsGetters.d.ts","sourceRoot":"","sources":["../../../src/useOptionsGetters.tsx"],"names":[],"mappings":"AAMA,KAAK,OAAO,GAAG;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CAC/C,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAChC,GAAG,EACH,OAAO,EACP,kBAAkB,GACnB,EAAE,OAAO;4BA+DA,MAAM,UAAU,MAAM,MAAM,GAAG,SAAS,GAAG,IAAI;;EA2BxD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePreventRemove.d.ts","sourceRoot":"","sources":["../../../src/usePreventRemove.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"usePreventRemove.d.ts","sourceRoot":"","sources":["../../../src/usePreventRemove.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AASlE;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,OAAO,EACtB,QAAQ,EAAE,CAAC,OAAO,EAAE;IAAE,IAAI,EAAE;QAAE,MAAM,EAAE,gBAAgB,CAAA;KAAE,CAAA;CAAE,KAAK,IAAI,QAyCpE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRegisterNavigator.d.ts","sourceRoot":"","sources":["../../../src/useRegisterNavigator.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useRegisterNavigator.d.ts","sourceRoot":"","sources":["../../../src/useRegisterNavigator.tsx"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,oBAAoB,WAoBnC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-navigation/core",
|
|
3
3
|
"description": "Core utilities for building navigators",
|
|
4
|
-
"version": "8.0.0-alpha.
|
|
4
|
+
"version": "8.0.0-alpha.37",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
7
7
|
"react-native",
|
|
@@ -47,8 +47,6 @@
|
|
|
47
47
|
"dependencies": {
|
|
48
48
|
"@react-navigation/routers": "^8.0.0-alpha.17",
|
|
49
49
|
"fast-deep-equal": "^3.1.3",
|
|
50
|
-
"nanoid": "^5.1.11",
|
|
51
|
-
"query-string": "^9.4.0",
|
|
52
50
|
"react-is": "^19.2.6",
|
|
53
51
|
"use-latest-callback": "^0.3.5",
|
|
54
52
|
"warn-once": "^0.1.1"
|
|
@@ -89,5 +87,5 @@
|
|
|
89
87
|
]
|
|
90
88
|
]
|
|
91
89
|
},
|
|
92
|
-
"gitHead": "
|
|
90
|
+
"gitHead": "e83cb9a88ab92d24caad272442c338de046cfac2"
|
|
93
91
|
}
|
|
@@ -513,9 +513,9 @@ export function BaseNavigationContainer<ParamList extends {} = RootParamList>({
|
|
|
513
513
|
}, [state, isReady, emitter]);
|
|
514
514
|
|
|
515
515
|
React.useEffect(() => {
|
|
516
|
-
const hydratedState = getRootState();
|
|
517
|
-
|
|
518
516
|
if (process.env.NODE_ENV !== 'production') {
|
|
517
|
+
const hydratedState = getRootState();
|
|
518
|
+
|
|
519
519
|
if (hydratedState !== undefined) {
|
|
520
520
|
const duplicateRouteNamesResult =
|
|
521
521
|
checkDuplicateRouteNames(hydratedState);
|
|
@@ -535,6 +535,8 @@ export function BaseNavigationContainer<ParamList extends {} = RootParamList>({
|
|
|
535
535
|
emitter.emit({ type: 'state', data: { state } });
|
|
536
536
|
|
|
537
537
|
if (!isFirstMountRef.current && onStateChangeRef.current) {
|
|
538
|
+
const hydratedState = getRootState();
|
|
539
|
+
|
|
538
540
|
onStateChangeRef.current(hydratedState);
|
|
539
541
|
}
|
|
540
542
|
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { nanoid } from 'nanoid/non-secure';
|
|
2
1
|
import * as React from 'react';
|
|
3
2
|
import useLatestCallback from 'use-latest-callback';
|
|
4
3
|
|
|
@@ -34,7 +33,8 @@ const transformPreventedRoutes = (
|
|
|
34
33
|
* Component used for managing which routes have to be prevented from removal in native-stack.
|
|
35
34
|
*/
|
|
36
35
|
export function PreventRemoveProvider({ children }: Props) {
|
|
37
|
-
const
|
|
36
|
+
const parentId = React.useId();
|
|
37
|
+
|
|
38
38
|
const [preventedRoutesMap, setPreventedRoutesMap] =
|
|
39
39
|
React.useState<PreventedRoutesMap>(() => new Map());
|
|
40
40
|
|
package/src/getPathFromState.tsx
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { NavigationState, PartialState } from '@react-navigation/routers';
|
|
2
|
-
import queryString from 'query-string';
|
|
3
2
|
|
|
4
3
|
import {
|
|
5
4
|
combinePatternParts,
|
|
@@ -7,6 +6,7 @@ import {
|
|
|
7
6
|
type PatternPart,
|
|
8
7
|
} from './getPatternParts';
|
|
9
8
|
import { getStateFromRouteParams } from './getStateFromRouteParams';
|
|
9
|
+
import * as queryString from './queryString';
|
|
10
10
|
import type { PathConfig, PathConfigMap } from './types';
|
|
11
11
|
import { validatePathConfig } from './validatePathConfig';
|
|
12
12
|
|
|
@@ -226,7 +226,9 @@ export function getPathFromState<ParamList extends {}>(
|
|
|
226
226
|
if (route.params) {
|
|
227
227
|
const options = config;
|
|
228
228
|
const params = route.params as Record<string, unknown>;
|
|
229
|
-
const currentParams: Record<string, SerializedParamValue> = {
|
|
229
|
+
const currentParams: Record<string, SerializedParamValue> = {
|
|
230
|
+
__proto__: null,
|
|
231
|
+
};
|
|
230
232
|
|
|
231
233
|
for (const key in params) {
|
|
232
234
|
const value = params[key];
|
|
@@ -270,7 +272,7 @@ export function getPathFromState<ParamList extends {}>(
|
|
|
270
272
|
// If this is the focused route, keep the params for later use
|
|
271
273
|
// We save it here since it's been stringified already
|
|
272
274
|
// Params claimed by the pattern shouldn't be repeated in the query string
|
|
273
|
-
focusedParams = {};
|
|
275
|
+
focusedParams = { __proto__: null };
|
|
274
276
|
|
|
275
277
|
for (const key in currentParams) {
|
|
276
278
|
const value = currentParams[key];
|
|
@@ -405,7 +407,7 @@ export function getPathFromState<ParamList extends {}>(
|
|
|
405
407
|
}
|
|
406
408
|
|
|
407
409
|
if (!focusedParams && focusedRoute.params) {
|
|
408
|
-
focusedParams = {};
|
|
410
|
+
focusedParams = { __proto__: null };
|
|
409
411
|
|
|
410
412
|
const params = focusedRoute.params as Record<string, unknown>;
|
|
411
413
|
|
|
@@ -421,7 +423,7 @@ export function getPathFromState<ParamList extends {}>(
|
|
|
421
423
|
if (routeState) {
|
|
422
424
|
path += '/';
|
|
423
425
|
} else if (focusedParams) {
|
|
424
|
-
const query = queryString.stringify(focusedParams
|
|
426
|
+
const query = queryString.stringify(focusedParams);
|
|
425
427
|
|
|
426
428
|
if (query) {
|
|
427
429
|
path += `?${query}`;
|
package/src/getStateFromPath.tsx
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { NavigationState, PartialState } from '@react-navigation/routers';
|
|
2
|
-
import queryString from 'query-string';
|
|
3
2
|
|
|
4
3
|
import { arrayStartsWith } from './arrayStartsWith';
|
|
5
4
|
import {
|
|
@@ -8,6 +7,7 @@ import {
|
|
|
8
7
|
type PatternPartRepeat,
|
|
9
8
|
} from './getPatternParts';
|
|
10
9
|
import { isArrayEqual } from './isArrayEqual';
|
|
10
|
+
import * as queryString from './queryString';
|
|
11
11
|
import type { PathConfig, PathConfigMap } from './types';
|
|
12
12
|
import type {
|
|
13
13
|
StandardSchemaV1,
|
package/src/isRecordEqual.tsx
CHANGED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
type QueryValue = string | null | (string | null)[];
|
|
2
|
+
|
|
3
|
+
// Match complete UTF-8 sequences so malformed input can be decoded partially
|
|
4
|
+
// without repeatedly splitting and retrying an arbitrarily long byte sequence.
|
|
5
|
+
const ENCODED_UTF8 = new RegExp(
|
|
6
|
+
[
|
|
7
|
+
'%[0-7][\\dA-F]',
|
|
8
|
+
'%(?:C[2-9A-F]|D[\\dA-F])%[89AB][\\dA-F]',
|
|
9
|
+
'%E0%[AB][\\dA-F]%[89AB][\\dA-F]',
|
|
10
|
+
'%E[1-9A-CEF](?:%[89AB][\\dA-F]){2}',
|
|
11
|
+
'%ED%[89][\\dA-F]%[89AB][\\dA-F]',
|
|
12
|
+
'%F0%[9AB][\\dA-F](?:%[89AB][\\dA-F]){2}',
|
|
13
|
+
'%F[1-3](?:%[89AB][\\dA-F]){3}',
|
|
14
|
+
'%F4%8[\\dA-F](?:%[89AB][\\dA-F]){2}',
|
|
15
|
+
].join('|'),
|
|
16
|
+
'gi'
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
const decode = (value: string) => {
|
|
20
|
+
if (!value.includes('%')) {
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
try {
|
|
25
|
+
return decodeURIComponent(value);
|
|
26
|
+
} catch {
|
|
27
|
+
return value.replace(ENCODED_UTF8, (sequence) =>
|
|
28
|
+
decodeURIComponent(sequence)
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const encode = (value: string) => {
|
|
34
|
+
if (/^[A-Za-z0-9_.~-]*$/.test(value)) {
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return encodeURIComponent(value).replace(
|
|
39
|
+
/[!'()*]/g,
|
|
40
|
+
(char) => `%${char.charCodeAt(0).toString(16).toUpperCase()}`
|
|
41
|
+
);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export function parse(query: string): Record<string, QueryValue> {
|
|
45
|
+
const params: Record<string, QueryValue> = Object.create(null);
|
|
46
|
+
|
|
47
|
+
query = query.trim().replace(/^[?#&]/, '');
|
|
48
|
+
|
|
49
|
+
let start = 0;
|
|
50
|
+
|
|
51
|
+
while (start < query.length) {
|
|
52
|
+
if (query[start] === '&') {
|
|
53
|
+
start++;
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const end = query.indexOf('&', start);
|
|
58
|
+
const index = end === -1 ? query.length : end;
|
|
59
|
+
const part = query.slice(start, index).replace(/\+/g, ' ');
|
|
60
|
+
const separator = part.indexOf('=');
|
|
61
|
+
const key = decode(separator === -1 ? part : part.slice(0, separator));
|
|
62
|
+
const value = separator === -1 ? null : decode(part.slice(separator + 1));
|
|
63
|
+
const previous = params[key];
|
|
64
|
+
|
|
65
|
+
if (previous === undefined) {
|
|
66
|
+
params[key] = value;
|
|
67
|
+
} else if (Array.isArray(previous)) {
|
|
68
|
+
previous.push(value);
|
|
69
|
+
} else {
|
|
70
|
+
params[key] = [previous, value];
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
start = index + 1;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return params;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function stringify(
|
|
80
|
+
params: Record<string, string | string[] | null>
|
|
81
|
+
): string {
|
|
82
|
+
const parts: string[] = [];
|
|
83
|
+
|
|
84
|
+
for (const [key, value] of Object.entries(params)) {
|
|
85
|
+
if (Array.isArray(value)) {
|
|
86
|
+
let encodedKey: string | undefined;
|
|
87
|
+
|
|
88
|
+
value.forEach((item) => {
|
|
89
|
+
encodedKey ??= encode(key);
|
|
90
|
+
|
|
91
|
+
parts.push(`${encodedKey}=${encode(item)}`);
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const encodedKey = encode(key);
|
|
98
|
+
|
|
99
|
+
if (value === null) {
|
|
100
|
+
if (encodedKey) {
|
|
101
|
+
parts.push(encodedKey);
|
|
102
|
+
}
|
|
103
|
+
} else {
|
|
104
|
+
parts.push(`${encodedKey}=${encode(value)}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return parts.join('&');
|
|
109
|
+
}
|
package/src/useDescriptors.tsx
CHANGED
|
@@ -8,6 +8,8 @@ import type {
|
|
|
8
8
|
import * as React from 'react';
|
|
9
9
|
import useLatestCallback from 'use-latest-callback';
|
|
10
10
|
|
|
11
|
+
import { isArrayEqual } from './isArrayEqual';
|
|
12
|
+
import { isRecordEqual } from './isRecordEqual';
|
|
11
13
|
import {
|
|
12
14
|
type AddKeyedListener,
|
|
13
15
|
type AddListener,
|
|
@@ -88,6 +90,30 @@ type Options<
|
|
|
88
90
|
emitter: NavigationEventEmitter<EventMap>;
|
|
89
91
|
};
|
|
90
92
|
|
|
93
|
+
type DescriptorCache<
|
|
94
|
+
State extends NavigationState,
|
|
95
|
+
ScreenOptions extends {},
|
|
96
|
+
EventMap extends EventMapBase,
|
|
97
|
+
ActionHelpers extends Record<string, (...args: any) => void>,
|
|
98
|
+
> = Record<
|
|
99
|
+
string,
|
|
100
|
+
{
|
|
101
|
+
descriptor: Descriptor<
|
|
102
|
+
ScreenOptions,
|
|
103
|
+
NavigationProp<
|
|
104
|
+
ParamListBase,
|
|
105
|
+
string,
|
|
106
|
+
State,
|
|
107
|
+
ScreenOptions,
|
|
108
|
+
EventMap,
|
|
109
|
+
ActionHelpers
|
|
110
|
+
>,
|
|
111
|
+
RouteProp<ParamListBase>
|
|
112
|
+
>;
|
|
113
|
+
deps: unknown[];
|
|
114
|
+
}
|
|
115
|
+
>;
|
|
116
|
+
|
|
91
117
|
/**
|
|
92
118
|
* Hook to create descriptor objects for the child routes.
|
|
93
119
|
*
|
|
@@ -183,6 +209,10 @@ export function useDescriptors<
|
|
|
183
209
|
() => state.routes[state.index]?.key
|
|
184
210
|
);
|
|
185
211
|
|
|
212
|
+
const cache = React.useMemo<{
|
|
213
|
+
current: DescriptorCache<State, ScreenOptions, EventMap, ActionHelpers>;
|
|
214
|
+
}>(() => ({ current: {} }), []);
|
|
215
|
+
|
|
186
216
|
const getOptions = (
|
|
187
217
|
route: RouteProp<ParamListBase, string>,
|
|
188
218
|
navigation: NavigationProp<
|
|
@@ -231,7 +261,8 @@ export function useDescriptors<
|
|
|
231
261
|
EventMap
|
|
232
262
|
>,
|
|
233
263
|
customOptions: ScreenOptions,
|
|
234
|
-
routeState: NavigationState | PartialState<NavigationState> | undefined
|
|
264
|
+
routeState: NavigationState | PartialState<NavigationState> | undefined,
|
|
265
|
+
layout: ScreenLayout<ScreenOptions> | undefined
|
|
235
266
|
) => {
|
|
236
267
|
const config = screens[route.name];
|
|
237
268
|
const screen = config?.props;
|
|
@@ -250,14 +281,6 @@ export function useDescriptors<
|
|
|
250
281
|
return o;
|
|
251
282
|
});
|
|
252
283
|
|
|
253
|
-
const layout =
|
|
254
|
-
// The `layout` prop passed to `Screen` elements,
|
|
255
|
-
screen.layout ??
|
|
256
|
-
// The `screenLayout` props passed to `Group` elements
|
|
257
|
-
config?.layout ??
|
|
258
|
-
// The default `screenLayout` passed to the navigator
|
|
259
|
-
screenLayout;
|
|
260
|
-
|
|
261
284
|
let element = (
|
|
262
285
|
<SceneView
|
|
263
286
|
navigation={navigation}
|
|
@@ -293,21 +316,18 @@ export function useDescriptors<
|
|
|
293
316
|
);
|
|
294
317
|
};
|
|
295
318
|
|
|
319
|
+
const next: DescriptorCache<State, ScreenOptions, EventMap, ActionHelpers> =
|
|
320
|
+
{};
|
|
321
|
+
|
|
296
322
|
const descriptors = cachedRoutes.reduce<
|
|
297
323
|
Record<
|
|
298
324
|
string,
|
|
299
|
-
|
|
325
|
+
DescriptorCache<
|
|
326
|
+
State,
|
|
300
327
|
ScreenOptions,
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
State,
|
|
305
|
-
ScreenOptions,
|
|
306
|
-
EventMap,
|
|
307
|
-
ActionHelpers
|
|
308
|
-
>,
|
|
309
|
-
RouteProp<ParamListBase>
|
|
310
|
-
>
|
|
328
|
+
EventMap,
|
|
329
|
+
ActionHelpers
|
|
330
|
+
>[string]['descriptor']
|
|
311
331
|
>
|
|
312
332
|
>((acc, route, i) => {
|
|
313
333
|
const navigation = navigations[route.key];
|
|
@@ -321,14 +341,56 @@ export function useDescriptors<
|
|
|
321
341
|
|
|
322
342
|
const customOptions = getOptions(route, navigation, overrides);
|
|
323
343
|
|
|
344
|
+
const routeState = state.routes[i]?.state;
|
|
345
|
+
const config = screens[route.name];
|
|
346
|
+
const screen = config?.props;
|
|
347
|
+
|
|
348
|
+
const layout =
|
|
349
|
+
// The `layout` prop passed to `Screen` elements,
|
|
350
|
+
screen?.layout ??
|
|
351
|
+
// The `screenLayout` props passed to `Group` elements
|
|
352
|
+
config?.layout ??
|
|
353
|
+
// The default `screenLayout` passed to the navigator
|
|
354
|
+
screenLayout;
|
|
355
|
+
|
|
356
|
+
const deps = [
|
|
357
|
+
route,
|
|
358
|
+
navigation,
|
|
359
|
+
routeState,
|
|
360
|
+
screen?.component,
|
|
361
|
+
screen?.getComponent,
|
|
362
|
+
screen?.children,
|
|
363
|
+
layout,
|
|
364
|
+
context,
|
|
365
|
+
theme,
|
|
366
|
+
getFocusedRouteKey,
|
|
367
|
+
getState,
|
|
368
|
+
setState,
|
|
369
|
+
subscribe,
|
|
370
|
+
];
|
|
371
|
+
|
|
372
|
+
const previous = cache.current[route.key];
|
|
373
|
+
|
|
374
|
+
if (
|
|
375
|
+
previous &&
|
|
376
|
+
isArrayEqual(previous.deps, deps) &&
|
|
377
|
+
isRecordEqual(previous.descriptor.options, customOptions)
|
|
378
|
+
) {
|
|
379
|
+
next[route.key] = previous;
|
|
380
|
+
acc[route.key] = previous.descriptor;
|
|
381
|
+
|
|
382
|
+
return acc;
|
|
383
|
+
}
|
|
384
|
+
|
|
324
385
|
const element = render(
|
|
325
386
|
route,
|
|
326
387
|
navigation,
|
|
327
388
|
customOptions,
|
|
328
|
-
|
|
389
|
+
routeState,
|
|
390
|
+
layout
|
|
329
391
|
);
|
|
330
392
|
|
|
331
|
-
|
|
393
|
+
const descriptor = {
|
|
332
394
|
route,
|
|
333
395
|
navigation,
|
|
334
396
|
render() {
|
|
@@ -337,8 +399,18 @@ export function useDescriptors<
|
|
|
337
399
|
options: customOptions,
|
|
338
400
|
};
|
|
339
401
|
|
|
402
|
+
acc[route.key] = descriptor;
|
|
403
|
+
next[route.key] = {
|
|
404
|
+
descriptor,
|
|
405
|
+
deps,
|
|
406
|
+
};
|
|
407
|
+
|
|
340
408
|
return acc;
|
|
341
409
|
}, {});
|
|
342
410
|
|
|
411
|
+
React.useInsertionEffect(() => {
|
|
412
|
+
cache.current = next;
|
|
413
|
+
});
|
|
414
|
+
|
|
343
415
|
return descriptors;
|
|
344
416
|
}
|
|
@@ -80,6 +80,12 @@ export function useOptionsGetters({
|
|
|
80
80
|
(key: string, getter: () => object | undefined | null) => {
|
|
81
81
|
optionsGettersFromChildRef.current[key] = getter;
|
|
82
82
|
|
|
83
|
+
// Hidden screens may register without running their passive effects.
|
|
84
|
+
// Wait until the commit finishes before reporting their options.
|
|
85
|
+
if (onOptionsChange !== undefined) {
|
|
86
|
+
void Promise.resolve().then(onOptionsChange);
|
|
87
|
+
}
|
|
88
|
+
|
|
83
89
|
return () => {
|
|
84
90
|
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
85
91
|
delete optionsGettersFromChildRef.current[key];
|
|
@@ -87,7 +93,7 @@ export function useOptionsGetters({
|
|
|
87
93
|
// Other getters and the focused route may still change during cleanup.
|
|
88
94
|
// Wait until the commit finishes before reporting the remaining options.
|
|
89
95
|
if (onOptionsChange !== undefined) {
|
|
90
|
-
|
|
96
|
+
void Promise.resolve().then(onOptionsChange);
|
|
91
97
|
}
|
|
92
98
|
};
|
|
93
99
|
},
|