@react-navigation/core 6.2.2 → 6.4.0
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/README.md +17 -11
- package/lib/commonjs/BaseNavigationContainer.js.map +1 -1
- package/lib/commonjs/PreventRemoveContext.js +17 -0
- package/lib/commonjs/PreventRemoveContext.js.map +1 -0
- package/lib/commonjs/PreventRemoveProvider.js +114 -0
- package/lib/commonjs/PreventRemoveProvider.js.map +1 -0
- package/lib/commonjs/getStateFromPath.js +1 -1
- package/lib/commonjs/getStateFromPath.js.map +1 -1
- package/lib/commonjs/index.js +36 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/useComponent.js +22 -12
- package/lib/commonjs/useComponent.js.map +1 -1
- package/lib/commonjs/useEventEmitter.js +1 -1
- package/lib/commonjs/useEventEmitter.js.map +1 -1
- package/lib/commonjs/useFocusEffect.js +1 -1
- package/lib/commonjs/useFocusEffect.js.map +1 -1
- package/lib/commonjs/useKeyedChildListeners.js +2 -2
- package/lib/commonjs/useKeyedChildListeners.js.map +1 -1
- package/lib/commonjs/useNavigationBuilder.js +4 -2
- package/lib/commonjs/useNavigationBuilder.js.map +1 -1
- package/lib/commonjs/usePreventRemove.js +59 -0
- package/lib/commonjs/usePreventRemove.js.map +1 -0
- package/lib/commonjs/usePreventRemoveContext.js +27 -0
- package/lib/commonjs/usePreventRemoveContext.js.map +1 -0
- package/lib/module/BaseNavigationContainer.js.map +1 -1
- package/lib/module/PreventRemoveContext.js +9 -0
- package/lib/module/PreventRemoveContext.js.map +1 -0
- package/lib/module/PreventRemoveProvider.js +96 -0
- package/lib/module/PreventRemoveProvider.js.map +1 -0
- package/lib/module/getStateFromPath.js +1 -1
- package/lib/module/getStateFromPath.js.map +1 -1
- package/lib/module/index.js +4 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/module/useComponent.js +23 -12
- package/lib/module/useComponent.js.map +1 -1
- package/lib/module/useEventEmitter.js +1 -1
- package/lib/module/useEventEmitter.js.map +1 -1
- package/lib/module/useFocusEffect.js +1 -1
- package/lib/module/useFocusEffect.js.map +1 -1
- package/lib/module/useKeyedChildListeners.js +2 -2
- package/lib/module/useKeyedChildListeners.js.map +1 -1
- package/lib/module/useNavigationBuilder.js +3 -2
- package/lib/module/useNavigationBuilder.js.map +1 -1
- package/lib/module/usePreventRemove.js +41 -0
- package/lib/module/usePreventRemove.js.map +1 -0
- package/lib/module/usePreventRemoveContext.js +12 -0
- package/lib/module/usePreventRemoveContext.js.map +1 -0
- package/lib/typescript/src/PreventRemoveContext.d.ts +13 -0
- package/lib/typescript/src/PreventRemoveProvider.d.ts +9 -0
- package/lib/typescript/src/index.d.ts +4 -0
- package/lib/typescript/src/types.d.ts +10 -6
- package/lib/typescript/src/useComponent.d.ts +5 -1
- package/lib/typescript/src/useDescriptors.d.ts +3 -3
- package/lib/typescript/src/useNavigationBuilder.d.ts +9 -7
- package/lib/typescript/src/useNavigationHelpers.d.ts +3 -3
- package/lib/typescript/src/usePreventRemove.d.ts +12 -0
- package/lib/typescript/src/usePreventRemoveContext.d.ts +4 -0
- package/package.json +10 -8
- package/src/BaseNavigationContainer.tsx +1 -1
- package/src/PreventRemoveContext.tsx +21 -0
- package/src/PreventRemoveProvider.tsx +126 -0
- package/src/getStateFromPath.tsx +4 -1
- package/src/index.tsx +4 -0
- package/src/types.tsx +39 -14
- package/src/useComponent.tsx +19 -12
- package/src/useEventEmitter.tsx +3 -1
- package/src/useFocusEffect.tsx +1 -1
- package/src/useKeyedChildListeners.tsx +6 -4
- package/src/useNavigationBuilder.tsx +9 -5
- package/src/usePreventRemove.tsx +51 -0
- package/src/usePreventRemoveContext.tsx +15 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = usePreventRemoveContext;
|
|
7
|
+
|
|
8
|
+
var React = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _PreventRemoveContext = _interopRequireDefault(require("./PreventRemoveContext"));
|
|
11
|
+
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
|
|
14
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
15
|
+
|
|
16
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
17
|
+
|
|
18
|
+
function usePreventRemoveContext() {
|
|
19
|
+
const value = React.useContext(_PreventRemoveContext.default);
|
|
20
|
+
|
|
21
|
+
if (value == null) {
|
|
22
|
+
throw new Error("Couldn't find the prevent remove context. Is your component inside NavigationContent?");
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=usePreventRemoveContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["usePreventRemoveContext.tsx"],"names":["usePreventRemoveContext","value","React","useContext","PreventRemoveContext","Error"],"mappings":";;;;;;;AAAA;;AAEA;;;;;;;;AAEe,SAASA,uBAAT,GAAmC;AAChD,QAAMC,KAAK,GAAGC,KAAK,CAACC,UAAN,CAAiBC,6BAAjB,CAAd;;AAEA,MAAIH,KAAK,IAAI,IAAb,EAAmB;AACjB,UAAM,IAAII,KAAJ,CACJ,uFADI,CAAN;AAGD;;AAED,SAAOJ,KAAP;AACD","sourcesContent":["import * as React from 'react';\n\nimport PreventRemoveContext from './PreventRemoveContext';\n\nexport default function usePreventRemoveContext() {\n const value = React.useContext(PreventRemoveContext);\n\n if (value == null) {\n throw new Error(\n \"Couldn't find the prevent remove context. Is your component inside NavigationContent?\"\n );\n }\n\n return value;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["BaseNavigationContainer.tsx"],"names":["CommonActions","React","checkDuplicateRouteNames","checkSerializable","NOT_INITIALIZED_ERROR","EnsureSingleNavigator","findFocusedRoute","NavigationBuilderContext","NavigationContainerRefContext","NavigationContext","NavigationRouteContext","NavigationStateContext","UnhandledActionContext","useChildListeners","useEventEmitter","useKeyedChildListeners","useOptionsGetters","ScheduleUpdateContext","useSyncState","serializableWarnings","duplicateNameWarnings","getPartialState","state","undefined","key","routeNames","partialState","stale","routes","map","route","BaseNavigationContainer","forwardRef","ref","initialState","onStateChange","onUnhandledAction","independent","children","parent","useContext","isDefault","Error","getState","setState","scheduleUpdate","flushUpdates","isFirstMountRef","useRef","navigatorKeyRef","getKey","useCallback","current","setKey","listeners","addListener","keyedListeners","addKeyedListener","dispatch","action","focus","console","error","navigation","canGoBack","result","handled","resetRoot","target","root","reset","getRootState","getCurrentRoute","emitter","addOptionsGetter","getCurrentOptions","useMemo","Object","keys","reduce","acc","name","create","isFocused","getParent","stateRef","isReady","useImperativeHandle","onDispatchAction","noop","emit","type","data","stack","stackRef","lastEmittedOptionsRef","onOptionsChange","options","builderContext","scheduleContext","isInitialRef","getIsInitial","context","onStateChangeRef","useEffect","hydratedState","process","env","NODE_ENV","serializableResult","serializable","location","reason","path","pointer","params","i","length","curr","prev","test","JSON","stringify","message","includes","push","warn","duplicateRouteNamesResult","locations","join","defaultOnUnhandledAction","payload","element"],"mappings":"AAAA,SACEA,aADF,QAQO,2BARP;AASA,OAAO,KAAKC,KAAZ,MAAuB,OAAvB;AAEA,OAAOC,wBAAP,MAAqC,4BAArC;AACA,OAAOC,iBAAP,MAA8B,qBAA9B;AACA,SAASC,qBAAT,QAAsC,gCAAtC;AACA,OAAOC,qBAAP,MAAkC,yBAAlC;AACA,OAAOC,gBAAP,MAA6B,oBAA7B;AACA,OAAOC,wBAAP,MAAqC,4BAArC;AACA,OAAOC,6BAAP,MAA0C,iCAA1C;AACA,OAAOC,iBAAP,MAA8B,qBAA9B;AACA,OAAOC,sBAAP,MAAmC,0BAAnC;AACA,OAAOC,sBAAP,MAAmC,0BAAnC;AAMA,OAAOC,sBAAP,MAAmC,0BAAnC;AACA,OAAOC,iBAAP,MAA8B,qBAA9B;AACA,OAAOC,eAAP,MAA4B,mBAA5B;AACA,OAAOC,sBAAP,MAAmC,0BAAnC;AACA,OAAOC,iBAAP,MAA8B,qBAA9B;AACA,SAASC,qBAAT,QAAsC,qBAAtC;AACA,OAAOC,YAAP,MAAyB,gBAAzB;AAIA,MAAMC,oBAA8B,GAAG,EAAvC;AACA,MAAMC,qBAA+B,GAAG,EAAxC;AAEA;AACA;AACA;AACA;AACA;;AACA,MAAMC,eAAe,GACnBC,KADsB,IAEwB;AAC9C,MAAIA,KAAK,KAAKC,SAAd,EAAyB;AACvB;AACD,GAH6C,CAK9C;;;AACA,QAAM;AAAEC,IAAAA,GAAF;AAAOC,IAAAA,UAAP;AAAmB,OAAGC;AAAtB,MAAuCJ,KAA7C;AAEA,SAAO,EACL,GAAGI,YADE;AAELC,IAAAA,KAAK,EAAE,IAFF;AAGLC,IAAAA,MAAM,EAAEN,KAAK,CAACM,MAAN,CAAaC,GAAb,CAAkBC,KAAD,IAAW;AAClC,UAAIA,KAAK,CAACR,KAAN,KAAgBC,SAApB,EAA+B;AAC7B,eAAOO,KAAP;AAGD;;AAED,aAAO,EAAE,GAAGA,KAAL;AAAYR,QAAAA,KAAK,EAAED,eAAe,CAACS,KAAK,CAACR,KAAP;AAAlC,OAAP;AACD,KARO;AAHH,GAAP;AAaD,CAvBD;AAyBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMS,uBAAuB,gBAAG9B,KAAK,CAAC+B,UAAN,CAC9B,SAASD,uBAAT,OAQEE,GARF,EASE;AAAA,MARA;AACEC,IAAAA,YADF;AAEEC,IAAAA,aAFF;AAGEC,IAAAA,iBAHF;AAIEC,IAAAA,WAJF;AAKEC,IAAAA;AALF,GAQA;AACA,QAAMC,MAAM,GAAGtC,KAAK,CAACuC,UAAN,CAAiB7B,sBAAjB,CAAf;;AAEA,MAAI,CAAC4B,MAAM,CAACE,SAAR,IAAqB,CAACJ,WAA1B,EAAuC;AACrC,UAAM,IAAIK,KAAJ,CACJ,0VADI,CAAN;AAGD;;AAED,QAAM,CAACpB,KAAD,EAAQqB,QAAR,EAAkBC,QAAlB,EAA4BC,cAA5B,EAA4CC,YAA5C,IACJ5B,YAAY,CAAQ,MAClBG,eAAe,CAACa,YAAY,IAAI,IAAhB,GAAuBX,SAAvB,GAAmCW,YAApC,CADL,CADd;AAKA,QAAMa,eAAe,GAAG9C,KAAK,CAAC+C,MAAN,CAAsB,IAAtB,CAAxB;AAEA,QAAMC,eAAe,GAAGhD,KAAK,CAAC+C,MAAN,EAAxB;AAEA,QAAME,MAAM,GAAGjD,KAAK,CAACkD,WAAN,CAAkB,MAAMF,eAAe,CAACG,OAAxC,EAAiD,EAAjD,CAAf;AAEA,QAAMC,MAAM,GAAGpD,KAAK,CAACkD,WAAN,CAAmB3B,GAAD,IAAiB;AAChDyB,IAAAA,eAAe,CAACG,OAAhB,GAA0B5B,GAA1B;AACD,GAFc,EAEZ,EAFY,CAAf;AAIA,QAAM;AAAE8B,IAAAA,SAAF;AAAaC,IAAAA;AAAb,MAA6B1C,iBAAiB,EAApD;AAEA,QAAM;AAAE2C,IAAAA,cAAF;AAAkBC,IAAAA;AAAlB,MAAuC1C,sBAAsB,EAAnE;AAEA,QAAM2C,QAAQ,GAAGzD,KAAK,CAACkD,WAAN,CAEbQ,MADF,IAIK;AACH,QAAIL,SAAS,CAACM,KAAV,CAAgB,CAAhB,KAAsB,IAA1B,EAAgC;AAC9BC,MAAAA,OAAO,CAACC,KAAR,CAAc1D,qBAAd;AACD,KAFD,MAEO;AACLkD,MAAAA,SAAS,CAACM,KAAV,CAAgB,CAAhB,EAAoBG,UAAD,IAAgBA,UAAU,CAACL,QAAX,CAAoBC,MAApB,CAAnC;AACD;AACF,GAXc,EAYf,CAACL,SAAS,CAACM,KAAX,CAZe,CAAjB;AAeA,QAAMI,SAAS,GAAG/D,KAAK,CAACkD,WAAN,CAAkB,MAAM;AACxC,QAAIG,SAAS,CAACM,KAAV,CAAgB,CAAhB,KAAsB,IAA1B,EAAgC;AAC9B,aAAO,KAAP;AACD;;AAED,UAAM;AAAEK,MAAAA,MAAF;AAAUC,MAAAA;AAAV,QAAsBZ,SAAS,CAACM,KAAV,CAAgB,CAAhB,EAAoBG,UAAD,IAC7CA,UAAU,CAACC,SAAX,EAD0B,CAA5B;;AAIA,QAAIE,OAAJ,EAAa;AACX,aAAOD,MAAP;AACD,KAFD,MAEO;AACL,aAAO,KAAP;AACD;AACF,GAdiB,EAcf,CAACX,SAAS,CAACM,KAAX,CAde,CAAlB;AAgBA,QAAMO,SAAS,GAAGlE,KAAK,CAACkD,WAAN,CACf7B,KAAD,IAA6D;AAAA;;AAC3D,UAAM8C,MAAM,iBAAG9C,KAAH,aAAGA,KAAH,uBAAGA,KAAK,CAAEE,GAAV,4EAAiB,0BAAAgC,cAAc,CAACb,QAAf,EAAwB0B,IAAzC,0DAAiB,mDAAiC7C,GAA9D;;AAEA,QAAI4C,MAAM,IAAI,IAAd,EAAoB;AAClBP,MAAAA,OAAO,CAACC,KAAR,CAAc1D,qBAAd;AACD,KAFD,MAEO;AACLkD,MAAAA,SAAS,CAACM,KAAV,CAAgB,CAAhB,EAAoBG,UAAD,IACjBA,UAAU,CAACL,QAAX,CAAoB,EAClB,GAAG1D,aAAa,CAACsE,KAAd,CAAoBhD,KAApB,CADe;AAElB8C,QAAAA;AAFkB,OAApB,CADF;AAMD;AACF,GAde,EAehB,CAACZ,cAAc,CAACb,QAAhB,EAA0BW,SAAS,CAACM,KAApC,CAfgB,CAAlB;AAkBA,QAAMW,YAAY,GAAGtE,KAAK,CAACkD,WAAN,CAAkB,MAAM;AAAA;;AAC3C,qCAAO,0BAAAK,cAAc,CAACb,QAAf,EAAwB0B,IAA/B,2DAAO,mDAAP;AACD,GAFoB,EAElB,CAACb,cAAc,CAACb,QAAhB,CAFkB,CAArB;AAIA,QAAM6B,eAAe,GAAGvE,KAAK,CAACkD,WAAN,CAAkB,MAAM;AAC9C,UAAM7B,KAAK,GAAGiD,YAAY,EAA1B;;AAEA,QAAIjD,KAAK,IAAI,IAAb,EAAmB;AACjB,aAAOC,SAAP;AACD;;AAED,UAAMO,KAAK,GAAGxB,gBAAgB,CAACgB,KAAD,CAA9B;AAEA,WAAOQ,KAAP;AACD,GAVuB,EAUrB,CAACyC,YAAD,CAVqB,CAAxB;AAYA,QAAME,OAAO,GAAG3D,eAAe,EAA/B;AAEA,QAAM;AAAE4D,IAAAA,gBAAF;AAAoBC,IAAAA;AAApB,MAA0C3D,iBAAiB,CAAC,EAAD,CAAjE;AAEA,QAAM+C,UAAiD,GAAG9D,KAAK,CAAC2E,OAAN,CACxD,OAAO,EACL,GAAGC,MAAM,CAACC,IAAP,CAAY9E,aAAZ,EAA2B+E,MAA3B,CAAuC,CAACC,GAAD,EAAMC,IAAN,KAAe;AACvDD,MAAAA,GAAG,CAACC,IAAD,CAAH,GAAY;AAAA,eACV;AACAvB,UAAAA,QAAQ,CAAC1D,aAAa,CAACiF,IAAD,CAAb,CAAoB,YAApB,CAAD;AAFE;AAAA,OAAZ;;AAGA,aAAOD,GAAP;AACD,KALE,EAKA,EALA,CADE;AAOL,OAAGP,OAAO,CAACS,MAAR,CAAe,MAAf,CAPE;AAQLxB,IAAAA,QARK;AASLS,IAAAA,SATK;AAULgB,IAAAA,SAAS,EAAE,MAAM,IAVZ;AAWLnB,IAAAA,SAXK;AAYLoB,IAAAA,SAAS,EAAE,MAAM7D,SAZZ;AAaLoB,IAAAA,QAAQ,EAAE,MAAM0C,QAAQ,CAACjC,OAbpB;AAcLmB,IAAAA,YAdK;AAeLC,IAAAA,eAfK;AAgBLG,IAAAA,iBAhBK;AAiBLW,IAAAA,OAAO,EAAE,MAAMhC,SAAS,CAACM,KAAV,CAAgB,CAAhB,KAAsB;AAjBhC,GAAP,CADwD,EAoBxD,CACEI,SADF,EAEEN,QAFF,EAGEe,OAHF,EAIEE,iBAJF,EAKEH,eALF,EAMED,YANF,EAOEjB,SAAS,CAACM,KAPZ,EAQEO,SARF,CApBwD,CAA1D;AAgCAlE,EAAAA,KAAK,CAACsF,mBAAN,CAA0BtD,GAA1B,EAA+B,MAAM8B,UAArC,EAAiD,CAACA,UAAD,CAAjD;AAEA,QAAMyB,gBAAgB,GAAGvF,KAAK,CAACkD,WAAN,CACvB,CAACQ,MAAD,EAA2B8B,IAA3B,KAA6C;AAC3ChB,IAAAA,OAAO,CAACiB,IAAR,CAAa;AACXC,MAAAA,IAAI,EAAE,mBADK;AAEXC,MAAAA,IAAI,EAAE;AAAEjC,QAAAA,MAAF;AAAU8B,QAAAA,IAAV;AAAgBI,QAAAA,KAAK,EAAEC,QAAQ,CAAC1C;AAAhC;AAFK,KAAb;AAID,GANsB,EAOvB,CAACqB,OAAD,CAPuB,CAAzB;AAUA,QAAMsB,qBAAqB,GAAG9F,KAAK,CAAC+C,MAAN,EAA9B;AAEA,QAAMgD,eAAe,GAAG/F,KAAK,CAACkD,WAAN,CACrB8C,OAAD,IAAa;AACX,QAAIF,qBAAqB,CAAC3C,OAAtB,KAAkC6C,OAAtC,EAA+C;AAC7C;AACD;;AAEDF,IAAAA,qBAAqB,CAAC3C,OAAtB,GAAgC6C,OAAhC;AAEAxB,IAAAA,OAAO,CAACiB,IAAR,CAAa;AACXC,MAAAA,IAAI,EAAE,SADK;AAEXC,MAAAA,IAAI,EAAE;AAAEK,QAAAA;AAAF;AAFK,KAAb;AAID,GAZqB,EAatB,CAACxB,OAAD,CAbsB,CAAxB;AAgBA,QAAMqB,QAAQ,GAAG7F,KAAK,CAAC+C,MAAN,EAAjB;AAEA,QAAMkD,cAAc,GAAGjG,KAAK,CAAC2E,OAAN,CACrB,OAAO;AACLrB,IAAAA,WADK;AAELE,IAAAA,gBAFK;AAGL+B,IAAAA,gBAHK;AAILQ,IAAAA,eAJK;AAKLF,IAAAA;AALK,GAAP,CADqB,EAQrB,CAACvC,WAAD,EAAcE,gBAAd,EAAgC+B,gBAAhC,EAAkDQ,eAAlD,CARqB,CAAvB;AAWA,QAAMG,eAAe,GAAGlG,KAAK,CAAC2E,OAAN,CACtB,OAAO;AAAE/B,IAAAA,cAAF;AAAkBC,IAAAA;AAAlB,GAAP,CADsB,EAEtB,CAACD,cAAD,EAAiBC,YAAjB,CAFsB,CAAxB;AAKA,QAAMsD,YAAY,GAAGnG,KAAK,CAAC+C,MAAN,CAAa,IAAb,CAArB;AAEA,QAAMqD,YAAY,GAAGpG,KAAK,CAACkD,WAAN,CAAkB,MAAMiD,YAAY,CAAChD,OAArC,EAA8C,EAA9C,CAArB;AAEA,QAAMkD,OAAO,GAAGrG,KAAK,CAAC2E,OAAN,CACd,OAAO;AACLtD,IAAAA,KADK;AAELqB,IAAAA,QAFK;AAGLC,IAAAA,QAHK;AAILM,IAAAA,MAJK;AAKLG,IAAAA,MALK;AAMLgD,IAAAA,YANK;AAOL3B,IAAAA;AAPK,GAAP,CADc,EAUd,CACEpD,KADF,EAEEqB,QAFF,EAGEC,QAHF,EAIEM,MAJF,EAKEG,MALF,EAMEgD,YANF,EAOE3B,gBAPF,CAVc,CAAhB;AAqBA,QAAM6B,gBAAgB,GAAGtG,KAAK,CAAC+C,MAAN,CAAab,aAAb,CAAzB;AACA,QAAMkD,QAAQ,GAAGpF,KAAK,CAAC+C,MAAN,CAAa1B,KAAb,CAAjB;AAEArB,EAAAA,KAAK,CAACuG,SAAN,CAAgB,MAAM;AACpBJ,IAAAA,YAAY,CAAChD,OAAb,GAAuB,KAAvB;AACAmD,IAAAA,gBAAgB,CAACnD,OAAjB,GAA2BjB,aAA3B;AACAkD,IAAAA,QAAQ,CAACjC,OAAT,GAAmB9B,KAAnB;AACD,GAJD;AAMArB,EAAAA,KAAK,CAACuG,SAAN,CAAgB,MAAM;AACpB,UAAMC,aAAa,GAAGlC,YAAY,EAAlC;;AAEA,QAAImC,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,YAA7B,EAA2C;AACzC,UAAIH,aAAa,KAAKlF,SAAtB,EAAiC;AAC/B,cAAMsF,kBAAkB,GAAG1G,iBAAiB,CAACsG,aAAD,CAA5C;;AAEA,YAAI,CAACI,kBAAkB,CAACC,YAAxB,EAAsC;AACpC,gBAAM;AAAEC,YAAAA,QAAF;AAAYC,YAAAA;AAAZ,cAAuBH,kBAA7B;AAEA,cAAII,IAAI,GAAG,EAAX;AACA,cAAIC,OAAyB,GAAGT,aAAhC;AACA,cAAIU,MAAM,GAAG,KAAb;;AAEA,eAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGL,QAAQ,CAACM,MAA7B,EAAqCD,CAAC,EAAtC,EAA0C;AACxC,kBAAME,IAAI,GAAGP,QAAQ,CAACK,CAAD,CAArB;AACA,kBAAMG,IAAI,GAAGR,QAAQ,CAACK,CAAC,GAAG,CAAL,CAArB;AAEAF,YAAAA,OAAO,GAAGA,OAAO,CAACI,IAAD,CAAjB;;AAEA,gBAAI,CAACH,MAAD,IAAWG,IAAI,KAAK,OAAxB,EAAiC;AAC/B;AACD,aAFD,MAEO,IAAI,CAACH,MAAD,IAAWG,IAAI,KAAK,QAAxB,EAAkC;AACvC,kBAAIL,IAAJ,EAAU;AACRA,gBAAAA,IAAI,IAAI,KAAR;AACD;AACF,aAJM,MAIA,IACL,CAACE,MAAD,IACA,OAAOG,IAAP,KAAgB,QADhB,IAEAC,IAAI,KAAK,QAHJ,EAIL;AAAA;;AACAN,cAAAA,IAAI,gBAAIC,OAAJ,6CAAI,SAASjC,IAAjB;AACD,aANM,MAMA,IAAI,CAACkC,MAAL,EAAa;AAClBF,cAAAA,IAAI,IAAK,MAAKK,IAAK,EAAnB;AACAH,cAAAA,MAAM,GAAG,IAAT;AACD,aAHM,MAGA;AACL,kBAAI,OAAOG,IAAP,KAAgB,QAAhB,IAA4B,WAAWE,IAAX,CAAgBF,IAAhB,CAAhC,EAAuD;AACrDL,gBAAAA,IAAI,IAAK,IAAGK,IAAK,GAAjB;AACD,eAFD,MAEO,IAAI,cAAcE,IAAd,CAAmBF,IAAnB,CAAJ,EAA8B;AACnCL,gBAAAA,IAAI,IAAK,IAAGK,IAAK,EAAjB;AACD,eAFM,MAEA;AACLL,gBAAAA,IAAI,IAAK,IAAGQ,IAAI,CAACC,SAAL,CAAeJ,IAAf,CAAqB,GAAjC;AACD;AACF;AACF;;AAED,gBAAMK,OAAO,GAAI,yEAAwEV,IAAK,KAAID,MAAO,4aAAzG;;AAEA,cAAI,CAAC7F,oBAAoB,CAACyG,QAArB,CAA8BD,OAA9B,CAAL,EAA6C;AAC3CxG,YAAAA,oBAAoB,CAAC0G,IAArB,CAA0BF,OAA1B;AACA9D,YAAAA,OAAO,CAACiE,IAAR,CAAaH,OAAb;AACD;AACF;;AAED,cAAMI,yBAAyB,GAC7B7H,wBAAwB,CAACuG,aAAD,CAD1B;;AAGA,YAAIsB,yBAAyB,CAACV,MAA9B,EAAsC;AACpC,gBAAMM,OAAO,GAAI,uEAAsEI,yBAAyB,CAAClG,GAA1B,CACpFmG,SAAD,IAAgB,KAAIA,SAAS,CAACC,IAAV,CAAe,IAAf,CAAqB,EAD4C,CAErF,+GAFF;;AAIA,cAAI,CAAC7G,qBAAqB,CAACwG,QAAtB,CAA+BD,OAA/B,CAAL,EAA8C;AAC5CvG,YAAAA,qBAAqB,CAACyG,IAAtB,CAA2BF,OAA3B;AACA9D,YAAAA,OAAO,CAACiE,IAAR,CAAaH,OAAb;AACD;AACF;AACF;AACF;;AAEDlD,IAAAA,OAAO,CAACiB,IAAR,CAAa;AAAEC,MAAAA,IAAI,EAAE,OAAR;AAAiBC,MAAAA,IAAI,EAAE;AAAEtE,QAAAA;AAAF;AAAvB,KAAb;;AAEA,QAAI,CAACyB,eAAe,CAACK,OAAjB,IAA4BmD,gBAAgB,CAACnD,OAAjD,EAA0D;AACxDmD,MAAAA,gBAAgB,CAACnD,OAAjB,CAAyBqD,aAAzB;AACD;;AAED1D,IAAAA,eAAe,CAACK,OAAhB,GAA0B,KAA1B;AACD,GA7ED,EA6EG,CAACmB,YAAD,EAAeE,OAAf,EAAwBnD,KAAxB,CA7EH;AA+EA,QAAM4G,wBAAwB,GAAGjI,KAAK,CAACkD,WAAN,CAC9BQ,MAAD,IAA8B;AAC5B,QAAI+C,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,YAA7B,EAA2C;AACzC;AACD;;AAED,UAAMuB,OAAwC,GAAGxE,MAAM,CAACwE,OAAxD;AAEA,QAAIR,OAAO,GAAI,eAAchE,MAAM,CAACgC,IAAK,IACvCwC,OAAO,GAAI,iBAAgBV,IAAI,CAACC,SAAL,CAAe/D,MAAM,CAACwE,OAAtB,CAA+B,EAAnD,GAAuD,EAC/D,oCAFD;;AAIA,YAAQxE,MAAM,CAACgC,IAAf;AACE,WAAK,UAAL;AACA,WAAK,MAAL;AACA,WAAK,SAAL;AACA,WAAK,SAAL;AACE,YAAIwC,OAAJ,aAAIA,OAAJ,eAAIA,OAAO,CAAElD,IAAb,EAAmB;AACjB0C,UAAAA,OAAO,IAAK,mCAAkCQ,OAAO,CAAClD,IAAK,6KAA3D;AACD,SAFD,MAEO;AACL0C,UAAAA,OAAO,IAAK,mIAAZ;AACD;;AAED;;AACF,WAAK,SAAL;AACA,WAAK,KAAL;AACA,WAAK,YAAL;AACEA,QAAAA,OAAO,IAAK,wCAAZ;AACA;;AACF,WAAK,aAAL;AACA,WAAK,cAAL;AACA,WAAK,eAAL;AACEA,QAAAA,OAAO,IAAK,+CAAZ;AACA;AArBJ;;AAwBAA,IAAAA,OAAO,IAAK,0EAAZ;AAEA9D,IAAAA,OAAO,CAACC,KAAR,CAAc6D,OAAd;AACD,GAvC8B,EAwC/B,EAxC+B,CAAjC;AA2CA,MAAIS,OAAO,gBACT,oBAAC,6BAAD,CAA+B,QAA/B;AAAwC,IAAA,KAAK,EAAErE;AAA/C,kBACE,oBAAC,qBAAD,CAAuB,QAAvB;AAAgC,IAAA,KAAK,EAAEoC;AAAvC,kBACE,oBAAC,wBAAD,CAA0B,QAA1B;AAAmC,IAAA,KAAK,EAAED;AAA1C,kBACE,oBAAC,sBAAD,CAAwB,QAAxB;AAAiC,IAAA,KAAK,EAAEI;AAAxC,kBACE,oBAAC,sBAAD,CAAwB,QAAxB;AACE,IAAA,KAAK,EAAElE,iBAAF,aAAEA,iBAAF,cAAEA,iBAAF,GAAuB8F;AAD9B,kBAGE,oBAAC,qBAAD,QAAwB5F,QAAxB,CAHF,CADF,CADF,CADF,CADF,CADF;;AAgBA,MAAID,WAAJ,EAAiB;AACf;AACA+F,IAAAA,OAAO,gBACL,oBAAC,sBAAD,CAAwB,QAAxB;AAAiC,MAAA,KAAK,EAAE7G;AAAxC,oBACE,oBAAC,iBAAD,CAAmB,QAAnB;AAA4B,MAAA,KAAK,EAAEA;AAAnC,OACG6G,OADH,CADF,CADF;AAOD;;AAED,SAAOA,OAAP;AACD,CAnX6B,CAAhC;AAsXA,eAAerG,uBAAf","sourcesContent":["import {\n CommonActions,\n InitialState,\n NavigationAction,\n NavigationState,\n ParamListBase,\n PartialState,\n Route,\n} from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport checkDuplicateRouteNames from './checkDuplicateRouteNames';\nimport checkSerializable from './checkSerializable';\nimport { NOT_INITIALIZED_ERROR } from './createNavigationContainerRef';\nimport EnsureSingleNavigator from './EnsureSingleNavigator';\nimport findFocusedRoute from './findFocusedRoute';\nimport NavigationBuilderContext from './NavigationBuilderContext';\nimport NavigationContainerRefContext from './NavigationContainerRefContext';\nimport NavigationContext from './NavigationContext';\nimport NavigationRouteContext from './NavigationRouteContext';\nimport NavigationStateContext from './NavigationStateContext';\nimport type {\n NavigationContainerEventMap,\n NavigationContainerProps,\n NavigationContainerRef,\n} from './types';\nimport UnhandledActionContext from './UnhandledActionContext';\nimport useChildListeners from './useChildListeners';\nimport useEventEmitter from './useEventEmitter';\nimport useKeyedChildListeners from './useKeyedChildListeners';\nimport useOptionsGetters from './useOptionsGetters';\nimport { ScheduleUpdateContext } from './useScheduleUpdate';\nimport useSyncState from './useSyncState';\n\ntype State = NavigationState | PartialState<NavigationState> | undefined;\n\nconst serializableWarnings: string[] = [];\nconst duplicateNameWarnings: string[] = [];\n\n/**\n * Remove `key` and `routeNames` from the state objects recursively to get partial state.\n *\n * @param state Initial state object.\n */\nconst getPartialState = (\n state: InitialState | undefined\n): PartialState<NavigationState> | undefined => {\n if (state === undefined) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { key, routeNames, ...partialState } = state;\n\n return {\n ...partialState,\n stale: true,\n routes: state.routes.map((route) => {\n if (route.state === undefined) {\n return route as Route<string> & {\n state?: PartialState<NavigationState>;\n };\n }\n\n return { ...route, state: getPartialState(route.state) };\n }),\n };\n};\n\n/**\n * Container component which holds the navigation state.\n * This should be rendered at the root wrapping the whole app.\n *\n * @param props.initialState Initial state object for the navigation tree.\n * @param props.onStateChange Callback which is called with the latest navigation state when it changes.\n * @param props.children Child elements to render the content.\n * @param props.ref Ref object which refers to the navigation object containing helper methods.\n */\nconst BaseNavigationContainer = React.forwardRef(\n function BaseNavigationContainer(\n {\n initialState,\n onStateChange,\n onUnhandledAction,\n independent,\n children,\n }: NavigationContainerProps,\n ref?: React.Ref<NavigationContainerRef<ParamListBase>>\n ) {\n const parent = React.useContext(NavigationStateContext);\n\n if (!parent.isDefault && !independent) {\n throw new Error(\n \"Looks like you have nested a 'NavigationContainer' inside another. Normally you need only one container at the root of the app, so this was probably an error. If this was intentional, pass 'independent={true}' explicitly. Note that this will make the child navigators disconnected from the parent and you won't be able to navigate between them.\"\n );\n }\n\n const [state, getState, setState, scheduleUpdate, flushUpdates] =\n useSyncState<State>(() =>\n getPartialState(initialState == null ? undefined : initialState)\n );\n\n const isFirstMountRef = React.useRef<boolean>(true);\n\n const navigatorKeyRef = React.useRef<string | undefined>();\n\n const getKey = React.useCallback(() => navigatorKeyRef.current, []);\n\n const setKey = React.useCallback((key: string) => {\n navigatorKeyRef.current = key;\n }, []);\n\n const { listeners, addListener } = useChildListeners();\n\n const { keyedListeners, addKeyedListener } = useKeyedChildListeners();\n\n const dispatch = React.useCallback(\n (\n action:\n | NavigationAction\n | ((state: NavigationState) => NavigationAction)\n ) => {\n if (listeners.focus[0] == null) {\n console.error(NOT_INITIALIZED_ERROR);\n } else {\n listeners.focus[0]((navigation) => navigation.dispatch(action));\n }\n },\n [listeners.focus]\n );\n\n const canGoBack = React.useCallback(() => {\n if (listeners.focus[0] == null) {\n return false;\n }\n\n const { result, handled } = listeners.focus[0]((navigation) =>\n navigation.canGoBack()\n );\n\n if (handled) {\n return result;\n } else {\n return false;\n }\n }, [listeners.focus]);\n\n const resetRoot = React.useCallback(\n (state?: PartialState<NavigationState> | NavigationState) => {\n const target = state?.key ?? keyedListeners.getState.root?.().key;\n\n if (target == null) {\n console.error(NOT_INITIALIZED_ERROR);\n } else {\n listeners.focus[0]((navigation) =>\n navigation.dispatch({\n ...CommonActions.reset(state),\n target,\n })\n );\n }\n },\n [keyedListeners.getState, listeners.focus]\n );\n\n const getRootState = React.useCallback(() => {\n return keyedListeners.getState.root?.();\n }, [keyedListeners.getState]);\n\n const getCurrentRoute = React.useCallback(() => {\n const state = getRootState();\n\n if (state == null) {\n return undefined;\n }\n\n const route = findFocusedRoute(state);\n\n return route as Route<string> | undefined;\n }, [getRootState]);\n\n const emitter = useEventEmitter<NavigationContainerEventMap>();\n\n const { addOptionsGetter, getCurrentOptions } = useOptionsGetters({});\n\n const navigation: NavigationContainerRef<ParamListBase> = React.useMemo(\n () => ({\n ...Object.keys(CommonActions).reduce<any>((acc, name) => {\n acc[name] = (...args: any[]) =>\n // @ts-expect-error: this is ok\n dispatch(CommonActions[name](...args));\n return acc;\n }, {}),\n ...emitter.create('root'),\n dispatch,\n resetRoot,\n isFocused: () => true,\n canGoBack,\n getParent: () => undefined,\n getState: () => stateRef.current,\n getRootState,\n getCurrentRoute,\n getCurrentOptions,\n isReady: () => listeners.focus[0] != null,\n }),\n [\n canGoBack,\n dispatch,\n emitter,\n getCurrentOptions,\n getCurrentRoute,\n getRootState,\n listeners.focus,\n resetRoot,\n ]\n );\n\n React.useImperativeHandle(ref, () => navigation, [navigation]);\n\n const onDispatchAction = React.useCallback(\n (action: NavigationAction, noop: boolean) => {\n emitter.emit({\n type: '__unsafe_action__',\n data: { action, noop, stack: stackRef.current },\n });\n },\n [emitter]\n );\n\n const lastEmittedOptionsRef = React.useRef<object | undefined>();\n\n const onOptionsChange = React.useCallback(\n (options) => {\n if (lastEmittedOptionsRef.current === options) {\n return;\n }\n\n lastEmittedOptionsRef.current = options;\n\n emitter.emit({\n type: 'options',\n data: { options },\n });\n },\n [emitter]\n );\n\n const stackRef = React.useRef<string | undefined>();\n\n const builderContext = React.useMemo(\n () => ({\n addListener,\n addKeyedListener,\n onDispatchAction,\n onOptionsChange,\n stackRef,\n }),\n [addListener, addKeyedListener, onDispatchAction, onOptionsChange]\n );\n\n const scheduleContext = React.useMemo(\n () => ({ scheduleUpdate, flushUpdates }),\n [scheduleUpdate, flushUpdates]\n );\n\n const isInitialRef = React.useRef(true);\n\n const getIsInitial = React.useCallback(() => isInitialRef.current, []);\n\n const context = React.useMemo(\n () => ({\n state,\n getState,\n setState,\n getKey,\n setKey,\n getIsInitial,\n addOptionsGetter,\n }),\n [\n state,\n getState,\n setState,\n getKey,\n setKey,\n getIsInitial,\n addOptionsGetter,\n ]\n );\n\n const onStateChangeRef = React.useRef(onStateChange);\n const stateRef = React.useRef(state);\n\n React.useEffect(() => {\n isInitialRef.current = false;\n onStateChangeRef.current = onStateChange;\n stateRef.current = state;\n });\n\n React.useEffect(() => {\n const hydratedState = getRootState();\n\n if (process.env.NODE_ENV !== 'production') {\n if (hydratedState !== undefined) {\n const serializableResult = checkSerializable(hydratedState);\n\n if (!serializableResult.serializable) {\n const { location, reason } = serializableResult;\n\n let path = '';\n let pointer: Record<any, any> = hydratedState;\n let params = false;\n\n for (let i = 0; i < location.length; i++) {\n const curr = location[i];\n const prev = location[i - 1];\n\n pointer = pointer[curr];\n\n if (!params && curr === 'state') {\n continue;\n } else if (!params && curr === 'routes') {\n if (path) {\n path += ' > ';\n }\n } else if (\n !params &&\n typeof curr === 'number' &&\n prev === 'routes'\n ) {\n path += pointer?.name;\n } else if (!params) {\n path += ` > ${curr}`;\n params = true;\n } else {\n if (typeof curr === 'number' || /^[0-9]+$/.test(curr)) {\n path += `[${curr}]`;\n } else if (/^[a-z$_]+$/i.test(curr)) {\n path += `.${curr}`;\n } else {\n path += `[${JSON.stringify(curr)}]`;\n }\n }\n }\n\n const message = `Non-serializable values were found in the navigation state. Check:\\n\\n${path} (${reason})\\n\\nThis can break usage such as persisting and restoring state. This might happen if you passed non-serializable values such as function, class instances etc. in params. If you need to use components with callbacks in your options, you can use 'navigation.setOptions' instead. See https://reactnavigation.org/docs/troubleshooting#i-get-the-warning-non-serializable-values-were-found-in-the-navigation-state for more details.`;\n\n if (!serializableWarnings.includes(message)) {\n serializableWarnings.push(message);\n console.warn(message);\n }\n }\n\n const duplicateRouteNamesResult =\n checkDuplicateRouteNames(hydratedState);\n\n if (duplicateRouteNamesResult.length) {\n const message = `Found screens with the same name nested inside one another. Check:\\n${duplicateRouteNamesResult.map(\n (locations) => `\\n${locations.join(', ')}`\n )}\\n\\nThis can cause confusing behavior during navigation. Consider using unique names for each screen instead.`;\n\n if (!duplicateNameWarnings.includes(message)) {\n duplicateNameWarnings.push(message);\n console.warn(message);\n }\n }\n }\n }\n\n emitter.emit({ type: 'state', data: { state } });\n\n if (!isFirstMountRef.current && onStateChangeRef.current) {\n onStateChangeRef.current(hydratedState);\n }\n\n isFirstMountRef.current = false;\n }, [getRootState, emitter, state]);\n\n const defaultOnUnhandledAction = React.useCallback(\n (action: NavigationAction) => {\n if (process.env.NODE_ENV === 'production') {\n return;\n }\n\n const payload: Record<string, any> | undefined = action.payload;\n\n let message = `The action '${action.type}'${\n payload ? ` with payload ${JSON.stringify(action.payload)}` : ''\n } was not handled by any navigator.`;\n\n switch (action.type) {\n case 'NAVIGATE':\n case 'PUSH':\n case 'REPLACE':\n case 'JUMP_TO':\n if (payload?.name) {\n message += `\\n\\nDo you have a screen named '${payload.name}'?\\n\\nIf you're trying to navigate to a screen in a nested navigator, see https://reactnavigation.org/docs/nesting-navigators#navigating-to-a-screen-in-a-nested-navigator.`;\n } else {\n message += `\\n\\nYou need to pass the name of the screen to navigate to.\\n\\nSee https://reactnavigation.org/docs/navigation-actions for usage.`;\n }\n\n break;\n case 'GO_BACK':\n case 'POP':\n case 'POP_TO_TOP':\n message += `\\n\\nIs there any screen to go back to?`;\n break;\n case 'OPEN_DRAWER':\n case 'CLOSE_DRAWER':\n case 'TOGGLE_DRAWER':\n message += `\\n\\nIs your screen inside a Drawer navigator?`;\n break;\n }\n\n message += `\\n\\nThis is a development-only warning and won't be shown in production.`;\n\n console.error(message);\n },\n []\n );\n\n let element = (\n <NavigationContainerRefContext.Provider value={navigation}>\n <ScheduleUpdateContext.Provider value={scheduleContext}>\n <NavigationBuilderContext.Provider value={builderContext}>\n <NavigationStateContext.Provider value={context}>\n <UnhandledActionContext.Provider\n value={onUnhandledAction ?? defaultOnUnhandledAction}\n >\n <EnsureSingleNavigator>{children}</EnsureSingleNavigator>\n </UnhandledActionContext.Provider>\n </NavigationStateContext.Provider>\n </NavigationBuilderContext.Provider>\n </ScheduleUpdateContext.Provider>\n </NavigationContainerRefContext.Provider>\n );\n\n if (independent) {\n // We need to clear any existing contexts for nested independent container to work correctly\n element = (\n <NavigationRouteContext.Provider value={undefined}>\n <NavigationContext.Provider value={undefined}>\n {element}\n </NavigationContext.Provider>\n </NavigationRouteContext.Provider>\n );\n }\n\n return element;\n }\n);\n\nexport default BaseNavigationContainer;\n"]}
|
|
1
|
+
{"version":3,"sources":["BaseNavigationContainer.tsx"],"names":["CommonActions","React","checkDuplicateRouteNames","checkSerializable","NOT_INITIALIZED_ERROR","EnsureSingleNavigator","findFocusedRoute","NavigationBuilderContext","NavigationContainerRefContext","NavigationContext","NavigationRouteContext","NavigationStateContext","UnhandledActionContext","useChildListeners","useEventEmitter","useKeyedChildListeners","useOptionsGetters","ScheduleUpdateContext","useSyncState","serializableWarnings","duplicateNameWarnings","getPartialState","state","undefined","key","routeNames","partialState","stale","routes","map","route","BaseNavigationContainer","forwardRef","ref","initialState","onStateChange","onUnhandledAction","independent","children","parent","useContext","isDefault","Error","getState","setState","scheduleUpdate","flushUpdates","isFirstMountRef","useRef","navigatorKeyRef","getKey","useCallback","current","setKey","listeners","addListener","keyedListeners","addKeyedListener","dispatch","action","focus","console","error","navigation","canGoBack","result","handled","resetRoot","target","root","reset","getRootState","getCurrentRoute","emitter","addOptionsGetter","getCurrentOptions","useMemo","Object","keys","reduce","acc","name","create","isFocused","getParent","stateRef","isReady","useImperativeHandle","onDispatchAction","noop","emit","type","data","stack","stackRef","lastEmittedOptionsRef","onOptionsChange","options","builderContext","scheduleContext","isInitialRef","getIsInitial","context","onStateChangeRef","useEffect","hydratedState","process","env","NODE_ENV","serializableResult","serializable","location","reason","path","pointer","params","i","length","curr","prev","test","JSON","stringify","message","includes","push","warn","duplicateRouteNamesResult","locations","join","defaultOnUnhandledAction","payload","element"],"mappings":"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","sourcesContent":["import {\n CommonActions,\n InitialState,\n NavigationAction,\n NavigationState,\n ParamListBase,\n PartialState,\n Route,\n} from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport checkDuplicateRouteNames from './checkDuplicateRouteNames';\nimport checkSerializable from './checkSerializable';\nimport { NOT_INITIALIZED_ERROR } from './createNavigationContainerRef';\nimport EnsureSingleNavigator from './EnsureSingleNavigator';\nimport findFocusedRoute from './findFocusedRoute';\nimport NavigationBuilderContext from './NavigationBuilderContext';\nimport NavigationContainerRefContext from './NavigationContainerRefContext';\nimport NavigationContext from './NavigationContext';\nimport NavigationRouteContext from './NavigationRouteContext';\nimport NavigationStateContext from './NavigationStateContext';\nimport type {\n NavigationContainerEventMap,\n NavigationContainerProps,\n NavigationContainerRef,\n} from './types';\nimport UnhandledActionContext from './UnhandledActionContext';\nimport useChildListeners from './useChildListeners';\nimport useEventEmitter from './useEventEmitter';\nimport useKeyedChildListeners from './useKeyedChildListeners';\nimport useOptionsGetters from './useOptionsGetters';\nimport { ScheduleUpdateContext } from './useScheduleUpdate';\nimport useSyncState from './useSyncState';\n\ntype State = NavigationState | PartialState<NavigationState> | undefined;\n\nconst serializableWarnings: string[] = [];\nconst duplicateNameWarnings: string[] = [];\n\n/**\n * Remove `key` and `routeNames` from the state objects recursively to get partial state.\n *\n * @param state Initial state object.\n */\nconst getPartialState = (\n state: InitialState | undefined\n): PartialState<NavigationState> | undefined => {\n if (state === undefined) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { key, routeNames, ...partialState } = state;\n\n return {\n ...partialState,\n stale: true,\n routes: state.routes.map((route) => {\n if (route.state === undefined) {\n return route as Route<string> & {\n state?: PartialState<NavigationState>;\n };\n }\n\n return { ...route, state: getPartialState(route.state) };\n }),\n };\n};\n\n/**\n * Container component which holds the navigation state.\n * This should be rendered at the root wrapping the whole app.\n *\n * @param props.initialState Initial state object for the navigation tree.\n * @param props.onStateChange Callback which is called with the latest navigation state when it changes.\n * @param props.children Child elements to render the content.\n * @param props.ref Ref object which refers to the navigation object containing helper methods.\n */\nconst BaseNavigationContainer = React.forwardRef(\n function BaseNavigationContainer(\n {\n initialState,\n onStateChange,\n onUnhandledAction,\n independent,\n children,\n }: NavigationContainerProps,\n ref?: React.Ref<NavigationContainerRef<ParamListBase>>\n ) {\n const parent = React.useContext(NavigationStateContext);\n\n if (!parent.isDefault && !independent) {\n throw new Error(\n \"Looks like you have nested a 'NavigationContainer' inside another. Normally you need only one container at the root of the app, so this was probably an error. If this was intentional, pass 'independent={true}' explicitly. Note that this will make the child navigators disconnected from the parent and you won't be able to navigate between them.\"\n );\n }\n\n const [state, getState, setState, scheduleUpdate, flushUpdates] =\n useSyncState<State>(() =>\n getPartialState(initialState == null ? undefined : initialState)\n );\n\n const isFirstMountRef = React.useRef<boolean>(true);\n\n const navigatorKeyRef = React.useRef<string | undefined>();\n\n const getKey = React.useCallback(() => navigatorKeyRef.current, []);\n\n const setKey = React.useCallback((key: string) => {\n navigatorKeyRef.current = key;\n }, []);\n\n const { listeners, addListener } = useChildListeners();\n\n const { keyedListeners, addKeyedListener } = useKeyedChildListeners();\n\n const dispatch = React.useCallback(\n (\n action:\n | NavigationAction\n | ((state: NavigationState) => NavigationAction)\n ) => {\n if (listeners.focus[0] == null) {\n console.error(NOT_INITIALIZED_ERROR);\n } else {\n listeners.focus[0]((navigation) => navigation.dispatch(action));\n }\n },\n [listeners.focus]\n );\n\n const canGoBack = React.useCallback(() => {\n if (listeners.focus[0] == null) {\n return false;\n }\n\n const { result, handled } = listeners.focus[0]((navigation) =>\n navigation.canGoBack()\n );\n\n if (handled) {\n return result;\n } else {\n return false;\n }\n }, [listeners.focus]);\n\n const resetRoot = React.useCallback(\n (state?: PartialState<NavigationState> | NavigationState) => {\n const target = state?.key ?? keyedListeners.getState.root?.().key;\n\n if (target == null) {\n console.error(NOT_INITIALIZED_ERROR);\n } else {\n listeners.focus[0]((navigation) =>\n navigation.dispatch({\n ...CommonActions.reset(state),\n target,\n })\n );\n }\n },\n [keyedListeners.getState, listeners.focus]\n );\n\n const getRootState = React.useCallback(() => {\n return keyedListeners.getState.root?.();\n }, [keyedListeners.getState]);\n\n const getCurrentRoute = React.useCallback(() => {\n const state = getRootState();\n\n if (state == null) {\n return undefined;\n }\n\n const route = findFocusedRoute(state);\n\n return route as Route<string> | undefined;\n }, [getRootState]);\n\n const emitter = useEventEmitter<NavigationContainerEventMap>();\n\n const { addOptionsGetter, getCurrentOptions } = useOptionsGetters({});\n\n const navigation: NavigationContainerRef<ParamListBase> = React.useMemo(\n () => ({\n ...Object.keys(CommonActions).reduce<any>((acc, name) => {\n acc[name] = (...args: any[]) =>\n // @ts-expect-error: this is ok\n dispatch(CommonActions[name](...args));\n return acc;\n }, {}),\n ...emitter.create('root'),\n dispatch,\n resetRoot,\n isFocused: () => true,\n canGoBack,\n getParent: () => undefined,\n getState: () => stateRef.current,\n getRootState,\n getCurrentRoute,\n getCurrentOptions,\n isReady: () => listeners.focus[0] != null,\n }),\n [\n canGoBack,\n dispatch,\n emitter,\n getCurrentOptions,\n getCurrentRoute,\n getRootState,\n listeners.focus,\n resetRoot,\n ]\n );\n\n React.useImperativeHandle(ref, () => navigation, [navigation]);\n\n const onDispatchAction = React.useCallback(\n (action: NavigationAction, noop: boolean) => {\n emitter.emit({\n type: '__unsafe_action__',\n data: { action, noop, stack: stackRef.current },\n });\n },\n [emitter]\n );\n\n const lastEmittedOptionsRef = React.useRef<object | undefined>();\n\n const onOptionsChange = React.useCallback(\n (options: object) => {\n if (lastEmittedOptionsRef.current === options) {\n return;\n }\n\n lastEmittedOptionsRef.current = options;\n\n emitter.emit({\n type: 'options',\n data: { options },\n });\n },\n [emitter]\n );\n\n const stackRef = React.useRef<string | undefined>();\n\n const builderContext = React.useMemo(\n () => ({\n addListener,\n addKeyedListener,\n onDispatchAction,\n onOptionsChange,\n stackRef,\n }),\n [addListener, addKeyedListener, onDispatchAction, onOptionsChange]\n );\n\n const scheduleContext = React.useMemo(\n () => ({ scheduleUpdate, flushUpdates }),\n [scheduleUpdate, flushUpdates]\n );\n\n const isInitialRef = React.useRef(true);\n\n const getIsInitial = React.useCallback(() => isInitialRef.current, []);\n\n const context = React.useMemo(\n () => ({\n state,\n getState,\n setState,\n getKey,\n setKey,\n getIsInitial,\n addOptionsGetter,\n }),\n [\n state,\n getState,\n setState,\n getKey,\n setKey,\n getIsInitial,\n addOptionsGetter,\n ]\n );\n\n const onStateChangeRef = React.useRef(onStateChange);\n const stateRef = React.useRef(state);\n\n React.useEffect(() => {\n isInitialRef.current = false;\n onStateChangeRef.current = onStateChange;\n stateRef.current = state;\n });\n\n React.useEffect(() => {\n const hydratedState = getRootState();\n\n if (process.env.NODE_ENV !== 'production') {\n if (hydratedState !== undefined) {\n const serializableResult = checkSerializable(hydratedState);\n\n if (!serializableResult.serializable) {\n const { location, reason } = serializableResult;\n\n let path = '';\n let pointer: Record<any, any> = hydratedState;\n let params = false;\n\n for (let i = 0; i < location.length; i++) {\n const curr = location[i];\n const prev = location[i - 1];\n\n pointer = pointer[curr];\n\n if (!params && curr === 'state') {\n continue;\n } else if (!params && curr === 'routes') {\n if (path) {\n path += ' > ';\n }\n } else if (\n !params &&\n typeof curr === 'number' &&\n prev === 'routes'\n ) {\n path += pointer?.name;\n } else if (!params) {\n path += ` > ${curr}`;\n params = true;\n } else {\n if (typeof curr === 'number' || /^[0-9]+$/.test(curr)) {\n path += `[${curr}]`;\n } else if (/^[a-z$_]+$/i.test(curr)) {\n path += `.${curr}`;\n } else {\n path += `[${JSON.stringify(curr)}]`;\n }\n }\n }\n\n const message = `Non-serializable values were found in the navigation state. Check:\\n\\n${path} (${reason})\\n\\nThis can break usage such as persisting and restoring state. This might happen if you passed non-serializable values such as function, class instances etc. in params. If you need to use components with callbacks in your options, you can use 'navigation.setOptions' instead. See https://reactnavigation.org/docs/troubleshooting#i-get-the-warning-non-serializable-values-were-found-in-the-navigation-state for more details.`;\n\n if (!serializableWarnings.includes(message)) {\n serializableWarnings.push(message);\n console.warn(message);\n }\n }\n\n const duplicateRouteNamesResult =\n checkDuplicateRouteNames(hydratedState);\n\n if (duplicateRouteNamesResult.length) {\n const message = `Found screens with the same name nested inside one another. Check:\\n${duplicateRouteNamesResult.map(\n (locations) => `\\n${locations.join(', ')}`\n )}\\n\\nThis can cause confusing behavior during navigation. Consider using unique names for each screen instead.`;\n\n if (!duplicateNameWarnings.includes(message)) {\n duplicateNameWarnings.push(message);\n console.warn(message);\n }\n }\n }\n }\n\n emitter.emit({ type: 'state', data: { state } });\n\n if (!isFirstMountRef.current && onStateChangeRef.current) {\n onStateChangeRef.current(hydratedState);\n }\n\n isFirstMountRef.current = false;\n }, [getRootState, emitter, state]);\n\n const defaultOnUnhandledAction = React.useCallback(\n (action: NavigationAction) => {\n if (process.env.NODE_ENV === 'production') {\n return;\n }\n\n const payload: Record<string, any> | undefined = action.payload;\n\n let message = `The action '${action.type}'${\n payload ? ` with payload ${JSON.stringify(action.payload)}` : ''\n } was not handled by any navigator.`;\n\n switch (action.type) {\n case 'NAVIGATE':\n case 'PUSH':\n case 'REPLACE':\n case 'JUMP_TO':\n if (payload?.name) {\n message += `\\n\\nDo you have a screen named '${payload.name}'?\\n\\nIf you're trying to navigate to a screen in a nested navigator, see https://reactnavigation.org/docs/nesting-navigators#navigating-to-a-screen-in-a-nested-navigator.`;\n } else {\n message += `\\n\\nYou need to pass the name of the screen to navigate to.\\n\\nSee https://reactnavigation.org/docs/navigation-actions for usage.`;\n }\n\n break;\n case 'GO_BACK':\n case 'POP':\n case 'POP_TO_TOP':\n message += `\\n\\nIs there any screen to go back to?`;\n break;\n case 'OPEN_DRAWER':\n case 'CLOSE_DRAWER':\n case 'TOGGLE_DRAWER':\n message += `\\n\\nIs your screen inside a Drawer navigator?`;\n break;\n }\n\n message += `\\n\\nThis is a development-only warning and won't be shown in production.`;\n\n console.error(message);\n },\n []\n );\n\n let element = (\n <NavigationContainerRefContext.Provider value={navigation}>\n <ScheduleUpdateContext.Provider value={scheduleContext}>\n <NavigationBuilderContext.Provider value={builderContext}>\n <NavigationStateContext.Provider value={context}>\n <UnhandledActionContext.Provider\n value={onUnhandledAction ?? defaultOnUnhandledAction}\n >\n <EnsureSingleNavigator>{children}</EnsureSingleNavigator>\n </UnhandledActionContext.Provider>\n </NavigationStateContext.Provider>\n </NavigationBuilderContext.Provider>\n </ScheduleUpdateContext.Provider>\n </NavigationContainerRefContext.Provider>\n );\n\n if (independent) {\n // We need to clear any existing contexts for nested independent container to work correctly\n element = (\n <NavigationRouteContext.Provider value={undefined}>\n <NavigationContext.Provider value={undefined}>\n {element}\n </NavigationContext.Provider>\n </NavigationRouteContext.Provider>\n );\n }\n\n return element;\n }\n);\n\nexport default BaseNavigationContainer;\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* A type of an object that have a route key as an object key
|
|
4
|
+
* and a value whether to prevent that route.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const PreventRemoveContext = /*#__PURE__*/React.createContext(undefined);
|
|
8
|
+
export default PreventRemoveContext;
|
|
9
|
+
//# sourceMappingURL=PreventRemoveContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["PreventRemoveContext.tsx"],"names":["React","PreventRemoveContext","createContext","undefined"],"mappings":"AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAEA;AACA;AACA;AACA;;AAGA,MAAMC,oBAAoB,gBAAGD,KAAK,CAACE,aAAN,CAU3BC,SAV2B,CAA7B;AAYA,eAAeF,oBAAf","sourcesContent":["import * as React from 'react';\n\n/**\n * A type of an object that have a route key as an object key\n * and a value whether to prevent that route.\n */\nexport type PreventedRoutes = Record<string, { preventRemove: boolean }>;\n\nconst PreventRemoveContext = React.createContext<\n | {\n preventedRoutes: PreventedRoutes;\n setPreventRemove: (\n id: string,\n routeKey: string,\n preventRemove: boolean\n ) => void;\n }\n | undefined\n>(undefined);\n\nexport default PreventRemoveContext;\n"]}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { nanoid } from 'nanoid/non-secure';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import useLatestCallback from 'use-latest-callback';
|
|
4
|
+
import NavigationHelpersContext from './NavigationHelpersContext';
|
|
5
|
+
import NavigationRouteContext from './NavigationRouteContext';
|
|
6
|
+
import PreventRemoveContext from './PreventRemoveContext';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Util function to transform map of prevented routes to a simpler object.
|
|
10
|
+
*/
|
|
11
|
+
const transformPreventedRoutes = preventedRoutesMap => {
|
|
12
|
+
const preventedRoutesToTransform = [...preventedRoutesMap.values()];
|
|
13
|
+
const preventedRoutes = preventedRoutesToTransform.reduce((acc, _ref) => {
|
|
14
|
+
var _acc$routeKey;
|
|
15
|
+
|
|
16
|
+
let {
|
|
17
|
+
routeKey,
|
|
18
|
+
preventRemove
|
|
19
|
+
} = _ref;
|
|
20
|
+
acc[routeKey] = {
|
|
21
|
+
preventRemove: ((_acc$routeKey = acc[routeKey]) === null || _acc$routeKey === void 0 ? void 0 : _acc$routeKey.preventRemove) || preventRemove
|
|
22
|
+
};
|
|
23
|
+
return acc;
|
|
24
|
+
}, {});
|
|
25
|
+
return preventedRoutes;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Component used for managing which routes have to be prevented from removal in native-stack.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
export default function PreventRemoveProvider(_ref2) {
|
|
33
|
+
let {
|
|
34
|
+
children
|
|
35
|
+
} = _ref2;
|
|
36
|
+
const [parentId] = React.useState(() => nanoid());
|
|
37
|
+
const [preventedRoutesMap, setPreventedRoutesMap] = React.useState(new Map());
|
|
38
|
+
const navigation = React.useContext(NavigationHelpersContext);
|
|
39
|
+
const route = React.useContext(NavigationRouteContext);
|
|
40
|
+
const preventRemoveContextValue = React.useContext(PreventRemoveContext); // take `setPreventRemove` from parent context - if exist it means we're in a nested context
|
|
41
|
+
|
|
42
|
+
const setParentPrevented = preventRemoveContextValue === null || preventRemoveContextValue === void 0 ? void 0 : preventRemoveContextValue.setPreventRemove;
|
|
43
|
+
const setPreventRemove = useLatestCallback((id, routeKey, preventRemove) => {
|
|
44
|
+
if (preventRemove && (navigation == null || navigation !== null && navigation !== void 0 && navigation.getState().routes.every(route => route.key !== routeKey))) {
|
|
45
|
+
throw new Error(`Couldn't find a route with the key ${routeKey}. Is your component inside NavigationContent?`);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
setPreventedRoutesMap(prevPrevented => {
|
|
49
|
+
var _prevPrevented$get, _prevPrevented$get2;
|
|
50
|
+
|
|
51
|
+
// values haven't changed - do nothing
|
|
52
|
+
if (routeKey === ((_prevPrevented$get = prevPrevented.get(id)) === null || _prevPrevented$get === void 0 ? void 0 : _prevPrevented$get.routeKey) && preventRemove === ((_prevPrevented$get2 = prevPrevented.get(id)) === null || _prevPrevented$get2 === void 0 ? void 0 : _prevPrevented$get2.preventRemove)) {
|
|
53
|
+
return prevPrevented;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const nextPrevented = new Map(prevPrevented);
|
|
57
|
+
|
|
58
|
+
if (preventRemove) {
|
|
59
|
+
nextPrevented.set(id, {
|
|
60
|
+
routeKey,
|
|
61
|
+
preventRemove
|
|
62
|
+
});
|
|
63
|
+
} else {
|
|
64
|
+
nextPrevented.delete(id);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return nextPrevented;
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
const isPrevented = [...preventedRoutesMap.values()].some(_ref3 => {
|
|
71
|
+
let {
|
|
72
|
+
preventRemove
|
|
73
|
+
} = _ref3;
|
|
74
|
+
return preventRemove;
|
|
75
|
+
});
|
|
76
|
+
React.useEffect(() => {
|
|
77
|
+
if ((route === null || route === void 0 ? void 0 : route.key) !== undefined && setParentPrevented !== undefined) {
|
|
78
|
+
// when route is defined (and setParentPrevented) it means we're in a nested stack
|
|
79
|
+
// route.key then will be the route key of parent
|
|
80
|
+
setParentPrevented(parentId, route.key, isPrevented);
|
|
81
|
+
return () => {
|
|
82
|
+
setParentPrevented(parentId, route.key, false);
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return;
|
|
87
|
+
}, [parentId, isPrevented, route === null || route === void 0 ? void 0 : route.key, setParentPrevented]);
|
|
88
|
+
const value = React.useMemo(() => ({
|
|
89
|
+
setPreventRemove,
|
|
90
|
+
preventedRoutes: transformPreventedRoutes(preventedRoutesMap)
|
|
91
|
+
}), [setPreventRemove, preventedRoutesMap]);
|
|
92
|
+
return /*#__PURE__*/React.createElement(PreventRemoveContext.Provider, {
|
|
93
|
+
value: value
|
|
94
|
+
}, children);
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=PreventRemoveProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["PreventRemoveProvider.tsx"],"names":["nanoid","React","useLatestCallback","NavigationHelpersContext","NavigationRouteContext","PreventRemoveContext","transformPreventedRoutes","preventedRoutesMap","preventedRoutesToTransform","values","preventedRoutes","reduce","acc","routeKey","preventRemove","PreventRemoveProvider","children","parentId","useState","setPreventedRoutesMap","Map","navigation","useContext","route","preventRemoveContextValue","setParentPrevented","setPreventRemove","id","getState","routes","every","key","Error","prevPrevented","get","nextPrevented","set","delete","isPrevented","some","useEffect","undefined","value","useMemo"],"mappings":"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","sourcesContent":["import { nanoid } from 'nanoid/non-secure';\nimport * as React from 'react';\nimport useLatestCallback from 'use-latest-callback';\n\nimport NavigationHelpersContext from './NavigationHelpersContext';\nimport NavigationRouteContext from './NavigationRouteContext';\nimport PreventRemoveContext, { PreventedRoutes } from './PreventRemoveContext';\n\ntype Props = {\n children: React.ReactNode;\n};\n\ntype PreventedRoutesMap = Map<\n string,\n {\n routeKey: string;\n preventRemove: boolean;\n }\n>;\n\n/**\n * Util function to transform map of prevented routes to a simpler object.\n */\nconst transformPreventedRoutes = (\n preventedRoutesMap: PreventedRoutesMap\n): PreventedRoutes => {\n const preventedRoutesToTransform = [...preventedRoutesMap.values()];\n\n const preventedRoutes = preventedRoutesToTransform.reduce<PreventedRoutes>(\n (acc, { routeKey, preventRemove }) => {\n acc[routeKey] = {\n preventRemove: acc[routeKey]?.preventRemove || preventRemove,\n };\n return acc;\n },\n {}\n );\n\n return preventedRoutes;\n};\n\n/**\n * Component used for managing which routes have to be prevented from removal in native-stack.\n */\nexport default function PreventRemoveProvider({ children }: Props) {\n const [parentId] = React.useState(() => nanoid());\n const [preventedRoutesMap, setPreventedRoutesMap] =\n React.useState<PreventedRoutesMap>(new Map());\n\n const navigation = React.useContext(NavigationHelpersContext);\n const route = React.useContext(NavigationRouteContext);\n\n const preventRemoveContextValue = React.useContext(PreventRemoveContext);\n // take `setPreventRemove` from parent context - if exist it means we're in a nested context\n const setParentPrevented = preventRemoveContextValue?.setPreventRemove;\n\n const setPreventRemove = useLatestCallback(\n (id: string, routeKey: string, preventRemove: boolean): void => {\n if (\n preventRemove &&\n (navigation == null ||\n navigation\n ?.getState()\n .routes.every((route) => route.key !== routeKey))\n ) {\n throw new Error(\n `Couldn't find a route with the key ${routeKey}. Is your component inside NavigationContent?`\n );\n }\n\n setPreventedRoutesMap((prevPrevented) => {\n // values haven't changed - do nothing\n if (\n routeKey === prevPrevented.get(id)?.routeKey &&\n preventRemove === prevPrevented.get(id)?.preventRemove\n ) {\n return prevPrevented;\n }\n\n const nextPrevented = new Map(prevPrevented);\n\n if (preventRemove) {\n nextPrevented.set(id, {\n routeKey,\n preventRemove,\n });\n } else {\n nextPrevented.delete(id);\n }\n\n return nextPrevented;\n });\n }\n );\n\n const isPrevented = [...preventedRoutesMap.values()].some(\n ({ preventRemove }) => preventRemove\n );\n\n React.useEffect(() => {\n if (route?.key !== undefined && setParentPrevented !== undefined) {\n // when route is defined (and setParentPrevented) it means we're in a nested stack\n // route.key then will be the route key of parent\n setParentPrevented(parentId, route.key, isPrevented);\n return () => {\n setParentPrevented(parentId, route.key, false);\n };\n }\n\n return;\n }, [parentId, isPrevented, route?.key, setParentPrevented]);\n\n const value = React.useMemo(\n () => ({\n setPreventRemove,\n preventedRoutes: transformPreventedRoutes(preventedRoutesMap),\n }),\n [setPreventRemove, preventedRoutesMap]\n );\n\n return (\n <PreventRemoveContext.Provider value={value}>\n {children}\n </PreventRemoveContext.Provider>\n );\n}\n"]}
|
|
@@ -433,7 +433,7 @@ const parseQueryParams = (path, parseConfig) => {
|
|
|
433
433
|
|
|
434
434
|
if (parseConfig) {
|
|
435
435
|
Object.keys(params).forEach(name => {
|
|
436
|
-
if (parseConfig
|
|
436
|
+
if (Object.hasOwnProperty.call(parseConfig, name) && typeof params[name] === 'string') {
|
|
437
437
|
params[name] = parseConfig[name](params[name]);
|
|
438
438
|
}
|
|
439
439
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["getStateFromPath.tsx"],"names":["escape","queryString","findFocusedRoute","validatePathConfig","getStateFromPath","path","options","initialRoutes","initialRouteName","push","parentScreens","screens","remaining","replace","endsWith","undefined","routes","split","filter","Boolean","map","segment","name","decodeURIComponent","length","createNestedStateObject","configs","concat","Object","keys","key","createNormalizedConfigs","sort","a","b","pattern","routeNames","join","localeCompare","startsWith","aParts","bParts","i","Math","max","aWildCard","bWildCard","reduce","acc","config","intersects","every","it","Error","assign","match","find","c","screen","result","current","remainingPath","matchAgainstConfigs","regex","RegExp","source","joinPaths","paths","p","matchedParams","params","value","parse","routeConfig","initials","parentPattern","createConfigItem","exact","forEach","nestedConfig","pop","findParseConfigForRoute","routeName","flatConfig","findInitialRoute","sameParents","createStateObject","initialRoute","route","isEmpty","index","state","shift","nestedState","nestedStateIndex","parseQueryParams","parseConfig","query"],"mappings":"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","sourcesContent":["import type {\n InitialState,\n NavigationState,\n PartialState,\n} from '@react-navigation/routers';\nimport escape from 'escape-string-regexp';\nimport * as queryString from 'query-string';\n\nimport findFocusedRoute from './findFocusedRoute';\nimport type { PathConfigMap } from './types';\nimport validatePathConfig from './validatePathConfig';\n\ntype Options<ParamList extends {}> = {\n initialRouteName?: string;\n screens: PathConfigMap<ParamList>;\n};\n\ntype ParseConfig = Record<string, (value: string) => any>;\n\ntype RouteConfig = {\n screen: string;\n regex?: RegExp;\n path: string;\n pattern: string;\n routeNames: string[];\n parse?: ParseConfig;\n};\n\ntype InitialRouteConfig = {\n initialRouteName: string;\n parentScreens: string[];\n};\n\ntype ResultState = PartialState<NavigationState> & {\n state?: ResultState;\n};\n\ntype ParsedRoute = {\n name: string;\n path?: string;\n params?: Record<string, any> | undefined;\n};\n\n/**\n * Utility to parse a path string to initial state object accepted by the container.\n * This is useful for deep linking when we need to handle the incoming URL.\n *\n * @example\n * ```js\n * getStateFromPath(\n * '/chat/jane/42',\n * {\n * screens: {\n * Chat: {\n * path: 'chat/:author/:id',\n * parse: { id: Number }\n * }\n * }\n * }\n * )\n * ```\n * @param path Path string to parse and convert, e.g. /foo/bar?count=42.\n * @param options Extra options to fine-tune how to parse the path.\n */\nexport default function getStateFromPath<ParamList extends {}>(\n path: string,\n options?: Options<ParamList>\n): ResultState | undefined {\n if (options) {\n validatePathConfig(options);\n }\n\n let initialRoutes: InitialRouteConfig[] = [];\n\n if (options?.initialRouteName) {\n initialRoutes.push({\n initialRouteName: options.initialRouteName,\n parentScreens: [],\n });\n }\n\n const screens = options?.screens;\n\n let remaining = path\n .replace(/\\/+/g, '/') // Replace multiple slash (//) with single ones\n .replace(/^\\//, '') // Remove extra leading slash\n .replace(/\\?.*$/, ''); // Remove query params which we will handle later\n\n // Make sure there is a trailing slash\n remaining = remaining.endsWith('/') ? remaining : `${remaining}/`;\n\n if (screens === undefined) {\n // When no config is specified, use the path segments as route names\n const routes = remaining\n .split('/')\n .filter(Boolean)\n .map((segment) => {\n const name = decodeURIComponent(segment);\n return { name };\n });\n\n if (routes.length) {\n return createNestedStateObject(path, routes, initialRoutes);\n }\n\n return undefined;\n }\n\n // Create a normalized configs array which will be easier to use\n const configs = ([] as RouteConfig[])\n .concat(\n ...Object.keys(screens).map((key) =>\n createNormalizedConfigs(\n key,\n screens as PathConfigMap<object>,\n [],\n initialRoutes,\n []\n )\n )\n )\n .sort((a, b) => {\n // Sort config so that:\n // - the most exhaustive ones are always at the beginning\n // - patterns with wildcard are always at the end\n\n // If 2 patterns are same, move the one with less route names up\n // This is an error state, so it's only useful for consistent error messages\n if (a.pattern === b.pattern) {\n return b.routeNames.join('>').localeCompare(a.routeNames.join('>'));\n }\n\n // If one of the patterns starts with the other, it's more exhaustive\n // So move it up\n if (a.pattern.startsWith(b.pattern)) {\n return -1;\n }\n\n if (b.pattern.startsWith(a.pattern)) {\n return 1;\n }\n\n const aParts = a.pattern.split('/');\n const bParts = b.pattern.split('/');\n\n for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {\n // if b is longer, b get higher priority\n if (aParts[i] == null) {\n return 1;\n }\n // if a is longer, a get higher priority\n if (bParts[i] == null) {\n return -1;\n }\n const aWildCard = aParts[i] === '*' || aParts[i].startsWith(':');\n const bWildCard = bParts[i] === '*' || bParts[i].startsWith(':');\n // if both are wildcard we compare next component\n if (aWildCard && bWildCard) {\n continue;\n }\n // if only a is wild card, b get higher priority\n if (aWildCard) {\n return 1;\n }\n // if only b is wild card, a get higher priority\n if (bWildCard) {\n return -1;\n }\n }\n return bParts.length - aParts.length;\n });\n\n // Check for duplicate patterns in the config\n configs.reduce<Record<string, RouteConfig>>((acc, config) => {\n if (acc[config.pattern]) {\n const a = acc[config.pattern].routeNames;\n const b = config.routeNames;\n\n // It's not a problem if the path string omitted from a inner most screen\n // For example, it's ok if a path resolves to `A > B > C` or `A > B`\n const intersects =\n a.length > b.length\n ? b.every((it, i) => a[i] === it)\n : a.every((it, i) => b[i] === it);\n\n if (!intersects) {\n throw new Error(\n `Found conflicting screens with the same pattern. The pattern '${\n config.pattern\n }' resolves to both '${a.join(' > ')}' and '${b.join(\n ' > '\n )}'. Patterns must be unique and cannot resolve to more than one screen.`\n );\n }\n }\n\n return Object.assign(acc, {\n [config.pattern]: config,\n });\n }, {});\n\n if (remaining === '/') {\n // We need to add special handling of empty path so navigation to empty path also works\n // When handling empty path, we should only look at the root level config\n const match = configs.find(\n (config) =>\n config.path === '' &&\n config.routeNames.every(\n // Make sure that none of the parent configs have a non-empty path defined\n (name) => !configs.find((c) => c.screen === name)?.path\n )\n );\n\n if (match) {\n return createNestedStateObject(\n path,\n match.routeNames.map((name) => ({ name })),\n initialRoutes,\n configs\n );\n }\n\n return undefined;\n }\n\n let result: PartialState<NavigationState> | undefined;\n let current: PartialState<NavigationState> | undefined;\n\n // We match the whole path against the regex instead of segments\n // This makes sure matches such as wildcard will catch any unmatched routes, even if nested\n const { routes, remainingPath } = matchAgainstConfigs(\n remaining,\n configs.map((c) => ({\n ...c,\n // Add `$` to the regex to make sure it matches till end of the path and not just beginning\n regex: c.regex ? new RegExp(c.regex.source + '$') : undefined,\n }))\n );\n\n if (routes !== undefined) {\n // This will always be empty if full path matched\n current = createNestedStateObject(path, routes, initialRoutes, configs);\n remaining = remainingPath;\n result = current;\n }\n\n if (current == null || result == null) {\n return undefined;\n }\n\n return result;\n}\n\nconst joinPaths = (...paths: string[]): string =>\n ([] as string[])\n .concat(...paths.map((p) => p.split('/')))\n .filter(Boolean)\n .join('/');\n\nconst matchAgainstConfigs = (remaining: string, configs: RouteConfig[]) => {\n let routes: ParsedRoute[] | undefined;\n let remainingPath = remaining;\n\n // Go through all configs, and see if the next path segment matches our regex\n for (const config of configs) {\n if (!config.regex) {\n continue;\n }\n\n const match = remainingPath.match(config.regex);\n\n // If our regex matches, we need to extract params from the path\n if (match) {\n const matchedParams = config.pattern\n ?.split('/')\n .filter((p) => p.startsWith(':'))\n .reduce<Record<string, any>>(\n (acc, p, i) =>\n Object.assign(acc, {\n // The param segments appear every second item starting from 2 in the regex match result\n [p]: match![(i + 1) * 2].replace(/\\//, ''),\n }),\n {}\n );\n\n routes = config.routeNames.map((name) => {\n const config = configs.find((c) => c.screen === name);\n const params = config?.path\n ?.split('/')\n .filter((p) => p.startsWith(':'))\n .reduce<Record<string, any>>((acc, p) => {\n const value = matchedParams[p];\n\n if (value) {\n const key = p.replace(/^:/, '').replace(/\\?$/, '');\n acc[key] = config.parse?.[key] ? config.parse[key](value) : value;\n }\n\n return acc;\n }, {});\n\n if (params && Object.keys(params).length) {\n return { name, params };\n }\n\n return { name };\n });\n\n remainingPath = remainingPath.replace(match[1], '');\n\n break;\n }\n }\n\n return { routes, remainingPath };\n};\n\nconst createNormalizedConfigs = (\n screen: string,\n routeConfig: PathConfigMap<object>,\n routeNames: string[] = [],\n initials: InitialRouteConfig[],\n parentScreens: string[],\n parentPattern?: string\n): RouteConfig[] => {\n const configs: RouteConfig[] = [];\n\n routeNames.push(screen);\n\n parentScreens.push(screen);\n\n // @ts-expect-error: we can't strongly typecheck this for now\n const config = routeConfig[screen];\n\n if (typeof config === 'string') {\n // If a string is specified as the value of the key(e.g. Foo: '/path'), use it as the pattern\n const pattern = parentPattern ? joinPaths(parentPattern, config) : config;\n\n configs.push(createConfigItem(screen, routeNames, pattern, config));\n } else if (typeof config === 'object') {\n let pattern: string | undefined;\n\n // if an object is specified as the value (e.g. Foo: { ... }),\n // it can have `path` property and\n // it could have `screens` prop which has nested configs\n if (typeof config.path === 'string') {\n if (config.exact && config.path === undefined) {\n throw new Error(\n \"A 'path' needs to be specified when specifying 'exact: true'. If you don't want this screen in the URL, specify it as empty string, e.g. `path: ''`.\"\n );\n }\n\n pattern =\n config.exact !== true\n ? joinPaths(parentPattern || '', config.path || '')\n : config.path || '';\n\n configs.push(\n createConfigItem(\n screen,\n routeNames,\n pattern!,\n config.path,\n config.parse\n )\n );\n }\n\n if (config.screens) {\n // property `initialRouteName` without `screens` has no purpose\n if (config.initialRouteName) {\n initials.push({\n initialRouteName: config.initialRouteName,\n parentScreens,\n });\n }\n\n Object.keys(config.screens).forEach((nestedConfig) => {\n const result = createNormalizedConfigs(\n nestedConfig,\n config.screens as PathConfigMap<object>,\n routeNames,\n initials,\n [...parentScreens],\n pattern ?? parentPattern\n );\n\n configs.push(...result);\n });\n }\n }\n\n routeNames.pop();\n\n return configs;\n};\n\nconst createConfigItem = (\n screen: string,\n routeNames: string[],\n pattern: string,\n path: string,\n parse?: ParseConfig\n): RouteConfig => {\n // Normalize pattern to remove any leading, trailing slashes, duplicate slashes etc.\n pattern = pattern.split('/').filter(Boolean).join('/');\n\n const regex = pattern\n ? new RegExp(\n `^(${pattern\n .split('/')\n .map((it) => {\n if (it.startsWith(':')) {\n return `(([^/]+\\\\/)${it.endsWith('?') ? '?' : ''})`;\n }\n\n return `${it === '*' ? '.*' : escape(it)}\\\\/`;\n })\n .join('')})`\n )\n : undefined;\n\n return {\n screen,\n regex,\n pattern,\n path,\n // The routeNames array is mutated, so copy it to keep the current state\n routeNames: [...routeNames],\n parse,\n };\n};\n\nconst findParseConfigForRoute = (\n routeName: string,\n flatConfig: RouteConfig[]\n): ParseConfig | undefined => {\n for (const config of flatConfig) {\n if (routeName === config.routeNames[config.routeNames.length - 1]) {\n return config.parse;\n }\n }\n\n return undefined;\n};\n\n// Try to find an initial route connected with the one passed\nconst findInitialRoute = (\n routeName: string,\n parentScreens: string[],\n initialRoutes: InitialRouteConfig[]\n): string | undefined => {\n for (const config of initialRoutes) {\n if (parentScreens.length === config.parentScreens.length) {\n let sameParents = true;\n for (let i = 0; i < parentScreens.length; i++) {\n if (parentScreens[i].localeCompare(config.parentScreens[i]) !== 0) {\n sameParents = false;\n break;\n }\n }\n if (sameParents) {\n return routeName !== config.initialRouteName\n ? config.initialRouteName\n : undefined;\n }\n }\n }\n return undefined;\n};\n\n// returns state object with values depending on whether\n// it is the end of state and if there is initialRoute for this level\nconst createStateObject = (\n initialRoute: string | undefined,\n route: ParsedRoute,\n isEmpty: boolean\n): InitialState => {\n if (isEmpty) {\n if (initialRoute) {\n return {\n index: 1,\n routes: [{ name: initialRoute }, route],\n };\n } else {\n return {\n routes: [route],\n };\n }\n } else {\n if (initialRoute) {\n return {\n index: 1,\n routes: [{ name: initialRoute }, { ...route, state: { routes: [] } }],\n };\n } else {\n return {\n routes: [{ ...route, state: { routes: [] } }],\n };\n }\n }\n};\n\nconst createNestedStateObject = (\n path: string,\n routes: ParsedRoute[],\n initialRoutes: InitialRouteConfig[],\n flatConfig?: RouteConfig[]\n) => {\n let state: InitialState;\n let route = routes.shift() as ParsedRoute;\n const parentScreens: string[] = [];\n\n let initialRoute = findInitialRoute(route.name, parentScreens, initialRoutes);\n\n parentScreens.push(route.name);\n\n state = createStateObject(initialRoute, route, routes.length === 0);\n\n if (routes.length > 0) {\n let nestedState = state;\n\n while ((route = routes.shift() as ParsedRoute)) {\n initialRoute = findInitialRoute(route.name, parentScreens, initialRoutes);\n\n const nestedStateIndex =\n nestedState.index || nestedState.routes.length - 1;\n\n nestedState.routes[nestedStateIndex].state = createStateObject(\n initialRoute,\n route,\n routes.length === 0\n );\n\n if (routes.length > 0) {\n nestedState = nestedState.routes[nestedStateIndex]\n .state as InitialState;\n }\n\n parentScreens.push(route.name);\n }\n }\n\n route = findFocusedRoute(state) as ParsedRoute;\n route.path = path;\n\n const params = parseQueryParams(\n path,\n flatConfig ? findParseConfigForRoute(route.name, flatConfig) : undefined\n );\n\n if (params) {\n route.params = { ...route.params, ...params };\n }\n\n return state;\n};\n\nconst parseQueryParams = (\n path: string,\n parseConfig?: Record<string, (value: string) => any>\n) => {\n const query = path.split('?')[1];\n const params = queryString.parse(query);\n\n if (parseConfig) {\n Object.keys(params).forEach((name) => {\n if (parseConfig[name] && typeof params[name] === 'string') {\n params[name] = parseConfig[name](params[name] as string);\n }\n });\n }\n\n return Object.keys(params).length ? params : undefined;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["getStateFromPath.tsx"],"names":["escape","queryString","findFocusedRoute","validatePathConfig","getStateFromPath","path","options","initialRoutes","initialRouteName","push","parentScreens","screens","remaining","replace","endsWith","undefined","routes","split","filter","Boolean","map","segment","name","decodeURIComponent","length","createNestedStateObject","configs","concat","Object","keys","key","createNormalizedConfigs","sort","a","b","pattern","routeNames","join","localeCompare","startsWith","aParts","bParts","i","Math","max","aWildCard","bWildCard","reduce","acc","config","intersects","every","it","Error","assign","match","find","c","screen","result","current","remainingPath","matchAgainstConfigs","regex","RegExp","source","joinPaths","paths","p","matchedParams","params","value","parse","routeConfig","initials","parentPattern","createConfigItem","exact","forEach","nestedConfig","pop","findParseConfigForRoute","routeName","flatConfig","findInitialRoute","sameParents","createStateObject","initialRoute","route","isEmpty","index","state","shift","nestedState","nestedStateIndex","parseQueryParams","parseConfig","query","hasOwnProperty","call"],"mappings":"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","sourcesContent":["import type {\n InitialState,\n NavigationState,\n PartialState,\n} from '@react-navigation/routers';\nimport escape from 'escape-string-regexp';\nimport * as queryString from 'query-string';\n\nimport findFocusedRoute from './findFocusedRoute';\nimport type { PathConfigMap } from './types';\nimport validatePathConfig from './validatePathConfig';\n\ntype Options<ParamList extends {}> = {\n initialRouteName?: string;\n screens: PathConfigMap<ParamList>;\n};\n\ntype ParseConfig = Record<string, (value: string) => any>;\n\ntype RouteConfig = {\n screen: string;\n regex?: RegExp;\n path: string;\n pattern: string;\n routeNames: string[];\n parse?: ParseConfig;\n};\n\ntype InitialRouteConfig = {\n initialRouteName: string;\n parentScreens: string[];\n};\n\ntype ResultState = PartialState<NavigationState> & {\n state?: ResultState;\n};\n\ntype ParsedRoute = {\n name: string;\n path?: string;\n params?: Record<string, any> | undefined;\n};\n\n/**\n * Utility to parse a path string to initial state object accepted by the container.\n * This is useful for deep linking when we need to handle the incoming URL.\n *\n * @example\n * ```js\n * getStateFromPath(\n * '/chat/jane/42',\n * {\n * screens: {\n * Chat: {\n * path: 'chat/:author/:id',\n * parse: { id: Number }\n * }\n * }\n * }\n * )\n * ```\n * @param path Path string to parse and convert, e.g. /foo/bar?count=42.\n * @param options Extra options to fine-tune how to parse the path.\n */\nexport default function getStateFromPath<ParamList extends {}>(\n path: string,\n options?: Options<ParamList>\n): ResultState | undefined {\n if (options) {\n validatePathConfig(options);\n }\n\n let initialRoutes: InitialRouteConfig[] = [];\n\n if (options?.initialRouteName) {\n initialRoutes.push({\n initialRouteName: options.initialRouteName,\n parentScreens: [],\n });\n }\n\n const screens = options?.screens;\n\n let remaining = path\n .replace(/\\/+/g, '/') // Replace multiple slash (//) with single ones\n .replace(/^\\//, '') // Remove extra leading slash\n .replace(/\\?.*$/, ''); // Remove query params which we will handle later\n\n // Make sure there is a trailing slash\n remaining = remaining.endsWith('/') ? remaining : `${remaining}/`;\n\n if (screens === undefined) {\n // When no config is specified, use the path segments as route names\n const routes = remaining\n .split('/')\n .filter(Boolean)\n .map((segment) => {\n const name = decodeURIComponent(segment);\n return { name };\n });\n\n if (routes.length) {\n return createNestedStateObject(path, routes, initialRoutes);\n }\n\n return undefined;\n }\n\n // Create a normalized configs array which will be easier to use\n const configs = ([] as RouteConfig[])\n .concat(\n ...Object.keys(screens).map((key) =>\n createNormalizedConfigs(\n key,\n screens as PathConfigMap<object>,\n [],\n initialRoutes,\n []\n )\n )\n )\n .sort((a, b) => {\n // Sort config so that:\n // - the most exhaustive ones are always at the beginning\n // - patterns with wildcard are always at the end\n\n // If 2 patterns are same, move the one with less route names up\n // This is an error state, so it's only useful for consistent error messages\n if (a.pattern === b.pattern) {\n return b.routeNames.join('>').localeCompare(a.routeNames.join('>'));\n }\n\n // If one of the patterns starts with the other, it's more exhaustive\n // So move it up\n if (a.pattern.startsWith(b.pattern)) {\n return -1;\n }\n\n if (b.pattern.startsWith(a.pattern)) {\n return 1;\n }\n\n const aParts = a.pattern.split('/');\n const bParts = b.pattern.split('/');\n\n for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {\n // if b is longer, b get higher priority\n if (aParts[i] == null) {\n return 1;\n }\n // if a is longer, a get higher priority\n if (bParts[i] == null) {\n return -1;\n }\n const aWildCard = aParts[i] === '*' || aParts[i].startsWith(':');\n const bWildCard = bParts[i] === '*' || bParts[i].startsWith(':');\n // if both are wildcard we compare next component\n if (aWildCard && bWildCard) {\n continue;\n }\n // if only a is wild card, b get higher priority\n if (aWildCard) {\n return 1;\n }\n // if only b is wild card, a get higher priority\n if (bWildCard) {\n return -1;\n }\n }\n return bParts.length - aParts.length;\n });\n\n // Check for duplicate patterns in the config\n configs.reduce<Record<string, RouteConfig>>((acc, config) => {\n if (acc[config.pattern]) {\n const a = acc[config.pattern].routeNames;\n const b = config.routeNames;\n\n // It's not a problem if the path string omitted from a inner most screen\n // For example, it's ok if a path resolves to `A > B > C` or `A > B`\n const intersects =\n a.length > b.length\n ? b.every((it, i) => a[i] === it)\n : a.every((it, i) => b[i] === it);\n\n if (!intersects) {\n throw new Error(\n `Found conflicting screens with the same pattern. The pattern '${\n config.pattern\n }' resolves to both '${a.join(' > ')}' and '${b.join(\n ' > '\n )}'. Patterns must be unique and cannot resolve to more than one screen.`\n );\n }\n }\n\n return Object.assign(acc, {\n [config.pattern]: config,\n });\n }, {});\n\n if (remaining === '/') {\n // We need to add special handling of empty path so navigation to empty path also works\n // When handling empty path, we should only look at the root level config\n const match = configs.find(\n (config) =>\n config.path === '' &&\n config.routeNames.every(\n // Make sure that none of the parent configs have a non-empty path defined\n (name) => !configs.find((c) => c.screen === name)?.path\n )\n );\n\n if (match) {\n return createNestedStateObject(\n path,\n match.routeNames.map((name) => ({ name })),\n initialRoutes,\n configs\n );\n }\n\n return undefined;\n }\n\n let result: PartialState<NavigationState> | undefined;\n let current: PartialState<NavigationState> | undefined;\n\n // We match the whole path against the regex instead of segments\n // This makes sure matches such as wildcard will catch any unmatched routes, even if nested\n const { routes, remainingPath } = matchAgainstConfigs(\n remaining,\n configs.map((c) => ({\n ...c,\n // Add `$` to the regex to make sure it matches till end of the path and not just beginning\n regex: c.regex ? new RegExp(c.regex.source + '$') : undefined,\n }))\n );\n\n if (routes !== undefined) {\n // This will always be empty if full path matched\n current = createNestedStateObject(path, routes, initialRoutes, configs);\n remaining = remainingPath;\n result = current;\n }\n\n if (current == null || result == null) {\n return undefined;\n }\n\n return result;\n}\n\nconst joinPaths = (...paths: string[]): string =>\n ([] as string[])\n .concat(...paths.map((p) => p.split('/')))\n .filter(Boolean)\n .join('/');\n\nconst matchAgainstConfigs = (remaining: string, configs: RouteConfig[]) => {\n let routes: ParsedRoute[] | undefined;\n let remainingPath = remaining;\n\n // Go through all configs, and see if the next path segment matches our regex\n for (const config of configs) {\n if (!config.regex) {\n continue;\n }\n\n const match = remainingPath.match(config.regex);\n\n // If our regex matches, we need to extract params from the path\n if (match) {\n const matchedParams = config.pattern\n ?.split('/')\n .filter((p) => p.startsWith(':'))\n .reduce<Record<string, any>>(\n (acc, p, i) =>\n Object.assign(acc, {\n // The param segments appear every second item starting from 2 in the regex match result\n [p]: match![(i + 1) * 2].replace(/\\//, ''),\n }),\n {}\n );\n\n routes = config.routeNames.map((name) => {\n const config = configs.find((c) => c.screen === name);\n const params = config?.path\n ?.split('/')\n .filter((p) => p.startsWith(':'))\n .reduce<Record<string, any>>((acc, p) => {\n const value = matchedParams[p];\n\n if (value) {\n const key = p.replace(/^:/, '').replace(/\\?$/, '');\n acc[key] = config.parse?.[key] ? config.parse[key](value) : value;\n }\n\n return acc;\n }, {});\n\n if (params && Object.keys(params).length) {\n return { name, params };\n }\n\n return { name };\n });\n\n remainingPath = remainingPath.replace(match[1], '');\n\n break;\n }\n }\n\n return { routes, remainingPath };\n};\n\nconst createNormalizedConfigs = (\n screen: string,\n routeConfig: PathConfigMap<object>,\n routeNames: string[] = [],\n initials: InitialRouteConfig[],\n parentScreens: string[],\n parentPattern?: string\n): RouteConfig[] => {\n const configs: RouteConfig[] = [];\n\n routeNames.push(screen);\n\n parentScreens.push(screen);\n\n // @ts-expect-error: we can't strongly typecheck this for now\n const config = routeConfig[screen];\n\n if (typeof config === 'string') {\n // If a string is specified as the value of the key(e.g. Foo: '/path'), use it as the pattern\n const pattern = parentPattern ? joinPaths(parentPattern, config) : config;\n\n configs.push(createConfigItem(screen, routeNames, pattern, config));\n } else if (typeof config === 'object') {\n let pattern: string | undefined;\n\n // if an object is specified as the value (e.g. Foo: { ... }),\n // it can have `path` property and\n // it could have `screens` prop which has nested configs\n if (typeof config.path === 'string') {\n if (config.exact && config.path === undefined) {\n throw new Error(\n \"A 'path' needs to be specified when specifying 'exact: true'. If you don't want this screen in the URL, specify it as empty string, e.g. `path: ''`.\"\n );\n }\n\n pattern =\n config.exact !== true\n ? joinPaths(parentPattern || '', config.path || '')\n : config.path || '';\n\n configs.push(\n createConfigItem(\n screen,\n routeNames,\n pattern!,\n config.path,\n config.parse\n )\n );\n }\n\n if (config.screens) {\n // property `initialRouteName` without `screens` has no purpose\n if (config.initialRouteName) {\n initials.push({\n initialRouteName: config.initialRouteName,\n parentScreens,\n });\n }\n\n Object.keys(config.screens).forEach((nestedConfig) => {\n const result = createNormalizedConfigs(\n nestedConfig,\n config.screens as PathConfigMap<object>,\n routeNames,\n initials,\n [...parentScreens],\n pattern ?? parentPattern\n );\n\n configs.push(...result);\n });\n }\n }\n\n routeNames.pop();\n\n return configs;\n};\n\nconst createConfigItem = (\n screen: string,\n routeNames: string[],\n pattern: string,\n path: string,\n parse?: ParseConfig\n): RouteConfig => {\n // Normalize pattern to remove any leading, trailing slashes, duplicate slashes etc.\n pattern = pattern.split('/').filter(Boolean).join('/');\n\n const regex = pattern\n ? new RegExp(\n `^(${pattern\n .split('/')\n .map((it) => {\n if (it.startsWith(':')) {\n return `(([^/]+\\\\/)${it.endsWith('?') ? '?' : ''})`;\n }\n\n return `${it === '*' ? '.*' : escape(it)}\\\\/`;\n })\n .join('')})`\n )\n : undefined;\n\n return {\n screen,\n regex,\n pattern,\n path,\n // The routeNames array is mutated, so copy it to keep the current state\n routeNames: [...routeNames],\n parse,\n };\n};\n\nconst findParseConfigForRoute = (\n routeName: string,\n flatConfig: RouteConfig[]\n): ParseConfig | undefined => {\n for (const config of flatConfig) {\n if (routeName === config.routeNames[config.routeNames.length - 1]) {\n return config.parse;\n }\n }\n\n return undefined;\n};\n\n// Try to find an initial route connected with the one passed\nconst findInitialRoute = (\n routeName: string,\n parentScreens: string[],\n initialRoutes: InitialRouteConfig[]\n): string | undefined => {\n for (const config of initialRoutes) {\n if (parentScreens.length === config.parentScreens.length) {\n let sameParents = true;\n for (let i = 0; i < parentScreens.length; i++) {\n if (parentScreens[i].localeCompare(config.parentScreens[i]) !== 0) {\n sameParents = false;\n break;\n }\n }\n if (sameParents) {\n return routeName !== config.initialRouteName\n ? config.initialRouteName\n : undefined;\n }\n }\n }\n return undefined;\n};\n\n// returns state object with values depending on whether\n// it is the end of state and if there is initialRoute for this level\nconst createStateObject = (\n initialRoute: string | undefined,\n route: ParsedRoute,\n isEmpty: boolean\n): InitialState => {\n if (isEmpty) {\n if (initialRoute) {\n return {\n index: 1,\n routes: [{ name: initialRoute }, route],\n };\n } else {\n return {\n routes: [route],\n };\n }\n } else {\n if (initialRoute) {\n return {\n index: 1,\n routes: [{ name: initialRoute }, { ...route, state: { routes: [] } }],\n };\n } else {\n return {\n routes: [{ ...route, state: { routes: [] } }],\n };\n }\n }\n};\n\nconst createNestedStateObject = (\n path: string,\n routes: ParsedRoute[],\n initialRoutes: InitialRouteConfig[],\n flatConfig?: RouteConfig[]\n) => {\n let state: InitialState;\n let route = routes.shift() as ParsedRoute;\n const parentScreens: string[] = [];\n\n let initialRoute = findInitialRoute(route.name, parentScreens, initialRoutes);\n\n parentScreens.push(route.name);\n\n state = createStateObject(initialRoute, route, routes.length === 0);\n\n if (routes.length > 0) {\n let nestedState = state;\n\n while ((route = routes.shift() as ParsedRoute)) {\n initialRoute = findInitialRoute(route.name, parentScreens, initialRoutes);\n\n const nestedStateIndex =\n nestedState.index || nestedState.routes.length - 1;\n\n nestedState.routes[nestedStateIndex].state = createStateObject(\n initialRoute,\n route,\n routes.length === 0\n );\n\n if (routes.length > 0) {\n nestedState = nestedState.routes[nestedStateIndex]\n .state as InitialState;\n }\n\n parentScreens.push(route.name);\n }\n }\n\n route = findFocusedRoute(state) as ParsedRoute;\n route.path = path;\n\n const params = parseQueryParams(\n path,\n flatConfig ? findParseConfigForRoute(route.name, flatConfig) : undefined\n );\n\n if (params) {\n route.params = { ...route.params, ...params };\n }\n\n return state;\n};\n\nconst parseQueryParams = (\n path: string,\n parseConfig?: Record<string, (value: string) => any>\n) => {\n const query = path.split('?')[1];\n const params = queryString.parse(query);\n\n if (parseConfig) {\n Object.keys(params).forEach((name) => {\n if (\n Object.hasOwnProperty.call(parseConfig, name) &&\n typeof params[name] === 'string'\n ) {\n params[name] = parseConfig[name](params[name] as string);\n }\n });\n }\n\n return Object.keys(params).length ? params : undefined;\n};\n"]}
|
package/lib/module/index.js
CHANGED
|
@@ -11,6 +11,8 @@ export { default as NavigationContainerRefContext } from './NavigationContainerR
|
|
|
11
11
|
export { default as NavigationContext } from './NavigationContext';
|
|
12
12
|
export { default as NavigationHelpersContext } from './NavigationHelpersContext';
|
|
13
13
|
export { default as NavigationRouteContext } from './NavigationRouteContext';
|
|
14
|
+
export { default as PreventRemoveContext } from './PreventRemoveContext';
|
|
15
|
+
export { default as PreventRemoveProvider } from './PreventRemoveProvider';
|
|
14
16
|
export * from './types';
|
|
15
17
|
export { default as useFocusEffect } from './useFocusEffect';
|
|
16
18
|
export { default as useIsFocused } from './useIsFocused';
|
|
@@ -18,6 +20,8 @@ export { default as useNavigation } from './useNavigation';
|
|
|
18
20
|
export { default as useNavigationBuilder } from './useNavigationBuilder';
|
|
19
21
|
export { default as useNavigationContainerRef } from './useNavigationContainerRef';
|
|
20
22
|
export { default as useNavigationState } from './useNavigationState';
|
|
23
|
+
export { default as UNSTABLE_usePreventRemove } from './usePreventRemove';
|
|
24
|
+
export { default as usePreventRemoveContext } from './usePreventRemoveContext';
|
|
21
25
|
export { default as useRoute } from './useRoute';
|
|
22
26
|
export { default as validatePathConfig } from './validatePathConfig';
|
|
23
27
|
export * from '@react-navigation/routers';
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.tsx"],"names":["default","BaseNavigationContainer","createNavigationContainerRef","createNavigatorFactory","CurrentRenderContext","findFocusedRoute","getActionFromState","getFocusedRouteNameFromRoute","getPathFromState","getStateFromPath","NavigationContainerRefContext","NavigationContext","NavigationHelpersContext","NavigationRouteContext","useFocusEffect","useIsFocused","useNavigation","useNavigationBuilder","useNavigationContainerRef","useNavigationState","useRoute","validatePathConfig"],"mappings":"AAAA,SAASA,OAAO,IAAIC,uBAApB,QAAmD,2BAAnD;AACA,SAASD,OAAO,IAAIE,4BAApB,QAAwD,gCAAxD;AACA,SAASF,OAAO,IAAIG,sBAApB,QAAkD,0BAAlD;AACA,SAASH,OAAO,IAAII,oBAApB,QAAgD,wBAAhD;AACA,SAASJ,OAAO,IAAIK,gBAApB,QAA4C,oBAA5C;AACA,SAASL,OAAO,IAAIM,kBAApB,QAA8C,sBAA9C;AACA,SAASN,OAAO,IAAIO,4BAApB,QAAwD,gCAAxD;AACA,SAASP,OAAO,IAAIQ,gBAApB,QAA4C,oBAA5C;AACA,SAASR,OAAO,IAAIS,gBAApB,QAA4C,oBAA5C;AACA,SAAST,OAAO,IAAIU,6BAApB,QAAyD,iCAAzD;AACA,SAASV,OAAO,IAAIW,iBAApB,QAA6C,qBAA7C;AACA,SAASX,OAAO,IAAIY,wBAApB,QAAoD,4BAApD;AACA,SAASZ,OAAO,IAAIa,sBAApB,QAAkD,0BAAlD;AACA,cAAc,SAAd;AACA,
|
|
1
|
+
{"version":3,"sources":["index.tsx"],"names":["default","BaseNavigationContainer","createNavigationContainerRef","createNavigatorFactory","CurrentRenderContext","findFocusedRoute","getActionFromState","getFocusedRouteNameFromRoute","getPathFromState","getStateFromPath","NavigationContainerRefContext","NavigationContext","NavigationHelpersContext","NavigationRouteContext","PreventRemoveContext","PreventRemoveProvider","useFocusEffect","useIsFocused","useNavigation","useNavigationBuilder","useNavigationContainerRef","useNavigationState","UNSTABLE_usePreventRemove","usePreventRemoveContext","useRoute","validatePathConfig"],"mappings":"AAAA,SAASA,OAAO,IAAIC,uBAApB,QAAmD,2BAAnD;AACA,SAASD,OAAO,IAAIE,4BAApB,QAAwD,gCAAxD;AACA,SAASF,OAAO,IAAIG,sBAApB,QAAkD,0BAAlD;AACA,SAASH,OAAO,IAAII,oBAApB,QAAgD,wBAAhD;AACA,SAASJ,OAAO,IAAIK,gBAApB,QAA4C,oBAA5C;AACA,SAASL,OAAO,IAAIM,kBAApB,QAA8C,sBAA9C;AACA,SAASN,OAAO,IAAIO,4BAApB,QAAwD,gCAAxD;AACA,SAASP,OAAO,IAAIQ,gBAApB,QAA4C,oBAA5C;AACA,SAASR,OAAO,IAAIS,gBAApB,QAA4C,oBAA5C;AACA,SAAST,OAAO,IAAIU,6BAApB,QAAyD,iCAAzD;AACA,SAASV,OAAO,IAAIW,iBAApB,QAA6C,qBAA7C;AACA,SAASX,OAAO,IAAIY,wBAApB,QAAoD,4BAApD;AACA,SAASZ,OAAO,IAAIa,sBAApB,QAAkD,0BAAlD;AACA,SAASb,OAAO,IAAIc,oBAApB,QAAgD,wBAAhD;AACA,SAASd,OAAO,IAAIe,qBAApB,QAAiD,yBAAjD;AACA,cAAc,SAAd;AACA,SAASf,OAAO,IAAIgB,cAApB,QAA0C,kBAA1C;AACA,SAAShB,OAAO,IAAIiB,YAApB,QAAwC,gBAAxC;AACA,SAASjB,OAAO,IAAIkB,aAApB,QAAyC,iBAAzC;AACA,SAASlB,OAAO,IAAImB,oBAApB,QAAgD,wBAAhD;AACA,SAASnB,OAAO,IAAIoB,yBAApB,QAAqD,6BAArD;AACA,SAASpB,OAAO,IAAIqB,kBAApB,QAA8C,sBAA9C;AACA,SAASrB,OAAO,IAAIsB,yBAApB,QAAqD,oBAArD;AACA,SAAStB,OAAO,IAAIuB,uBAApB,QAAmD,2BAAnD;AACA,SAASvB,OAAO,IAAIwB,QAApB,QAAoC,YAApC;AACA,SAASxB,OAAO,IAAIyB,kBAApB,QAA8C,sBAA9C;AACA,cAAc,2BAAd","sourcesContent":["export { default as BaseNavigationContainer } from './BaseNavigationContainer';\nexport { default as createNavigationContainerRef } from './createNavigationContainerRef';\nexport { default as createNavigatorFactory } from './createNavigatorFactory';\nexport { default as CurrentRenderContext } from './CurrentRenderContext';\nexport { default as findFocusedRoute } from './findFocusedRoute';\nexport { default as getActionFromState } from './getActionFromState';\nexport { default as getFocusedRouteNameFromRoute } from './getFocusedRouteNameFromRoute';\nexport { default as getPathFromState } from './getPathFromState';\nexport { default as getStateFromPath } from './getStateFromPath';\nexport { default as NavigationContainerRefContext } from './NavigationContainerRefContext';\nexport { default as NavigationContext } from './NavigationContext';\nexport { default as NavigationHelpersContext } from './NavigationHelpersContext';\nexport { default as NavigationRouteContext } from './NavigationRouteContext';\nexport { default as PreventRemoveContext } from './PreventRemoveContext';\nexport { default as PreventRemoveProvider } from './PreventRemoveProvider';\nexport * from './types';\nexport { default as useFocusEffect } from './useFocusEffect';\nexport { default as useIsFocused } from './useIsFocused';\nexport { default as useNavigation } from './useNavigation';\nexport { default as useNavigationBuilder } from './useNavigationBuilder';\nexport { default as useNavigationContainerRef } from './useNavigationContainerRef';\nexport { default as useNavigationState } from './useNavigationState';\nexport { default as UNSTABLE_usePreventRemove } from './usePreventRemove';\nexport { default as usePreventRemoveContext } from './usePreventRemoveContext';\nexport { default as useRoute } from './useRoute';\nexport { default as validatePathConfig } from './validatePathConfig';\nexport * from '@react-navigation/routers';\n"]}
|