one 1.25.9 → 1.25.11
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/dist/cjs/fork/useLinking.native.js +2 -1
- package/dist/cjs/fork/useLinking.native.js.map +1 -1
- package/dist/cjs/fork/useLinking.native.test.cjs +161 -0
- package/dist/cjs/fork/useLinking.native.test.native.js +181 -0
- package/dist/cjs/fork/useLinking.native.test.native.js.map +1 -0
- package/dist/esm/fork/useLinking.native.js +2 -1
- package/dist/esm/fork/useLinking.native.js.map +1 -1
- package/dist/esm/fork/useLinking.native.test.js +138 -0
- package/dist/esm/fork/useLinking.native.test.js.map +6 -0
- package/dist/esm/fork/useLinking.native.test.mjs +138 -0
- package/dist/esm/fork/useLinking.native.test.mjs.map +1 -0
- package/dist/esm/fork/useLinking.native.test.native.js +155 -0
- package/dist/esm/fork/useLinking.native.test.native.js.map +1 -0
- package/package.json +9 -9
- package/src/fork/useLinking.native.test.tsx +153 -0
- package/src/fork/useLinking.native.ts +10 -12
- package/types/fork/useLinking.native.d.ts.map +1 -1
- package/types/fork/useLinking.native.test.d.ts +2 -0
- package/types/fork/useLinking.native.test.d.ts.map +1 -0
|
@@ -41,6 +41,7 @@ module.exports = __toCommonJS(useLinking_native_exports);
|
|
|
41
41
|
var import_core = require("@react-navigation/core");
|
|
42
42
|
var React = __toESM(require("react"), 1);
|
|
43
43
|
var import_react_native = require("react-native");
|
|
44
|
+
var import_getNavigateAction = require("../router/utils/getNavigateAction.native.js");
|
|
44
45
|
var import_extractPathFromURL = require("./extractPathFromURL.native.js");
|
|
45
46
|
function _type_of(obj) {
|
|
46
47
|
"@swc/helpers - typeof";
|
|
@@ -188,7 +189,7 @@ function useLinking(ref, param, onUnhandledLinking) {
|
|
|
188
189
|
})) {
|
|
189
190
|
return;
|
|
190
191
|
}
|
|
191
|
-
var action = getActionFromStateRef.current(stripRouteKeys(state), configRef.current);
|
|
192
|
+
var action = getActionFromStateRef.current === import_core.getActionFromState ? (0, import_getNavigateAction.getNavigateAction)(state, rootState) : getActionFromStateRef.current(stripRouteKeys(state), configRef.current);
|
|
192
193
|
if (action !== void 0) {
|
|
193
194
|
try {
|
|
194
195
|
navigation.dispatch(action);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useLinking_native_exports","__export","useLinking","module","exports","__toCommonJS","import_core","require","React","__toESM","import_react_native","import_extractPathFromURL","_type_of","obj","Symbol","constructor","linkingHandlers","stripRouteKeys","state","routes","map","route","key","rest","ref","param","onUnhandledLinking","enabled","prefixes","filter","config","getInitialURL","Promise","race","Linking","resolve","setTimeout","subscribe","listener","_Linking_removeEventListener","callback","param2","url","subscription","addEventListener","removeEventListener","bind","remove","getStateFromPath","getActionFromState","independent","useNavigationIndependentTree","useEffect","process","env","NODE_ENV","length","Platform","OS","console","error","join","trim","handler","push","index","indexOf","splice","enabledRef","useRef","prefixesRef","filterRef","configRef","getInitialURLRef","getStateFromPathRef","getActionFromStateRef","current","getStateFromURL","useCallback","path","extractPathFromURL","getInitialState","then","url2","state2","thenable","onfulfilled","catch","navigation","rootState","getRootState","some","r","_rootState_routeNames","routeNames","includes","name","action","dispatch","e","warn","message","resetRoot"],"sources":["../../../src/fork/useLinking.native.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,yBAAA;AAAAC,QAAA,CAAAD,yBAAA;EAAAE,UAAA,EAAAA,CAAA,KAAAA;AAAA;AAAAC,MAAA,CAAAC,OAAA,GAAAC,YAAA,CAAAL,yBAAA;AAUI,IAAAM,WAAA,GAA2IC,OAAA;AAE/I,IAAAC,KAAA,GAAuBC,OAAA,CAAAF,OAAA;AACvB,IAAAG,mBAAA,GAAkCH,OAAA;AAClC,IAAAI,yBAAA,
|
|
1
|
+
{"version":3,"names":["useLinking_native_exports","__export","useLinking","module","exports","__toCommonJS","import_core","require","React","__toESM","import_react_native","import_getNavigateAction","import_extractPathFromURL","_type_of","obj","Symbol","constructor","linkingHandlers","stripRouteKeys","state","routes","map","route","key","rest","ref","param","onUnhandledLinking","enabled","prefixes","filter","config","getInitialURL","Promise","race","Linking","resolve","setTimeout","subscribe","listener","_Linking_removeEventListener","callback","param2","url","subscription","addEventListener","removeEventListener","bind","remove","getStateFromPath","getActionFromState","independent","useNavigationIndependentTree","useEffect","process","env","NODE_ENV","length","Platform","OS","console","error","join","trim","handler","push","index","indexOf","splice","enabledRef","useRef","prefixesRef","filterRef","configRef","getInitialURLRef","getStateFromPathRef","getActionFromStateRef","current","getStateFromURL","useCallback","path","extractPathFromURL","getInitialState","then","url2","state2","thenable","onfulfilled","catch","navigation","rootState","getRootState","some","r","_rootState_routeNames","routeNames","includes","name","action","getNavigateAction","dispatch","e","warn","message","resetRoot"],"sources":["../../../src/fork/useLinking.native.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __copyProps = (to, from, except, desc) => {
|
|
8
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
9
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
10
|
+
get: () => from[key],
|
|
11
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
return to;
|
|
15
|
+
};
|
|
16
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
17
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
18
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
19
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
20
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
21
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
22
|
+
value: mod,
|
|
23
|
+
enumerable: true
|
|
24
|
+
}) : target, mod));
|
|
25
|
+
var import_react_test_renderer = __toESM(require("react-test-renderer"), 1);
|
|
26
|
+
var import_vitest = require("vitest");
|
|
27
|
+
var import_getLinkingConfig = require("../router/getLinkingConfig.cjs");
|
|
28
|
+
var import_getRoutes = require("../router/getRoutes.cjs");
|
|
29
|
+
var import_testing_utils = require("../testing-utils.cjs");
|
|
30
|
+
var import_getStateFromPath = require("./getStateFromPath.cjs");
|
|
31
|
+
var import_useLinking = require("./useLinking.native");
|
|
32
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
33
|
+
globalThis.IS_REACT_ACT_ENVIRONMENT = true;
|
|
34
|
+
const linking = (0, import_getLinkingConfig.getLinkingConfig)((0, import_getRoutes.getRoutes)((0, import_testing_utils.getMockContext)(["_layout.tsx", "home/_layout.tsx", "home/[projectId]/_layout.tsx", "home/[projectId]/index.tsx", "settings.tsx"])));
|
|
35
|
+
const config = linking.config;
|
|
36
|
+
const currentState = {
|
|
37
|
+
stale: false,
|
|
38
|
+
type: "stack",
|
|
39
|
+
key: "root-stack",
|
|
40
|
+
index: 1,
|
|
41
|
+
routeNames: ["home", "settings"],
|
|
42
|
+
routes: [{
|
|
43
|
+
name: "home",
|
|
44
|
+
key: "home-travelo",
|
|
45
|
+
params: {
|
|
46
|
+
projectId: "proj_example_travelo"
|
|
47
|
+
},
|
|
48
|
+
state: {
|
|
49
|
+
stale: false,
|
|
50
|
+
type: "stack",
|
|
51
|
+
key: "home-stack",
|
|
52
|
+
index: 0,
|
|
53
|
+
routeNames: ["[projectId]"],
|
|
54
|
+
routes: [{
|
|
55
|
+
name: "[projectId]",
|
|
56
|
+
key: "project-travelo",
|
|
57
|
+
params: {
|
|
58
|
+
projectId: "proj_example_travelo"
|
|
59
|
+
}
|
|
60
|
+
}]
|
|
61
|
+
}
|
|
62
|
+
}, {
|
|
63
|
+
name: "settings",
|
|
64
|
+
key: "settings"
|
|
65
|
+
}]
|
|
66
|
+
};
|
|
67
|
+
async function captureIncomingAction(overrides = {}) {
|
|
68
|
+
const linkedState = (0, import_getStateFromPath.getStateFromPath)("/home/proj_example_pennywise?tab=design", config);
|
|
69
|
+
const dispatch = import_vitest.vi.fn();
|
|
70
|
+
let listener;
|
|
71
|
+
const navigation = {
|
|
72
|
+
dispatch,
|
|
73
|
+
getRootState: () => currentState
|
|
74
|
+
};
|
|
75
|
+
const ref = {
|
|
76
|
+
current: navigation
|
|
77
|
+
};
|
|
78
|
+
function Harness() {
|
|
79
|
+
(0, import_useLinking.useLinking)(ref, {
|
|
80
|
+
...linking,
|
|
81
|
+
enabled: true,
|
|
82
|
+
prefixes: ["contrast:///"],
|
|
83
|
+
getInitialURL: () => null,
|
|
84
|
+
getStateFromPath: () => linkedState,
|
|
85
|
+
subscribe: nextListener => {
|
|
86
|
+
listener = nextListener;
|
|
87
|
+
return () => {};
|
|
88
|
+
},
|
|
89
|
+
...overrides
|
|
90
|
+
}, () => {});
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
let renderer;
|
|
94
|
+
await (0, import_react_test_renderer.act)(async () => {
|
|
95
|
+
renderer = import_react_test_renderer.default.create(/* @__PURE__ */(0, import_jsx_runtime.jsx)(Harness, {}));
|
|
96
|
+
});
|
|
97
|
+
(0, import_react_test_renderer.act)(() => listener("contrast:///home/proj_example_pennywise?tab=design"));
|
|
98
|
+
return {
|
|
99
|
+
action: dispatch.mock.calls[0]?.[0],
|
|
100
|
+
linkedState,
|
|
101
|
+
renderer
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
(0, import_vitest.afterEach)(() => {
|
|
105
|
+
import_vitest.vi.restoreAllMocks();
|
|
106
|
+
});
|
|
107
|
+
(0, import_vitest.describe)("native incoming links", () => {
|
|
108
|
+
(0, import_vitest.it)("applies every nested dynamic param when leaving a sibling route", async () => {
|
|
109
|
+
const {
|
|
110
|
+
action,
|
|
111
|
+
renderer
|
|
112
|
+
} = await captureIncomingAction();
|
|
113
|
+
(0, import_vitest.expect)(action).toStrictEqual({
|
|
114
|
+
type: "NAVIGATE",
|
|
115
|
+
target: "root-stack",
|
|
116
|
+
payload: {
|
|
117
|
+
key: void 0,
|
|
118
|
+
name: "home",
|
|
119
|
+
params: {
|
|
120
|
+
projectId: "proj_example_pennywise",
|
|
121
|
+
screen: "[projectId]",
|
|
122
|
+
params: {
|
|
123
|
+
projectId: "proj_example_pennywise",
|
|
124
|
+
tab: "design",
|
|
125
|
+
screen: "index",
|
|
126
|
+
params: {
|
|
127
|
+
projectId: "proj_example_pennywise",
|
|
128
|
+
tab: "design"
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
(0, import_react_test_renderer.act)(() => renderer.unmount());
|
|
135
|
+
});
|
|
136
|
+
(0, import_vitest.it)("keeps a configured getActionFromState in control", async () => {
|
|
137
|
+
const customAction = {
|
|
138
|
+
type: "NAVIGATE",
|
|
139
|
+
payload: {
|
|
140
|
+
name: "custom"
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
const getActionFromState = import_vitest.vi.fn(_state => customAction);
|
|
144
|
+
const {
|
|
145
|
+
action,
|
|
146
|
+
linkedState,
|
|
147
|
+
renderer
|
|
148
|
+
} = await captureIncomingAction({
|
|
149
|
+
getActionFromState
|
|
150
|
+
});
|
|
151
|
+
(0, import_vitest.expect)(action).toBe(customAction);
|
|
152
|
+
(0, import_vitest.expect)(getActionFromState).toHaveBeenCalledOnce();
|
|
153
|
+
(0, import_vitest.expect)(getActionFromState.mock.calls[0][0]).toEqual({
|
|
154
|
+
...linkedState,
|
|
155
|
+
routes: [import_vitest.expect.not.objectContaining({
|
|
156
|
+
key: import_vitest.expect.anything()
|
|
157
|
+
})]
|
|
158
|
+
});
|
|
159
|
+
(0, import_react_test_renderer.act)(() => renderer.unmount());
|
|
160
|
+
});
|
|
161
|
+
});
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __create = Object.create;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
12
|
+
get: () => from[key],
|
|
13
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
19
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
20
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
21
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
22
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
23
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
24
|
+
value: mod,
|
|
25
|
+
enumerable: true
|
|
26
|
+
}) : target, mod));
|
|
27
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
28
|
+
var import_react = __toESM(require("react"), 1);
|
|
29
|
+
var import_react_test_renderer = __toESM(require("react-test-renderer"), 1);
|
|
30
|
+
var import_vitest = require("vitest");
|
|
31
|
+
var import_getLinkingConfig = require("../router/getLinkingConfig.native.js");
|
|
32
|
+
var import_getRoutes = require("../router/getRoutes.native.js");
|
|
33
|
+
var import_testing_utils = require("../testing-utils.native.js");
|
|
34
|
+
var import_getStateFromPath = require("./getStateFromPath.native.js");
|
|
35
|
+
var import_useLinking = require("./useLinking.native");
|
|
36
|
+
globalThis.IS_REACT_ACT_ENVIRONMENT = true;
|
|
37
|
+
var linking = (0, import_getLinkingConfig.getLinkingConfig)((0, import_getRoutes.getRoutes)((0, import_testing_utils.getMockContext)(["_layout.tsx", "home/_layout.tsx", "home/[projectId]/_layout.tsx", "home/[projectId]/index.tsx", "settings.tsx"])));
|
|
38
|
+
var config = linking.config;
|
|
39
|
+
var currentState = {
|
|
40
|
+
stale: false,
|
|
41
|
+
type: "stack",
|
|
42
|
+
key: "root-stack",
|
|
43
|
+
index: 1,
|
|
44
|
+
routeNames: ["home", "settings"],
|
|
45
|
+
routes: [{
|
|
46
|
+
name: "home",
|
|
47
|
+
key: "home-travelo",
|
|
48
|
+
params: {
|
|
49
|
+
projectId: "proj_example_travelo"
|
|
50
|
+
},
|
|
51
|
+
state: {
|
|
52
|
+
stale: false,
|
|
53
|
+
type: "stack",
|
|
54
|
+
key: "home-stack",
|
|
55
|
+
index: 0,
|
|
56
|
+
routeNames: ["[projectId]"],
|
|
57
|
+
routes: [{
|
|
58
|
+
name: "[projectId]",
|
|
59
|
+
key: "project-travelo",
|
|
60
|
+
params: {
|
|
61
|
+
projectId: "proj_example_travelo"
|
|
62
|
+
}
|
|
63
|
+
}]
|
|
64
|
+
}
|
|
65
|
+
}, {
|
|
66
|
+
name: "settings",
|
|
67
|
+
key: "settings"
|
|
68
|
+
}]
|
|
69
|
+
};
|
|
70
|
+
async function captureIncomingAction() {
|
|
71
|
+
var overrides = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
|
72
|
+
var _dispatch_mock_calls_;
|
|
73
|
+
var linkedState = (0, import_getStateFromPath.getStateFromPath)("/home/proj_example_pennywise?tab=design", config);
|
|
74
|
+
var dispatch = import_vitest.vi.fn();
|
|
75
|
+
var listener;
|
|
76
|
+
var navigation = {
|
|
77
|
+
dispatch,
|
|
78
|
+
getRootState: function () {
|
|
79
|
+
return currentState;
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
var ref = {
|
|
83
|
+
current: navigation
|
|
84
|
+
};
|
|
85
|
+
function Harness() {
|
|
86
|
+
(0, import_useLinking.useLinking)(ref, {
|
|
87
|
+
...linking,
|
|
88
|
+
enabled: true,
|
|
89
|
+
prefixes: ["contrast:///"],
|
|
90
|
+
getInitialURL: function () {
|
|
91
|
+
return null;
|
|
92
|
+
},
|
|
93
|
+
getStateFromPath: function () {
|
|
94
|
+
return linkedState;
|
|
95
|
+
},
|
|
96
|
+
subscribe: function (nextListener) {
|
|
97
|
+
listener = nextListener;
|
|
98
|
+
return function () {};
|
|
99
|
+
},
|
|
100
|
+
...overrides
|
|
101
|
+
}, function () {});
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
var renderer;
|
|
105
|
+
await (0, import_react_test_renderer.act)(async function () {
|
|
106
|
+
renderer = import_react_test_renderer.default.create(/* @__PURE__ */(0, import_jsx_runtime.jsx)(Harness, {}));
|
|
107
|
+
});
|
|
108
|
+
(0, import_react_test_renderer.act)(function () {
|
|
109
|
+
return listener("contrast:///home/proj_example_pennywise?tab=design");
|
|
110
|
+
});
|
|
111
|
+
return {
|
|
112
|
+
action: (_dispatch_mock_calls_ = dispatch.mock.calls[0]) === null || _dispatch_mock_calls_ === void 0 ? void 0 : _dispatch_mock_calls_[0],
|
|
113
|
+
linkedState,
|
|
114
|
+
renderer
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
(0, import_vitest.afterEach)(function () {
|
|
118
|
+
import_vitest.vi.restoreAllMocks();
|
|
119
|
+
});
|
|
120
|
+
(0, import_vitest.describe)("native incoming links", function () {
|
|
121
|
+
(0, import_vitest.it)("applies every nested dynamic param when leaving a sibling route", async function () {
|
|
122
|
+
var {
|
|
123
|
+
action,
|
|
124
|
+
renderer
|
|
125
|
+
} = await captureIncomingAction();
|
|
126
|
+
(0, import_vitest.expect)(action).toStrictEqual({
|
|
127
|
+
type: "NAVIGATE",
|
|
128
|
+
target: "root-stack",
|
|
129
|
+
payload: {
|
|
130
|
+
key: void 0,
|
|
131
|
+
name: "home",
|
|
132
|
+
params: {
|
|
133
|
+
projectId: "proj_example_pennywise",
|
|
134
|
+
screen: "[projectId]",
|
|
135
|
+
params: {
|
|
136
|
+
projectId: "proj_example_pennywise",
|
|
137
|
+
tab: "design",
|
|
138
|
+
screen: "index",
|
|
139
|
+
params: {
|
|
140
|
+
projectId: "proj_example_pennywise",
|
|
141
|
+
tab: "design"
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
(0, import_react_test_renderer.act)(function () {
|
|
148
|
+
return renderer.unmount();
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
(0, import_vitest.it)("keeps a configured getActionFromState in control", async function () {
|
|
152
|
+
var customAction = {
|
|
153
|
+
type: "NAVIGATE",
|
|
154
|
+
payload: {
|
|
155
|
+
name: "custom"
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
var getActionFromState = import_vitest.vi.fn(function (_state) {
|
|
159
|
+
return customAction;
|
|
160
|
+
});
|
|
161
|
+
var {
|
|
162
|
+
action,
|
|
163
|
+
linkedState,
|
|
164
|
+
renderer
|
|
165
|
+
} = await captureIncomingAction({
|
|
166
|
+
getActionFromState
|
|
167
|
+
});
|
|
168
|
+
(0, import_vitest.expect)(action).toBe(customAction);
|
|
169
|
+
(0, import_vitest.expect)(getActionFromState).toHaveBeenCalledOnce();
|
|
170
|
+
(0, import_vitest.expect)(getActionFromState.mock.calls[0][0]).toEqual({
|
|
171
|
+
...linkedState,
|
|
172
|
+
routes: [import_vitest.expect.not.objectContaining({
|
|
173
|
+
key: import_vitest.expect.anything()
|
|
174
|
+
})]
|
|
175
|
+
});
|
|
176
|
+
(0, import_react_test_renderer.act)(function () {
|
|
177
|
+
return renderer.unmount();
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
//# sourceMappingURL=useLinking.native.test.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["import_jsx_runtime","require","import_react","__toESM","import_react_test_renderer","import_vitest","import_getLinkingConfig","import_getRoutes","import_testing_utils","import_getStateFromPath","import_useLinking","globalThis","IS_REACT_ACT_ENVIRONMENT","linking","getLinkingConfig","getRoutes","getMockContext","config","currentState","stale","type","key","index","routeNames","routes","name","params","projectId","state","captureIncomingAction","overrides","arguments","length","_dispatch_mock_calls_","linkedState","getStateFromPath","dispatch","vi","fn","listener","navigation","getRootState","ref","current","Harness","useLinking","enabled","prefixes","getInitialURL","subscribe","nextListener","renderer","act","default","create","jsx","action","mock","calls","afterEach","restoreAllMocks","describe","it","expect","toStrictEqual","target","payload","screen","tab"],"sources":["../../../src/fork/useLinking.native.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { getActionFromState as getActionFromStateDefault, getStateFromPath as getStateFromPathDefault, useNavigationIndependentTree } from "@react-navigation/core";
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { Linking, Platform } from "react-native";
|
|
4
|
+
import { getNavigateAction } from "../router/utils/getNavigateAction.native.js";
|
|
4
5
|
import { extractPathFromURL } from "./extractPathFromURL.native.js";
|
|
5
6
|
function _type_of(obj) {
|
|
6
7
|
"@swc/helpers - typeof";
|
|
@@ -148,7 +149,7 @@ function useLinking(ref, param, onUnhandledLinking) {
|
|
|
148
149
|
})) {
|
|
149
150
|
return;
|
|
150
151
|
}
|
|
151
|
-
var action = getActionFromStateRef.current(stripRouteKeys(state), configRef.current);
|
|
152
|
+
var action = getActionFromStateRef.current === getActionFromStateDefault ? getNavigateAction(state, rootState) : getActionFromStateRef.current(stripRouteKeys(state), configRef.current);
|
|
152
153
|
if (action !== void 0) {
|
|
153
154
|
try {
|
|
154
155
|
navigation.dispatch(action);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getActionFromState","getActionFromStateDefault","getStateFromPath","getStateFromPathDefault","useNavigationIndependentTree","React","Linking","Platform","extractPathFromURL","_type_of","obj","Symbol","constructor","linkingHandlers","stripRouteKeys","state","routes","map","route","key","rest","useLinking","ref","param","onUnhandledLinking","enabled","prefixes","filter","config","getInitialURL","Promise","race","resolve","setTimeout","subscribe","listener","_Linking_removeEventListener","callback","param2","url","subscription","addEventListener","removeEventListener","bind","remove","independent","useEffect","process","env","NODE_ENV","length","OS","console","error","join","trim","handler","push","index","indexOf","splice","enabledRef","useRef","prefixesRef","filterRef","configRef","getInitialURLRef","getStateFromPathRef","getActionFromStateRef","current","getStateFromURL","useCallback","path","getInitialState","then","url2","state2","thenable","onfulfilled","catch","navigation","rootState","getRootState","some","r","_rootState_routeNames","routeNames","includes","name","action","dispatch","e","warn","message","resetRoot"],"sources":["../../../src/fork/useLinking.native.ts"],"sourcesContent":[null],"mappings":"AAUI,SAASA,kBAAA,IAAsBC,yBAAA,EAA2BC,gBAAA,IAAoBC,uBAAA,EAAyBC,4BAAA,QAAoC;AAE/I,YAAYC,KAAA,MAAW;AACvB,SAASC,OAAA,EAASC,QAAA,QAAgB;AAClC,SAASC,kBAAA,QAA0B;
|
|
1
|
+
{"version":3,"names":["getActionFromState","getActionFromStateDefault","getStateFromPath","getStateFromPathDefault","useNavigationIndependentTree","React","Linking","Platform","getNavigateAction","extractPathFromURL","_type_of","obj","Symbol","constructor","linkingHandlers","stripRouteKeys","state","routes","map","route","key","rest","useLinking","ref","param","onUnhandledLinking","enabled","prefixes","filter","config","getInitialURL","Promise","race","resolve","setTimeout","subscribe","listener","_Linking_removeEventListener","callback","param2","url","subscription","addEventListener","removeEventListener","bind","remove","independent","useEffect","process","env","NODE_ENV","length","OS","console","error","join","trim","handler","push","index","indexOf","splice","enabledRef","useRef","prefixesRef","filterRef","configRef","getInitialURLRef","getStateFromPathRef","getActionFromStateRef","current","getStateFromURL","useCallback","path","getInitialState","then","url2","state2","thenable","onfulfilled","catch","navigation","rootState","getRootState","some","r","_rootState_routeNames","routeNames","includes","name","action","dispatch","e","warn","message","resetRoot"],"sources":["../../../src/fork/useLinking.native.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import TestRenderer, { act } from "react-test-renderer";
|
|
2
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
3
|
+
import { getLinkingConfig } from "../router/getLinkingConfig";
|
|
4
|
+
import { getRoutes } from "../router/getRoutes";
|
|
5
|
+
import { getMockContext } from "../testing-utils";
|
|
6
|
+
import { getStateFromPath } from "./getStateFromPath";
|
|
7
|
+
import { useLinking } from "./useLinking.native";
|
|
8
|
+
import { jsx } from "react/jsx-runtime";
|
|
9
|
+
globalThis.IS_REACT_ACT_ENVIRONMENT = true;
|
|
10
|
+
const linking = getLinkingConfig(
|
|
11
|
+
getRoutes(
|
|
12
|
+
getMockContext([
|
|
13
|
+
"_layout.tsx",
|
|
14
|
+
"home/_layout.tsx",
|
|
15
|
+
"home/[projectId]/_layout.tsx",
|
|
16
|
+
"home/[projectId]/index.tsx",
|
|
17
|
+
"settings.tsx"
|
|
18
|
+
])
|
|
19
|
+
)
|
|
20
|
+
);
|
|
21
|
+
const config = linking.config;
|
|
22
|
+
const currentState = {
|
|
23
|
+
stale: false,
|
|
24
|
+
type: "stack",
|
|
25
|
+
key: "root-stack",
|
|
26
|
+
index: 1,
|
|
27
|
+
routeNames: ["home", "settings"],
|
|
28
|
+
routes: [
|
|
29
|
+
{
|
|
30
|
+
name: "home",
|
|
31
|
+
key: "home-travelo",
|
|
32
|
+
params: { projectId: "proj_example_travelo" },
|
|
33
|
+
state: {
|
|
34
|
+
stale: false,
|
|
35
|
+
type: "stack",
|
|
36
|
+
key: "home-stack",
|
|
37
|
+
index: 0,
|
|
38
|
+
routeNames: ["[projectId]"],
|
|
39
|
+
routes: [
|
|
40
|
+
{
|
|
41
|
+
name: "[projectId]",
|
|
42
|
+
key: "project-travelo",
|
|
43
|
+
params: { projectId: "proj_example_travelo" }
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
{ name: "settings", key: "settings" }
|
|
49
|
+
]
|
|
50
|
+
};
|
|
51
|
+
async function captureIncomingAction(overrides = {}) {
|
|
52
|
+
const linkedState = getStateFromPath("/home/proj_example_pennywise?tab=design", config);
|
|
53
|
+
const dispatch = vi.fn();
|
|
54
|
+
let listener;
|
|
55
|
+
const navigation = {
|
|
56
|
+
dispatch,
|
|
57
|
+
getRootState: () => currentState
|
|
58
|
+
};
|
|
59
|
+
const ref = { current: navigation };
|
|
60
|
+
function Harness() {
|
|
61
|
+
useLinking(
|
|
62
|
+
ref,
|
|
63
|
+
{
|
|
64
|
+
...linking,
|
|
65
|
+
enabled: true,
|
|
66
|
+
prefixes: ["contrast:///"],
|
|
67
|
+
getInitialURL: () => null,
|
|
68
|
+
getStateFromPath: () => linkedState,
|
|
69
|
+
subscribe: (nextListener) => {
|
|
70
|
+
listener = nextListener;
|
|
71
|
+
return () => {
|
|
72
|
+
};
|
|
73
|
+
},
|
|
74
|
+
...overrides
|
|
75
|
+
},
|
|
76
|
+
() => {
|
|
77
|
+
}
|
|
78
|
+
);
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
let renderer;
|
|
82
|
+
await act(async () => {
|
|
83
|
+
renderer = TestRenderer.create(/* @__PURE__ */ jsx(Harness, {}));
|
|
84
|
+
});
|
|
85
|
+
act(() => listener("contrast:///home/proj_example_pennywise?tab=design"));
|
|
86
|
+
return {
|
|
87
|
+
action: dispatch.mock.calls[0]?.[0],
|
|
88
|
+
linkedState,
|
|
89
|
+
renderer
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
afterEach(() => {
|
|
93
|
+
vi.restoreAllMocks();
|
|
94
|
+
});
|
|
95
|
+
describe("native incoming links", () => {
|
|
96
|
+
it("applies every nested dynamic param when leaving a sibling route", async () => {
|
|
97
|
+
const { action, renderer } = await captureIncomingAction();
|
|
98
|
+
expect(action).toStrictEqual({
|
|
99
|
+
type: "NAVIGATE",
|
|
100
|
+
target: "root-stack",
|
|
101
|
+
payload: {
|
|
102
|
+
key: void 0,
|
|
103
|
+
name: "home",
|
|
104
|
+
params: {
|
|
105
|
+
projectId: "proj_example_pennywise",
|
|
106
|
+
screen: "[projectId]",
|
|
107
|
+
params: {
|
|
108
|
+
projectId: "proj_example_pennywise",
|
|
109
|
+
tab: "design",
|
|
110
|
+
screen: "index",
|
|
111
|
+
params: {
|
|
112
|
+
projectId: "proj_example_pennywise",
|
|
113
|
+
tab: "design"
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
act(() => renderer.unmount());
|
|
120
|
+
});
|
|
121
|
+
it("keeps a configured getActionFromState in control", async () => {
|
|
122
|
+
const customAction = { type: "NAVIGATE", payload: { name: "custom" } };
|
|
123
|
+
const getActionFromState = vi.fn(
|
|
124
|
+
(_state) => customAction
|
|
125
|
+
);
|
|
126
|
+
const { action, linkedState, renderer } = await captureIncomingAction({
|
|
127
|
+
getActionFromState
|
|
128
|
+
});
|
|
129
|
+
expect(action).toBe(customAction);
|
|
130
|
+
expect(getActionFromState).toHaveBeenCalledOnce();
|
|
131
|
+
expect(getActionFromState.mock.calls[0][0]).toEqual({
|
|
132
|
+
...linkedState,
|
|
133
|
+
routes: [expect.not.objectContaining({ key: expect.anything() })]
|
|
134
|
+
});
|
|
135
|
+
act(() => renderer.unmount());
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
//# sourceMappingURL=useLinking.native.test.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/fork/useLinking.native.test.tsx"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import TestRenderer, { act } from "react-test-renderer";
|
|
2
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
3
|
+
import { getLinkingConfig } from "../router/getLinkingConfig.mjs";
|
|
4
|
+
import { getRoutes } from "../router/getRoutes.mjs";
|
|
5
|
+
import { getMockContext } from "../testing-utils.mjs";
|
|
6
|
+
import { getStateFromPath } from "./getStateFromPath.mjs";
|
|
7
|
+
import { useLinking } from "./useLinking.native.mjs";
|
|
8
|
+
import { jsx } from "react/jsx-runtime";
|
|
9
|
+
globalThis.IS_REACT_ACT_ENVIRONMENT = true;
|
|
10
|
+
const linking = getLinkingConfig(getRoutes(getMockContext(["_layout.tsx", "home/_layout.tsx", "home/[projectId]/_layout.tsx", "home/[projectId]/index.tsx", "settings.tsx"])));
|
|
11
|
+
const config = linking.config;
|
|
12
|
+
const currentState = {
|
|
13
|
+
stale: false,
|
|
14
|
+
type: "stack",
|
|
15
|
+
key: "root-stack",
|
|
16
|
+
index: 1,
|
|
17
|
+
routeNames: ["home", "settings"],
|
|
18
|
+
routes: [{
|
|
19
|
+
name: "home",
|
|
20
|
+
key: "home-travelo",
|
|
21
|
+
params: {
|
|
22
|
+
projectId: "proj_example_travelo"
|
|
23
|
+
},
|
|
24
|
+
state: {
|
|
25
|
+
stale: false,
|
|
26
|
+
type: "stack",
|
|
27
|
+
key: "home-stack",
|
|
28
|
+
index: 0,
|
|
29
|
+
routeNames: ["[projectId]"],
|
|
30
|
+
routes: [{
|
|
31
|
+
name: "[projectId]",
|
|
32
|
+
key: "project-travelo",
|
|
33
|
+
params: {
|
|
34
|
+
projectId: "proj_example_travelo"
|
|
35
|
+
}
|
|
36
|
+
}]
|
|
37
|
+
}
|
|
38
|
+
}, {
|
|
39
|
+
name: "settings",
|
|
40
|
+
key: "settings"
|
|
41
|
+
}]
|
|
42
|
+
};
|
|
43
|
+
async function captureIncomingAction(overrides = {}) {
|
|
44
|
+
const linkedState = getStateFromPath("/home/proj_example_pennywise?tab=design", config);
|
|
45
|
+
const dispatch = vi.fn();
|
|
46
|
+
let listener;
|
|
47
|
+
const navigation = {
|
|
48
|
+
dispatch,
|
|
49
|
+
getRootState: () => currentState
|
|
50
|
+
};
|
|
51
|
+
const ref = {
|
|
52
|
+
current: navigation
|
|
53
|
+
};
|
|
54
|
+
function Harness() {
|
|
55
|
+
useLinking(ref, {
|
|
56
|
+
...linking,
|
|
57
|
+
enabled: true,
|
|
58
|
+
prefixes: ["contrast:///"],
|
|
59
|
+
getInitialURL: () => null,
|
|
60
|
+
getStateFromPath: () => linkedState,
|
|
61
|
+
subscribe: nextListener => {
|
|
62
|
+
listener = nextListener;
|
|
63
|
+
return () => {};
|
|
64
|
+
},
|
|
65
|
+
...overrides
|
|
66
|
+
}, () => {});
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
let renderer;
|
|
70
|
+
await act(async () => {
|
|
71
|
+
renderer = TestRenderer.create(/* @__PURE__ */jsx(Harness, {}));
|
|
72
|
+
});
|
|
73
|
+
act(() => listener("contrast:///home/proj_example_pennywise?tab=design"));
|
|
74
|
+
return {
|
|
75
|
+
action: dispatch.mock.calls[0]?.[0],
|
|
76
|
+
linkedState,
|
|
77
|
+
renderer
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
afterEach(() => {
|
|
81
|
+
vi.restoreAllMocks();
|
|
82
|
+
});
|
|
83
|
+
describe("native incoming links", () => {
|
|
84
|
+
it("applies every nested dynamic param when leaving a sibling route", async () => {
|
|
85
|
+
const {
|
|
86
|
+
action,
|
|
87
|
+
renderer
|
|
88
|
+
} = await captureIncomingAction();
|
|
89
|
+
expect(action).toStrictEqual({
|
|
90
|
+
type: "NAVIGATE",
|
|
91
|
+
target: "root-stack",
|
|
92
|
+
payload: {
|
|
93
|
+
key: void 0,
|
|
94
|
+
name: "home",
|
|
95
|
+
params: {
|
|
96
|
+
projectId: "proj_example_pennywise",
|
|
97
|
+
screen: "[projectId]",
|
|
98
|
+
params: {
|
|
99
|
+
projectId: "proj_example_pennywise",
|
|
100
|
+
tab: "design",
|
|
101
|
+
screen: "index",
|
|
102
|
+
params: {
|
|
103
|
+
projectId: "proj_example_pennywise",
|
|
104
|
+
tab: "design"
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
act(() => renderer.unmount());
|
|
111
|
+
});
|
|
112
|
+
it("keeps a configured getActionFromState in control", async () => {
|
|
113
|
+
const customAction = {
|
|
114
|
+
type: "NAVIGATE",
|
|
115
|
+
payload: {
|
|
116
|
+
name: "custom"
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
const getActionFromState = vi.fn(_state => customAction);
|
|
120
|
+
const {
|
|
121
|
+
action,
|
|
122
|
+
linkedState,
|
|
123
|
+
renderer
|
|
124
|
+
} = await captureIncomingAction({
|
|
125
|
+
getActionFromState
|
|
126
|
+
});
|
|
127
|
+
expect(action).toBe(customAction);
|
|
128
|
+
expect(getActionFromState).toHaveBeenCalledOnce();
|
|
129
|
+
expect(getActionFromState.mock.calls[0][0]).toEqual({
|
|
130
|
+
...linkedState,
|
|
131
|
+
routes: [expect.not.objectContaining({
|
|
132
|
+
key: expect.anything()
|
|
133
|
+
})]
|
|
134
|
+
});
|
|
135
|
+
act(() => renderer.unmount());
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
//# sourceMappingURL=useLinking.native.test.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["TestRenderer","act","afterEach","describe","expect","it","vi","getLinkingConfig","getRoutes","getMockContext","getStateFromPath","useLinking","jsx","globalThis","IS_REACT_ACT_ENVIRONMENT","linking","config","currentState","stale","type","key","index","routeNames","routes","name","params","projectId","state","captureIncomingAction","overrides","linkedState","dispatch","fn","listener","navigation","getRootState","ref","current","Harness","enabled","prefixes","getInitialURL","subscribe","nextListener","renderer","create","action","mock","calls","restoreAllMocks","toStrictEqual","target","payload","screen","tab","unmount","customAction","getActionFromState","_state","toBe","toHaveBeenCalledOnce","toEqual","not","objectContaining","anything"],"sources":["../../../src/fork/useLinking.native.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import TestRenderer, { act } from "react-test-renderer";
|
|
4
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
5
|
+
import { getLinkingConfig } from "../router/getLinkingConfig.native.js";
|
|
6
|
+
import { getRoutes } from "../router/getRoutes.native.js";
|
|
7
|
+
import { getMockContext } from "../testing-utils.native.js";
|
|
8
|
+
import { getStateFromPath } from "./getStateFromPath.native.js";
|
|
9
|
+
import { useLinking } from "./useLinking.native.native.js";
|
|
10
|
+
globalThis.IS_REACT_ACT_ENVIRONMENT = true;
|
|
11
|
+
var linking = getLinkingConfig(getRoutes(getMockContext(["_layout.tsx", "home/_layout.tsx", "home/[projectId]/_layout.tsx", "home/[projectId]/index.tsx", "settings.tsx"])));
|
|
12
|
+
var config = linking.config;
|
|
13
|
+
var currentState = {
|
|
14
|
+
stale: false,
|
|
15
|
+
type: "stack",
|
|
16
|
+
key: "root-stack",
|
|
17
|
+
index: 1,
|
|
18
|
+
routeNames: ["home", "settings"],
|
|
19
|
+
routes: [{
|
|
20
|
+
name: "home",
|
|
21
|
+
key: "home-travelo",
|
|
22
|
+
params: {
|
|
23
|
+
projectId: "proj_example_travelo"
|
|
24
|
+
},
|
|
25
|
+
state: {
|
|
26
|
+
stale: false,
|
|
27
|
+
type: "stack",
|
|
28
|
+
key: "home-stack",
|
|
29
|
+
index: 0,
|
|
30
|
+
routeNames: ["[projectId]"],
|
|
31
|
+
routes: [{
|
|
32
|
+
name: "[projectId]",
|
|
33
|
+
key: "project-travelo",
|
|
34
|
+
params: {
|
|
35
|
+
projectId: "proj_example_travelo"
|
|
36
|
+
}
|
|
37
|
+
}]
|
|
38
|
+
}
|
|
39
|
+
}, {
|
|
40
|
+
name: "settings",
|
|
41
|
+
key: "settings"
|
|
42
|
+
}]
|
|
43
|
+
};
|
|
44
|
+
async function captureIncomingAction() {
|
|
45
|
+
var overrides = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
|
46
|
+
var _dispatch_mock_calls_;
|
|
47
|
+
var linkedState = getStateFromPath("/home/proj_example_pennywise?tab=design", config);
|
|
48
|
+
var dispatch = vi.fn();
|
|
49
|
+
var listener;
|
|
50
|
+
var navigation = {
|
|
51
|
+
dispatch,
|
|
52
|
+
getRootState: function () {
|
|
53
|
+
return currentState;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
var ref = {
|
|
57
|
+
current: navigation
|
|
58
|
+
};
|
|
59
|
+
function Harness() {
|
|
60
|
+
useLinking(ref, {
|
|
61
|
+
...linking,
|
|
62
|
+
enabled: true,
|
|
63
|
+
prefixes: ["contrast:///"],
|
|
64
|
+
getInitialURL: function () {
|
|
65
|
+
return null;
|
|
66
|
+
},
|
|
67
|
+
getStateFromPath: function () {
|
|
68
|
+
return linkedState;
|
|
69
|
+
},
|
|
70
|
+
subscribe: function (nextListener) {
|
|
71
|
+
listener = nextListener;
|
|
72
|
+
return function () {};
|
|
73
|
+
},
|
|
74
|
+
...overrides
|
|
75
|
+
}, function () {});
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
var renderer;
|
|
79
|
+
await act(async function () {
|
|
80
|
+
renderer = TestRenderer.create(/* @__PURE__ */_jsx(Harness, {}));
|
|
81
|
+
});
|
|
82
|
+
act(function () {
|
|
83
|
+
return listener("contrast:///home/proj_example_pennywise?tab=design");
|
|
84
|
+
});
|
|
85
|
+
return {
|
|
86
|
+
action: (_dispatch_mock_calls_ = dispatch.mock.calls[0]) === null || _dispatch_mock_calls_ === void 0 ? void 0 : _dispatch_mock_calls_[0],
|
|
87
|
+
linkedState,
|
|
88
|
+
renderer
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
afterEach(function () {
|
|
92
|
+
vi.restoreAllMocks();
|
|
93
|
+
});
|
|
94
|
+
describe("native incoming links", function () {
|
|
95
|
+
it("applies every nested dynamic param when leaving a sibling route", async function () {
|
|
96
|
+
var {
|
|
97
|
+
action,
|
|
98
|
+
renderer
|
|
99
|
+
} = await captureIncomingAction();
|
|
100
|
+
expect(action).toStrictEqual({
|
|
101
|
+
type: "NAVIGATE",
|
|
102
|
+
target: "root-stack",
|
|
103
|
+
payload: {
|
|
104
|
+
key: void 0,
|
|
105
|
+
name: "home",
|
|
106
|
+
params: {
|
|
107
|
+
projectId: "proj_example_pennywise",
|
|
108
|
+
screen: "[projectId]",
|
|
109
|
+
params: {
|
|
110
|
+
projectId: "proj_example_pennywise",
|
|
111
|
+
tab: "design",
|
|
112
|
+
screen: "index",
|
|
113
|
+
params: {
|
|
114
|
+
projectId: "proj_example_pennywise",
|
|
115
|
+
tab: "design"
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
act(function () {
|
|
122
|
+
return renderer.unmount();
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
it("keeps a configured getActionFromState in control", async function () {
|
|
126
|
+
var customAction = {
|
|
127
|
+
type: "NAVIGATE",
|
|
128
|
+
payload: {
|
|
129
|
+
name: "custom"
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
var getActionFromState = vi.fn(function (_state) {
|
|
133
|
+
return customAction;
|
|
134
|
+
});
|
|
135
|
+
var {
|
|
136
|
+
action,
|
|
137
|
+
linkedState,
|
|
138
|
+
renderer
|
|
139
|
+
} = await captureIncomingAction({
|
|
140
|
+
getActionFromState
|
|
141
|
+
});
|
|
142
|
+
expect(action).toBe(customAction);
|
|
143
|
+
expect(getActionFromState).toHaveBeenCalledOnce();
|
|
144
|
+
expect(getActionFromState.mock.calls[0][0]).toEqual({
|
|
145
|
+
...linkedState,
|
|
146
|
+
routes: [expect.not.objectContaining({
|
|
147
|
+
key: expect.anything()
|
|
148
|
+
})]
|
|
149
|
+
});
|
|
150
|
+
act(function () {
|
|
151
|
+
return renderer.unmount();
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
//# sourceMappingURL=useLinking.native.test.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["jsx","_jsx","React","TestRenderer","act","afterEach","describe","expect","it","vi","getLinkingConfig","getRoutes","getMockContext","getStateFromPath","useLinking","globalThis","IS_REACT_ACT_ENVIRONMENT","linking","config","currentState","stale","type","key","index","routeNames","routes","name","params","projectId","state","captureIncomingAction","overrides","arguments","length","_dispatch_mock_calls_","linkedState","dispatch","fn","listener","navigation","getRootState","ref","current","Harness","enabled","prefixes","getInitialURL","subscribe","nextListener","renderer","create","action","mock","calls","restoreAllMocks","toStrictEqual","target","payload","screen","tab"],"sources":["../../../src/fork/useLinking.native.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "one",
|
|
3
|
-
"version": "1.25.
|
|
3
|
+
"version": "1.25.11",
|
|
4
4
|
"license": "BSD-3-Clause",
|
|
5
5
|
"sideEffects": [
|
|
6
6
|
"setup.mjs",
|
|
@@ -193,18 +193,18 @@
|
|
|
193
193
|
"@cloudflare/vite-plugin": "^1.33.1",
|
|
194
194
|
"@swc/core": "^1.14.0",
|
|
195
195
|
"@ungap/structured-clone": "^1.2.0",
|
|
196
|
-
"@vxrn/color-scheme": "1.25.
|
|
197
|
-
"@vxrn/compiler": "1.25.
|
|
198
|
-
"@vxrn/resolve": "1.25.
|
|
199
|
-
"@vxrn/tslib-lite": "1.25.
|
|
200
|
-
"@vxrn/use-isomorphic-layout-effect": "1.25.
|
|
201
|
-
"@vxrn/vite-plugin-metro": "1.25.
|
|
196
|
+
"@vxrn/color-scheme": "1.25.11",
|
|
197
|
+
"@vxrn/compiler": "1.25.11",
|
|
198
|
+
"@vxrn/resolve": "1.25.11",
|
|
199
|
+
"@vxrn/tslib-lite": "1.25.11",
|
|
200
|
+
"@vxrn/use-isomorphic-layout-effect": "1.25.11",
|
|
201
|
+
"@vxrn/vite-plugin-metro": "1.25.11",
|
|
202
202
|
"babel-dead-code-elimination": "1.0.10",
|
|
203
203
|
"babel-plugin-module-resolver": "^5.0.2",
|
|
204
204
|
"babel-preset-expo": "~57.0.5",
|
|
205
205
|
"citty": "^0.1.6",
|
|
206
206
|
"core-js": "^3.38.1",
|
|
207
|
-
"create-vxrn": "1.25.
|
|
207
|
+
"create-vxrn": "1.25.11",
|
|
208
208
|
"escape-string-regexp": "^5.0.0",
|
|
209
209
|
"expo-linking": "~57.0.5",
|
|
210
210
|
"expo-modules-core": "~57.0.10",
|
|
@@ -224,7 +224,7 @@
|
|
|
224
224
|
"tsconfig-paths": "^4",
|
|
225
225
|
"use-latest-callback": "^0.2.3",
|
|
226
226
|
"vite": "^8.2.2",
|
|
227
|
-
"vxrn": "1.25.
|
|
227
|
+
"vxrn": "1.25.11",
|
|
228
228
|
"web-streams-polyfill": "^4.3.0",
|
|
229
229
|
"ws": "^8.21.0",
|
|
230
230
|
"xxhashjs": "^0.2.2"
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import type { NavigationState } from '@react-navigation/core'
|
|
2
|
+
import React from 'react'
|
|
3
|
+
import TestRenderer, { act } from 'react-test-renderer'
|
|
4
|
+
import { afterEach, describe, expect, it, vi } from 'vitest'
|
|
5
|
+
import { getLinkingConfig } from '../router/getLinkingConfig'
|
|
6
|
+
import { getRoutes } from '../router/getRoutes'
|
|
7
|
+
import { getMockContext } from '../testing-utils'
|
|
8
|
+
import { getStateFromPath } from './getStateFromPath'
|
|
9
|
+
import { useLinking } from './useLinking.native'
|
|
10
|
+
|
|
11
|
+
;(globalThis as any).IS_REACT_ACT_ENVIRONMENT = true
|
|
12
|
+
|
|
13
|
+
const linking = getLinkingConfig(
|
|
14
|
+
getRoutes(
|
|
15
|
+
getMockContext([
|
|
16
|
+
'_layout.tsx',
|
|
17
|
+
'home/_layout.tsx',
|
|
18
|
+
'home/[projectId]/_layout.tsx',
|
|
19
|
+
'home/[projectId]/index.tsx',
|
|
20
|
+
'settings.tsx',
|
|
21
|
+
])
|
|
22
|
+
)!
|
|
23
|
+
)
|
|
24
|
+
const config = linking.config!
|
|
25
|
+
|
|
26
|
+
const currentState: NavigationState = {
|
|
27
|
+
stale: false,
|
|
28
|
+
type: 'stack',
|
|
29
|
+
key: 'root-stack',
|
|
30
|
+
index: 1,
|
|
31
|
+
routeNames: ['home', 'settings'],
|
|
32
|
+
routes: [
|
|
33
|
+
{
|
|
34
|
+
name: 'home',
|
|
35
|
+
key: 'home-travelo',
|
|
36
|
+
params: { projectId: 'proj_example_travelo' },
|
|
37
|
+
state: {
|
|
38
|
+
stale: false,
|
|
39
|
+
type: 'stack',
|
|
40
|
+
key: 'home-stack',
|
|
41
|
+
index: 0,
|
|
42
|
+
routeNames: ['[projectId]'],
|
|
43
|
+
routes: [
|
|
44
|
+
{
|
|
45
|
+
name: '[projectId]',
|
|
46
|
+
key: 'project-travelo',
|
|
47
|
+
params: { projectId: 'proj_example_travelo' },
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
{ name: 'settings', key: 'settings' },
|
|
53
|
+
],
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
type LinkingOverrides = Partial<Parameters<typeof useLinking>[1]>
|
|
57
|
+
|
|
58
|
+
async function captureIncomingAction(overrides: LinkingOverrides = {}) {
|
|
59
|
+
const linkedState = getStateFromPath('/home/proj_example_pennywise?tab=design', config)!
|
|
60
|
+
const dispatch = vi.fn()
|
|
61
|
+
let listener: ((url: string) => void) | undefined
|
|
62
|
+
const navigation = {
|
|
63
|
+
dispatch,
|
|
64
|
+
getRootState: () => currentState,
|
|
65
|
+
}
|
|
66
|
+
const ref = { current: navigation }
|
|
67
|
+
|
|
68
|
+
function Harness() {
|
|
69
|
+
useLinking(
|
|
70
|
+
ref as any,
|
|
71
|
+
{
|
|
72
|
+
...linking,
|
|
73
|
+
enabled: true,
|
|
74
|
+
prefixes: ['contrast:///'],
|
|
75
|
+
getInitialURL: () => null,
|
|
76
|
+
getStateFromPath: () => linkedState,
|
|
77
|
+
subscribe: (nextListener) => {
|
|
78
|
+
listener = nextListener
|
|
79
|
+
return () => {}
|
|
80
|
+
},
|
|
81
|
+
...overrides,
|
|
82
|
+
},
|
|
83
|
+
() => {}
|
|
84
|
+
)
|
|
85
|
+
return null
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
let renderer: TestRenderer.ReactTestRenderer
|
|
89
|
+
await act(async () => {
|
|
90
|
+
renderer = TestRenderer.create(<Harness />)
|
|
91
|
+
})
|
|
92
|
+
act(() => listener!('contrast:///home/proj_example_pennywise?tab=design'))
|
|
93
|
+
|
|
94
|
+
return {
|
|
95
|
+
action: dispatch.mock.calls[0]?.[0],
|
|
96
|
+
linkedState,
|
|
97
|
+
renderer: renderer!,
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
afterEach(() => {
|
|
102
|
+
vi.restoreAllMocks()
|
|
103
|
+
})
|
|
104
|
+
|
|
105
|
+
describe('native incoming links', () => {
|
|
106
|
+
it('applies every nested dynamic param when leaving a sibling route', async () => {
|
|
107
|
+
const { action, renderer } = await captureIncomingAction()
|
|
108
|
+
|
|
109
|
+
expect(action).toStrictEqual({
|
|
110
|
+
type: 'NAVIGATE',
|
|
111
|
+
target: 'root-stack',
|
|
112
|
+
payload: {
|
|
113
|
+
key: undefined,
|
|
114
|
+
name: 'home',
|
|
115
|
+
params: {
|
|
116
|
+
projectId: 'proj_example_pennywise',
|
|
117
|
+
screen: '[projectId]',
|
|
118
|
+
params: {
|
|
119
|
+
projectId: 'proj_example_pennywise',
|
|
120
|
+
tab: 'design',
|
|
121
|
+
screen: 'index',
|
|
122
|
+
params: {
|
|
123
|
+
projectId: 'proj_example_pennywise',
|
|
124
|
+
tab: 'design',
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
})
|
|
130
|
+
|
|
131
|
+
act(() => renderer.unmount())
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
it('keeps a configured getActionFromState in control', async () => {
|
|
135
|
+
const customAction = { type: 'NAVIGATE', payload: { name: 'custom' } } as const
|
|
136
|
+
const getActionFromState = vi.fn(
|
|
137
|
+
(_state: Parameters<NonNullable<LinkingOverrides['getActionFromState']>>[0]) =>
|
|
138
|
+
customAction
|
|
139
|
+
)
|
|
140
|
+
const { action, linkedState, renderer } = await captureIncomingAction({
|
|
141
|
+
getActionFromState,
|
|
142
|
+
})
|
|
143
|
+
|
|
144
|
+
expect(action).toBe(customAction)
|
|
145
|
+
expect(getActionFromState).toHaveBeenCalledOnce()
|
|
146
|
+
expect(getActionFromState.mock.calls[0]![0]).toEqual({
|
|
147
|
+
...linkedState,
|
|
148
|
+
routes: [expect.not.objectContaining({ key: expect.anything() })],
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
act(() => renderer.unmount())
|
|
152
|
+
})
|
|
153
|
+
})
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
import type { LinkingOptions } from '@react-navigation/native' // @modified: import from @react-navigation/native
|
|
17
17
|
import * as React from 'react'
|
|
18
18
|
import { Linking, Platform } from 'react-native'
|
|
19
|
+
import { getNavigateAction } from '../router/utils/getNavigateAction' // @modified
|
|
19
20
|
import { extractPathFromURL } from './extractPathFromURL'
|
|
20
21
|
|
|
21
22
|
type ResultState = ReturnType<typeof getStateFromPathDefault>
|
|
@@ -24,13 +25,9 @@ type Options = LinkingOptions<ParamListBase>
|
|
|
24
25
|
|
|
25
26
|
const linkingHandlers: symbol[] = []
|
|
26
27
|
|
|
27
|
-
// @modified:
|
|
28
|
-
//
|
|
29
|
-
//
|
|
30
|
-
// RESET that the One router store immediately reverts, so incoming Linking
|
|
31
|
-
// 'url' events never navigated on native. Strip the keys before deriving the
|
|
32
|
-
// action; hydration keys only matter for web SSR, never for a live native
|
|
33
|
-
// deep link.
|
|
28
|
+
// @modified: custom getActionFromState functions have received keyless routes
|
|
29
|
+
// since One added deterministic hydration keys. preserve that contract; the
|
|
30
|
+
// default native path uses getNavigateAction directly.
|
|
34
31
|
type LinkingResultState = NonNullable<ResultState>
|
|
35
32
|
|
|
36
33
|
function stripRouteKeys(state: LinkingResultState): LinkingResultState {
|
|
@@ -218,11 +215,12 @@ export function useLinking(
|
|
|
218
215
|
return
|
|
219
216
|
}
|
|
220
217
|
|
|
221
|
-
// @modified:
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
218
|
+
// @modified: use One's action builder for the default path so incoming
|
|
219
|
+
// links get the same nested param propagation as imperative navigation.
|
|
220
|
+
const action =
|
|
221
|
+
getActionFromStateRef.current === getActionFromStateDefault
|
|
222
|
+
? getNavigateAction(state, rootState)
|
|
223
|
+
: getActionFromStateRef.current(stripRouteKeys(state), configRef.current)
|
|
226
224
|
|
|
227
225
|
if (action !== undefined) {
|
|
228
226
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLinking.native.d.ts","sourceRoot":"","sources":["../../src/fork/useLinking.native.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAGL,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAEnB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"useLinking.native.d.ts","sourceRoot":"","sources":["../../src/fork/useLinking.native.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAGL,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAEnB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAO9B,KAAK,OAAO,GAAG,cAAc,CAAC,aAAa,CAAC,CAAA;AAqB5C,wBAAgB,UAAU,CACxB,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC,EAC3D,EACE,OAAc,EACd,QAAQ,EACR,MAAM,EACN,MAAM,EACN,aAQI,EACJ,SAmBC,EACD,gBAA0C,EAC1C,kBAA8C,GAC/C,EAAE,OAAO,EACV,kBAAkB,EAAE,CAAC,mBAAmB,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;EAqKtE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLinking.native.test.d.ts","sourceRoot":"","sources":["../../src/fork/useLinking.native.test.tsx"],"names":[],"mappings":""}
|