@react-navigation/native 7.3.7 → 7.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/module/Link.js +23 -6
- package/lib/module/Link.js.map +1 -1
- package/lib/module/createMemoryHistory.js +15 -4
- package/lib/module/createMemoryHistory.js.map +1 -1
- package/lib/module/useDeepStableValue.js +12 -0
- package/lib/module/useDeepStableValue.js.map +1 -0
- package/lib/module/useLinkProps.js +99 -56
- package/lib/module/useLinkProps.js.map +1 -1
- package/lib/module/useLinking.js +5 -2
- package/lib/module/useLinking.js.map +1 -1
- package/lib/typescript/src/Link.d.ts +5 -4
- package/lib/typescript/src/Link.d.ts.map +1 -1
- package/lib/typescript/src/__stubs__/createStackNavigator.d.ts +1 -1
- package/lib/typescript/src/__stubs__/createStackNavigator.d.ts.map +1 -1
- package/lib/typescript/src/createMemoryHistory.d.ts.map +1 -1
- package/lib/typescript/src/useDeepStableValue.d.ts +2 -0
- package/lib/typescript/src/useDeepStableValue.d.ts.map +1 -0
- package/lib/typescript/src/useLinkProps.d.ts +12 -3
- package/lib/typescript/src/useLinkProps.d.ts.map +1 -1
- package/lib/typescript/src/useLinking.d.ts.map +1 -1
- package/lib/typescript/src/useLinking.native.d.ts +2 -2
- package/package.json +11 -11
- package/src/Link.tsx +30 -12
- package/src/createMemoryHistory.tsx +19 -4
- package/src/useDeepStableValue.tsx +12 -0
- package/src/useLinkProps.tsx +192 -91
- package/src/useLinking.tsx +9 -2
package/lib/module/Link.js
CHANGED
|
@@ -11,7 +11,7 @@ import { useLinkProps } from "./useLinkProps.js";
|
|
|
11
11
|
* @param props.screen Name of the screen to navigate to (e.g. `'Feeds'`).
|
|
12
12
|
* @param props.params Params to pass to the screen to navigate to (e.g. `{ sort: 'hot' }`).
|
|
13
13
|
* @param props.href Optional absolute path to use for the href (e.g. `/feeds/hot`).
|
|
14
|
-
* @param props.action Optional action to
|
|
14
|
+
* @param props.action Optional action to override the in-page navigation. The `href` is still derived from `screen`, so this can be used to render a link while dispatching a different action (e.g. a `replace`).
|
|
15
15
|
* @param props.children Child elements to render the content.
|
|
16
16
|
*/
|
|
17
17
|
export function Link({
|
|
@@ -20,12 +20,9 @@ export function Link({
|
|
|
20
20
|
action,
|
|
21
21
|
href,
|
|
22
22
|
style,
|
|
23
|
+
target,
|
|
23
24
|
...rest
|
|
24
25
|
}) {
|
|
25
|
-
const {
|
|
26
|
-
colors,
|
|
27
|
-
fonts
|
|
28
|
-
} = useTheme();
|
|
29
26
|
// @ts-expect-error: This is already type-checked by the prop types
|
|
30
27
|
const props = useLinkProps({
|
|
31
28
|
screen,
|
|
@@ -33,7 +30,19 @@ export function Link({
|
|
|
33
30
|
action,
|
|
34
31
|
href
|
|
35
32
|
});
|
|
33
|
+
|
|
34
|
+
// Keep usage of `useTheme` after `useLinkProps`
|
|
35
|
+
// This ensures proper error when used outside of navigation container
|
|
36
|
+
const {
|
|
37
|
+
colors,
|
|
38
|
+
fonts
|
|
39
|
+
} = useTheme();
|
|
36
40
|
const onPress = e => {
|
|
41
|
+
if (rest.disabled) {
|
|
42
|
+
e.preventDefault();
|
|
43
|
+
e.stopPropagation();
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
37
46
|
if ('onPress' in rest) {
|
|
38
47
|
rest.onPress?.(e);
|
|
39
48
|
}
|
|
@@ -48,7 +57,15 @@ export function Link({
|
|
|
48
57
|
...rest,
|
|
49
58
|
...Platform.select({
|
|
50
59
|
web: {
|
|
51
|
-
|
|
60
|
+
'aria-disabled': rest.disabled,
|
|
61
|
+
'onAuxClick': rest.disabled ? e => {
|
|
62
|
+
e.preventDefault();
|
|
63
|
+
e.stopPropagation();
|
|
64
|
+
} : undefined,
|
|
65
|
+
'onClick': onPress,
|
|
66
|
+
'hrefAttrs': {
|
|
67
|
+
target
|
|
68
|
+
}
|
|
52
69
|
},
|
|
53
70
|
default: {
|
|
54
71
|
onPress
|
package/lib/module/Link.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useTheme","React","Platform","Text","useLinkProps","Link","screen","params","action","href","style","rest","
|
|
1
|
+
{"version":3,"names":["useTheme","React","Platform","Text","useLinkProps","Link","screen","params","action","href","style","target","rest","props","colors","fonts","onPress","e","disabled","preventDefault","stopPropagation","defaultPrevented","createElement","select","web","undefined","default","color","primary","regular"],"sourceRoot":"../../src","sources":["Link.tsx"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,wBAAwB;AACjD,OAAO,KAAKC,KAAK,MAAM,OAAO;AAC9B,SAEEC,QAAQ,EACRC,IAAI,QAEC,cAAc;AAErB,SAAyBC,YAAY,QAAQ,mBAAgB;AAe7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,IAAIA,CAAkD;EACpEC,MAAM;EACNC,MAAM;EACNC,MAAM;EACNC,IAAI;EACJC,KAAK;EACLC,MAAM;EACN,GAAGC;AACa,CAAC,EAAE;EACnB;EACA,MAAMC,KAAK,GAAGT,YAAY,CAAY;IAAEE,MAAM;IAAEC,MAAM;IAAEC,MAAM;IAAEC;EAAK,CAAC,CAAC;;EAEvE;EACA;EACA,MAAM;IAAEK,MAAM;IAAEC;EAAM,CAAC,GAAGf,QAAQ,CAAC,CAAC;EAEpC,MAAMgB,OAAO,GAAIC,CAAa,IAAK;IACjC,IAAIL,IAAI,CAACM,QAAQ,EAAE;MACjBD,CAAC,CAACE,cAAc,CAAC,CAAC;MAClBF,CAAC,CAACG,eAAe,CAAC,CAAC;MACnB;IACF;IAEA,IAAI,SAAS,IAAIR,IAAI,EAAE;MACrBA,IAAI,CAACI,OAAO,GAAGC,CAAC,CAAC;IACnB;;IAEA;IACA,IAAI,CAACA,CAAC,CAACI,gBAAgB,EAAE;MACvBR,KAAK,CAACG,OAAO,CAACC,CAAC,CAAC;IAClB;EACF,CAAC;EAED,oBAAOhB,KAAK,CAACqB,aAAa,CAACnB,IAAI,EAAE;IAC/B,GAAGU,KAAK;IACR,GAAGD,IAAI;IACP,GAAGV,QAAQ,CAACqB,MAAM,CAAC;MACjBC,GAAG,EAAE;QACH,eAAe,EAAEZ,IAAI,CAACM,QAAQ;QAC9B,YAAY,EAAEN,IAAI,CAACM,QAAQ,GACtBD,CAAkD,IAAK;UACtDA,CAAC,CAACE,cAAc,CAAC,CAAC;UAClBF,CAAC,CAACG,eAAe,CAAC,CAAC;QACrB,CAAC,GACDK,SAAS;QACb,SAAS,EAAET,OAAO;QAClB,WAAW,EAAE;UAAEL;QAAO;MACxB,CAAC;MACDe,OAAO,EAAE;QAAEV;MAAQ;IACrB,CAAC,CAAC;IACFN,KAAK,EAAE,CAAC;MAAEiB,KAAK,EAAEb,MAAM,CAACc;IAAQ,CAAC,EAAEb,KAAK,CAACc,OAAO,EAAEnB,KAAK;EACzD,CAAC,CAAC;AACJ","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { nanoid } from 'nanoid/non-secure';
|
|
4
|
-
const getPathWithoutHash = path => path.split('#')[0];
|
|
4
|
+
const getPathWithoutHash = path => path.split('#')[0] ?? '';
|
|
5
5
|
export function createMemoryHistory() {
|
|
6
6
|
let index = 0;
|
|
7
7
|
let items = [];
|
|
@@ -40,6 +40,9 @@ export function createMemoryHistory() {
|
|
|
40
40
|
// We need to find the index from the element before current to get closest path to go back to
|
|
41
41
|
for (let i = index - 1; i >= 0; i--) {
|
|
42
42
|
const item = items[i];
|
|
43
|
+
if (item == null) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
43
46
|
if (item.path === pathWithoutHash) {
|
|
44
47
|
return i;
|
|
45
48
|
}
|
|
@@ -100,7 +103,8 @@ export function createMemoryHistory() {
|
|
|
100
103
|
}];
|
|
101
104
|
index = 0;
|
|
102
105
|
} else {
|
|
103
|
-
|
|
106
|
+
const item = items[index];
|
|
107
|
+
if (item?.path === pathWithoutHash) {
|
|
104
108
|
pathWithHash = pathWithHash + hash;
|
|
105
109
|
}
|
|
106
110
|
items[index] = {
|
|
@@ -139,6 +143,7 @@ export function createMemoryHistory() {
|
|
|
139
143
|
if (n === 0) {
|
|
140
144
|
return;
|
|
141
145
|
}
|
|
146
|
+
const targetId = items[index]?.id;
|
|
142
147
|
|
|
143
148
|
// When we call `history.go`, `popstate` will fire when there's history to go back to
|
|
144
149
|
// So we need to somehow handle following cases:
|
|
@@ -148,7 +153,12 @@ export function createMemoryHistory() {
|
|
|
148
153
|
return new Promise((resolve, reject) => {
|
|
149
154
|
const done = interrupted => {
|
|
150
155
|
clearTimeout(timer);
|
|
151
|
-
|
|
156
|
+
|
|
157
|
+
// The current entry may not be the one we intended to land on:
|
|
158
|
+
// - The traversal didn't happen yet, e.g. it took longer than the timeout
|
|
159
|
+
// - The user navigated in the browser while our traversal was in-flight
|
|
160
|
+
// So we treat it the same as the operation being interrupted
|
|
161
|
+
if (interrupted || window.history.state?.id !== targetId) {
|
|
152
162
|
reject(new Error('History was changed during navigation.'));
|
|
153
163
|
return;
|
|
154
164
|
}
|
|
@@ -179,9 +189,10 @@ export function createMemoryHistory() {
|
|
|
179
189
|
// But on Firefox, it seems to take much longer, around 50ms from our testing
|
|
180
190
|
// We're using a hacky timeout since there doesn't seem to be way to know for sure
|
|
181
191
|
const timer = setTimeout(() => {
|
|
192
|
+
window.removeEventListener('popstate', onPopState);
|
|
182
193
|
const foundIndex = pending.findIndex(it => it.ref === done);
|
|
183
194
|
if (foundIndex > -1) {
|
|
184
|
-
pending[foundIndex]
|
|
195
|
+
pending[foundIndex]?.cb();
|
|
185
196
|
pending.splice(foundIndex, 1);
|
|
186
197
|
}
|
|
187
198
|
index = this.index;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["nanoid","getPathWithoutHash","path","split","createMemoryHistory","index","items","pending","interrupt","forEach","it","cb","history","id","window","state","findIndex","item","get","backIndex","pathWithoutHash","i","push","slice","length","pushState","replace","pathWithHash","hash","includes","location","replaceState","go","n","nextIndex","lastItemIndex","Promise","resolve","reject","done","interrupted","clearTimeout","timer","Error","title","document","ref","setTimeout","
|
|
1
|
+
{"version":3,"names":["nanoid","getPathWithoutHash","path","split","createMemoryHistory","index","items","pending","interrupt","forEach","it","cb","history","id","window","state","findIndex","item","get","backIndex","pathWithoutHash","i","push","slice","length","pushState","replace","pathWithHash","hash","includes","location","replaceState","go","n","nextIndex","lastItemIndex","targetId","Promise","resolve","reject","done","interrupted","clearTimeout","timer","Error","title","document","ref","setTimeout","removeEventListener","onPopState","foundIndex","splice","last","pop","addEventListener","listen","listener"],"sourceRoot":"../../src","sources":["createMemoryHistory.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import isEqual from 'fast-deep-equal';
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
export function useDeepStableValue(value) {
|
|
6
|
+
const valueRef = React.useRef(value);
|
|
7
|
+
if (!isEqual(valueRef.current, value)) {
|
|
8
|
+
valueRef.current = value;
|
|
9
|
+
}
|
|
10
|
+
return valueRef.current;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=useDeepStableValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["isEqual","React","useDeepStableValue","value","valueRef","useRef","current"],"sourceRoot":"../../src","sources":["useDeepStableValue.tsx"],"mappings":";;AAAA,OAAOA,OAAO,MAAM,iBAAiB;AACrC,OAAO,KAAKC,KAAK,MAAM,OAAO;AAE9B,OAAO,SAASC,kBAAkBA,CAAIC,KAAQ,EAAK;EACjD,MAAMC,QAAQ,GAAGH,KAAK,CAACI,MAAM,CAACF,KAAK,CAAC;EAEpC,IAAI,CAACH,OAAO,CAACI,QAAQ,CAACE,OAAO,EAAEH,KAAK,CAAC,EAAE;IACrCC,QAAQ,CAACE,OAAO,GAAGH,KAAK;EAC1B;EAEA,OAAOC,QAAQ,CAACE,OAAO;AACzB","ignoreList":[]}
|
|
@@ -1,24 +1,69 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { getPathFromState, NavigationContainerRefContext, NavigationHelpersContext } from '@react-navigation/core';
|
|
3
|
+
import { CommonActions, getPathFromState, NavigationContainerRefContext, NavigationHelpersContext } from '@react-navigation/core';
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import { Platform } from 'react-native';
|
|
6
|
+
import useLatestCallback from 'use-latest-callback';
|
|
6
7
|
import { LinkingContext } from "./LinkingContext.js";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
import { useDeepStableValue } from "./useDeepStableValue.js";
|
|
9
|
+
const NESTED_KEYS = ['payload', 'params', 'state', 'routes'];
|
|
10
|
+
const NESTED_PARAMS_KEYS = ['params', 'state'];
|
|
11
|
+
const NAVIGATE_ACTION_TYPES = ['NAVIGATE', 'PUSH', 'REPLACE', 'POP_TO', 'JUMP_TO'];
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Nested params are tracked as consumed after handling
|
|
15
|
+
* So navigating with same params again won't work
|
|
16
|
+
* This can happen if the action or params are memoized
|
|
17
|
+
* Or component hasn't re-renderd to re-create inline objects
|
|
18
|
+
* So we clone the action and params when necessary before dispatch
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
function clone(value, keys = NESTED_KEYS, clones) {
|
|
22
|
+
if (typeof value !== 'object' || value == null) {
|
|
23
|
+
return value;
|
|
10
24
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
25
|
+
const existing = clones?.get(value);
|
|
26
|
+
if (existing) {
|
|
27
|
+
return existing;
|
|
28
|
+
}
|
|
29
|
+
const isArray = Array.isArray(value);
|
|
30
|
+
if (keys === NESTED_PARAMS_KEYS && 'screen' in value && typeof value.screen !== 'string' && !('state' in value && typeof value.state === 'object' && value.state != null && 'routes' in value.state && Array.isArray(value.state.routes))) {
|
|
31
|
+
return value;
|
|
32
|
+
}
|
|
33
|
+
let copy = keys === NESTED_PARAMS_KEYS ? {
|
|
34
|
+
...value
|
|
35
|
+
} : undefined;
|
|
36
|
+
clones ??= new WeakMap();
|
|
37
|
+
clones.set(value, copy ?? value);
|
|
38
|
+
for (const key of isArray ? value.keys() : keys) {
|
|
39
|
+
const nested = Reflect.get(value, key);
|
|
40
|
+
const cloned = clone(nested, key === 'params' ? NESTED_PARAMS_KEYS : NESTED_KEYS, clones);
|
|
41
|
+
if (cloned !== nested) {
|
|
42
|
+
copy ??= isArray ? [...value] : {
|
|
43
|
+
...value
|
|
44
|
+
};
|
|
45
|
+
clones.set(value, copy);
|
|
46
|
+
Object.assign(copy, {
|
|
47
|
+
[key]: cloned
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return copy ?? value;
|
|
52
|
+
}
|
|
53
|
+
const getTargetFromAction = (action, screens) => {
|
|
54
|
+
if (action === undefined || screens === undefined) {
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
const {
|
|
58
|
+
payload
|
|
59
|
+
} = action;
|
|
60
|
+
if (!NAVIGATE_ACTION_TYPES.includes(action.type) || payload === undefined || !('name' in payload) || typeof payload.name !== 'string' || !(payload.name in screens)) {
|
|
61
|
+
return undefined;
|
|
20
62
|
}
|
|
21
|
-
return
|
|
63
|
+
return {
|
|
64
|
+
screen: payload.name,
|
|
65
|
+
params: 'params' in payload && typeof payload.params === 'object' && payload.params != null ? payload.params : undefined
|
|
66
|
+
};
|
|
22
67
|
};
|
|
23
68
|
|
|
24
69
|
/**
|
|
@@ -27,65 +72,63 @@ const getStateFromParams = params => {
|
|
|
27
72
|
* @param props.screen Name of the screen to navigate to (e.g. `'Feeds'`).
|
|
28
73
|
* @param props.params Params to pass to the screen to navigate to (e.g. `{ sort: 'hot' }`).
|
|
29
74
|
* @param props.href Optional absolute path to use for the href (e.g. `/feeds/hot`).
|
|
30
|
-
* @param props.action Optional action to
|
|
75
|
+
* @param props.action Optional action to override the in-page navigation. The `href` is still derived from `screen`, so this can be used to render a link while dispatching a different action (e.g. a `replace`).
|
|
31
76
|
*/
|
|
32
77
|
export function useLinkProps({
|
|
33
78
|
screen,
|
|
34
79
|
params,
|
|
35
|
-
|
|
36
|
-
|
|
80
|
+
action,
|
|
81
|
+
...rest
|
|
37
82
|
}) {
|
|
38
83
|
const root = React.useContext(NavigationContainerRefContext);
|
|
39
|
-
const navigation = React.useContext(NavigationHelpersContext);
|
|
84
|
+
const navigation = React.useContext(NavigationHelpersContext) ?? root;
|
|
85
|
+
if (navigation == null) {
|
|
86
|
+
throw new Error("Couldn't find a navigation object. Is your component inside NavigationContainer?");
|
|
87
|
+
}
|
|
40
88
|
const {
|
|
41
89
|
options
|
|
42
90
|
} = React.useContext(LinkingContext);
|
|
43
|
-
const onPress = e => {
|
|
44
|
-
|
|
45
|
-
if (Platform.OS !== 'web' || !e) {
|
|
46
|
-
e?.preventDefault?.();
|
|
47
|
-
shouldHandle = true;
|
|
48
|
-
} else {
|
|
49
|
-
// ignore clicks with modifier keys
|
|
91
|
+
const onPress = useLatestCallback(e => {
|
|
92
|
+
if (Platform.OS === 'web' && e) {
|
|
50
93
|
const hasModifierKey = 'metaKey' in e && e.metaKey || 'altKey' in e && e.altKey || 'ctrlKey' in e && e.ctrlKey || 'shiftKey' in e && e.shiftKey;
|
|
51
|
-
|
|
52
|
-
// only handle left clicks
|
|
53
94
|
const isLeftClick = 'button' in e ? e.button == null || e.button === 0 : true;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
if (!hasModifierKey && isLeftClick && isSelfTarget) {
|
|
58
|
-
e.preventDefault?.();
|
|
59
|
-
shouldHandle = true;
|
|
95
|
+
const isSelfTarget = e.currentTarget && 'target' in e.currentTarget ? [undefined, null, '', '_self'].includes(e.currentTarget.target) : true;
|
|
96
|
+
if (hasModifierKey || !isLeftClick || !isSelfTarget) {
|
|
97
|
+
return;
|
|
60
98
|
}
|
|
61
99
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
throw new Error("Couldn't find a navigation object. Is your component inside NavigationContainer?");
|
|
70
|
-
}
|
|
71
|
-
} else {
|
|
72
|
-
// @ts-expect-error This is already type-checked by the prop types
|
|
73
|
-
navigation?.navigate(screen, params);
|
|
100
|
+
e?.preventDefault();
|
|
101
|
+
let cloned;
|
|
102
|
+
if (action != null) {
|
|
103
|
+
cloned = clone(action);
|
|
104
|
+
} else {
|
|
105
|
+
if (screen == null) {
|
|
106
|
+
throw new Error("Couldn't find a screen to navigate to. Make sure to provide a screen name.");
|
|
74
107
|
}
|
|
108
|
+
cloned = clone(
|
|
109
|
+
// @ts-expect-error This is already type-checked by the prop types
|
|
110
|
+
CommonActions.navigate(screen, params));
|
|
75
111
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
112
|
+
navigation.dispatch(cloned);
|
|
113
|
+
});
|
|
114
|
+
const target = useDeepStableValue(Platform.OS === 'web' ? typeof screen === 'string' ? {
|
|
115
|
+
screen,
|
|
116
|
+
params: typeof params === 'object' && params != null ? params : undefined
|
|
117
|
+
} : getTargetFromAction(action, options?.config?.screens) : undefined);
|
|
118
|
+
const href = React.useMemo(() => {
|
|
119
|
+
if (Platform.OS !== 'web' || rest.href != null || target == null) {
|
|
120
|
+
return rest.href;
|
|
121
|
+
}
|
|
122
|
+
const getPath = options?.getPathFromState ?? getPathFromState;
|
|
123
|
+
return getPath({
|
|
80
124
|
routes: [{
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
// @ts-expect-error this is fine 🔥
|
|
84
|
-
params: params,
|
|
85
|
-
// @ts-expect-error this is fine 🔥
|
|
86
|
-
state: getStateFromParams(params)
|
|
125
|
+
name: target.screen,
|
|
126
|
+
params: target.params
|
|
87
127
|
}]
|
|
88
|
-
}, options?.config)
|
|
128
|
+
}, options?.config);
|
|
129
|
+
}, [rest.href, target, options?.getPathFromState, options?.config]);
|
|
130
|
+
return {
|
|
131
|
+
href,
|
|
89
132
|
role: 'link',
|
|
90
133
|
onPress
|
|
91
134
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getPathFromState","NavigationContainerRefContext","NavigationHelpersContext","React","Platform","LinkingContext","
|
|
1
|
+
{"version":3,"names":["CommonActions","getPathFromState","NavigationContainerRefContext","NavigationHelpersContext","React","Platform","useLatestCallback","LinkingContext","useDeepStableValue","NESTED_KEYS","NESTED_PARAMS_KEYS","NAVIGATE_ACTION_TYPES","clone","value","keys","clones","existing","get","isArray","Array","screen","state","routes","copy","undefined","WeakMap","set","key","nested","Reflect","cloned","Object","assign","getTargetFromAction","action","screens","payload","includes","type","name","params","useLinkProps","rest","root","useContext","navigation","Error","options","onPress","e","OS","hasModifierKey","metaKey","altKey","ctrlKey","shiftKey","isLeftClick","button","isSelfTarget","currentTarget","target","preventDefault","navigate","dispatch","config","href","useMemo","getPath","role"],"sourceRoot":"../../src","sources":["useLinkProps.tsx"],"mappings":"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","ignoreList":[]}
|
package/lib/module/useLinking.js
CHANGED
|
@@ -51,6 +51,11 @@ const findMatchingState = (a, b) => {
|
|
|
51
51
|
* Check if the state change is popping the last route or history entry.
|
|
52
52
|
*/
|
|
53
53
|
const isPoppingLastEntry = (current, record) => {
|
|
54
|
+
const currentRoute = current.routes[current.index];
|
|
55
|
+
const recordRoute = record.routes[record.index];
|
|
56
|
+
if (currentRoute == null || recordRoute == null) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
54
59
|
if (current.history && record.history) {
|
|
55
60
|
return current.history.length === record.history.length + 1;
|
|
56
61
|
}
|
|
@@ -352,8 +357,6 @@ export function useLinking(ref, {
|
|
|
352
357
|
}
|
|
353
358
|
|
|
354
359
|
// Skip if the state hasn't changed since we last synced it
|
|
355
|
-
// This avoids redundant work when the committed `state` event fires
|
|
356
|
-
// after we already synced from `__unsafe_action__`
|
|
357
360
|
if (previousState === state) {
|
|
358
361
|
return;
|
|
359
362
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["CommonActions","findFocusedRoute","getActionFromState","getActionFromStateDefault","getPathFromState","getPathFromStateDefault","getStateFromPath","getStateFromPathDefault","useNavigationIndependentTree","isEqual","React","createMemoryHistory","ServerContext","getRoutesUntilIndex","state","routes","slice","index","getHistoryLength","history","length","findMatchingState","a","b","undefined","key","aHistoryLength","bHistoryLength","aRoute","bRoute","aChildState","bChildState","isPoppingLastEntry","current","record","currentRoutes","recordRoutes","every","route","i","currentRoute","series","cb","queue","Promise","resolve","callback","then","catch","e","console","error","linkingHandlers","useLinking","ref","enabled","config","independent","useEffect","process","env","NODE_ENV","join","trim","handler","Symbol","push","indexOf","splice","useState","enabledRef","useRef","configRef","getStateFromPathRef","getPathFromStateRef","getActionFromStateRef","validateRoutesNotExistInRootState","useCallback","navigation","rootState","getRootState","some","r","routeNames","includes","name","server","useContext","getInitialState","value","location","window","path","pathname","search","thenable","onfulfilled","previousIndexRef","previousStateRef","pendingPopStateDeltaRef","listen","previousIndex","rollbackHistory","delta","go","rollbackHistoryIfPrevented","pendingDelta","removePrevented","actionChangedState","unsubscribeEvent","addListener","data","type","defaultPrevented","unsubscribeAction","noop","dispatch","action","resetRoot","get","currentState","currentFocused","recordFocused","pending","goBack","warn","message","getPathForRoute","stateForPath","focusedRoute","params","previousRoute","hash","replace","onStateChange","previousState","pendingPopStateDelta","previousFocusedState","focusedState","historyDelta","nextIndex","backIndex","currentIndex"],"sourceRoot":"../../src","sources":["useLinking.tsx"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["CommonActions","findFocusedRoute","getActionFromState","getActionFromStateDefault","getPathFromState","getPathFromStateDefault","getStateFromPath","getStateFromPathDefault","useNavigationIndependentTree","isEqual","React","createMemoryHistory","ServerContext","getRoutesUntilIndex","state","routes","slice","index","getHistoryLength","history","length","findMatchingState","a","b","undefined","key","aHistoryLength","bHistoryLength","aRoute","bRoute","aChildState","bChildState","isPoppingLastEntry","current","record","currentRoute","recordRoute","currentRoutes","recordRoutes","every","route","i","series","cb","queue","Promise","resolve","callback","then","catch","e","console","error","linkingHandlers","useLinking","ref","enabled","config","independent","useEffect","process","env","NODE_ENV","join","trim","handler","Symbol","push","indexOf","splice","useState","enabledRef","useRef","configRef","getStateFromPathRef","getPathFromStateRef","getActionFromStateRef","validateRoutesNotExistInRootState","useCallback","navigation","rootState","getRootState","some","r","routeNames","includes","name","server","useContext","getInitialState","value","location","window","path","pathname","search","thenable","onfulfilled","previousIndexRef","previousStateRef","pendingPopStateDeltaRef","listen","previousIndex","rollbackHistory","delta","go","rollbackHistoryIfPrevented","pendingDelta","removePrevented","actionChangedState","unsubscribeEvent","addListener","data","type","defaultPrevented","unsubscribeAction","noop","dispatch","action","resetRoot","get","currentState","currentFocused","recordFocused","pending","goBack","warn","message","getPathForRoute","stateForPath","focusedRoute","params","previousRoute","hash","replace","onStateChange","previousState","pendingPopStateDelta","previousFocusedState","focusedState","historyDelta","nextIndex","backIndex","currentIndex"],"sourceRoot":"../../src","sources":["useLinking.tsx"],"mappings":";;AAAA,SACEA,aAAa,EACbC,gBAAgB,EAChBC,kBAAkB,IAAIC,yBAAyB,EAC/CC,gBAAgB,IAAIC,uBAAuB,EAC3CC,gBAAgB,IAAIC,uBAAuB,EAI3CC,4BAA4B,QACvB,wBAAwB;AAC/B,OAAOC,OAAO,MAAM,iBAAiB;AACrC,OAAO,KAAKC,KAAK,MAAM,OAAO;AAE9B,SAASC,mBAAmB,QAAQ,0BAAuB;AAC3D,SAASC,aAAa,QAAQ,oBAAiB;;AAK/C;AACA;AACA;AACA;;AAGA,MAAMC,mBAAmB,GAAIC,KAAsB,IACjDA,KAAK,CAACC,MAAM,CAACC,KAAK,CAAC,CAAC,EAAEF,KAAK,CAACG,KAAK,GAAG,CAAC,CAAC;;AAExC;AACA;AACA;AACA,MAAMC,gBAAgB,GAAIJ,KAAsB,IAC9CA,KAAK,CAACK,OAAO,GAAGL,KAAK,CAACK,OAAO,CAACC,MAAM,GAAGP,mBAAmB,CAACC,KAAK,CAAC,CAACM,MAAM;;AAE1E;AACA;AACA;AACA;AACA,MAAMC,iBAAiB,GAAGA,CACxBC,CAAgB,EAChBC,CAAgB,KACmB;EACnC,IAAID,CAAC,KAAKE,SAAS,IAAID,CAAC,KAAKC,SAAS,IAAIF,CAAC,CAACG,GAAG,KAAKF,CAAC,CAACE,GAAG,EAAE;IACzD,OAAO,CAACD,SAAS,EAAEA,SAAS,CAAC;EAC/B;EAEA,MAAME,cAAc,GAAGR,gBAAgB,CAACI,CAAC,CAAC;EAC1C,MAAMK,cAAc,GAAGT,gBAAgB,CAACK,CAAC,CAAC;EAE1C,MAAMK,MAAM,GAAGN,CAAC,CAACP,MAAM,CAACO,CAAC,CAACL,KAAK,CAAC;EAChC,MAAMY,MAAM,GAAGN,CAAC,CAACR,MAAM,CAACQ,CAAC,CAACN,KAAK,CAAC;EAEhC,IAAIW,MAAM,IAAI,IAAI,IAAIC,MAAM,IAAI,IAAI,EAAE;IACpC,OAAO,CAACP,CAAC,EAAEC,CAAC,CAAC;EACf;EAEA,MAAMO,WAAW,GAAGF,MAAM,CAACd,KAAsB;EACjD,MAAMiB,WAAW,GAAGF,MAAM,CAACf,KAAsB;;EAEjD;EACA;EACA;EACA;EACA;EACA,IACEY,cAAc,KAAKC,cAAc,IACjCC,MAAM,CAACH,GAAG,KAAKI,MAAM,CAACJ,GAAG,IACzBK,WAAW,KAAKN,SAAS,IACzBO,WAAW,KAAKP,SAAS,IACzBM,WAAW,CAACL,GAAG,KAAKM,WAAW,CAACN,GAAG,EACnC;IACA,OAAO,CAACH,CAAC,EAAEC,CAAC,CAAC;EACf;EAEA,OAAOF,iBAAiB,CAACS,WAAW,EAAEC,WAAW,CAAC;AACpD,CAAC;;AAED;AACA;AACA;AACA,MAAMC,kBAAkB,GAAGA,CACzBC,OAAwB,EACxBC,MAAuB,KACX;EACZ,MAAMC,YAAY,GAAGF,OAAO,CAAClB,MAAM,CAACkB,OAAO,CAAChB,KAAK,CAAC;EAClD,MAAMmB,WAAW,GAAGF,MAAM,CAACnB,MAAM,CAACmB,MAAM,CAACjB,KAAK,CAAC;EAE/C,IAAIkB,YAAY,IAAI,IAAI,IAAIC,WAAW,IAAI,IAAI,EAAE;IAC/C,OAAO,KAAK;EACd;EAEA,IAAIH,OAAO,CAACd,OAAO,IAAIe,MAAM,CAACf,OAAO,EAAE;IACrC,OAAOc,OAAO,CAACd,OAAO,CAACC,MAAM,KAAKc,MAAM,CAACf,OAAO,CAACC,MAAM,GAAG,CAAC;EAC7D;EAEA,MAAMiB,aAAa,GAAGxB,mBAAmB,CAACoB,OAAO,CAAC;EAClD,MAAMK,YAAY,GAAGzB,mBAAmB,CAACqB,MAAM,CAAC;EAEhD,IAAIG,aAAa,CAACjB,MAAM,KAAKkB,YAAY,CAAClB,MAAM,GAAG,CAAC,EAAE;IACpD,OAAOkB,YAAY,CAACC,KAAK,CAAC,CAACC,KAAK,EAAEC,CAAC,KAAK;MACtC,MAAMN,YAAY,GAAGE,aAAa,CAACI,CAAC,CAAC;MAErC,OAAON,YAAY,IAAI,IAAI,IAAIK,KAAK,CAACf,GAAG,KAAKU,YAAY,CAACV,GAAG;IAC/D,CAAC,CAAC;EACJ;EAEA,OAAO,KAAK;AACd,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMiB,MAAM,GAAIC,EAAuB,IAAK;EACjD,IAAIC,KAAK,GAAGC,OAAO,CAACC,OAAO,CAAC,CAAC;EAE7B,MAAMC,QAAQ,GAAGA,CAAA,KAAM;IACrB;IACAH,KAAK,GAAGA,KAAK,CAACI,IAAI,CAACL,EAAE,CAAC,CAACM,KAAK,CAAEC,CAAC,IAAK;MAClCC,OAAO,CAACC,KAAK,CAACF,CAAC,CAAC;IAClB,CAAC,CAAC;EACJ,CAAC;EAED,OAAOH,QAAQ;AACjB,CAAC;AAED,MAAMM,eAAyB,GAAG,EAAE;AAIpC,OAAO,SAASC,UAAUA,CACxBC,GAAkE,EAClE;EACEC,OAAO,GAAG,IAAI;EACdC,MAAM;EACNnD,gBAAgB,GAAGC,uBAAuB;EAC1CH,gBAAgB,GAAGC,uBAAuB;EAC1CH,kBAAkB,GAAGC;AACd,CAAC,EACV;EACA,MAAMuD,WAAW,GAAGlD,4BAA4B,CAAC,CAAC;EAElDE,KAAK,CAACiD,SAAS,CAAC,MAAM;IACpB,IAAIC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;MACzC,OAAOtC,SAAS;IAClB;IAEA,IAAIkC,WAAW,EAAE;MACf,OAAOlC,SAAS;IAClB;IAEA,IAAIgC,OAAO,KAAK,KAAK,IAAIH,eAAe,CAACjC,MAAM,EAAE;MAC/C+B,OAAO,CAACC,KAAK,CACX,CACE,6KAA6K,EAC7K,uFAAuF,EACvF,4DAA4D,CAC7D,CACEW,IAAI,CAAC,IAAI,CAAC,CACVC,IAAI,CAAC,CACV,CAAC;IACH;IAEA,MAAMC,OAAO,GAAGC,MAAM,CAAC,CAAC;IAExB,IAAIV,OAAO,KAAK,KAAK,EAAE;MACrBH,eAAe,CAACc,IAAI,CAACF,OAAO,CAAC;IAC/B;IAEA,OAAO,MAAM;MACX,MAAMhD,KAAK,GAAGoC,eAAe,CAACe,OAAO,CAACH,OAAO,CAAC;MAE9C,IAAIhD,KAAK,GAAG,CAAC,CAAC,EAAE;QACdoC,eAAe,CAACgB,MAAM,CAACpD,KAAK,EAAE,CAAC,CAAC;MAClC;IACF,CAAC;EACH,CAAC,EAAE,CAACuC,OAAO,EAAEE,WAAW,CAAC,CAAC;EAE1B,MAAM,CAACvC,OAAO,CAAC,GAAGT,KAAK,CAAC4D,QAAQ,CAAC3D,mBAAmB,CAAC;;EAErD;EACA;EACA;EACA,MAAM4D,UAAU,GAAG7D,KAAK,CAAC8D,MAAM,CAAChB,OAAO,CAAC;EACxC,MAAMiB,SAAS,GAAG/D,KAAK,CAAC8D,MAAM,CAACf,MAAM,CAAC;EACtC,MAAMiB,mBAAmB,GAAGhE,KAAK,CAAC8D,MAAM,CAAClE,gBAAgB,CAAC;EAC1D,MAAMqE,mBAAmB,GAAGjE,KAAK,CAAC8D,MAAM,CAACpE,gBAAgB,CAAC;EAC1D,MAAMwE,qBAAqB,GAAGlE,KAAK,CAAC8D,MAAM,CAACtE,kBAAkB,CAAC;EAE9DQ,KAAK,CAACiD,SAAS,CAAC,MAAM;IACpBY,UAAU,CAACtC,OAAO,GAAGuB,OAAO;IAC5BiB,SAAS,CAACxC,OAAO,GAAGwB,MAAM;IAC1BiB,mBAAmB,CAACzC,OAAO,GAAG3B,gBAAgB;IAC9CqE,mBAAmB,CAAC1C,OAAO,GAAG7B,gBAAgB;IAC9CwE,qBAAqB,CAAC3C,OAAO,GAAG/B,kBAAkB;EACpD,CAAC,CAAC;EAEF,MAAM2E,iCAAiC,GAAGnE,KAAK,CAACoE,WAAW,CACxDhE,KAAkB,IAAK;IACtB,MAAMiE,UAAU,GAAGxB,GAAG,CAACtB,OAAO;IAC9B,MAAM+C,SAAS,GAAGD,UAAU,EAAEE,YAAY,CAAC,CAAC;IAC5C;IACA;IACA,OAAOnE,KAAK,EAAEC,MAAM,CAACmE,IAAI,CAAEC,CAAC,IAAK,CAACH,SAAS,EAAEI,UAAU,CAACC,QAAQ,CAACF,CAAC,CAACG,IAAI,CAAC,CAAC;EAC3E,CAAC,EACD,CAAC/B,GAAG,CACN,CAAC;EAED,MAAMgC,MAAM,GAAG7E,KAAK,CAAC8E,UAAU,CAAC5E,aAAa,CAAC;EAE9C,MAAM6E,eAAe,GAAG/E,KAAK,CAACoE,WAAW,CAAC,MAAM;IAC9C,IAAIY,KAA8B;IAElC,IAAInB,UAAU,CAACtC,OAAO,EAAE;MACtB,MAAM0D,QAAQ,GACZJ,MAAM,EAAEI,QAAQ,KACf,OAAOC,MAAM,KAAK,WAAW,GAAGA,MAAM,CAACD,QAAQ,GAAGnE,SAAS,CAAC;MAE/D,MAAMqE,IAAI,GAAGF,QAAQ,GAAGA,QAAQ,CAACG,QAAQ,GAAGH,QAAQ,CAACI,MAAM,GAAGvE,SAAS;MAEvE,IAAIqE,IAAI,EAAE;QACR,IAAI;UACFH,KAAK,GAAGhB,mBAAmB,CAACzC,OAAO,CAAC4D,IAAI,EAAEpB,SAAS,CAACxC,OAAO,CAAC;QAC9D,CAAC,CAAC,OAAOiB,CAAC,EAAE;UACVC,OAAO,CAACC,KAAK,CAACF,CAAC,CAAC;UAEhBwC,KAAK,GAAGlE,SAAS;QACnB;MACF;IACF;IAEA,MAAMwE,QAAQ,GAAG;MACfhD,IAAIA,CAACiD,WAAsD,EAAE;QAC3D,OAAOpD,OAAO,CAACC,OAAO,CAACmD,WAAW,GAAGA,WAAW,CAACP,KAAK,CAAC,GAAGA,KAAK,CAAC;MAClE,CAAC;MACDzC,KAAKA,CAAA,EAAG;QACN,OAAO+C,QAAQ;MACjB;IACF,CAAC;IAED,OAAOA,QAAQ;IACf;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,MAAME,gBAAgB,GAAGxF,KAAK,CAAC8D,MAAM,CAAqBhD,SAAS,CAAC;EACpE,MAAM2E,gBAAgB,GAAGzF,KAAK,CAAC8D,MAAM,CAA8BhD,SAAS,CAAC;EAC7E,MAAM4E,uBAAuB,GAAG1F,KAAK,CAAC8D,MAAM,CAC1ChD,SACF,CAAC;EAEDd,KAAK,CAACiD,SAAS,CAAC,MAAM;IACpBuC,gBAAgB,CAACjE,OAAO,GAAGd,OAAO,CAACF,KAAK;IAExC,OAAOE,OAAO,CAACkF,MAAM,CAAC,MAAM;MAC1B,MAAMtB,UAAU,GAAGxB,GAAG,CAACtB,OAAO;MAE9B,IAAI,CAAC8C,UAAU,IAAI,CAACvB,OAAO,EAAE;QAC3B;MACF;MAEA,MAAM;QAAEmC;MAAS,CAAC,GAAGC,MAAM;MAE3B,MAAMC,IAAI,GAAGF,QAAQ,CAACG,QAAQ,GAAGH,QAAQ,CAACI,MAAM;MAChD,MAAM9E,KAAK,GAAGE,OAAO,CAACF,KAAK;MAE3B,MAAMqF,aAAa,GAAGJ,gBAAgB,CAACjE,OAAO,IAAI,CAAC;MAEnDiE,gBAAgB,CAACjE,OAAO,GAAGhB,KAAK;MAEhC,MAAMsF,eAAe,GAAGA,CAAA,KAAM;QAC5B,MAAMC,KAAK,GAAGF,aAAa,GAAGrF,KAAK;QAEnC,IAAIuF,KAAK,KAAK,CAAC,EAAE;UACf;QACF;QAEArF,OAAO,CACJsF,EAAE,CAACD,KAAK;QACT;QAAA,EACExD,IAAI,CAAC,MAAM;UACXkD,gBAAgB,CAACjE,OAAO,GAAGd,OAAO,CAACF,KAAK;QAC1C,CAAC,CAAC,CACDgC,KAAK,CAAC,MAAM;UACX;QAAA,CACD,CAAC;MACN,CAAC;MAED,MAAMyD,0BAA0B,GAAGA,CACjC3D,QAAoB,EACpB4D,YAA2B,KACxB;QACH,IAAIC,eAAe,GAAG,KAAK;QAC3B,IAAIC,kBAAkB,GAAG,KAAK;QAE9B,MAAMC,gBAAgB,GAAG/B,UAAU,CAACgC,WAAW,CAC7C,kBAAkB,EACjB7D,CAAC,IAAK;UACL,IAAIA,CAAC,CAAC8D,IAAI,CAACC,IAAI,KAAK,cAAc,IAAI/D,CAAC,CAAC8D,IAAI,CAACE,gBAAgB,EAAE;YAC7DN,eAAe,GAAG,IAAI;UACxB;QACF,CACF,CAAC;;QAED;QACA;QACA;QACA,MAAMO,iBAAiB,GAAGpC,UAAU,CAACgC,WAAW,CAC9C,mBAAmB,EAClB7D,CAAC,IAAK;UACL,IAAI,CAACA,CAAC,CAAC8D,IAAI,CAACI,IAAI,EAAE;YAChBP,kBAAkB,GAAG,IAAI;UAC3B;QACF,CACF,CAAC;QAED,IAAI;UACF9D,QAAQ,CAAC,CAAC;QACZ,CAAC,SAAS;UACR+D,gBAAgB,CAAC,CAAC;UAClBK,iBAAiB,CAAC,CAAC;QACrB;QAEA,IAAIN,kBAAkB,EAAE;UACtB;UACA;UACAT,uBAAuB,CAACnE,OAAO,GAAG0E,YAAY;QAChD,CAAC,MAAM,IAAIC,eAAe,EAAE;UAC1BL,eAAe,CAAC,CAAC;QACnB;MACF,CAAC;MAED,MAAMc,QAAQ,GAAGA,CACfC,MAAiD,EACjDX,YAA2B,KACxB;QACHD,0BAA0B,CACxB,MAAM3B,UAAU,CAACsC,QAAQ,CAACC,MAAM,CAAC,EACjCX,YACF,CAAC;MACH,CAAC;MAED,MAAMY,SAAS,GAAGA,CAChBzG,KAAiD,EACjD6F,YAA2B,KACxB;QACHD,0BAA0B,CACxB,MAAM3B,UAAU,CAACwC,SAAS,CAACzG,KAAK,CAAC,EACjC6F,YACF,CAAC;MACH,CAAC;;MAED;MACA;MACA;MACA,MAAMzE,MAAM,GAAGf,OAAO,CAACqG,GAAG,CAACvG,KAAK,CAAC;MAEjC,IAAIiB,MAAM,EAAE2D,IAAI,KAAKA,IAAI,IAAI3D,MAAM,EAAEpB,KAAK,EAAE;QAC1C,MAAM2G,YAAY,GAAG1C,UAAU,CAACE,YAAY,CAAC,CAAC;QAE9C,MAAM,CAACyC,cAAc,EAAEC,aAAa,CAAC,GAAGtG,iBAAiB,CACvDoG,YAAY,EACZvF,MAAM,CAACpB,KACT,CAAC;QAED,IACEwF,aAAa,GAAGrF,KAAK,KAAK,CAAC,IAC3ByG,cAAc,IACdC,aAAa,IACb3F,kBAAkB,CAAC0F,cAAc,EAAEC,aAAa,CAAC,EACjD;UACA,MAAMC,OAAO,GAAGxB,uBAAuB,CAACnE,OAAO;;UAE/C;UACA;UACA;UACAoF,QAAQ,CACNrH,aAAa,CAAC6H,MAAM,CAAC,CAAC;UACtB;UACAD,OAAO,KAAK,SAAS,GAAG,SAAS,GAAG,CAACA,OAAO,IAAI,CAAC,IAAI,CACvD,CAAC;QACH,CAAC,MAAM;UACL;UACAL,SAAS,CACPrF,MAAM,CAACpB,KAAK,EACZ4G,cAAc,IAAIC,aAAa,GAC3BzG,gBAAgB,CAACyG,aAAa,CAAC,GAC7BzG,gBAAgB,CAACwG,cAAc,CAAC,GAClC,SACN,CAAC;QACH;QAEA;MACF;MAEA,IAAI5G,KAA8B;MAElC,IAAI;QACFA,KAAK,GAAG4D,mBAAmB,CAACzC,OAAO,CAAC4D,IAAI,EAAEpB,SAAS,CAACxC,OAAO,CAAC;MAC9D,CAAC,CAAC,OAAOiB,CAAC,EAAE;QACVC,OAAO,CAACC,KAAK,CAACF,CAAC,CAAC;QAEhBpC,KAAK,GAAGU,SAAS;MACnB;;MAEA;MACA;MACA,IAAIV,KAAK,EAAE;QACT;QACA;QACA,IAAI+D,iCAAiC,CAAC/D,KAAK,CAAC,EAAE;UAC5C;QACF;QAEA,IAAIG,KAAK,GAAGqF,aAAa,EAAE;UACzB,MAAMgB,MAAM,GAAG1C,qBAAqB,CAAC3C,OAAO,CAC1CnB,KAAK,EACL2D,SAAS,CAACxC,OACZ,CAAC;UAED,IAAIqF,MAAM,KAAK9F,SAAS,EAAE;YACxB,IAAI;cACF6F,QAAQ,CAACC,MAAM,EAAE,SAAS,CAAC;YAC7B,CAAC,CAAC,OAAOpE,CAAC,EAAE;cACV;cACA;cACAC,OAAO,CAAC2E,IAAI,CACV,qDAAqDjC,IAAI,MACvD,OAAO3C,CAAC,KAAK,QAAQ,IAAIA,CAAC,IAAI,IAAI,IAAI,SAAS,IAAIA,CAAC,GAChDA,CAAC,CAAC6E,OAAO,GACT7E,CAAC,EAET,CAAC;YACH;UACF,CAAC,MAAM;YACLqE,SAAS,CAACzG,KAAK,EAAE,SAAS,CAAC;UAC7B;QACF,CAAC,MAAM;UACLyG,SAAS,CAACzG,KAAK,EAAE,SAAS,CAAC;QAC7B;MACF,CAAC,MAAM;QACL;QACAyG,SAAS,CAACzG,KAAK,EAAE,SAAS,CAAC;MAC7B;IACF,CAAC,CAAC;EACJ,CAAC,EAAE,CAAC0C,OAAO,EAAErC,OAAO,EAAEoC,GAAG,EAAEsB,iCAAiC,CAAC,CAAC;EAE9DnE,KAAK,CAACiD,SAAS,CAAC,MAAM;IACpB,IAAI,CAACH,OAAO,EAAE;MACZ;IACF;IAEA,MAAMwE,eAAe,GAAGA,CACtBxF,KAA0C,EAC1C1B,KAAsB,KACX;MACX,IAAI+E,IAAI;;MAER;MACA;MACA,IAAIrD,KAAK,EAAEqD,IAAI,EAAE;QACf,IAAIoC,YAAqC;QAEzC,IAAI;UACFA,YAAY,GAAGvD,mBAAmB,CAACzC,OAAO,CACxCO,KAAK,CAACqD,IAAI,EACVpB,SAAS,CAACxC,OACZ,CAAC;QACH,CAAC,CAAC,OAAOiB,CAAC,EAAE;UACVC,OAAO,CAACC,KAAK,CAACF,CAAC,CAAC;UAEhB+E,YAAY,GAAGzG,SAAS;QAC1B;QAEA,IAAIyG,YAAY,EAAE;UAChB,MAAMC,YAAY,GAAGjI,gBAAgB,CAACgI,YAAY,CAAC;UAEnD,IACEC,YAAY,IACZA,YAAY,CAAC5C,IAAI,KAAK9C,KAAK,CAAC8C,IAAI,IAChC7E,OAAO,CAACyH,YAAY,CAACC,MAAM,EAAE3F,KAAK,CAAC2F,MAAM,CAAC,EAC1C;YACAtC,IAAI,GAAGrD,KAAK,CAACqD,IAAI;UACnB;QACF;MACF;MAEA,IAAIA,IAAI,IAAI,IAAI,EAAE;QAChBA,IAAI,GAAGlB,mBAAmB,CAAC1C,OAAO,CAACnB,KAAK,EAAE2D,SAAS,CAACxC,OAAO,CAAC;MAC9D;MAEA,MAAMmG,aAAa,GAAGjC,gBAAgB,CAAClE,OAAO,GAC1ChC,gBAAgB,CAACkG,gBAAgB,CAAClE,OAAO,CAAC,GAC1CT,SAAS;;MAEb;MACA,IACE4G,aAAa,IACb5F,KAAK,IACL,KAAK,IAAI4F,aAAa,IACtB,KAAK,IAAI5F,KAAK,IACd4F,aAAa,CAAC3G,GAAG,KAAKe,KAAK,CAACf,GAAG,EAC/B;QACAoE,IAAI,GAAGA,IAAI,GAAGF,QAAQ,CAAC0C,IAAI;MAC7B;MAEA,OAAOxC,IAAI;IACb,CAAC;IAED,IAAItC,GAAG,CAACtB,OAAO,EAAE;MACf;MACA;MACA,MAAMnB,KAAK,GAAGyC,GAAG,CAACtB,OAAO,CAACgD,YAAY,CAAC,CAAC;MAExC,IAAInE,KAAK,EAAE;QACT,MAAM0B,KAAK,GAAGvC,gBAAgB,CAACa,KAAK,CAAC;QACrC,MAAM+E,IAAI,GAAGmC,eAAe,CAACxF,KAAK,EAAE1B,KAAK,CAAC;QAE1C,IAAIqF,gBAAgB,CAAClE,OAAO,KAAKT,SAAS,EAAE;UAC1C2E,gBAAgB,CAAClE,OAAO,GAAGnB,KAAK;QAClC;QAEAK,OAAO,CAACmH,OAAO,CAAC;UAAEzC,IAAI;UAAE/E;QAAM,CAAC,CAAC;QAChCoF,gBAAgB,CAACjE,OAAO,GAAGd,OAAO,CAACF,KAAK;MAC1C;IACF;IAEA,MAAMsH,aAAa,GAAG,MAAAA,CAAA,KAAY;MAChC,MAAMxD,UAAU,GAAGxB,GAAG,CAACtB,OAAO;MAE9B,IAAI,CAAC8C,UAAU,IAAI,CAACvB,OAAO,EAAE;QAC3B;MACF;MAEA,MAAMgF,aAAa,GAAGrC,gBAAgB,CAAClE,OAAO;MAC9C,MAAMnB,KAAK,GAAGiE,UAAU,CAACE,YAAY,CAAC,CAAC;;MAEvC;MACA,IAAI,CAACnE,KAAK,EAAE;QACV;MACF;;MAEA;MACA,IAAI0H,aAAa,KAAK1H,KAAK,EAAE;QAC3B;MACF;MAEA,MAAM0B,KAAK,GAAGvC,gBAAgB,CAACa,KAAK,CAAC;MACrC,MAAM+E,IAAI,GAAGmC,eAAe,CAACxF,KAAK,EAAE1B,KAAK,CAAC;MAE1C,MAAM2H,oBAAoB,GAAGrC,uBAAuB,CAACnE,OAAO;MAE5DkE,gBAAgB,CAAClE,OAAO,GAAGnB,KAAK;MAChCsF,uBAAuB,CAACnE,OAAO,GAAGT,SAAS;;MAE3C;MACA;MACA;MACA;MACA,MAAM,CAACkH,oBAAoB,EAAEC,YAAY,CAAC,GAAGtH,iBAAiB,CAC5DmH,aAAa,EACb1H,KACF,CAAC;MAED,IACE4H,oBAAoB,IACpBC,YAAY;MACZ;MACAF,oBAAoB,KAAK,SAAS,EAClC;QACA,MAAMG,YAAY,GAChB1H,gBAAgB,CAACyH,YAAY,CAAC,GAC9BzH,gBAAgB,CAACwH,oBAAoB,CAAC;QACtC;QACCD,oBAAoB,IAAI,CAAC,CAAC;QAE7B,IAAIG,YAAY,GAAG,CAAC,EAAE;UACpB;UACA;UACAzH,OAAO,CAACgD,IAAI,CAAC;YAAE0B,IAAI;YAAE/E;UAAM,CAAC,CAAC;QAC/B,CAAC,MAAM,IAAI8H,YAAY,GAAG,CAAC,EAAE;UAC3B;;UAEA,MAAMC,SAAS,GAAG1H,OAAO,CAAC2H,SAAS,CAAC;YAAEjD;UAAK,CAAC,CAAC;UAC7C,MAAMkD,YAAY,GAAG5H,OAAO,CAACF,KAAK;UAElC,IAAI;YACF,IACE4H,SAAS,KAAK,CAAC,CAAC,IAChBA,SAAS,GAAGE,YAAY;YACxB;YACA5H,OAAO,CAACqG,GAAG,CAACqB,SAAS,CAAC,EACtB;cACA;cACA,MAAM1H,OAAO,CAACsF,EAAE,CAACoC,SAAS,GAAGE,YAAY,CAAC;YAC5C,CAAC,MAAM;cACL;cACA;cACA;cACA,MAAM5H,OAAO,CAACsF,EAAE,CAACmC,YAAY,CAAC;YAChC;;YAEA;YACAzH,OAAO,CAACmH,OAAO,CAAC;cAAEzC,IAAI;cAAE/E;YAAM,CAAC,CAAC;UAClC,CAAC,CAAC,OAAOoC,CAAC,EAAE;YACV;UAAA;QAEJ,CAAC,MAAM;UACL;UACA/B,OAAO,CAACmH,OAAO,CAAC;YAAEzC,IAAI;YAAE/E;UAAM,CAAC,CAAC;QAClC;MACF,CAAC,MAAM;QACL;QACA;QACAK,OAAO,CAACmH,OAAO,CAAC;UAAEzC,IAAI;UAAE/E;QAAM,CAAC,CAAC;MAClC;MAEAoF,gBAAgB,CAACjE,OAAO,GAAGd,OAAO,CAACF,KAAK;IAC1C,CAAC;;IAED;IACA;IACA;IACA,OAAOsC,GAAG,CAACtB,OAAO,EAAE8E,WAAW,CAAC,OAAO,EAAErE,MAAM,CAAC6F,aAAa,CAAC,CAAC;EACjE,CAAC,EAAE,CAAC/E,OAAO,EAAErC,OAAO,EAAEoC,GAAG,CAAC,CAAC;EAE3B,OAAO;IACLkC;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { type GestureResponderEvent, Text, type TextProps } from 'react-native';
|
|
3
3
|
import { type LinkProps } from './useLinkProps.js';
|
|
4
|
+
type PressEvent = React.MouseEvent<HTMLAnchorElement, MouseEvent> | GestureResponderEvent;
|
|
4
5
|
type Props<ParamList extends ReactNavigation.RootParamList> = LinkProps<ParamList> & Omit<TextProps, 'disabled'> & {
|
|
5
6
|
target?: string;
|
|
6
|
-
onPress?: (e:
|
|
7
|
-
disabled?: boolean |
|
|
7
|
+
onPress?: (e: PressEvent) => void;
|
|
8
|
+
disabled?: boolean | undefined;
|
|
8
9
|
children: React.ReactNode;
|
|
9
10
|
};
|
|
10
11
|
/**
|
|
@@ -14,9 +15,9 @@ type Props<ParamList extends ReactNavigation.RootParamList> = LinkProps<ParamLis
|
|
|
14
15
|
* @param props.screen Name of the screen to navigate to (e.g. `'Feeds'`).
|
|
15
16
|
* @param props.params Params to pass to the screen to navigate to (e.g. `{ sort: 'hot' }`).
|
|
16
17
|
* @param props.href Optional absolute path to use for the href (e.g. `/feeds/hot`).
|
|
17
|
-
* @param props.action Optional action to
|
|
18
|
+
* @param props.action Optional action to override the in-page navigation. The `href` is still derived from `screen`, so this can be used to render a link while dispatching a different action (e.g. a `replace`).
|
|
18
19
|
* @param props.children Child elements to render the content.
|
|
19
20
|
*/
|
|
20
|
-
export declare function Link<ParamList extends ReactNavigation.RootParamList>({ screen, params, action, href, style, ...rest }: Props<ParamList>): React.CElement<TextProps, Text>;
|
|
21
|
+
export declare function Link<ParamList extends ReactNavigation.RootParamList>({ screen, params, action, href, style, target, ...rest }: Props<ParamList>): React.CElement<TextProps, Text>;
|
|
21
22
|
export {};
|
|
22
23
|
//# sourceMappingURL=Link.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../../../src/Link.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EACL,KAAK,qBAAqB,EAE1B,IAAI,EACJ,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,KAAK,SAAS,EAAgB,MAAM,mBAAgB,CAAC;AAE9D,KAAK,KAAK,CAAC,SAAS,SAAS,eAAe,CAAC,aAAa,IACxD,SAAS,CAAC,SAAS,CAAC,GAClB,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../../../src/Link.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EACL,KAAK,qBAAqB,EAE1B,IAAI,EACJ,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,KAAK,SAAS,EAAgB,MAAM,mBAAgB,CAAC;AAE9D,KAAK,UAAU,GACX,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,UAAU,CAAC,GAC/C,qBAAqB,CAAC;AAE1B,KAAK,KAAK,CAAC,SAAS,SAAS,eAAe,CAAC,aAAa,IACxD,SAAS,CAAC,SAAS,CAAC,GAClB,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEN;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,SAAS,SAAS,eAAe,CAAC,aAAa,EAAE,EACpE,MAAM,EACN,MAAM,EACN,MAAM,EACN,IAAI,EACJ,KAAK,EACL,MAAM,EACN,GAAG,IAAI,EACR,EAAE,KAAK,CAAC,SAAS,CAAC,mCA4ClB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type DefaultNavigatorOptions, type NavigationListBase, type ParamListBase, type StackNavigationState, type TypedNavigator } from '@react-navigation/core';
|
|
2
|
-
declare const StackNavigator: (props: DefaultNavigatorOptions<ParamListBase, string | undefined, StackNavigationState<ParamListBase>, {}, {}, unknown>) => import("react
|
|
2
|
+
declare const StackNavigator: (props: DefaultNavigatorOptions<ParamListBase, string | undefined, StackNavigationState<ParamListBase>, {}, {}, unknown>) => import("react").JSX.Element;
|
|
3
3
|
export declare function createStackNavigator<ParamList extends ParamListBase>(): TypedNavigator<{
|
|
4
4
|
ParamList: ParamList;
|
|
5
5
|
NavigatorID: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createStackNavigator.d.ts","sourceRoot":"","sources":["../../../../src/__stubs__/createStackNavigator.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EAEzB,KAAK,cAAc,EAEpB,MAAM,wBAAwB,CAAC;AAEhC,QAAA,MAAM,cAAc,GAClB,OAAO,uBAAuB,CAC5B,aAAa,EACb,MAAM,GAAG,SAAS,EAClB,oBAAoB,CAAC,aAAa,CAAC,EACnC,EAAE,EACF,EAAE,EACF,OAAO,CACR,
|
|
1
|
+
{"version":3,"file":"createStackNavigator.d.ts","sourceRoot":"","sources":["../../../../src/__stubs__/createStackNavigator.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EAEzB,KAAK,cAAc,EAEpB,MAAM,wBAAwB,CAAC;AAEhC,QAAA,MAAM,cAAc,GAClB,OAAO,uBAAuB,CAC5B,aAAa,EACb,MAAM,GAAG,SAAS,EAClB,oBAAoB,CAAC,aAAa,CAAC,EACnC,EAAE,EACF,EAAE,EACF,OAAO,CACR,gCAYF,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,SAAS,SAAS,aAAa,KAC5B,cAAc,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACvC,aAAa,EAAE,EAAE,CAAC;IAClB,QAAQ,EAAE,EAAE,CAAC;IACb,cAAc,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC9C,SAAS,EAAE,OAAO,cAAc,CAAC;CAClC,CAAC,CAED"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createMemoryHistory.d.ts","sourceRoot":"","sources":["../../../src/createMemoryHistory.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,KAAK,aAAa,GAAG;IAEnB,EAAE,EAAE,MAAM,CAAC;IAEX,KAAK,EAAE,eAAe,CAAC;IAEvB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAIF,wBAAgB,mBAAmB;oBAmBlB,MAAM;eAcR,MAAM;wBAIG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;
|
|
1
|
+
{"version":3,"file":"createMemoryHistory.d.ts","sourceRoot":"","sources":["../../../src/createMemoryHistory.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,KAAK,aAAa,GAAG;IAEnB,EAAE,EAAE,MAAM,CAAC;IAEX,KAAK,EAAE,eAAe,CAAC;IAEvB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAIF,wBAAgB,mBAAmB;oBAmBlB,MAAM;eAcR,MAAM;wBAIG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;0BAmBd;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,eAAe,CAAA;KAAE;6BAoBrC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,eAAe,CAAA;KAAE;UAwC3D,MAAM;qBAkGK,MAAM,IAAI;EAqB9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDeepStableValue.d.ts","sourceRoot":"","sources":["../../../src/useDeepStableValue.tsx"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAQjD"}
|
|
@@ -22,10 +22,19 @@ export type LinkProps<ParamList extends ReactNavigation.RootParamList, RouteName
|
|
|
22
22
|
* @param props.screen Name of the screen to navigate to (e.g. `'Feeds'`).
|
|
23
23
|
* @param props.params Params to pass to the screen to navigate to (e.g. `{ sort: 'hot' }`).
|
|
24
24
|
* @param props.href Optional absolute path to use for the href (e.g. `/feeds/hot`).
|
|
25
|
-
* @param props.action Optional action to
|
|
25
|
+
* @param props.action Optional action to override the in-page navigation. The `href` is still derived from `screen`, so this can be used to render a link while dispatching a different action (e.g. a `replace`).
|
|
26
26
|
*/
|
|
27
|
-
export declare function useLinkProps<ParamList extends ReactNavigation.RootParamList>({ screen, params,
|
|
28
|
-
href: string |
|
|
27
|
+
export declare function useLinkProps<ParamList extends ReactNavigation.RootParamList>({ screen, params, action, ...rest }: LinkProps<ParamList>): {
|
|
28
|
+
href: string | ({
|
|
29
|
+
href?: string;
|
|
30
|
+
action?: NavigationAction;
|
|
31
|
+
} & (keyof ParamList extends infer T ? T extends keyof ParamList ? T extends unknown ? undefined extends ParamList[T] ? {
|
|
32
|
+
screen: T;
|
|
33
|
+
params?: ParamList[T] | undefined;
|
|
34
|
+
} : {
|
|
35
|
+
screen: T;
|
|
36
|
+
params: ParamList[T];
|
|
37
|
+
} : never : never : never))["href"] | undefined;
|
|
29
38
|
role: "link";
|
|
30
39
|
onPress: (e?: React.MouseEvent<HTMLAnchorElement, MouseEvent> | GestureResponderEvent) => void;
|
|
31
40
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLinkProps.d.ts","sourceRoot":"","sources":["../../../src/useLinkProps.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"useLinkProps.d.ts","sourceRoot":"","sources":["../../../src/useLinkProps.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,gBAAgB,EAGtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,qBAAqB,EAAY,MAAM,cAAc,CAAC;AAMpE,MAAM,MAAM,SAAS,CACnB,SAAS,SAAS,eAAe,CAAC,aAAa,EAC/C,SAAS,SAAS,MAAM,SAAS,GAAG,MAAM,SAAS,IAEjD,CAAC;IACC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B,GAAG,CAAC,SAAS,SAAS,OAAO,GAC1B,SAAS,SAAS,SAAS,CAAC,SAAS,CAAC,GACpC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;CAAE,GACpD;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;CAAE,GACrD,KAAK,CAAC,CAAC,GACX;IACE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB,CAAC;AAkHN;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,SAAS,SAAS,eAAe,CAAC,aAAa,EAAE,EAC5E,MAAM,EACN,MAAM,EACN,MAAM,EACN,GAAG,IAAI,EACR,EAAE,SAAS,CAAC,SAAS,CAAC;;eA3IV,MAAM;iBACJ,gBAAgB;;;;;;;;;kBAyJrB,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,UAAU,CAAC,GAC/C,qBAAqB;EAkF9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLinking.d.ts","sourceRoot":"","sources":["../../../src/useLinking.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,gBAAgB,IAAI,uBAAuB,EAC3C,KAAK,sBAAsB,EAE3B,KAAK,aAAa,EAEnB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAS,CAAC;AAE9C,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"useLinking.d.ts","sourceRoot":"","sources":["../../../src/useLinking.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,gBAAgB,IAAI,uBAAuB,EAC3C,KAAK,sBAAsB,EAE3B,KAAK,aAAa,EAEnB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAS,CAAC;AAE9C,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AA4F9D;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,eAW7C,CAAC;AAIF,KAAK,OAAO,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;AAE7C,wBAAgB,UAAU,CACxB,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,sBAAsB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,EAClE,EACE,OAAc,EACd,MAAM,EACN,gBAA0C,EAC1C,gBAA0C,EAC1C,kBAA8C,GAC/C,EAAE,OAAO;2BAsGW,WAAW,CAAC,WAAW,GAAG,SAAS,CAAC;EAoY1D"}
|
|
@@ -11,7 +11,7 @@ export declare function useLinking(ref: React.RefObject<NavigationContainerRef<P
|
|
|
11
11
|
routes: import("@react-navigation/routers").NavigationRoute<ParamListBase, string>[];
|
|
12
12
|
type: string;
|
|
13
13
|
stale: false;
|
|
14
|
-
}>, "
|
|
14
|
+
}>, "routes" | "stale">> & Readonly<{
|
|
15
15
|
stale?: true;
|
|
16
16
|
routes: import("@react-navigation/routers").PartialRoute<import("@react-navigation/routers").Route<string, object | undefined>>[];
|
|
17
17
|
}> & {
|
|
@@ -23,7 +23,7 @@ export declare function useLinking(ref: React.RefObject<NavigationContainerRef<P
|
|
|
23
23
|
routes: import("@react-navigation/routers").NavigationRoute<ParamListBase, string>[];
|
|
24
24
|
type: string;
|
|
25
25
|
stale: false;
|
|
26
|
-
}>, "
|
|
26
|
+
}>, "routes" | "stale">> & Readonly<{
|
|
27
27
|
stale?: true;
|
|
28
28
|
routes: import("@react-navigation/routers").PartialRoute<import("@react-navigation/routers").Route<string, object | undefined>>[];
|
|
29
29
|
}> & /*elided*/ any;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-navigation/native",
|
|
3
3
|
"description": "React Native integration for React Navigation",
|
|
4
|
-
"version": "7.3.
|
|
4
|
+
"version": "7.3.9",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native",
|
|
7
7
|
"react-navigation",
|
|
@@ -42,25 +42,25 @@
|
|
|
42
42
|
"clean": "del lib"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@react-navigation/core": "^7.21.
|
|
45
|
+
"@react-navigation/core": "^7.21.6",
|
|
46
46
|
"escape-string-regexp": "^4.0.0",
|
|
47
47
|
"fast-deep-equal": "^3.1.3",
|
|
48
48
|
"nanoid": "^3.3.11",
|
|
49
|
-
"standard-navigation": "^0.0.
|
|
49
|
+
"standard-navigation": "^0.0.8",
|
|
50
50
|
"use-latest-callback": "^0.2.4"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@jest/globals": "^30.0.0",
|
|
54
54
|
"@testing-library/react-native": "^13.2.1",
|
|
55
|
-
"@types/react": "~19.
|
|
56
|
-
"@types/react-dom": "~19.
|
|
55
|
+
"@types/react": "~19.2.4",
|
|
56
|
+
"@types/react-dom": "~19.2.3",
|
|
57
57
|
"del-cli": "^6.0.0",
|
|
58
|
-
"react": "19.
|
|
59
|
-
"react-dom": "19.
|
|
60
|
-
"react-native": "0.
|
|
58
|
+
"react": "19.2.3",
|
|
59
|
+
"react-dom": "19.2.3",
|
|
60
|
+
"react-native": "0.85.3",
|
|
61
61
|
"react-native-builder-bob": "^0.42.1",
|
|
62
|
-
"react-test-renderer": "19.
|
|
63
|
-
"typescript": "
|
|
62
|
+
"react-test-renderer": "19.2.3",
|
|
63
|
+
"typescript": "~6.0.3"
|
|
64
64
|
},
|
|
65
65
|
"peerDependencies": {
|
|
66
66
|
"react": ">= 18.2.0",
|
|
@@ -84,5 +84,5 @@
|
|
|
84
84
|
]
|
|
85
85
|
]
|
|
86
86
|
},
|
|
87
|
-
"gitHead": "
|
|
87
|
+
"gitHead": "d9dafe23ab092e3e76fab1e35dbb1973f45107ca"
|
|
88
88
|
}
|
package/src/Link.tsx
CHANGED
|
@@ -9,16 +9,16 @@ import {
|
|
|
9
9
|
|
|
10
10
|
import { type LinkProps, useLinkProps } from './useLinkProps';
|
|
11
11
|
|
|
12
|
+
type PressEvent =
|
|
13
|
+
| React.MouseEvent<HTMLAnchorElement, MouseEvent>
|
|
14
|
+
| GestureResponderEvent;
|
|
15
|
+
|
|
12
16
|
type Props<ParamList extends ReactNavigation.RootParamList> =
|
|
13
17
|
LinkProps<ParamList> &
|
|
14
18
|
Omit<TextProps, 'disabled'> & {
|
|
15
19
|
target?: string;
|
|
16
|
-
onPress?: (
|
|
17
|
-
|
|
18
|
-
| React.MouseEvent<HTMLAnchorElement, MouseEvent>
|
|
19
|
-
| GestureResponderEvent
|
|
20
|
-
) => void;
|
|
21
|
-
disabled?: boolean | null;
|
|
20
|
+
onPress?: (e: PressEvent) => void;
|
|
21
|
+
disabled?: boolean | undefined;
|
|
22
22
|
children: React.ReactNode;
|
|
23
23
|
};
|
|
24
24
|
|
|
@@ -29,7 +29,7 @@ type Props<ParamList extends ReactNavigation.RootParamList> =
|
|
|
29
29
|
* @param props.screen Name of the screen to navigate to (e.g. `'Feeds'`).
|
|
30
30
|
* @param props.params Params to pass to the screen to navigate to (e.g. `{ sort: 'hot' }`).
|
|
31
31
|
* @param props.href Optional absolute path to use for the href (e.g. `/feeds/hot`).
|
|
32
|
-
* @param props.action Optional action to
|
|
32
|
+
* @param props.action Optional action to override the in-page navigation. The `href` is still derived from `screen`, so this can be used to render a link while dispatching a different action (e.g. a `replace`).
|
|
33
33
|
* @param props.children Child elements to render the content.
|
|
34
34
|
*/
|
|
35
35
|
export function Link<ParamList extends ReactNavigation.RootParamList>({
|
|
@@ -38,15 +38,23 @@ export function Link<ParamList extends ReactNavigation.RootParamList>({
|
|
|
38
38
|
action,
|
|
39
39
|
href,
|
|
40
40
|
style,
|
|
41
|
+
target,
|
|
41
42
|
...rest
|
|
42
43
|
}: Props<ParamList>) {
|
|
43
|
-
const { colors, fonts } = useTheme();
|
|
44
44
|
// @ts-expect-error: This is already type-checked by the prop types
|
|
45
45
|
const props = useLinkProps<ParamList>({ screen, params, action, href });
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
// Keep usage of `useTheme` after `useLinkProps`
|
|
48
|
+
// This ensures proper error when used outside of navigation container
|
|
49
|
+
const { colors, fonts } = useTheme();
|
|
50
|
+
|
|
51
|
+
const onPress = (e: PressEvent) => {
|
|
52
|
+
if (rest.disabled) {
|
|
53
|
+
e.preventDefault();
|
|
54
|
+
e.stopPropagation();
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
|
|
50
58
|
if ('onPress' in rest) {
|
|
51
59
|
rest.onPress?.(e);
|
|
52
60
|
}
|
|
@@ -61,7 +69,17 @@ export function Link<ParamList extends ReactNavigation.RootParamList>({
|
|
|
61
69
|
...props,
|
|
62
70
|
...rest,
|
|
63
71
|
...Platform.select({
|
|
64
|
-
web: {
|
|
72
|
+
web: {
|
|
73
|
+
'aria-disabled': rest.disabled,
|
|
74
|
+
'onAuxClick': rest.disabled
|
|
75
|
+
? (e: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {
|
|
76
|
+
e.preventDefault();
|
|
77
|
+
e.stopPropagation();
|
|
78
|
+
}
|
|
79
|
+
: undefined,
|
|
80
|
+
'onClick': onPress,
|
|
81
|
+
'hrefAttrs': { target },
|
|
82
|
+
},
|
|
65
83
|
default: { onPress },
|
|
66
84
|
}),
|
|
67
85
|
style: [{ color: colors.primary }, fonts.regular, style],
|
|
@@ -10,7 +10,7 @@ type HistoryRecord = {
|
|
|
10
10
|
path: string;
|
|
11
11
|
};
|
|
12
12
|
|
|
13
|
-
const getPathWithoutHash = (path: string) => path.split('#')[0];
|
|
13
|
+
const getPathWithoutHash = (path: string) => path.split('#')[0] ?? '';
|
|
14
14
|
|
|
15
15
|
export function createMemoryHistory() {
|
|
16
16
|
let index = 0;
|
|
@@ -56,6 +56,10 @@ export function createMemoryHistory() {
|
|
|
56
56
|
for (let i = index - 1; i >= 0; i--) {
|
|
57
57
|
const item = items[i];
|
|
58
58
|
|
|
59
|
+
if (item == null) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
|
|
59
63
|
if (item.path === pathWithoutHash) {
|
|
60
64
|
return i;
|
|
61
65
|
}
|
|
@@ -107,9 +111,12 @@ export function createMemoryHistory() {
|
|
|
107
111
|
items = [{ path: pathWithoutHash, state, id }];
|
|
108
112
|
index = 0;
|
|
109
113
|
} else {
|
|
110
|
-
|
|
114
|
+
const item = items[index];
|
|
115
|
+
|
|
116
|
+
if (item?.path === pathWithoutHash) {
|
|
111
117
|
pathWithHash = pathWithHash + hash;
|
|
112
118
|
}
|
|
119
|
+
|
|
113
120
|
items[index] = { path: pathWithoutHash, state, id };
|
|
114
121
|
}
|
|
115
122
|
|
|
@@ -144,6 +151,8 @@ export function createMemoryHistory() {
|
|
|
144
151
|
return;
|
|
145
152
|
}
|
|
146
153
|
|
|
154
|
+
const targetId = items[index]?.id;
|
|
155
|
+
|
|
147
156
|
// When we call `history.go`, `popstate` will fire when there's history to go back to
|
|
148
157
|
// So we need to somehow handle following cases:
|
|
149
158
|
// - There's history to go back, `history.go` is called, and `popstate` fires
|
|
@@ -153,7 +162,11 @@ export function createMemoryHistory() {
|
|
|
153
162
|
const done = (interrupted?: boolean) => {
|
|
154
163
|
clearTimeout(timer);
|
|
155
164
|
|
|
156
|
-
|
|
165
|
+
// The current entry may not be the one we intended to land on:
|
|
166
|
+
// - The traversal didn't happen yet, e.g. it took longer than the timeout
|
|
167
|
+
// - The user navigated in the browser while our traversal was in-flight
|
|
168
|
+
// So we treat it the same as the operation being interrupted
|
|
169
|
+
if (interrupted || window.history.state?.id !== targetId) {
|
|
157
170
|
reject(new Error('History was changed during navigation.'));
|
|
158
171
|
return;
|
|
159
172
|
}
|
|
@@ -182,10 +195,12 @@ export function createMemoryHistory() {
|
|
|
182
195
|
// But on Firefox, it seems to take much longer, around 50ms from our testing
|
|
183
196
|
// We're using a hacky timeout since there doesn't seem to be way to know for sure
|
|
184
197
|
const timer = setTimeout(() => {
|
|
198
|
+
window.removeEventListener('popstate', onPopState);
|
|
199
|
+
|
|
185
200
|
const foundIndex = pending.findIndex((it) => it.ref === done);
|
|
186
201
|
|
|
187
202
|
if (foundIndex > -1) {
|
|
188
|
-
pending[foundIndex]
|
|
203
|
+
pending[foundIndex]?.cb();
|
|
189
204
|
pending.splice(foundIndex, 1);
|
|
190
205
|
}
|
|
191
206
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import isEqual from 'fast-deep-equal';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
export function useDeepStableValue<T>(value: T): T {
|
|
5
|
+
const valueRef = React.useRef(value);
|
|
6
|
+
|
|
7
|
+
if (!isEqual(valueRef.current, value)) {
|
|
8
|
+
valueRef.current = value;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
return valueRef.current;
|
|
12
|
+
}
|
package/src/useLinkProps.tsx
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
|
+
CommonActions,
|
|
2
3
|
getPathFromState,
|
|
3
4
|
type NavigationAction,
|
|
4
5
|
NavigationContainerRefContext,
|
|
5
6
|
NavigationHelpersContext,
|
|
6
|
-
type NavigatorScreenParams,
|
|
7
|
-
type ParamListBase,
|
|
8
7
|
} from '@react-navigation/core';
|
|
9
|
-
import type { NavigationState, PartialState } from '@react-navigation/routers';
|
|
10
8
|
import * as React from 'react';
|
|
11
9
|
import { type GestureResponderEvent, Platform } from 'react-native';
|
|
10
|
+
import useLatestCallback from 'use-latest-callback';
|
|
12
11
|
|
|
13
12
|
import { LinkingContext } from './LinkingContext';
|
|
13
|
+
import { useDeepStableValue } from './useDeepStableValue';
|
|
14
14
|
|
|
15
15
|
export type LinkProps<
|
|
16
16
|
ParamList extends ReactNavigation.RootParamList,
|
|
@@ -31,33 +31,116 @@ export type LinkProps<
|
|
|
31
31
|
params?: undefined;
|
|
32
32
|
};
|
|
33
33
|
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
34
|
+
const NESTED_KEYS = ['payload', 'params', 'state', 'routes'] as const;
|
|
35
|
+
const NESTED_PARAMS_KEYS = ['params', 'state'] as const;
|
|
36
|
+
const NAVIGATE_ACTION_TYPES = [
|
|
37
|
+
'NAVIGATE',
|
|
38
|
+
'PUSH',
|
|
39
|
+
'REPLACE',
|
|
40
|
+
'POP_TO',
|
|
41
|
+
'JUMP_TO',
|
|
42
|
+
];
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Nested params are tracked as consumed after handling
|
|
46
|
+
* So navigating with same params again won't work
|
|
47
|
+
* This can happen if the action or params are memoized
|
|
48
|
+
* Or component hasn't re-renderd to re-create inline objects
|
|
49
|
+
* So we clone the action and params when necessary before dispatch
|
|
50
|
+
*/
|
|
51
|
+
function clone<T>(value: T): T;
|
|
52
|
+
function clone(
|
|
53
|
+
value: unknown,
|
|
54
|
+
keys: typeof NESTED_KEYS | typeof NESTED_PARAMS_KEYS,
|
|
55
|
+
clones: WeakMap<object, object>
|
|
56
|
+
): unknown;
|
|
57
|
+
function clone(
|
|
58
|
+
value: unknown,
|
|
59
|
+
keys: typeof NESTED_KEYS | typeof NESTED_PARAMS_KEYS = NESTED_KEYS,
|
|
60
|
+
clones?: WeakMap<object, object>
|
|
61
|
+
): unknown {
|
|
62
|
+
if (typeof value !== 'object' || value == null) {
|
|
63
|
+
return value;
|
|
39
64
|
}
|
|
40
65
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
66
|
+
const existing = clones?.get(value);
|
|
67
|
+
|
|
68
|
+
if (existing) {
|
|
69
|
+
return existing;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const isArray = Array.isArray(value);
|
|
73
|
+
|
|
74
|
+
if (
|
|
75
|
+
keys === NESTED_PARAMS_KEYS &&
|
|
76
|
+
'screen' in value &&
|
|
77
|
+
typeof value.screen !== 'string' &&
|
|
78
|
+
!(
|
|
79
|
+
'state' in value &&
|
|
80
|
+
typeof value.state === 'object' &&
|
|
81
|
+
value.state != null &&
|
|
82
|
+
'routes' in value.state &&
|
|
83
|
+
Array.isArray(value.state.routes)
|
|
84
|
+
)
|
|
85
|
+
) {
|
|
86
|
+
return value;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
let copy: object | undefined =
|
|
90
|
+
keys === NESTED_PARAMS_KEYS ? { ...value } : undefined;
|
|
91
|
+
|
|
92
|
+
clones ??= new WeakMap();
|
|
93
|
+
clones.set(value, copy ?? value);
|
|
94
|
+
|
|
95
|
+
for (const key of isArray ? value.keys() : keys) {
|
|
96
|
+
const nested: unknown = Reflect.get(value, key);
|
|
97
|
+
|
|
98
|
+
const cloned = clone(
|
|
99
|
+
nested,
|
|
100
|
+
key === 'params' ? NESTED_PARAMS_KEYS : NESTED_KEYS,
|
|
101
|
+
clones
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
if (cloned !== nested) {
|
|
105
|
+
copy ??= isArray ? [...value] : { ...value };
|
|
106
|
+
clones.set(value, copy);
|
|
107
|
+
|
|
108
|
+
Object.assign(copy, { [key]: cloned });
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return copy ?? value;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const getTargetFromAction = (
|
|
116
|
+
action: NavigationAction | undefined,
|
|
117
|
+
screens: Record<string, unknown> | undefined
|
|
118
|
+
) => {
|
|
119
|
+
if (action === undefined || screens === undefined) {
|
|
120
|
+
return undefined;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const { payload } = action;
|
|
124
|
+
|
|
125
|
+
if (
|
|
126
|
+
!NAVIGATE_ACTION_TYPES.includes(action.type) ||
|
|
127
|
+
payload === undefined ||
|
|
128
|
+
!('name' in payload) ||
|
|
129
|
+
typeof payload.name !== 'string' ||
|
|
130
|
+
!(payload.name in screens)
|
|
131
|
+
) {
|
|
132
|
+
return undefined;
|
|
58
133
|
}
|
|
59
134
|
|
|
60
|
-
return
|
|
135
|
+
return {
|
|
136
|
+
screen: payload.name,
|
|
137
|
+
params:
|
|
138
|
+
'params' in payload &&
|
|
139
|
+
typeof payload.params === 'object' &&
|
|
140
|
+
payload.params != null
|
|
141
|
+
? payload.params
|
|
142
|
+
: undefined,
|
|
143
|
+
};
|
|
61
144
|
};
|
|
62
145
|
|
|
63
146
|
/**
|
|
@@ -66,90 +149,108 @@ const getStateFromParams = (
|
|
|
66
149
|
* @param props.screen Name of the screen to navigate to (e.g. `'Feeds'`).
|
|
67
150
|
* @param props.params Params to pass to the screen to navigate to (e.g. `{ sort: 'hot' }`).
|
|
68
151
|
* @param props.href Optional absolute path to use for the href (e.g. `/feeds/hot`).
|
|
69
|
-
* @param props.action Optional action to
|
|
152
|
+
* @param props.action Optional action to override the in-page navigation. The `href` is still derived from `screen`, so this can be used to render a link while dispatching a different action (e.g. a `replace`).
|
|
70
153
|
*/
|
|
71
154
|
export function useLinkProps<ParamList extends ReactNavigation.RootParamList>({
|
|
72
155
|
screen,
|
|
73
156
|
params,
|
|
74
|
-
href,
|
|
75
157
|
action,
|
|
158
|
+
...rest
|
|
76
159
|
}: LinkProps<ParamList>) {
|
|
77
160
|
const root = React.useContext(NavigationContainerRefContext);
|
|
78
|
-
const navigation = React.useContext(NavigationHelpersContext);
|
|
161
|
+
const navigation = React.useContext(NavigationHelpersContext) ?? root;
|
|
162
|
+
|
|
163
|
+
if (navigation == null) {
|
|
164
|
+
throw new Error(
|
|
165
|
+
"Couldn't find a navigation object. Is your component inside NavigationContainer?"
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
|
|
79
169
|
const { options } = React.useContext(LinkingContext);
|
|
80
170
|
|
|
81
|
-
const onPress = (
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
e
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
: true;
|
|
106
|
-
|
|
107
|
-
if (!hasModifierKey && isLeftClick && isSelfTarget) {
|
|
108
|
-
e.preventDefault?.();
|
|
109
|
-
shouldHandle = true;
|
|
171
|
+
const onPress = useLatestCallback(
|
|
172
|
+
(
|
|
173
|
+
e?:
|
|
174
|
+
| React.MouseEvent<HTMLAnchorElement, MouseEvent>
|
|
175
|
+
| GestureResponderEvent
|
|
176
|
+
) => {
|
|
177
|
+
if (Platform.OS === 'web' && e) {
|
|
178
|
+
const hasModifierKey =
|
|
179
|
+
('metaKey' in e && e.metaKey) ||
|
|
180
|
+
('altKey' in e && e.altKey) ||
|
|
181
|
+
('ctrlKey' in e && e.ctrlKey) ||
|
|
182
|
+
('shiftKey' in e && e.shiftKey);
|
|
183
|
+
|
|
184
|
+
const isLeftClick =
|
|
185
|
+
'button' in e ? e.button == null || e.button === 0 : true;
|
|
186
|
+
|
|
187
|
+
const isSelfTarget =
|
|
188
|
+
e.currentTarget && 'target' in e.currentTarget
|
|
189
|
+
? [undefined, null, '', '_self'].includes(e.currentTarget.target)
|
|
190
|
+
: true;
|
|
191
|
+
|
|
192
|
+
if (hasModifierKey || !isLeftClick || !isSelfTarget) {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
110
195
|
}
|
|
111
|
-
}
|
|
112
196
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
197
|
+
e?.preventDefault();
|
|
198
|
+
|
|
199
|
+
let cloned: NavigationAction;
|
|
200
|
+
|
|
201
|
+
if (action != null) {
|
|
202
|
+
cloned = clone(action);
|
|
203
|
+
} else {
|
|
204
|
+
if (screen == null) {
|
|
120
205
|
throw new Error(
|
|
121
|
-
"Couldn't find a
|
|
206
|
+
"Couldn't find a screen to navigate to. Make sure to provide a screen name."
|
|
122
207
|
);
|
|
123
208
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
209
|
+
|
|
210
|
+
cloned = clone(
|
|
211
|
+
// @ts-expect-error This is already type-checked by the prop types
|
|
212
|
+
CommonActions.navigate(screen, params)
|
|
213
|
+
);
|
|
127
214
|
}
|
|
215
|
+
|
|
216
|
+
navigation.dispatch(cloned);
|
|
128
217
|
}
|
|
129
|
-
|
|
218
|
+
);
|
|
219
|
+
|
|
220
|
+
const target = useDeepStableValue(
|
|
221
|
+
Platform.OS === 'web'
|
|
222
|
+
? typeof screen === 'string'
|
|
223
|
+
? {
|
|
224
|
+
screen,
|
|
225
|
+
params:
|
|
226
|
+
typeof params === 'object' && params != null ? params : undefined,
|
|
227
|
+
}
|
|
228
|
+
: getTargetFromAction(action, options?.config?.screens)
|
|
229
|
+
: undefined
|
|
230
|
+
);
|
|
231
|
+
|
|
232
|
+
const href = React.useMemo(() => {
|
|
233
|
+
if (Platform.OS !== 'web' || rest.href != null || target == null) {
|
|
234
|
+
return rest.href;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
const getPath = options?.getPathFromState ?? getPathFromState;
|
|
130
238
|
|
|
131
|
-
|
|
239
|
+
return getPath(
|
|
240
|
+
{
|
|
241
|
+
routes: [
|
|
242
|
+
{
|
|
243
|
+
name: target.screen,
|
|
244
|
+
params: target.params,
|
|
245
|
+
},
|
|
246
|
+
],
|
|
247
|
+
},
|
|
248
|
+
options?.config
|
|
249
|
+
);
|
|
250
|
+
}, [rest.href, target, options?.getPathFromState, options?.config]);
|
|
132
251
|
|
|
133
252
|
return {
|
|
134
|
-
href
|
|
135
|
-
href ??
|
|
136
|
-
(Platform.OS === 'web' && screen != null
|
|
137
|
-
? getPathFromStateHelper(
|
|
138
|
-
{
|
|
139
|
-
routes: [
|
|
140
|
-
{
|
|
141
|
-
// @ts-expect-error this is fine 🔥
|
|
142
|
-
name: screen,
|
|
143
|
-
// @ts-expect-error this is fine 🔥
|
|
144
|
-
params: params,
|
|
145
|
-
// @ts-expect-error this is fine 🔥
|
|
146
|
-
state: getStateFromParams(params),
|
|
147
|
-
},
|
|
148
|
-
],
|
|
149
|
-
},
|
|
150
|
-
options?.config
|
|
151
|
-
)
|
|
152
|
-
: undefined),
|
|
253
|
+
href,
|
|
153
254
|
role: 'link' as const,
|
|
154
255
|
onPress,
|
|
155
256
|
};
|
package/src/useLinking.tsx
CHANGED
|
@@ -83,6 +83,13 @@ const isPoppingLastEntry = (
|
|
|
83
83
|
current: NavigationState,
|
|
84
84
|
record: NavigationState
|
|
85
85
|
): boolean => {
|
|
86
|
+
const currentRoute = current.routes[current.index];
|
|
87
|
+
const recordRoute = record.routes[record.index];
|
|
88
|
+
|
|
89
|
+
if (currentRoute == null || recordRoute == null) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
|
|
86
93
|
if (current.history && record.history) {
|
|
87
94
|
return current.history.length === record.history.length + 1;
|
|
88
95
|
}
|
|
@@ -106,12 +113,14 @@ const isPoppingLastEntry = (
|
|
|
106
113
|
*/
|
|
107
114
|
export const series = (cb: () => Promise<void>) => {
|
|
108
115
|
let queue = Promise.resolve();
|
|
116
|
+
|
|
109
117
|
const callback = () => {
|
|
110
118
|
// eslint-disable-next-line promise/no-callback-in-promise
|
|
111
119
|
queue = queue.then(cb).catch((e) => {
|
|
112
120
|
console.error(e);
|
|
113
121
|
});
|
|
114
122
|
};
|
|
123
|
+
|
|
115
124
|
return callback;
|
|
116
125
|
};
|
|
117
126
|
|
|
@@ -531,8 +540,6 @@ export function useLinking(
|
|
|
531
540
|
}
|
|
532
541
|
|
|
533
542
|
// Skip if the state hasn't changed since we last synced it
|
|
534
|
-
// This avoids redundant work when the committed `state` event fires
|
|
535
|
-
// after we already synced from `__unsafe_action__`
|
|
536
543
|
if (previousState === state) {
|
|
537
544
|
return;
|
|
538
545
|
}
|