@react-navigation/native 6.1.0 → 6.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/Link.js +2 -12
- package/lib/commonjs/Link.js.map +1 -1
- package/lib/commonjs/LinkingContext.js +0 -4
- package/lib/commonjs/LinkingContext.js.map +1 -1
- package/lib/commonjs/NavigationContainer.js +9 -31
- package/lib/commonjs/NavigationContainer.js.map +1 -1
- package/lib/commonjs/ServerContainer.js +2 -12
- package/lib/commonjs/ServerContainer.js.map +1 -1
- package/lib/commonjs/ServerContext.js +0 -4
- package/lib/commonjs/ServerContext.js.map +1 -1
- package/lib/commonjs/createMemoryHistory.js +29 -54
- package/lib/commonjs/createMemoryHistory.js.map +1 -1
- package/lib/commonjs/extractPathFromURL.js +2 -8
- package/lib/commonjs/extractPathFromURL.js.map +1 -1
- package/lib/commonjs/index.js +0 -17
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/theming/DarkTheme.js.map +1 -1
- package/lib/commonjs/theming/DefaultTheme.js.map +1 -1
- package/lib/commonjs/theming/ThemeContext.js +0 -6
- package/lib/commonjs/theming/ThemeContext.js.map +1 -1
- package/lib/commonjs/theming/ThemeProvider.js +0 -6
- package/lib/commonjs/theming/ThemeProvider.js.map +1 -1
- package/lib/commonjs/theming/useTheme.js +0 -6
- package/lib/commonjs/theming/useTheme.js.map +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/useBackButton.js +0 -9
- package/lib/commonjs/useBackButton.js.map +1 -1
- package/lib/commonjs/useDocumentTitle.js +1 -12
- package/lib/commonjs/useDocumentTitle.js.map +1 -1
- package/lib/commonjs/useDocumentTitle.native.js +2 -2
- package/lib/commonjs/useDocumentTitle.native.js.map +1 -1
- package/lib/commonjs/useLinkBuilder.js +5 -15
- package/lib/commonjs/useLinkBuilder.js.map +1 -1
- package/lib/commonjs/useLinkProps.js +8 -24
- package/lib/commonjs/useLinkProps.js.map +1 -1
- package/lib/commonjs/useLinkTo.js +0 -12
- package/lib/commonjs/useLinkTo.js.map +1 -1
- package/lib/commonjs/useLinking.js +35 -79
- package/lib/commonjs/useLinking.js.map +1 -1
- package/lib/commonjs/useLinking.native.js +9 -36
- package/lib/commonjs/useLinking.native.js.map +1 -1
- package/lib/commonjs/useScrollToTop.js +10 -17
- package/lib/commonjs/useScrollToTop.js.map +1 -1
- package/lib/commonjs/useThenable.js +2 -9
- package/lib/commonjs/useThenable.js.map +1 -1
- package/lib/module/Link.js +2 -6
- package/lib/module/Link.js.map +1 -1
- package/lib/module/LinkingContext.js.map +1 -1
- package/lib/module/NavigationContainer.js +9 -18
- package/lib/module/NavigationContainer.js.map +1 -1
- package/lib/module/ServerContainer.js +2 -5
- package/lib/module/ServerContainer.js.map +1 -1
- package/lib/module/ServerContext.js.map +1 -1
- package/lib/module/createMemoryHistory.js +29 -52
- package/lib/module/createMemoryHistory.js.map +1 -1
- package/lib/module/extractPathFromURL.js +2 -5
- package/lib/module/extractPathFromURL.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/theming/DarkTheme.js.map +1 -1
- package/lib/module/theming/DefaultTheme.js.map +1 -1
- package/lib/module/theming/ThemeContext.js.map +1 -1
- package/lib/module/theming/ThemeProvider.js.map +1 -1
- package/lib/module/theming/useTheme.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/module/useBackButton.js +0 -3
- package/lib/module/useBackButton.js.map +1 -1
- package/lib/module/useDocumentTitle.js +1 -9
- package/lib/module/useDocumentTitle.js.map +1 -1
- package/lib/module/useDocumentTitle.native.js +2 -1
- package/lib/module/useDocumentTitle.native.js.map +1 -1
- package/lib/module/useLinkBuilder.js +5 -9
- package/lib/module/useLinkBuilder.js.map +1 -1
- package/lib/module/useLinkProps.js +8 -16
- package/lib/module/useLinkProps.js.map +1 -1
- package/lib/module/useLinkTo.js +0 -5
- package/lib/module/useLinkTo.js.map +1 -1
- package/lib/module/useLinking.js +35 -70
- package/lib/module/useLinking.js.map +1 -1
- package/lib/module/useLinking.native.js +9 -26
- package/lib/module/useLinking.native.js.map +1 -1
- package/lib/module/useScrollToTop.js +10 -13
- package/lib/module/useScrollToTop.js.map +1 -1
- package/lib/module/useThenable.js +2 -5
- package/lib/module/useThenable.js.map +1 -1
- package/lib/typescript/src/Link.d.ts +1 -0
- package/lib/typescript/src/Link.d.ts.map +1 -0
- package/lib/typescript/src/LinkingContext.d.ts +1 -0
- package/lib/typescript/src/LinkingContext.d.ts.map +1 -0
- package/lib/typescript/src/NavigationContainer.d.ts +1 -0
- package/lib/typescript/src/NavigationContainer.d.ts.map +1 -0
- package/lib/typescript/src/ServerContainer.d.ts +1 -0
- package/lib/typescript/src/ServerContainer.d.ts.map +1 -0
- package/lib/typescript/src/ServerContext.d.ts +1 -0
- package/lib/typescript/src/ServerContext.d.ts.map +1 -0
- package/lib/typescript/src/__mocks__/window.d.ts +1 -0
- package/lib/typescript/src/__mocks__/window.d.ts.map +1 -0
- package/lib/typescript/src/createMemoryHistory.d.ts +1 -0
- package/lib/typescript/src/createMemoryHistory.d.ts.map +1 -0
- package/lib/typescript/src/extractPathFromURL.d.ts +1 -0
- package/lib/typescript/src/extractPathFromURL.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +1 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/theming/DarkTheme.d.ts +1 -0
- package/lib/typescript/src/theming/DarkTheme.d.ts.map +1 -0
- package/lib/typescript/src/theming/DefaultTheme.d.ts +1 -0
- package/lib/typescript/src/theming/DefaultTheme.d.ts.map +1 -0
- package/lib/typescript/src/theming/ThemeContext.d.ts +1 -0
- package/lib/typescript/src/theming/ThemeContext.d.ts.map +1 -0
- package/lib/typescript/src/theming/ThemeProvider.d.ts +1 -0
- package/lib/typescript/src/theming/ThemeProvider.d.ts.map +1 -0
- package/lib/typescript/src/theming/useTheme.d.ts +1 -0
- package/lib/typescript/src/theming/useTheme.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +1 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/lib/typescript/src/useBackButton.d.ts +1 -0
- package/lib/typescript/src/useBackButton.d.ts.map +1 -0
- package/lib/typescript/src/useDocumentTitle.d.ts +1 -0
- package/lib/typescript/src/useDocumentTitle.d.ts.map +1 -0
- package/lib/typescript/src/useDocumentTitle.native.d.ts +1 -0
- package/lib/typescript/src/useDocumentTitle.native.d.ts.map +1 -0
- package/lib/typescript/src/useLinkBuilder.d.ts +1 -0
- package/lib/typescript/src/useLinkBuilder.d.ts.map +1 -0
- package/lib/typescript/src/useLinkProps.d.ts +1 -0
- package/lib/typescript/src/useLinkProps.d.ts.map +1 -0
- package/lib/typescript/src/useLinkTo.d.ts +1 -0
- package/lib/typescript/src/useLinkTo.d.ts.map +1 -0
- package/lib/typescript/src/useLinking.d.ts +1 -0
- package/lib/typescript/src/useLinking.d.ts.map +1 -0
- package/lib/typescript/src/useLinking.native.d.ts +1 -0
- package/lib/typescript/src/useLinking.native.d.ts.map +1 -0
- package/lib/typescript/src/useScrollToTop.d.ts +1 -0
- package/lib/typescript/src/useScrollToTop.d.ts.map +1 -0
- package/lib/typescript/src/useThenable.d.ts +1 -0
- package/lib/typescript/src/useThenable.d.ts.map +1 -0
- package/package.json +4 -4
- package/src/useScrollToTop.tsx +6 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useLinkTo","navigation","React","useContext","NavigationContainerRefContext","linking","LinkingContext","linkTo","useCallback","to","undefined","Error","navigate","screen","params","startsWith","options","state","getStateFromPath","config","action","getActionFromState","dispatch","reset"],"
|
|
1
|
+
{"version":3,"names":["useLinkTo","navigation","React","useContext","NavigationContainerRefContext","linking","LinkingContext","linkTo","useCallback","to","undefined","Error","navigate","screen","params","startsWith","options","state","getStateFromPath","config","action","getActionFromState","dispatch","reset"],"sourceRoot":"../../src","sources":["useLinkTo.tsx"],"mappings":";;;;;;AAAA;AAKA;AAEA;AAA8C;AAAA;AAAA;AAiB/B,SAASA,SAAS,GAE7B;EACF,MAAMC,UAAU,GAAGC,KAAK,CAACC,UAAU,CAACC,mCAA6B,CAAC;EAClE,MAAMC,OAAO,GAAGH,KAAK,CAACC,UAAU,CAACG,uBAAc,CAAC;EAEhD,MAAMC,MAAM,GAAGL,KAAK,CAACM,WAAW,CAC7BC,EAAiB,IAAK;IACrB,IAAIR,UAAU,KAAKS,SAAS,EAAE;MAC5B,MAAM,IAAIC,KAAK,CACb,kFAAkF,CACnF;IACH;IAEA,IAAI,OAAOF,EAAE,KAAK,QAAQ,EAAE;MAC1B;MACAR,UAAU,CAACW,QAAQ,CAACH,EAAE,CAACI,MAAM,EAAEJ,EAAE,CAACK,MAAM,CAAC;MACzC;IACF;IAEA,IAAI,CAACL,EAAE,CAACM,UAAU,CAAC,GAAG,CAAC,EAAE;MACvB,MAAM,IAAIJ,KAAK,CAAE,iCAAgCF,EAAG,IAAG,CAAC;IAC1D;IAEA,MAAM;MAAEO;IAAQ,CAAC,GAAGX,OAAO;IAE3B,MAAMY,KAAK,GAAGD,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEE,gBAAgB,GACnCF,OAAO,CAACE,gBAAgB,CAACT,EAAE,EAAEO,OAAO,CAACG,MAAM,CAAC,GAC5C,IAAAD,sBAAgB,EAACT,EAAE,EAAEO,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEG,MAAM,CAAC;IAEzC,IAAIF,KAAK,EAAE;MACT,MAAMG,MAAM,GAAG,IAAAC,wBAAkB,EAACJ,KAAK,EAAED,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEG,MAAM,CAAC;MAEzD,IAAIC,MAAM,KAAKV,SAAS,EAAE;QACxBT,UAAU,CAACqB,QAAQ,CAACF,MAAM,CAAC;MAC7B,CAAC,MAAM;QACLnB,UAAU,CAACsB,KAAK,CAACN,KAAK,CAAC;MACzB;IACF,CAAC,MAAM;MACL,MAAM,IAAIN,KAAK,CAAC,iDAAiD,CAAC;IACpE;EACF,CAAC,EACD,CAACN,OAAO,EAAEJ,UAAU,CAAC,CACtB;EAED,OAAOM,MAAM;AACf"}
|
|
@@ -4,23 +4,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = useLinking;
|
|
7
|
-
|
|
8
7
|
var _core = require("@react-navigation/core");
|
|
9
|
-
|
|
10
8
|
var _fastDeepEqual = _interopRequireDefault(require("fast-deep-equal"));
|
|
11
|
-
|
|
12
9
|
var React = _interopRequireWildcard(require("react"));
|
|
13
|
-
|
|
14
10
|
var _createMemoryHistory = _interopRequireDefault(require("./createMemoryHistory"));
|
|
15
|
-
|
|
16
11
|
var _ServerContext = _interopRequireDefault(require("./ServerContext"));
|
|
17
|
-
|
|
18
12
|
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); }
|
|
19
|
-
|
|
20
13
|
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; }
|
|
21
|
-
|
|
22
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
|
-
|
|
24
15
|
/**
|
|
25
16
|
* Find the matching navigation state that changed between 2 navigation states
|
|
26
17
|
* e.g.: a -> b -> c -> d and a -> b -> c -> e -> f, if history in b changed, b is the matching state
|
|
@@ -28,36 +19,34 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
28
19
|
const findMatchingState = (a, b) => {
|
|
29
20
|
if (a === undefined || b === undefined || a.key !== b.key) {
|
|
30
21
|
return [undefined, undefined];
|
|
31
|
-
}
|
|
32
|
-
|
|
22
|
+
}
|
|
33
23
|
|
|
24
|
+
// Tab and drawer will have `history` property, but stack will have history in `routes`
|
|
34
25
|
const aHistoryLength = a.history ? a.history.length : a.routes.length;
|
|
35
26
|
const bHistoryLength = b.history ? b.history.length : b.routes.length;
|
|
36
27
|
const aRoute = a.routes[a.index];
|
|
37
28
|
const bRoute = b.routes[b.index];
|
|
38
29
|
const aChildState = aRoute.state;
|
|
39
|
-
const bChildState = bRoute.state;
|
|
30
|
+
const bChildState = bRoute.state;
|
|
31
|
+
|
|
32
|
+
// Stop here if this is the state object that changed:
|
|
40
33
|
// - history length is different
|
|
41
34
|
// - focused routes are different
|
|
42
35
|
// - one of them doesn't have child state
|
|
43
36
|
// - child state keys are different
|
|
44
|
-
|
|
45
37
|
if (aHistoryLength !== bHistoryLength || aRoute.key !== bRoute.key || aChildState === undefined || bChildState === undefined || aChildState.key !== bChildState.key) {
|
|
46
38
|
return [a, b];
|
|
47
39
|
}
|
|
48
|
-
|
|
49
40
|
return findMatchingState(aChildState, bChildState);
|
|
50
41
|
};
|
|
42
|
+
|
|
51
43
|
/**
|
|
52
44
|
* Run async function in series as it's called.
|
|
53
45
|
*/
|
|
54
|
-
|
|
55
|
-
|
|
56
46
|
const series = cb => {
|
|
57
47
|
// Whether we're currently handling a callback
|
|
58
48
|
let handling = false;
|
|
59
49
|
let queue = [];
|
|
60
|
-
|
|
61
50
|
const callback = async () => {
|
|
62
51
|
try {
|
|
63
52
|
if (handling) {
|
|
@@ -66,12 +55,10 @@ const series = cb => {
|
|
|
66
55
|
queue.unshift(callback);
|
|
67
56
|
return;
|
|
68
57
|
}
|
|
69
|
-
|
|
70
58
|
handling = true;
|
|
71
59
|
await cb();
|
|
72
60
|
} finally {
|
|
73
61
|
handling = false;
|
|
74
|
-
|
|
75
62
|
if (queue.length) {
|
|
76
63
|
// If we have queued items, handle the last one
|
|
77
64
|
const last = queue.pop();
|
|
@@ -79,12 +66,9 @@ const series = cb => {
|
|
|
79
66
|
}
|
|
80
67
|
}
|
|
81
68
|
};
|
|
82
|
-
|
|
83
69
|
return callback;
|
|
84
70
|
};
|
|
85
|
-
|
|
86
71
|
let linkingHandlers = [];
|
|
87
|
-
|
|
88
72
|
function useLinking(ref, _ref) {
|
|
89
73
|
let {
|
|
90
74
|
independent,
|
|
@@ -98,33 +82,28 @@ function useLinking(ref, _ref) {
|
|
|
98
82
|
if (process.env.NODE_ENV === 'production') {
|
|
99
83
|
return undefined;
|
|
100
84
|
}
|
|
101
|
-
|
|
102
85
|
if (independent) {
|
|
103
86
|
return undefined;
|
|
104
87
|
}
|
|
105
|
-
|
|
106
88
|
if (enabled !== false && linkingHandlers.length) {
|
|
107
89
|
console.error(['Looks like you have configured linking in multiple places. This is likely an error since deep links should only be handled in one place to avoid conflicts. Make sure that:', "- You don't have multiple NavigationContainers in the app each with 'linking' enabled", '- Only a single instance of the root component is rendered'].join('\n').trim());
|
|
108
90
|
}
|
|
109
|
-
|
|
110
91
|
const handler = Symbol();
|
|
111
|
-
|
|
112
92
|
if (enabled !== false) {
|
|
113
93
|
linkingHandlers.push(handler);
|
|
114
94
|
}
|
|
115
|
-
|
|
116
95
|
return () => {
|
|
117
96
|
const index = linkingHandlers.indexOf(handler);
|
|
118
|
-
|
|
119
97
|
if (index > -1) {
|
|
120
98
|
linkingHandlers.splice(index, 1);
|
|
121
99
|
}
|
|
122
100
|
};
|
|
123
101
|
}, [enabled, independent]);
|
|
124
|
-
const [history] = React.useState(_createMemoryHistory.default);
|
|
102
|
+
const [history] = React.useState(_createMemoryHistory.default);
|
|
103
|
+
|
|
104
|
+
// We store these options in ref to avoid re-creating getInitialState and re-subscribing listeners
|
|
125
105
|
// This lets user avoid wrapping the items in `React.useCallback` or `React.useMemo`
|
|
126
106
|
// Not re-creating `getInitialState` is important coz it makes it easier for the user to use in an effect
|
|
127
|
-
|
|
128
107
|
const enabledRef = React.useRef(enabled);
|
|
129
108
|
const configRef = React.useRef(config);
|
|
130
109
|
const getStateFromPathRef = React.useRef(getStateFromPath);
|
|
@@ -140,29 +119,23 @@ function useLinking(ref, _ref) {
|
|
|
140
119
|
const server = React.useContext(_ServerContext.default);
|
|
141
120
|
const getInitialState = React.useCallback(() => {
|
|
142
121
|
let value;
|
|
143
|
-
|
|
144
122
|
if (enabledRef.current) {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
const location = (_server$location = server === null || server === void 0 ? void 0 : server.location) !== null && _server$location !== void 0 ? _server$location : typeof window !== 'undefined' ? window.location : undefined;
|
|
123
|
+
const location = (server === null || server === void 0 ? void 0 : server.location) ?? (typeof window !== 'undefined' ? window.location : undefined);
|
|
148
124
|
const path = location ? location.pathname + location.search : undefined;
|
|
149
|
-
|
|
150
125
|
if (path) {
|
|
151
126
|
value = getStateFromPathRef.current(path, configRef.current);
|
|
152
127
|
}
|
|
153
128
|
}
|
|
154
|
-
|
|
155
129
|
const thenable = {
|
|
156
130
|
then(onfulfilled) {
|
|
157
131
|
return Promise.resolve(onfulfilled ? onfulfilled(value) : value);
|
|
158
132
|
},
|
|
159
|
-
|
|
160
133
|
catch() {
|
|
161
134
|
return thenable;
|
|
162
135
|
}
|
|
163
|
-
|
|
164
136
|
};
|
|
165
|
-
return thenable;
|
|
137
|
+
return thenable;
|
|
138
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
166
139
|
}, []);
|
|
167
140
|
const previousIndexRef = React.useRef(undefined);
|
|
168
141
|
const previousStateRef = React.useRef(undefined);
|
|
@@ -170,52 +143,46 @@ function useLinking(ref, _ref) {
|
|
|
170
143
|
React.useEffect(() => {
|
|
171
144
|
previousIndexRef.current = history.index;
|
|
172
145
|
return history.listen(() => {
|
|
173
|
-
var _previousIndexRef$cur;
|
|
174
|
-
|
|
175
146
|
const navigation = ref.current;
|
|
176
|
-
|
|
177
147
|
if (!navigation || !enabled) {
|
|
178
148
|
return;
|
|
179
149
|
}
|
|
180
|
-
|
|
181
150
|
const path = location.pathname + location.search;
|
|
182
151
|
const index = history.index;
|
|
183
|
-
const previousIndex =
|
|
152
|
+
const previousIndex = previousIndexRef.current ?? 0;
|
|
184
153
|
previousIndexRef.current = index;
|
|
185
|
-
pendingPopStatePathRef.current = path;
|
|
154
|
+
pendingPopStatePathRef.current = path;
|
|
155
|
+
|
|
156
|
+
// When browser back/forward is clicked, we first need to check if state object for this index exists
|
|
186
157
|
// If it does we'll reset to that state object
|
|
187
158
|
// Otherwise, we'll handle it like a regular deep link
|
|
188
|
-
|
|
189
159
|
const record = history.get(index);
|
|
190
|
-
|
|
191
160
|
if ((record === null || record === void 0 ? void 0 : record.path) === path && record !== null && record !== void 0 && record.state) {
|
|
192
161
|
navigation.resetRoot(record.state);
|
|
193
162
|
return;
|
|
194
163
|
}
|
|
164
|
+
const state = getStateFromPathRef.current(path, configRef.current);
|
|
195
165
|
|
|
196
|
-
|
|
166
|
+
// We should only dispatch an action when going forward
|
|
197
167
|
// Otherwise the action will likely add items to history, which would mess things up
|
|
198
|
-
|
|
199
168
|
if (state) {
|
|
200
169
|
// Make sure that the routes in the state exist in the root navigator
|
|
201
170
|
// Otherwise there's an error in the linking configuration
|
|
202
171
|
const rootState = navigation.getRootState();
|
|
203
|
-
|
|
204
172
|
if (state.routes.some(r => !(rootState !== null && rootState !== void 0 && rootState.routeNames.includes(r.name)))) {
|
|
205
173
|
console.warn("The navigation state parsed from the URL contains routes not present in the root navigator. This usually means that the linking configuration doesn't match the navigation structure. See https://reactnavigation.org/docs/configuring-links for more details on how to specify a linking configuration.");
|
|
206
174
|
return;
|
|
207
175
|
}
|
|
208
|
-
|
|
209
176
|
if (index > previousIndex) {
|
|
210
177
|
const action = getActionFromStateRef.current(state, configRef.current);
|
|
211
|
-
|
|
212
178
|
if (action !== undefined) {
|
|
213
179
|
try {
|
|
214
180
|
navigation.dispatch(action);
|
|
215
181
|
} catch (e) {
|
|
216
182
|
// Ignore any errors from deep linking.
|
|
217
183
|
// This could happen in case of malformed links, navigation object not being initialized etc.
|
|
218
|
-
console.warn(`An error occurred when trying to handle the link '${path}': ${typeof e === 'object' && e != null && 'message' in e ?
|
|
184
|
+
console.warn(`An error occurred when trying to handle the link '${path}': ${typeof e === 'object' && e != null && 'message' in e ?
|
|
185
|
+
// @ts-expect-error: we're already checking for this
|
|
219
186
|
e.message : e}`);
|
|
220
187
|
}
|
|
221
188
|
} else {
|
|
@@ -232,79 +199,67 @@ function useLinking(ref, _ref) {
|
|
|
232
199
|
}, [enabled, history, ref]);
|
|
233
200
|
React.useEffect(() => {
|
|
234
201
|
var _ref$current;
|
|
235
|
-
|
|
236
202
|
if (!enabled) {
|
|
237
203
|
return;
|
|
238
204
|
}
|
|
239
|
-
|
|
240
205
|
const getPathForRoute = (route, state) => {
|
|
241
206
|
// If the `route` object contains a `path`, use that path as long as `route.name` and `params` still match
|
|
242
207
|
// This makes sure that we preserve the original URL for wildcard routes
|
|
243
208
|
if (route !== null && route !== void 0 && route.path) {
|
|
244
209
|
const stateForPath = getStateFromPathRef.current(route.path, configRef.current);
|
|
245
|
-
|
|
246
210
|
if (stateForPath) {
|
|
247
211
|
const focusedRoute = (0, _core.findFocusedRoute)(stateForPath);
|
|
248
|
-
|
|
249
212
|
if (focusedRoute && focusedRoute.name === route.name && (0, _fastDeepEqual.default)(focusedRoute.params, route.params)) {
|
|
250
213
|
return route.path;
|
|
251
214
|
}
|
|
252
215
|
}
|
|
253
216
|
}
|
|
254
|
-
|
|
255
217
|
return getPathFromStateRef.current(state, configRef.current);
|
|
256
218
|
};
|
|
257
|
-
|
|
258
219
|
if (ref.current) {
|
|
259
220
|
// We need to record the current metadata on the first render if they aren't set
|
|
260
221
|
// This will allow the initial state to be in the history entry
|
|
261
222
|
const state = ref.current.getRootState();
|
|
262
|
-
|
|
263
223
|
if (state) {
|
|
264
224
|
const route = (0, _core.findFocusedRoute)(state);
|
|
265
225
|
const path = getPathForRoute(route, state);
|
|
266
|
-
|
|
267
226
|
if (previousStateRef.current === undefined) {
|
|
268
227
|
previousStateRef.current = state;
|
|
269
228
|
}
|
|
270
|
-
|
|
271
229
|
history.replace({
|
|
272
230
|
path,
|
|
273
231
|
state
|
|
274
232
|
});
|
|
275
233
|
}
|
|
276
234
|
}
|
|
277
|
-
|
|
278
235
|
const onStateChange = async () => {
|
|
279
236
|
const navigation = ref.current;
|
|
280
|
-
|
|
281
237
|
if (!navigation || !enabled) {
|
|
282
238
|
return;
|
|
283
239
|
}
|
|
284
|
-
|
|
285
240
|
const previousState = previousStateRef.current;
|
|
286
|
-
const state = navigation.getRootState();
|
|
241
|
+
const state = navigation.getRootState();
|
|
287
242
|
|
|
243
|
+
// root state may not available, for example when root navigators switch inside the container
|
|
288
244
|
if (!state) {
|
|
289
245
|
return;
|
|
290
246
|
}
|
|
291
|
-
|
|
292
247
|
const pendingPath = pendingPopStatePathRef.current;
|
|
293
248
|
const route = (0, _core.findFocusedRoute)(state);
|
|
294
249
|
const path = getPathForRoute(route, state);
|
|
295
250
|
previousStateRef.current = state;
|
|
296
|
-
pendingPopStatePathRef.current = undefined;
|
|
251
|
+
pendingPopStatePathRef.current = undefined;
|
|
252
|
+
|
|
253
|
+
// To detect the kind of state change, we need to:
|
|
297
254
|
// - Find the common focused navigation state in previous and current state
|
|
298
255
|
// - If only the route keys changed, compare history/routes.length to check if we go back/forward/replace
|
|
299
256
|
// - If no common focused navigation state found, it's a replace
|
|
300
|
-
|
|
301
257
|
const [previousFocusedState, focusedState] = findMatchingState(previousState, state);
|
|
302
|
-
|
|
303
|
-
|
|
258
|
+
if (previousFocusedState && focusedState &&
|
|
259
|
+
// We should only handle push/pop if path changed from what was in last `popstate`
|
|
304
260
|
// Otherwise it's likely a change triggered by `popstate`
|
|
305
261
|
path !== pendingPath) {
|
|
306
262
|
const historyDelta = (focusedState.history ? focusedState.history.length : focusedState.routes.length) - (previousFocusedState.history ? previousFocusedState.history.length : previousFocusedState.routes.length);
|
|
307
|
-
|
|
308
263
|
if (historyDelta > 0) {
|
|
309
264
|
// If history length is increased, we should pushState
|
|
310
265
|
// Note that path might not actually change here, for example, drawer open should pushState
|
|
@@ -314,11 +269,11 @@ function useLinking(ref, _ref) {
|
|
|
314
269
|
});
|
|
315
270
|
} else if (historyDelta < 0) {
|
|
316
271
|
// If history length is decreased, i.e. entries were removed, we want to go back
|
|
272
|
+
|
|
317
273
|
const nextIndex = history.backIndex({
|
|
318
274
|
path
|
|
319
275
|
});
|
|
320
276
|
const currentIndex = history.index;
|
|
321
|
-
|
|
322
277
|
try {
|
|
323
278
|
if (nextIndex !== -1 && nextIndex < currentIndex) {
|
|
324
279
|
// An existing entry for this path exists and it's less than current index, go back to that
|
|
@@ -328,14 +283,15 @@ function useLinking(ref, _ref) {
|
|
|
328
283
|
// This won't be correct if multiple routes were pushed in one go before
|
|
329
284
|
// Usually this shouldn't happen and this is a fallback for that
|
|
330
285
|
await history.go(historyDelta);
|
|
331
|
-
}
|
|
332
|
-
|
|
286
|
+
}
|
|
333
287
|
|
|
288
|
+
// Store the updated state as well as fix the path if incorrect
|
|
334
289
|
history.replace({
|
|
335
290
|
path,
|
|
336
291
|
state
|
|
337
292
|
});
|
|
338
|
-
} catch (e) {
|
|
293
|
+
} catch (e) {
|
|
294
|
+
// The navigation was interrupted
|
|
339
295
|
}
|
|
340
296
|
} else {
|
|
341
297
|
// If history length is unchanged, we want to replaceState
|
|
@@ -352,11 +308,11 @@ function useLinking(ref, _ref) {
|
|
|
352
308
|
state
|
|
353
309
|
});
|
|
354
310
|
}
|
|
355
|
-
};
|
|
311
|
+
};
|
|
312
|
+
|
|
313
|
+
// We debounce onStateChange coz we don't want multiple state changes to be handled at one time
|
|
356
314
|
// This could happen since `history.go(n)` is asynchronous
|
|
357
315
|
// If `pushState` or `replaceState` were called before `history.go(n)` completes, it'll mess stuff up
|
|
358
|
-
|
|
359
|
-
|
|
360
316
|
return (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.addListener('state', series(onStateChange));
|
|
361
317
|
});
|
|
362
318
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["findMatchingState","a","b","undefined","key","aHistoryLength","history","length","routes","bHistoryLength","aRoute","index","bRoute","aChildState","state","bChildState","series","cb","handling","queue","callback","unshift","last","pop","linkingHandlers","useLinking","ref","independent","enabled","config","getStateFromPath","getStateFromPathDefault","getPathFromState","getPathFromStateDefault","getActionFromState","getActionFromStateDefault","React","useEffect","process","env","NODE_ENV","console","error","join","trim","handler","Symbol","push","indexOf","splice","useState","createMemoryHistory","enabledRef","useRef","configRef","getStateFromPathRef","getPathFromStateRef","getActionFromStateRef","current","server","useContext","ServerContext","getInitialState","useCallback","value","location","window","path","pathname","search","thenable","then","onfulfilled","Promise","resolve","catch","previousIndexRef","previousStateRef","pendingPopStatePathRef","listen","navigation","previousIndex","record","get","resetRoot","rootState","getRootState","some","r","routeNames","includes","name","warn","action","dispatch","e","message","getPathForRoute","route","stateForPath","focusedRoute","findFocusedRoute","isEqual","params","replace","onStateChange","previousState","pendingPath","previousFocusedState","focusedState","historyDelta","nextIndex","backIndex","currentIndex","go","addListener"],"sources":["useLinking.tsx"],"sourcesContent":["import {\n findFocusedRoute,\n getActionFromState as getActionFromStateDefault,\n getPathFromState as getPathFromStateDefault,\n getStateFromPath as getStateFromPathDefault,\n NavigationContainerRef,\n NavigationState,\n ParamListBase,\n} from '@react-navigation/core';\nimport isEqual from 'fast-deep-equal';\nimport * as React from 'react';\n\nimport createMemoryHistory from './createMemoryHistory';\nimport ServerContext from './ServerContext';\nimport type { LinkingOptions } from './types';\n\ntype ResultState = ReturnType<typeof getStateFromPathDefault>;\n\n/**\n * Find the matching navigation state that changed between 2 navigation states\n * e.g.: a -> b -> c -> d and a -> b -> c -> e -> f, if history in b changed, b is the matching state\n */\nconst findMatchingState = <T extends NavigationState>(\n a: T | undefined,\n b: T | undefined\n): [T | undefined, T | undefined] => {\n if (a === undefined || b === undefined || a.key !== b.key) {\n return [undefined, undefined];\n }\n\n // Tab and drawer will have `history` property, but stack will have history in `routes`\n const aHistoryLength = a.history ? a.history.length : a.routes.length;\n const bHistoryLength = b.history ? b.history.length : b.routes.length;\n\n const aRoute = a.routes[a.index];\n const bRoute = b.routes[b.index];\n\n const aChildState = aRoute.state as T | undefined;\n const bChildState = bRoute.state as T | undefined;\n\n // Stop here if this is the state object that changed:\n // - history length is different\n // - focused routes are different\n // - one of them doesn't have child state\n // - child state keys are different\n if (\n aHistoryLength !== bHistoryLength ||\n aRoute.key !== bRoute.key ||\n aChildState === undefined ||\n bChildState === undefined ||\n aChildState.key !== bChildState.key\n ) {\n return [a, b];\n }\n\n return findMatchingState(aChildState, bChildState);\n};\n\n/**\n * Run async function in series as it's called.\n */\nconst series = (cb: () => Promise<void>) => {\n // Whether we're currently handling a callback\n let handling = false;\n let queue: (() => Promise<void>)[] = [];\n\n const callback = async () => {\n try {\n if (handling) {\n // If we're currently handling a previous event, wait before handling this one\n // Add the callback to the beginning of the queue\n queue.unshift(callback);\n return;\n }\n\n handling = true;\n\n await cb();\n } finally {\n handling = false;\n\n if (queue.length) {\n // If we have queued items, handle the last one\n const last = queue.pop();\n\n last?.();\n }\n }\n };\n\n return callback;\n};\n\nlet linkingHandlers: Symbol[] = [];\n\ntype Options = LinkingOptions<ParamListBase> & {\n independent?: boolean;\n};\n\nexport default function useLinking(\n ref: React.RefObject<NavigationContainerRef<ParamListBase>>,\n {\n independent,\n enabled = true,\n config,\n getStateFromPath = getStateFromPathDefault,\n getPathFromState = getPathFromStateDefault,\n getActionFromState = getActionFromStateDefault,\n }: Options\n) {\n React.useEffect(() => {\n if (process.env.NODE_ENV === 'production') {\n return undefined;\n }\n\n if (independent) {\n return undefined;\n }\n\n if (enabled !== false && linkingHandlers.length) {\n console.error(\n [\n 'Looks like you have configured linking in multiple places. This is likely an error since deep links should only be handled in one place to avoid conflicts. Make sure that:',\n \"- You don't have multiple NavigationContainers in the app each with 'linking' enabled\",\n '- Only a single instance of the root component is rendered',\n ]\n .join('\\n')\n .trim()\n );\n }\n\n const handler = Symbol();\n\n if (enabled !== false) {\n linkingHandlers.push(handler);\n }\n\n return () => {\n const index = linkingHandlers.indexOf(handler);\n\n if (index > -1) {\n linkingHandlers.splice(index, 1);\n }\n };\n }, [enabled, independent]);\n\n const [history] = React.useState(createMemoryHistory);\n\n // We store these options in ref to avoid re-creating getInitialState and re-subscribing listeners\n // This lets user avoid wrapping the items in `React.useCallback` or `React.useMemo`\n // Not re-creating `getInitialState` is important coz it makes it easier for the user to use in an effect\n const enabledRef = React.useRef(enabled);\n const configRef = React.useRef(config);\n const getStateFromPathRef = React.useRef(getStateFromPath);\n const getPathFromStateRef = React.useRef(getPathFromState);\n const getActionFromStateRef = React.useRef(getActionFromState);\n\n React.useEffect(() => {\n enabledRef.current = enabled;\n configRef.current = config;\n getStateFromPathRef.current = getStateFromPath;\n getPathFromStateRef.current = getPathFromState;\n getActionFromStateRef.current = getActionFromState;\n });\n\n const server = React.useContext(ServerContext);\n\n const getInitialState = React.useCallback(() => {\n let value: ResultState | undefined;\n\n if (enabledRef.current) {\n const location =\n server?.location ??\n (typeof window !== 'undefined' ? window.location : undefined);\n\n const path = location ? location.pathname + location.search : undefined;\n\n if (path) {\n value = getStateFromPathRef.current(path, configRef.current);\n }\n }\n\n const thenable = {\n then(onfulfilled?: (state: ResultState | undefined) => void) {\n return Promise.resolve(onfulfilled ? onfulfilled(value) : value);\n },\n catch() {\n return thenable;\n },\n };\n\n return thenable as PromiseLike<ResultState | undefined>;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const previousIndexRef = React.useRef<number | undefined>(undefined);\n const previousStateRef = React.useRef<NavigationState | undefined>(undefined);\n const pendingPopStatePathRef = React.useRef<string | undefined>(undefined);\n\n React.useEffect(() => {\n previousIndexRef.current = history.index;\n\n return history.listen(() => {\n const navigation = ref.current;\n\n if (!navigation || !enabled) {\n return;\n }\n\n const path = location.pathname + location.search;\n const index = history.index;\n\n const previousIndex = previousIndexRef.current ?? 0;\n\n previousIndexRef.current = index;\n pendingPopStatePathRef.current = path;\n\n // When browser back/forward is clicked, we first need to check if state object for this index exists\n // If it does we'll reset to that state object\n // Otherwise, we'll handle it like a regular deep link\n const record = history.get(index);\n\n if (record?.path === path && record?.state) {\n navigation.resetRoot(record.state);\n return;\n }\n\n const state = getStateFromPathRef.current(path, configRef.current);\n\n // We should only dispatch an action when going forward\n // Otherwise the action will likely add items to history, which would mess things up\n if (state) {\n // Make sure that the routes in the state exist in the root navigator\n // Otherwise there's an error in the linking configuration\n const rootState = navigation.getRootState();\n\n if (state.routes.some((r) => !rootState?.routeNames.includes(r.name))) {\n console.warn(\n \"The navigation state parsed from the URL contains routes not present in the root navigator. This usually means that the linking configuration doesn't match the navigation structure. See https://reactnavigation.org/docs/configuring-links for more details on how to specify a linking configuration.\"\n );\n return;\n }\n\n if (index > previousIndex) {\n const action = getActionFromStateRef.current(\n state,\n configRef.current\n );\n\n if (action !== undefined) {\n try {\n navigation.dispatch(action);\n } catch (e) {\n // Ignore any errors from deep linking.\n // This could happen in case of malformed links, navigation object not being initialized etc.\n console.warn(\n `An error occurred when trying to handle the link '${path}': ${\n typeof e === 'object' && e != null && 'message' in e\n ? // @ts-expect-error: we're already checking for this\n e.message\n : e\n }`\n );\n }\n } else {\n navigation.resetRoot(state);\n }\n } else {\n navigation.resetRoot(state);\n }\n } else {\n // if current path didn't return any state, we should revert to initial state\n navigation.resetRoot(state);\n }\n });\n }, [enabled, history, ref]);\n\n React.useEffect(() => {\n if (!enabled) {\n return;\n }\n\n const getPathForRoute = (\n route: ReturnType<typeof findFocusedRoute>,\n state: NavigationState\n ): string => {\n // If the `route` object contains a `path`, use that path as long as `route.name` and `params` still match\n // This makes sure that we preserve the original URL for wildcard routes\n if (route?.path) {\n const stateForPath = getStateFromPathRef.current(\n route.path,\n configRef.current\n );\n\n if (stateForPath) {\n const focusedRoute = findFocusedRoute(stateForPath);\n\n if (\n focusedRoute &&\n focusedRoute.name === route.name &&\n isEqual(focusedRoute.params, route.params)\n ) {\n return route.path;\n }\n }\n }\n\n return getPathFromStateRef.current(state, configRef.current);\n };\n\n if (ref.current) {\n // We need to record the current metadata on the first render if they aren't set\n // This will allow the initial state to be in the history entry\n const state = ref.current.getRootState();\n\n if (state) {\n const route = findFocusedRoute(state);\n const path = getPathForRoute(route, state);\n\n if (previousStateRef.current === undefined) {\n previousStateRef.current = state;\n }\n\n history.replace({ path, state });\n }\n }\n\n const onStateChange = async () => {\n const navigation = ref.current;\n\n if (!navigation || !enabled) {\n return;\n }\n\n const previousState = previousStateRef.current;\n const state = navigation.getRootState();\n\n // root state may not available, for example when root navigators switch inside the container\n if (!state) {\n return;\n }\n\n const pendingPath = pendingPopStatePathRef.current;\n const route = findFocusedRoute(state);\n const path = getPathForRoute(route, state);\n\n previousStateRef.current = state;\n pendingPopStatePathRef.current = undefined;\n\n // To detect the kind of state change, we need to:\n // - Find the common focused navigation state in previous and current state\n // - If only the route keys changed, compare history/routes.length to check if we go back/forward/replace\n // - If no common focused navigation state found, it's a replace\n const [previousFocusedState, focusedState] = findMatchingState(\n previousState,\n state\n );\n\n if (\n previousFocusedState &&\n focusedState &&\n // We should only handle push/pop if path changed from what was in last `popstate`\n // Otherwise it's likely a change triggered by `popstate`\n path !== pendingPath\n ) {\n const historyDelta =\n (focusedState.history\n ? focusedState.history.length\n : focusedState.routes.length) -\n (previousFocusedState.history\n ? previousFocusedState.history.length\n : previousFocusedState.routes.length);\n\n if (historyDelta > 0) {\n // If history length is increased, we should pushState\n // Note that path might not actually change here, for example, drawer open should pushState\n history.push({ path, state });\n } else if (historyDelta < 0) {\n // If history length is decreased, i.e. entries were removed, we want to go back\n\n const nextIndex = history.backIndex({ path });\n const currentIndex = history.index;\n\n try {\n if (nextIndex !== -1 && nextIndex < currentIndex) {\n // An existing entry for this path exists and it's less than current index, go back to that\n await history.go(nextIndex - currentIndex);\n } else {\n // We couldn't find an existing entry to go back to, so we'll go back by the delta\n // This won't be correct if multiple routes were pushed in one go before\n // Usually this shouldn't happen and this is a fallback for that\n await history.go(historyDelta);\n }\n\n // Store the updated state as well as fix the path if incorrect\n history.replace({ path, state });\n } catch (e) {\n // The navigation was interrupted\n }\n } else {\n // If history length is unchanged, we want to replaceState\n history.replace({ path, state });\n }\n } else {\n // If no common navigation state was found, assume it's a replace\n // This would happen if the user did a reset/conditionally changed navigators\n history.replace({ path, state });\n }\n };\n\n // We debounce onStateChange coz we don't want multiple state changes to be handled at one time\n // This could happen since `history.go(n)` is asynchronous\n // If `pushState` or `replaceState` were called before `history.go(n)` completes, it'll mess stuff up\n return ref.current?.addListener('state', series(onStateChange));\n });\n\n return {\n getInitialState,\n };\n}\n"],"mappings":";;;;;;;AAAA;;AASA;;AACA;;AAEA;;AACA;;;;;;;;AAKA;AACA;AACA;AACA;AACA,MAAMA,iBAAiB,GAAG,CACxBC,CADwB,EAExBC,CAFwB,KAGW;EACnC,IAAID,CAAC,KAAKE,SAAN,IAAmBD,CAAC,KAAKC,SAAzB,IAAsCF,CAAC,CAACG,GAAF,KAAUF,CAAC,CAACE,GAAtD,EAA2D;IACzD,OAAO,CAACD,SAAD,EAAYA,SAAZ,CAAP;EACD,CAHkC,CAKnC;;;EACA,MAAME,cAAc,GAAGJ,CAAC,CAACK,OAAF,GAAYL,CAAC,CAACK,OAAF,CAAUC,MAAtB,GAA+BN,CAAC,CAACO,MAAF,CAASD,MAA/D;EACA,MAAME,cAAc,GAAGP,CAAC,CAACI,OAAF,GAAYJ,CAAC,CAACI,OAAF,CAAUC,MAAtB,GAA+BL,CAAC,CAACM,MAAF,CAASD,MAA/D;EAEA,MAAMG,MAAM,GAAGT,CAAC,CAACO,MAAF,CAASP,CAAC,CAACU,KAAX,CAAf;EACA,MAAMC,MAAM,GAAGV,CAAC,CAACM,MAAF,CAASN,CAAC,CAACS,KAAX,CAAf;EAEA,MAAME,WAAW,GAAGH,MAAM,CAACI,KAA3B;EACA,MAAMC,WAAW,GAAGH,MAAM,CAACE,KAA3B,CAbmC,CAenC;EACA;EACA;EACA;EACA;;EACA,IACET,cAAc,KAAKI,cAAnB,IACAC,MAAM,CAACN,GAAP,KAAeQ,MAAM,CAACR,GADtB,IAEAS,WAAW,KAAKV,SAFhB,IAGAY,WAAW,KAAKZ,SAHhB,IAIAU,WAAW,CAACT,GAAZ,KAAoBW,WAAW,CAACX,GALlC,EAME;IACA,OAAO,CAACH,CAAD,EAAIC,CAAJ,CAAP;EACD;;EAED,OAAOF,iBAAiB,CAACa,WAAD,EAAcE,WAAd,CAAxB;AACD,CAlCD;AAoCA;AACA;AACA;;;AACA,MAAMC,MAAM,GAAIC,EAAD,IAA6B;EAC1C;EACA,IAAIC,QAAQ,GAAG,KAAf;EACA,IAAIC,KAA8B,GAAG,EAArC;;EAEA,MAAMC,QAAQ,GAAG,YAAY;IAC3B,IAAI;MACF,IAAIF,QAAJ,EAAc;QACZ;QACA;QACAC,KAAK,CAACE,OAAN,CAAcD,QAAd;QACA;MACD;;MAEDF,QAAQ,GAAG,IAAX;MAEA,MAAMD,EAAE,EAAR;IACD,CAXD,SAWU;MACRC,QAAQ,GAAG,KAAX;;MAEA,IAAIC,KAAK,CAACZ,MAAV,EAAkB;QAChB;QACA,MAAMe,IAAI,GAAGH,KAAK,CAACI,GAAN,EAAb;QAEAD,IAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI;MACL;IACF;EACF,CAtBD;;EAwBA,OAAOF,QAAP;AACD,CA9BD;;AAgCA,IAAII,eAAyB,GAAG,EAAhC;;AAMe,SAASC,UAAT,CACbC,GADa,QAUb;EAAA,IARA;IACEC,WADF;IAEEC,OAAO,GAAG,IAFZ;IAGEC,MAHF;IAIEC,gBAAgB,GAAGC,sBAJrB;IAKEC,gBAAgB,GAAGC,sBALrB;IAMEC,kBAAkB,GAAGC;EANvB,CAQA;EACAC,KAAK,CAACC,SAAN,CAAgB,MAAM;IACpB,IAAIC,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,YAA7B,EAA2C;MACzC,OAAOrC,SAAP;IACD;;IAED,IAAIwB,WAAJ,EAAiB;MACf,OAAOxB,SAAP;IACD;;IAED,IAAIyB,OAAO,KAAK,KAAZ,IAAqBJ,eAAe,CAACjB,MAAzC,EAAiD;MAC/CkC,OAAO,CAACC,KAAR,CACE,CACE,6KADF,EAEE,uFAFF,EAGE,4DAHF,EAKGC,IALH,CAKQ,IALR,EAMGC,IANH,EADF;IASD;;IAED,MAAMC,OAAO,GAAGC,MAAM,EAAtB;;IAEA,IAAIlB,OAAO,KAAK,KAAhB,EAAuB;MACrBJ,eAAe,CAACuB,IAAhB,CAAqBF,OAArB;IACD;;IAED,OAAO,MAAM;MACX,MAAMlC,KAAK,GAAGa,eAAe,CAACwB,OAAhB,CAAwBH,OAAxB,CAAd;;MAEA,IAAIlC,KAAK,GAAG,CAAC,CAAb,EAAgB;QACda,eAAe,CAACyB,MAAhB,CAAuBtC,KAAvB,EAA8B,CAA9B;MACD;IACF,CAND;EAOD,CAlCD,EAkCG,CAACiB,OAAD,EAAUD,WAAV,CAlCH;EAoCA,MAAM,CAACrB,OAAD,IAAY8B,KAAK,CAACc,QAAN,CAAeC,4BAAf,CAAlB,CArCA,CAuCA;EACA;EACA;;EACA,MAAMC,UAAU,GAAGhB,KAAK,CAACiB,MAAN,CAAazB,OAAb,CAAnB;EACA,MAAM0B,SAAS,GAAGlB,KAAK,CAACiB,MAAN,CAAaxB,MAAb,CAAlB;EACA,MAAM0B,mBAAmB,GAAGnB,KAAK,CAACiB,MAAN,CAAavB,gBAAb,CAA5B;EACA,MAAM0B,mBAAmB,GAAGpB,KAAK,CAACiB,MAAN,CAAarB,gBAAb,CAA5B;EACA,MAAMyB,qBAAqB,GAAGrB,KAAK,CAACiB,MAAN,CAAanB,kBAAb,CAA9B;EAEAE,KAAK,CAACC,SAAN,CAAgB,MAAM;IACpBe,UAAU,CAACM,OAAX,GAAqB9B,OAArB;IACA0B,SAAS,CAACI,OAAV,GAAoB7B,MAApB;IACA0B,mBAAmB,CAACG,OAApB,GAA8B5B,gBAA9B;IACA0B,mBAAmB,CAACE,OAApB,GAA8B1B,gBAA9B;IACAyB,qBAAqB,CAACC,OAAtB,GAAgCxB,kBAAhC;EACD,CAND;EAQA,MAAMyB,MAAM,GAAGvB,KAAK,CAACwB,UAAN,CAAiBC,sBAAjB,CAAf;EAEA,MAAMC,eAAe,GAAG1B,KAAK,CAAC2B,WAAN,CAAkB,MAAM;IAC9C,IAAIC,KAAJ;;IAEA,IAAIZ,UAAU,CAACM,OAAf,EAAwB;MAAA;;MACtB,MAAMO,QAAQ,uBACZN,MADY,aACZA,MADY,uBACZA,MAAM,CAAEM,QADI,+DAEX,OAAOC,MAAP,KAAkB,WAAlB,GAAgCA,MAAM,CAACD,QAAvC,GAAkD9D,SAFrD;MAIA,MAAMgE,IAAI,GAAGF,QAAQ,GAAGA,QAAQ,CAACG,QAAT,GAAoBH,QAAQ,CAACI,MAAhC,GAAyClE,SAA9D;;MAEA,IAAIgE,IAAJ,EAAU;QACRH,KAAK,GAAGT,mBAAmB,CAACG,OAApB,CAA4BS,IAA5B,EAAkCb,SAAS,CAACI,OAA5C,CAAR;MACD;IACF;;IAED,MAAMY,QAAQ,GAAG;MACfC,IAAI,CAACC,WAAD,EAAyD;QAC3D,OAAOC,OAAO,CAACC,OAAR,CAAgBF,WAAW,GAAGA,WAAW,CAACR,KAAD,CAAd,GAAwBA,KAAnD,CAAP;MACD,CAHc;;MAIfW,KAAK,GAAG;QACN,OAAOL,QAAP;MACD;;IANc,CAAjB;IASA,OAAOA,QAAP,CAxB8C,CAyB9C;EACD,CA1BuB,EA0BrB,EA1BqB,CAAxB;EA4BA,MAAMM,gBAAgB,GAAGxC,KAAK,CAACiB,MAAN,CAAiClD,SAAjC,CAAzB;EACA,MAAM0E,gBAAgB,GAAGzC,KAAK,CAACiB,MAAN,CAA0ClD,SAA1C,CAAzB;EACA,MAAM2E,sBAAsB,GAAG1C,KAAK,CAACiB,MAAN,CAAiClD,SAAjC,CAA/B;EAEAiC,KAAK,CAACC,SAAN,CAAgB,MAAM;IACpBuC,gBAAgB,CAAClB,OAAjB,GAA2BpD,OAAO,CAACK,KAAnC;IAEA,OAAOL,OAAO,CAACyE,MAAR,CAAe,MAAM;MAAA;;MAC1B,MAAMC,UAAU,GAAGtD,GAAG,CAACgC,OAAvB;;MAEA,IAAI,CAACsB,UAAD,IAAe,CAACpD,OAApB,EAA6B;QAC3B;MACD;;MAED,MAAMuC,IAAI,GAAGF,QAAQ,CAACG,QAAT,GAAoBH,QAAQ,CAACI,MAA1C;MACA,MAAM1D,KAAK,GAAGL,OAAO,CAACK,KAAtB;MAEA,MAAMsE,aAAa,4BAAGL,gBAAgB,CAAClB,OAApB,yEAA+B,CAAlD;MAEAkB,gBAAgB,CAAClB,OAAjB,GAA2B/C,KAA3B;MACAmE,sBAAsB,CAACpB,OAAvB,GAAiCS,IAAjC,CAb0B,CAe1B;MACA;MACA;;MACA,MAAMe,MAAM,GAAG5E,OAAO,CAAC6E,GAAR,CAAYxE,KAAZ,CAAf;;MAEA,IAAI,CAAAuE,MAAM,SAAN,IAAAA,MAAM,WAAN,YAAAA,MAAM,CAAEf,IAAR,MAAiBA,IAAjB,IAAyBe,MAAzB,aAAyBA,MAAzB,eAAyBA,MAAM,CAAEpE,KAArC,EAA4C;QAC1CkE,UAAU,CAACI,SAAX,CAAqBF,MAAM,CAACpE,KAA5B;QACA;MACD;;MAED,MAAMA,KAAK,GAAGyC,mBAAmB,CAACG,OAApB,CAA4BS,IAA5B,EAAkCb,SAAS,CAACI,OAA5C,CAAd,CAzB0B,CA2B1B;MACA;;MACA,IAAI5C,KAAJ,EAAW;QACT;QACA;QACA,MAAMuE,SAAS,GAAGL,UAAU,CAACM,YAAX,EAAlB;;QAEA,IAAIxE,KAAK,CAACN,MAAN,CAAa+E,IAAb,CAAmBC,CAAD,IAAO,EAACH,SAAD,aAACA,SAAD,eAACA,SAAS,CAAEI,UAAX,CAAsBC,QAAtB,CAA+BF,CAAC,CAACG,IAAjC,CAAD,CAAzB,CAAJ,EAAuE;UACrElD,OAAO,CAACmD,IAAR,CACE,0SADF;UAGA;QACD;;QAED,IAAIjF,KAAK,GAAGsE,aAAZ,EAA2B;UACzB,MAAMY,MAAM,GAAGpC,qBAAqB,CAACC,OAAtB,CACb5C,KADa,EAEbwC,SAAS,CAACI,OAFG,CAAf;;UAKA,IAAImC,MAAM,KAAK1F,SAAf,EAA0B;YACxB,IAAI;cACF6E,UAAU,CAACc,QAAX,CAAoBD,MAApB;YACD,CAFD,CAEE,OAAOE,CAAP,EAAU;cACV;cACA;cACAtD,OAAO,CAACmD,IAAR,CACG,qDAAoDzB,IAAK,MACxD,OAAO4B,CAAP,KAAa,QAAb,IAAyBA,CAAC,IAAI,IAA9B,IAAsC,aAAaA,CAAnD,GACI;cACAA,CAAC,CAACC,OAFN,GAGID,CACL,EANH;YAQD;UACF,CAfD,MAeO;YACLf,UAAU,CAACI,SAAX,CAAqBtE,KAArB;UACD;QACF,CAxBD,MAwBO;UACLkE,UAAU,CAACI,SAAX,CAAqBtE,KAArB;QACD;MACF,CAvCD,MAuCO;QACL;QACAkE,UAAU,CAACI,SAAX,CAAqBtE,KAArB;MACD;IACF,CAxEM,CAAP;EAyED,CA5ED,EA4EG,CAACc,OAAD,EAAUtB,OAAV,EAAmBoB,GAAnB,CA5EH;EA8EAU,KAAK,CAACC,SAAN,CAAgB,MAAM;IAAA;;IACpB,IAAI,CAACT,OAAL,EAAc;MACZ;IACD;;IAED,MAAMqE,eAAe,GAAG,CACtBC,KADsB,EAEtBpF,KAFsB,KAGX;MACX;MACA;MACA,IAAIoF,KAAJ,aAAIA,KAAJ,eAAIA,KAAK,CAAE/B,IAAX,EAAiB;QACf,MAAMgC,YAAY,GAAG5C,mBAAmB,CAACG,OAApB,CACnBwC,KAAK,CAAC/B,IADa,EAEnBb,SAAS,CAACI,OAFS,CAArB;;QAKA,IAAIyC,YAAJ,EAAkB;UAChB,MAAMC,YAAY,GAAG,IAAAC,sBAAA,EAAiBF,YAAjB,CAArB;;UAEA,IACEC,YAAY,IACZA,YAAY,CAACT,IAAb,KAAsBO,KAAK,CAACP,IAD5B,IAEA,IAAAW,sBAAA,EAAQF,YAAY,CAACG,MAArB,EAA6BL,KAAK,CAACK,MAAnC,CAHF,EAIE;YACA,OAAOL,KAAK,CAAC/B,IAAb;UACD;QACF;MACF;;MAED,OAAOX,mBAAmB,CAACE,OAApB,CAA4B5C,KAA5B,EAAmCwC,SAAS,CAACI,OAA7C,CAAP;IACD,CA1BD;;IA4BA,IAAIhC,GAAG,CAACgC,OAAR,EAAiB;MACf;MACA;MACA,MAAM5C,KAAK,GAAGY,GAAG,CAACgC,OAAJ,CAAY4B,YAAZ,EAAd;;MAEA,IAAIxE,KAAJ,EAAW;QACT,MAAMoF,KAAK,GAAG,IAAAG,sBAAA,EAAiBvF,KAAjB,CAAd;QACA,MAAMqD,IAAI,GAAG8B,eAAe,CAACC,KAAD,EAAQpF,KAAR,CAA5B;;QAEA,IAAI+D,gBAAgB,CAACnB,OAAjB,KAA6BvD,SAAjC,EAA4C;UAC1C0E,gBAAgB,CAACnB,OAAjB,GAA2B5C,KAA3B;QACD;;QAEDR,OAAO,CAACkG,OAAR,CAAgB;UAAErC,IAAF;UAAQrD;QAAR,CAAhB;MACD;IACF;;IAED,MAAM2F,aAAa,GAAG,YAAY;MAChC,MAAMzB,UAAU,GAAGtD,GAAG,CAACgC,OAAvB;;MAEA,IAAI,CAACsB,UAAD,IAAe,CAACpD,OAApB,EAA6B;QAC3B;MACD;;MAED,MAAM8E,aAAa,GAAG7B,gBAAgB,CAACnB,OAAvC;MACA,MAAM5C,KAAK,GAAGkE,UAAU,CAACM,YAAX,EAAd,CARgC,CAUhC;;MACA,IAAI,CAACxE,KAAL,EAAY;QACV;MACD;;MAED,MAAM6F,WAAW,GAAG7B,sBAAsB,CAACpB,OAA3C;MACA,MAAMwC,KAAK,GAAG,IAAAG,sBAAA,EAAiBvF,KAAjB,CAAd;MACA,MAAMqD,IAAI,GAAG8B,eAAe,CAACC,KAAD,EAAQpF,KAAR,CAA5B;MAEA+D,gBAAgB,CAACnB,OAAjB,GAA2B5C,KAA3B;MACAgE,sBAAsB,CAACpB,OAAvB,GAAiCvD,SAAjC,CApBgC,CAsBhC;MACA;MACA;MACA;;MACA,MAAM,CAACyG,oBAAD,EAAuBC,YAAvB,IAAuC7G,iBAAiB,CAC5D0G,aAD4D,EAE5D5F,KAF4D,CAA9D;;MAKA,IACE8F,oBAAoB,IACpBC,YADA,IAEA;MACA;MACA1C,IAAI,KAAKwC,WALX,EAME;QACA,MAAMG,YAAY,GAChB,CAACD,YAAY,CAACvG,OAAb,GACGuG,YAAY,CAACvG,OAAb,CAAqBC,MADxB,GAEGsG,YAAY,CAACrG,MAAb,CAAoBD,MAFxB,KAGCqG,oBAAoB,CAACtG,OAArB,GACGsG,oBAAoB,CAACtG,OAArB,CAA6BC,MADhC,GAEGqG,oBAAoB,CAACpG,MAArB,CAA4BD,MALhC,CADF;;QAQA,IAAIuG,YAAY,GAAG,CAAnB,EAAsB;UACpB;UACA;UACAxG,OAAO,CAACyC,IAAR,CAAa;YAAEoB,IAAF;YAAQrD;UAAR,CAAb;QACD,CAJD,MAIO,IAAIgG,YAAY,GAAG,CAAnB,EAAsB;UAC3B;UAEA,MAAMC,SAAS,GAAGzG,OAAO,CAAC0G,SAAR,CAAkB;YAAE7C;UAAF,CAAlB,CAAlB;UACA,MAAM8C,YAAY,GAAG3G,OAAO,CAACK,KAA7B;;UAEA,IAAI;YACF,IAAIoG,SAAS,KAAK,CAAC,CAAf,IAAoBA,SAAS,GAAGE,YAApC,EAAkD;cAChD;cACA,MAAM3G,OAAO,CAAC4G,EAAR,CAAWH,SAAS,GAAGE,YAAvB,CAAN;YACD,CAHD,MAGO;cACL;cACA;cACA;cACA,MAAM3G,OAAO,CAAC4G,EAAR,CAAWJ,YAAX,CAAN;YACD,CATC,CAWF;;;YACAxG,OAAO,CAACkG,OAAR,CAAgB;cAAErC,IAAF;cAAQrD;YAAR,CAAhB;UACD,CAbD,CAaE,OAAOiF,CAAP,EAAU,CACV;UACD;QACF,CAtBM,MAsBA;UACL;UACAzF,OAAO,CAACkG,OAAR,CAAgB;YAAErC,IAAF;YAAQrD;UAAR,CAAhB;QACD;MACF,CA7CD,MA6CO;QACL;QACA;QACAR,OAAO,CAACkG,OAAR,CAAgB;UAAErC,IAAF;UAAQrD;QAAR,CAAhB;MACD;IACF,CAjFD,CAlDoB,CAqIpB;IACA;IACA;;;IACA,uBAAOY,GAAG,CAACgC,OAAX,iDAAO,aAAayD,WAAb,CAAyB,OAAzB,EAAkCnG,MAAM,CAACyF,aAAD,CAAxC,CAAP;EACD,CAzID;EA2IA,OAAO;IACL3C;EADK,CAAP;AAGD"}
|
|
1
|
+
{"version":3,"names":["findMatchingState","a","b","undefined","key","aHistoryLength","history","length","routes","bHistoryLength","aRoute","index","bRoute","aChildState","state","bChildState","series","cb","handling","queue","callback","unshift","last","pop","linkingHandlers","useLinking","ref","independent","enabled","config","getStateFromPath","getStateFromPathDefault","getPathFromState","getPathFromStateDefault","getActionFromState","getActionFromStateDefault","React","useEffect","process","env","NODE_ENV","console","error","join","trim","handler","Symbol","push","indexOf","splice","useState","createMemoryHistory","enabledRef","useRef","configRef","getStateFromPathRef","getPathFromStateRef","getActionFromStateRef","current","server","useContext","ServerContext","getInitialState","useCallback","value","location","window","path","pathname","search","thenable","then","onfulfilled","Promise","resolve","catch","previousIndexRef","previousStateRef","pendingPopStatePathRef","listen","navigation","previousIndex","record","get","resetRoot","rootState","getRootState","some","r","routeNames","includes","name","warn","action","dispatch","e","message","getPathForRoute","route","stateForPath","focusedRoute","findFocusedRoute","isEqual","params","replace","onStateChange","previousState","pendingPath","previousFocusedState","focusedState","historyDelta","nextIndex","backIndex","currentIndex","go","addListener"],"sourceRoot":"../../src","sources":["useLinking.tsx"],"mappings":"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"}
|
|
@@ -4,23 +4,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = useLinking;
|
|
7
|
-
|
|
8
7
|
var _core = require("@react-navigation/core");
|
|
9
|
-
|
|
10
8
|
var React = _interopRequireWildcard(require("react"));
|
|
11
|
-
|
|
12
9
|
var _reactNative = require("react-native");
|
|
13
|
-
|
|
14
10
|
var _extractPathFromURL = _interopRequireDefault(require("./extractPathFromURL"));
|
|
15
|
-
|
|
16
11
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
-
|
|
18
12
|
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); }
|
|
19
|
-
|
|
20
13
|
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; }
|
|
21
|
-
|
|
22
14
|
let linkingHandlers = [];
|
|
23
|
-
|
|
24
15
|
function useLinking(ref, _ref) {
|
|
25
16
|
let {
|
|
26
17
|
independent,
|
|
@@ -28,22 +19,21 @@ function useLinking(ref, _ref) {
|
|
|
28
19
|
prefixes,
|
|
29
20
|
filter,
|
|
30
21
|
config,
|
|
31
|
-
getInitialURL = () => Promise.race([_reactNative.Linking.getInitialURL(), new Promise(resolve =>
|
|
22
|
+
getInitialURL = () => Promise.race([_reactNative.Linking.getInitialURL(), new Promise(resolve =>
|
|
23
|
+
// Timeout in 150ms if `getInitialState` doesn't resolve
|
|
32
24
|
// Workaround for https://github.com/facebook/react-native/issues/25675
|
|
33
25
|
setTimeout(resolve, 150))]),
|
|
34
26
|
subscribe = listener => {
|
|
35
27
|
var _Linking$removeEventL;
|
|
36
|
-
|
|
37
28
|
const callback = _ref2 => {
|
|
38
29
|
let {
|
|
39
30
|
url
|
|
40
31
|
} = _ref2;
|
|
41
32
|
return listener(url);
|
|
42
33
|
};
|
|
34
|
+
const subscription = _reactNative.Linking.addEventListener('url', callback);
|
|
43
35
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
36
|
+
// Storing this in a local variable stops Jest from complaining about import after teardown
|
|
47
37
|
const removeEventListener = (_Linking$removeEventL = _reactNative.Linking.removeEventListener) === null || _Linking$removeEventL === void 0 ? void 0 : _Linking$removeEventL.bind(_reactNative.Linking);
|
|
48
38
|
return () => {
|
|
49
39
|
// https://github.com/facebook/react-native/commit/6d1aca806cee86ad76de771ed3a1cc62982ebcd7
|
|
@@ -61,32 +51,27 @@ function useLinking(ref, _ref) {
|
|
|
61
51
|
if (process.env.NODE_ENV === 'production') {
|
|
62
52
|
return undefined;
|
|
63
53
|
}
|
|
64
|
-
|
|
65
54
|
if (independent) {
|
|
66
55
|
return undefined;
|
|
67
56
|
}
|
|
68
|
-
|
|
69
57
|
if (enabled !== false && linkingHandlers.length) {
|
|
70
58
|
console.error(['Looks like you have configured linking in multiple places. This is likely an error since deep links should only be handled in one place to avoid conflicts. Make sure that:', "- You don't have multiple NavigationContainers in the app each with 'linking' enabled", '- Only a single instance of the root component is rendered', _reactNative.Platform.OS === 'android' ? "- You have set 'android:launchMode=singleTask' in the '<activity />' section of the 'AndroidManifest.xml' file to avoid launching multiple instances" : ''].join('\n').trim());
|
|
71
59
|
}
|
|
72
|
-
|
|
73
60
|
const handler = Symbol();
|
|
74
|
-
|
|
75
61
|
if (enabled !== false) {
|
|
76
62
|
linkingHandlers.push(handler);
|
|
77
63
|
}
|
|
78
|
-
|
|
79
64
|
return () => {
|
|
80
65
|
const index = linkingHandlers.indexOf(handler);
|
|
81
|
-
|
|
82
66
|
if (index > -1) {
|
|
83
67
|
linkingHandlers.splice(index, 1);
|
|
84
68
|
}
|
|
85
69
|
};
|
|
86
|
-
}, [enabled, independent]);
|
|
70
|
+
}, [enabled, independent]);
|
|
71
|
+
|
|
72
|
+
// We store these options in ref to avoid re-creating getInitialState and re-subscribing listeners
|
|
87
73
|
// This lets user avoid wrapping the items in `React.useCallback` or `React.useMemo`
|
|
88
74
|
// Not re-creating `getInitialState` is important coz it makes it easier for the user to use in an effect
|
|
89
|
-
|
|
90
75
|
const enabledRef = React.useRef(enabled);
|
|
91
76
|
const prefixesRef = React.useRef(prefixes);
|
|
92
77
|
const filterRef = React.useRef(filter);
|
|
@@ -107,35 +92,28 @@ function useLinking(ref, _ref) {
|
|
|
107
92
|
if (!url || filterRef.current && !filterRef.current(url)) {
|
|
108
93
|
return undefined;
|
|
109
94
|
}
|
|
110
|
-
|
|
111
95
|
const path = (0, _extractPathFromURL.default)(prefixesRef.current, url);
|
|
112
96
|
return path !== undefined ? getStateFromPathRef.current(path, configRef.current) : undefined;
|
|
113
97
|
}, []);
|
|
114
98
|
const getInitialState = React.useCallback(() => {
|
|
115
99
|
let state;
|
|
116
|
-
|
|
117
100
|
if (enabledRef.current) {
|
|
118
101
|
const url = getInitialURLRef.current();
|
|
119
|
-
|
|
120
102
|
if (url != null && typeof url !== 'string') {
|
|
121
103
|
return url.then(url => {
|
|
122
104
|
const state = getStateFromURL(url);
|
|
123
105
|
return state;
|
|
124
106
|
});
|
|
125
107
|
}
|
|
126
|
-
|
|
127
108
|
state = getStateFromURL(url);
|
|
128
109
|
}
|
|
129
|
-
|
|
130
110
|
const thenable = {
|
|
131
111
|
then(onfulfilled) {
|
|
132
112
|
return Promise.resolve(onfulfilled ? onfulfilled(state) : state);
|
|
133
113
|
},
|
|
134
|
-
|
|
135
114
|
catch() {
|
|
136
115
|
return thenable;
|
|
137
116
|
}
|
|
138
|
-
|
|
139
117
|
};
|
|
140
118
|
return thenable;
|
|
141
119
|
}, [getStateFromURL]);
|
|
@@ -144,29 +122,25 @@ function useLinking(ref, _ref) {
|
|
|
144
122
|
if (!enabled) {
|
|
145
123
|
return;
|
|
146
124
|
}
|
|
147
|
-
|
|
148
125
|
const navigation = ref.current;
|
|
149
126
|
const state = navigation ? getStateFromURL(url) : undefined;
|
|
150
|
-
|
|
151
127
|
if (navigation && state) {
|
|
152
128
|
// Make sure that the routes in the state exist in the root navigator
|
|
153
129
|
// Otherwise there's an error in the linking configuration
|
|
154
130
|
const rootState = navigation.getRootState();
|
|
155
|
-
|
|
156
131
|
if (state.routes.some(r => !(rootState !== null && rootState !== void 0 && rootState.routeNames.includes(r.name)))) {
|
|
157
132
|
console.warn("The navigation state parsed from the URL contains routes not present in the root navigator. This usually means that the linking configuration doesn't match the navigation structure. See https://reactnavigation.org/docs/configuring-links for more details on how to specify a linking configuration.");
|
|
158
133
|
return;
|
|
159
134
|
}
|
|
160
|
-
|
|
161
135
|
const action = getActionFromStateRef.current(state, configRef.current);
|
|
162
|
-
|
|
163
136
|
if (action !== undefined) {
|
|
164
137
|
try {
|
|
165
138
|
navigation.dispatch(action);
|
|
166
139
|
} catch (e) {
|
|
167
140
|
// Ignore any errors from deep linking.
|
|
168
141
|
// This could happen in case of malformed links, navigation object not being initialized etc.
|
|
169
|
-
console.warn(`An error occurred when trying to handle the link '${url}': ${typeof e === 'object' && e != null && 'message' in e ?
|
|
142
|
+
console.warn(`An error occurred when trying to handle the link '${url}': ${typeof e === 'object' && e != null && 'message' in e ?
|
|
143
|
+
// @ts-expect-error: we're already checking for this
|
|
170
144
|
e.message : e}`);
|
|
171
145
|
}
|
|
172
146
|
} else {
|
|
@@ -174,7 +148,6 @@ function useLinking(ref, _ref) {
|
|
|
174
148
|
}
|
|
175
149
|
}
|
|
176
150
|
};
|
|
177
|
-
|
|
178
151
|
return subscribe(listener);
|
|
179
152
|
}, [enabled, getStateFromURL, ref, subscribe]);
|
|
180
153
|
return {
|