one 1.25.10 → 1.25.12
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/views/ScrollBehavior.cjs +4 -4
- package/dist/cjs/views/ScrollBehavior.native.js +5 -4
- package/dist/cjs/views/ScrollBehavior.native.js.map +1 -1
- package/dist/cjs/views/ScrollBehavior.test.cjs +28 -14
- package/dist/cjs/views/ScrollBehavior.test.native.js +34 -38
- package/dist/cjs/views/ScrollBehavior.test.native.js.map +1 -1
- package/dist/esm/views/ScrollBehavior.mjs +5 -5
- package/dist/esm/views/ScrollBehavior.mjs.map +1 -1
- package/dist/esm/views/ScrollBehavior.native.js +6 -5
- package/dist/esm/views/ScrollBehavior.native.js.map +1 -1
- package/dist/esm/views/ScrollBehavior.test.mjs +28 -14
- package/dist/esm/views/ScrollBehavior.test.mjs.map +1 -1
- package/dist/esm/views/ScrollBehavior.test.native.js +34 -38
- package/dist/esm/views/ScrollBehavior.test.native.js.map +1 -1
- package/package.json +9 -9
- package/src/views/ScrollBehavior.test.tsx +30 -16
- package/src/views/ScrollBehavior.tsx +12 -8
- package/types/views/ScrollBehavior.d.ts.map +1 -1
|
@@ -99,7 +99,7 @@ function configure(props) {
|
|
|
99
99
|
return;
|
|
100
100
|
}
|
|
101
101
|
disable?.();
|
|
102
|
-
const initialLocation = `${window.location.pathname}${window.location.search}
|
|
102
|
+
const initialLocation = `${window.location.pathname}${window.location.search}`;
|
|
103
103
|
let isFirstStateChange = true;
|
|
104
104
|
previousPathname = window.location.pathname;
|
|
105
105
|
const popStateController = new AbortController();
|
|
@@ -115,10 +115,11 @@ function configure(props) {
|
|
|
115
115
|
}
|
|
116
116
|
});
|
|
117
117
|
const disposeOnRootState = (0, import_router.subscribeToRootState)(state => {
|
|
118
|
+
const currentHref = import_router.routeInfo?.unstable_globalHref ?? "";
|
|
119
|
+
const currentPathname = import_router.routeInfo?.pathname ?? "";
|
|
118
120
|
if (isFirstStateChange) {
|
|
119
121
|
isFirstStateChange = false;
|
|
120
|
-
|
|
121
|
-
if (currentLocation === initialLocation) {
|
|
122
|
+
if (currentHref === initialLocation) {
|
|
122
123
|
return;
|
|
123
124
|
}
|
|
124
125
|
}
|
|
@@ -128,7 +129,6 @@ function configure(props) {
|
|
|
128
129
|
const {
|
|
129
130
|
hash
|
|
130
131
|
} = state;
|
|
131
|
-
const currentPathname = window.location.pathname;
|
|
132
132
|
if (hash) {
|
|
133
133
|
setTimeout(() => {
|
|
134
134
|
scrollToHash(hash);
|
|
@@ -124,7 +124,7 @@ function configure(props) {
|
|
|
124
124
|
return;
|
|
125
125
|
}
|
|
126
126
|
disable === null || disable === void 0 ? void 0 : disable();
|
|
127
|
-
var initialLocation = `${window.location.pathname}${window.location.search}
|
|
127
|
+
var initialLocation = `${window.location.pathname}${window.location.search}`;
|
|
128
128
|
var isFirstStateChange = true;
|
|
129
129
|
previousPathname = window.location.pathname;
|
|
130
130
|
var popStateController = new AbortController();
|
|
@@ -140,11 +140,13 @@ function configure(props) {
|
|
|
140
140
|
}
|
|
141
141
|
});
|
|
142
142
|
var disposeOnRootState = (0, import_router.subscribeToRootState)(function (state) {
|
|
143
|
+
var _ref, _ref1;
|
|
143
144
|
var _state_linkOptions;
|
|
145
|
+
var currentHref = (_ref = import_router.routeInfo === null || import_router.routeInfo === void 0 ? void 0 : import_router.routeInfo.unstable_globalHref) !== null && _ref !== void 0 ? _ref : "";
|
|
146
|
+
var currentPathname = (_ref1 = import_router.routeInfo === null || import_router.routeInfo === void 0 ? void 0 : import_router.routeInfo.pathname) !== null && _ref1 !== void 0 ? _ref1 : "";
|
|
144
147
|
if (isFirstStateChange) {
|
|
145
148
|
isFirstStateChange = false;
|
|
146
|
-
|
|
147
|
-
if (currentLocation === initialLocation) {
|
|
149
|
+
if (currentHref === initialLocation) {
|
|
148
150
|
return;
|
|
149
151
|
}
|
|
150
152
|
}
|
|
@@ -154,7 +156,6 @@ function configure(props) {
|
|
|
154
156
|
var {
|
|
155
157
|
hash
|
|
156
158
|
} = state;
|
|
157
|
-
var currentPathname = window.location.pathname;
|
|
158
159
|
if (hash) {
|
|
159
160
|
setTimeout(function () {
|
|
160
161
|
scrollToHash(hash);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","ScrollBehavior_exports","__export","ScrollBehavior","registerScrollGroup","module","exports","import_react","require","import_lastAction","import_router","KEY","GROUP_KEY","getState","JSON","parse","sessionStorage","getItem","getGroupState","activeGroups","Set","groupId","add","delete","getGroupKey","pathname","longestMatch","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","group","startsWith","length","err","return","restorePosition","positions","saved","window","location","setTimeout","scrollTo","error","console","removeItem","restoreGroupPosition","didPop","previousPathname","rememberScrollPosition","state","scrollY","setItem","stringify","groupKey","groupState","disable","configure","props","addEventListener","initialLocation","search","
|
|
1
|
+
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","ScrollBehavior_exports","__export","ScrollBehavior","registerScrollGroup","module","exports","import_react","require","import_lastAction","import_router","KEY","GROUP_KEY","getState","JSON","parse","sessionStorage","getItem","getGroupState","activeGroups","Set","groupId","add","delete","getGroupKey","pathname","longestMatch","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","group","startsWith","length","err","return","restorePosition","positions","saved","window","location","setTimeout","scrollTo","error","console","removeItem","restoreGroupPosition","didPop","previousPathname","rememberScrollPosition","state","scrollY","setItem","stringify","groupKey","groupState","disable","configure","props","addEventListener","initialLocation","search","isFirstStateChange","popStateController","AbortController","setLastAction","signal","disposeOnLoadState","subscribeToLoadingState","disposeOnRootState","subscribeToRootState","_ref","_ref1","_state_linkOptions","currentHref","routeInfo","unstable_globalHref","currentPathname","linkOptions","scroll","hash","scrollToHash","_state_linkOptions1","prevGroup","currentGroup","scrollGroup","abort"],"sources":["../../../src/views/ScrollBehavior.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -30,10 +30,19 @@ const subscriptions = import_vitest.vi.hoisted(() => ({
|
|
|
30
30
|
loading: void 0,
|
|
31
31
|
root: void 0
|
|
32
32
|
}));
|
|
33
|
+
const router = import_vitest.vi.hoisted(() => ({
|
|
34
|
+
routeInfo: {
|
|
35
|
+
unstable_globalHref: "/",
|
|
36
|
+
pathname: "/"
|
|
37
|
+
}
|
|
38
|
+
}));
|
|
33
39
|
import_vitest.vi.mock("../router/lastAction", () => ({
|
|
34
40
|
setLastAction: import_vitest.vi.fn()
|
|
35
41
|
}));
|
|
36
42
|
import_vitest.vi.mock("../router/router", () => ({
|
|
43
|
+
get routeInfo() {
|
|
44
|
+
return router.routeInfo;
|
|
45
|
+
},
|
|
37
46
|
subscribeToLoadingState: subscriber => {
|
|
38
47
|
subscriptions.loading = subscriber;
|
|
39
48
|
return () => {
|
|
@@ -51,6 +60,15 @@ globalThis.IS_REACT_ACT_ENVIRONMENT = true;
|
|
|
51
60
|
let renderer;
|
|
52
61
|
let location;
|
|
53
62
|
let scrollTo;
|
|
63
|
+
function navigate(pathname, search = "") {
|
|
64
|
+
router.routeInfo = {
|
|
65
|
+
unstable_globalHref: `${pathname}${search}`,
|
|
66
|
+
pathname
|
|
67
|
+
};
|
|
68
|
+
(0, import_react_test_renderer.act)(() => subscriptions.root?.({}));
|
|
69
|
+
location.pathname = pathname;
|
|
70
|
+
location.search = search;
|
|
71
|
+
}
|
|
54
72
|
(0, import_vitest.beforeEach)(() => {
|
|
55
73
|
process.env.VITE_ENVIRONMENT = "client";
|
|
56
74
|
location = {
|
|
@@ -58,6 +76,10 @@ let scrollTo;
|
|
|
58
76
|
search: "",
|
|
59
77
|
hash: ""
|
|
60
78
|
};
|
|
79
|
+
router.routeInfo = {
|
|
80
|
+
unstable_globalHref: "/",
|
|
81
|
+
pathname: "/"
|
|
82
|
+
};
|
|
61
83
|
scrollTo = import_vitest.vi.fn();
|
|
62
84
|
const windowMock = Object.assign(new EventTarget(), {
|
|
63
85
|
location,
|
|
@@ -91,13 +113,11 @@ let scrollTo;
|
|
|
91
113
|
(0, import_vitest.expect)(scrollTo).not.toHaveBeenCalled();
|
|
92
114
|
});
|
|
93
115
|
(0, import_vitest.it)("scrolls to the top when the first state notification is a real navigation", () => {
|
|
94
|
-
|
|
95
|
-
(0, import_react_test_renderer.act)(() => subscriptions.root?.({}));
|
|
116
|
+
navigate("/compat/react-native-gesture-handler");
|
|
96
117
|
(0, import_vitest.expect)(scrollTo).toHaveBeenCalledWith(0, 0);
|
|
97
118
|
});
|
|
98
119
|
(0, import_vitest.it)("handles a query change as a first navigation", () => {
|
|
99
|
-
|
|
100
|
-
(0, import_react_test_renderer.act)(() => subscriptions.root?.({}));
|
|
120
|
+
navigate("/", "?platform=ios");
|
|
101
121
|
(0, import_vitest.expect)(scrollTo).toHaveBeenCalledWith(0, 0);
|
|
102
122
|
});
|
|
103
123
|
});
|
|
@@ -105,13 +125,10 @@ let scrollTo;
|
|
|
105
125
|
(0, import_vitest.it)("preserves position between routes in the same group", () => {
|
|
106
126
|
import_vitest.vi.useFakeTimers();
|
|
107
127
|
const unregister = (0, import_ScrollBehavior.registerScrollGroup)("/compat/react-native-gesture-handler");
|
|
108
|
-
(
|
|
109
|
-
location.pathname = "/compat/react-native-gesture-handler";
|
|
110
|
-
(0, import_react_test_renderer.act)(() => subscriptions.root?.({}));
|
|
128
|
+
navigate("/compat/react-native-gesture-handler");
|
|
111
129
|
scrollTo.mockClear();
|
|
112
130
|
(0, import_react_test_renderer.act)(() => subscriptions.loading?.("loading"));
|
|
113
|
-
|
|
114
|
-
(0, import_react_test_renderer.act)(() => subscriptions.root?.({}));
|
|
131
|
+
navigate("/compat/react-native-gesture-handler/pan-gesture");
|
|
115
132
|
import_vitest.vi.runAllTimers();
|
|
116
133
|
(0, import_vitest.expect)(scrollTo).toHaveBeenCalledWith(0, 500);
|
|
117
134
|
unregister();
|
|
@@ -119,13 +136,10 @@ let scrollTo;
|
|
|
119
136
|
});
|
|
120
137
|
(0, import_vitest.it)("does not match a different route whose slug has the same prefix", () => {
|
|
121
138
|
const unregister = (0, import_ScrollBehavior.registerScrollGroup)("/compat/react-native");
|
|
122
|
-
(
|
|
123
|
-
location.pathname = "/compat/react-native/core";
|
|
124
|
-
(0, import_react_test_renderer.act)(() => subscriptions.root?.({}));
|
|
139
|
+
navigate("/compat/react-native/core");
|
|
125
140
|
scrollTo.mockClear();
|
|
126
141
|
(0, import_react_test_renderer.act)(() => subscriptions.loading?.("loading"));
|
|
127
|
-
|
|
128
|
-
(0, import_react_test_renderer.act)(() => subscriptions.root?.({}));
|
|
142
|
+
navigate("/compat/react-native-gesture-handler");
|
|
129
143
|
(0, import_vitest.expect)(scrollTo).toHaveBeenCalledWith(0, 0);
|
|
130
144
|
unregister();
|
|
131
145
|
});
|
|
@@ -35,6 +35,14 @@ var subscriptions = import_vitest.vi.hoisted(function () {
|
|
|
35
35
|
root: void 0
|
|
36
36
|
};
|
|
37
37
|
});
|
|
38
|
+
var router = import_vitest.vi.hoisted(function () {
|
|
39
|
+
return {
|
|
40
|
+
routeInfo: {
|
|
41
|
+
unstable_globalHref: "/",
|
|
42
|
+
pathname: "/"
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
});
|
|
38
46
|
import_vitest.vi.mock("../router/lastAction", function () {
|
|
39
47
|
return {
|
|
40
48
|
setLastAction: import_vitest.vi.fn()
|
|
@@ -42,6 +50,9 @@ import_vitest.vi.mock("../router/lastAction", function () {
|
|
|
42
50
|
});
|
|
43
51
|
import_vitest.vi.mock("../router/router", function () {
|
|
44
52
|
return {
|
|
53
|
+
get routeInfo() {
|
|
54
|
+
return router.routeInfo;
|
|
55
|
+
},
|
|
45
56
|
subscribeToLoadingState: function (subscriber) {
|
|
46
57
|
subscriptions.loading = subscriber;
|
|
47
58
|
return function () {
|
|
@@ -60,6 +71,19 @@ globalThis.IS_REACT_ACT_ENVIRONMENT = true;
|
|
|
60
71
|
var renderer;
|
|
61
72
|
var location;
|
|
62
73
|
var scrollTo;
|
|
74
|
+
function navigate(pathname) {
|
|
75
|
+
var search = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "";
|
|
76
|
+
router.routeInfo = {
|
|
77
|
+
unstable_globalHref: `${pathname}${search}`,
|
|
78
|
+
pathname
|
|
79
|
+
};
|
|
80
|
+
(0, import_react_test_renderer.act)(function () {
|
|
81
|
+
var _subscriptions_root;
|
|
82
|
+
return (_subscriptions_root = subscriptions.root) === null || _subscriptions_root === void 0 ? void 0 : _subscriptions_root.call(subscriptions, {});
|
|
83
|
+
});
|
|
84
|
+
location.pathname = pathname;
|
|
85
|
+
location.search = search;
|
|
86
|
+
}
|
|
63
87
|
(0, import_vitest.beforeEach)(function () {
|
|
64
88
|
process.env.VITE_ENVIRONMENT = "client";
|
|
65
89
|
location = {
|
|
@@ -67,6 +91,10 @@ var scrollTo;
|
|
|
67
91
|
search: "",
|
|
68
92
|
hash: ""
|
|
69
93
|
};
|
|
94
|
+
router.routeInfo = {
|
|
95
|
+
unstable_globalHref: "/",
|
|
96
|
+
pathname: "/"
|
|
97
|
+
};
|
|
70
98
|
scrollTo = import_vitest.vi.fn();
|
|
71
99
|
var windowMock = Object.assign(new EventTarget(), {
|
|
72
100
|
location,
|
|
@@ -112,19 +140,11 @@ var scrollTo;
|
|
|
112
140
|
(0, import_vitest.expect)(scrollTo).not.toHaveBeenCalled();
|
|
113
141
|
});
|
|
114
142
|
(0, import_vitest.it)("scrolls to the top when the first state notification is a real navigation", function () {
|
|
115
|
-
|
|
116
|
-
(0, import_react_test_renderer.act)(function () {
|
|
117
|
-
var _subscriptions_root;
|
|
118
|
-
return (_subscriptions_root = subscriptions.root) === null || _subscriptions_root === void 0 ? void 0 : _subscriptions_root.call(subscriptions, {});
|
|
119
|
-
});
|
|
143
|
+
navigate("/compat/react-native-gesture-handler");
|
|
120
144
|
(0, import_vitest.expect)(scrollTo).toHaveBeenCalledWith(0, 0);
|
|
121
145
|
});
|
|
122
146
|
(0, import_vitest.it)("handles a query change as a first navigation", function () {
|
|
123
|
-
|
|
124
|
-
(0, import_react_test_renderer.act)(function () {
|
|
125
|
-
var _subscriptions_root;
|
|
126
|
-
return (_subscriptions_root = subscriptions.root) === null || _subscriptions_root === void 0 ? void 0 : _subscriptions_root.call(subscriptions, {});
|
|
127
|
-
});
|
|
147
|
+
navigate("/", "?platform=ios");
|
|
128
148
|
(0, import_vitest.expect)(scrollTo).toHaveBeenCalledWith(0, 0);
|
|
129
149
|
});
|
|
130
150
|
});
|
|
@@ -132,25 +152,13 @@ var scrollTo;
|
|
|
132
152
|
(0, import_vitest.it)("preserves position between routes in the same group", function () {
|
|
133
153
|
import_vitest.vi.useFakeTimers();
|
|
134
154
|
var unregister = (0, import_ScrollBehavior.registerScrollGroup)("/compat/react-native-gesture-handler");
|
|
135
|
-
(
|
|
136
|
-
var _subscriptions_root;
|
|
137
|
-
return (_subscriptions_root = subscriptions.root) === null || _subscriptions_root === void 0 ? void 0 : _subscriptions_root.call(subscriptions, {});
|
|
138
|
-
});
|
|
139
|
-
location.pathname = "/compat/react-native-gesture-handler";
|
|
140
|
-
(0, import_react_test_renderer.act)(function () {
|
|
141
|
-
var _subscriptions_root;
|
|
142
|
-
return (_subscriptions_root = subscriptions.root) === null || _subscriptions_root === void 0 ? void 0 : _subscriptions_root.call(subscriptions, {});
|
|
143
|
-
});
|
|
155
|
+
navigate("/compat/react-native-gesture-handler");
|
|
144
156
|
scrollTo.mockClear();
|
|
145
157
|
(0, import_react_test_renderer.act)(function () {
|
|
146
158
|
var _subscriptions_loading;
|
|
147
159
|
return (_subscriptions_loading = subscriptions.loading) === null || _subscriptions_loading === void 0 ? void 0 : _subscriptions_loading.call(subscriptions, "loading");
|
|
148
160
|
});
|
|
149
|
-
|
|
150
|
-
(0, import_react_test_renderer.act)(function () {
|
|
151
|
-
var _subscriptions_root;
|
|
152
|
-
return (_subscriptions_root = subscriptions.root) === null || _subscriptions_root === void 0 ? void 0 : _subscriptions_root.call(subscriptions, {});
|
|
153
|
-
});
|
|
161
|
+
navigate("/compat/react-native-gesture-handler/pan-gesture");
|
|
154
162
|
import_vitest.vi.runAllTimers();
|
|
155
163
|
(0, import_vitest.expect)(scrollTo).toHaveBeenCalledWith(0, 500);
|
|
156
164
|
unregister();
|
|
@@ -158,25 +166,13 @@ var scrollTo;
|
|
|
158
166
|
});
|
|
159
167
|
(0, import_vitest.it)("does not match a different route whose slug has the same prefix", function () {
|
|
160
168
|
var unregister = (0, import_ScrollBehavior.registerScrollGroup)("/compat/react-native");
|
|
161
|
-
(
|
|
162
|
-
var _subscriptions_root;
|
|
163
|
-
return (_subscriptions_root = subscriptions.root) === null || _subscriptions_root === void 0 ? void 0 : _subscriptions_root.call(subscriptions, {});
|
|
164
|
-
});
|
|
165
|
-
location.pathname = "/compat/react-native/core";
|
|
166
|
-
(0, import_react_test_renderer.act)(function () {
|
|
167
|
-
var _subscriptions_root;
|
|
168
|
-
return (_subscriptions_root = subscriptions.root) === null || _subscriptions_root === void 0 ? void 0 : _subscriptions_root.call(subscriptions, {});
|
|
169
|
-
});
|
|
169
|
+
navigate("/compat/react-native/core");
|
|
170
170
|
scrollTo.mockClear();
|
|
171
171
|
(0, import_react_test_renderer.act)(function () {
|
|
172
172
|
var _subscriptions_loading;
|
|
173
173
|
return (_subscriptions_loading = subscriptions.loading) === null || _subscriptions_loading === void 0 ? void 0 : _subscriptions_loading.call(subscriptions, "loading");
|
|
174
174
|
});
|
|
175
|
-
|
|
176
|
-
(0, import_react_test_renderer.act)(function () {
|
|
177
|
-
var _subscriptions_root;
|
|
178
|
-
return (_subscriptions_root = subscriptions.root) === null || _subscriptions_root === void 0 ? void 0 : _subscriptions_root.call(subscriptions, {});
|
|
179
|
-
});
|
|
175
|
+
navigate("/compat/react-native-gesture-handler");
|
|
180
176
|
(0, import_vitest.expect)(scrollTo).toHaveBeenCalledWith(0, 0);
|
|
181
177
|
unregister();
|
|
182
178
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["import_jsx_runtime","require","import_react","__toESM","import_react_test_renderer","import_vitest","import_ScrollBehavior","subscriptions","vi","hoisted","loading","root","mock","setLastAction","fn","subscribeToLoadingState","subscriber","subscribeToRootState","globalThis","IS_REACT_ACT_ENVIRONMENT","renderer","location","scrollTo","
|
|
1
|
+
{"version":3,"names":["import_jsx_runtime","require","import_react","__toESM","import_react_test_renderer","import_vitest","import_ScrollBehavior","subscriptions","vi","hoisted","loading","root","router","routeInfo","unstable_globalHref","pathname","mock","setLastAction","fn","subscribeToLoadingState","subscriber","subscribeToRootState","globalThis","IS_REACT_ACT_ENVIRONMENT","renderer","location","scrollTo","navigate","search","arguments","length","act","_subscriptions_root","call","beforeEach","process","env","VITE_ENVIRONMENT","hash","windowMock","Object","assign","EventTarget","scrollY","storage","Map","stubGlobal","getElementById","getItem","key","_storage_get","get","setItem","value","set","removeItem","delete","default","create","jsx","ScrollBehavior","afterEach","unmount","useRealTimers","unstubAllGlobals"],"sources":["../../../src/views/ScrollBehavior.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useEffect } from "react";
|
|
2
2
|
import { setLastAction } from "../router/lastAction.mjs";
|
|
3
|
-
import { subscribeToLoadingState, subscribeToRootState } from "../router/router.mjs";
|
|
3
|
+
import { routeInfo, subscribeToLoadingState, subscribeToRootState } from "../router/router.mjs";
|
|
4
4
|
const KEY = "one-sr";
|
|
5
5
|
const GROUP_KEY = "one-sr-groups";
|
|
6
6
|
const getState = () => JSON.parse(sessionStorage.getItem(KEY) || "{}");
|
|
@@ -71,7 +71,7 @@ function configure(props) {
|
|
|
71
71
|
return;
|
|
72
72
|
}
|
|
73
73
|
disable?.();
|
|
74
|
-
const initialLocation = `${window.location.pathname}${window.location.search}
|
|
74
|
+
const initialLocation = `${window.location.pathname}${window.location.search}`;
|
|
75
75
|
let isFirstStateChange = true;
|
|
76
76
|
previousPathname = window.location.pathname;
|
|
77
77
|
const popStateController = new AbortController();
|
|
@@ -87,10 +87,11 @@ function configure(props) {
|
|
|
87
87
|
}
|
|
88
88
|
});
|
|
89
89
|
const disposeOnRootState = subscribeToRootState(state => {
|
|
90
|
+
const currentHref = routeInfo?.unstable_globalHref ?? "";
|
|
91
|
+
const currentPathname = routeInfo?.pathname ?? "";
|
|
90
92
|
if (isFirstStateChange) {
|
|
91
93
|
isFirstStateChange = false;
|
|
92
|
-
|
|
93
|
-
if (currentLocation === initialLocation) {
|
|
94
|
+
if (currentHref === initialLocation) {
|
|
94
95
|
return;
|
|
95
96
|
}
|
|
96
97
|
}
|
|
@@ -100,7 +101,6 @@ function configure(props) {
|
|
|
100
101
|
const {
|
|
101
102
|
hash
|
|
102
103
|
} = state;
|
|
103
|
-
const currentPathname = window.location.pathname;
|
|
104
104
|
if (hash) {
|
|
105
105
|
setTimeout(() => {
|
|
106
106
|
scrollToHash(hash);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","setLastAction","subscribeToLoadingState","subscribeToRootState","KEY","GROUP_KEY","getState","JSON","parse","sessionStorage","getItem","getGroupState","activeGroups","Set","registerScrollGroup","groupId","add","delete","getGroupKey","pathname","longestMatch","group","startsWith","length","restorePosition","positions","saved","window","location","setTimeout","scrollTo","error","console","removeItem","restoreGroupPosition","didPop","previousPathname","rememberScrollPosition","state","scrollY","setItem","stringify","groupKey","groupState","disable","configure","props","addEventListener","initialLocation","search","
|
|
1
|
+
{"version":3,"names":["useEffect","setLastAction","routeInfo","subscribeToLoadingState","subscribeToRootState","KEY","GROUP_KEY","getState","JSON","parse","sessionStorage","getItem","getGroupState","activeGroups","Set","registerScrollGroup","groupId","add","delete","getGroupKey","pathname","longestMatch","group","startsWith","length","restorePosition","positions","saved","window","location","setTimeout","scrollTo","error","console","removeItem","restoreGroupPosition","didPop","previousPathname","rememberScrollPosition","state","scrollY","setItem","stringify","groupKey","groupState","disable","configure","props","addEventListener","initialLocation","search","isFirstStateChange","popStateController","AbortController","signal","disposeOnLoadState","disposeOnRootState","currentHref","unstable_globalHref","currentPathname","linkOptions","scroll","hash","scrollToHash","prevGroup","currentGroup","scrollGroup","abort","id","slice","el","document","getElementById","scrollIntoView","behavior","ScrollBehavior","process","env","VITE_ENVIRONMENT"],"sources":["../../../src/views/ScrollBehavior.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useEffect } from "react";
|
|
2
2
|
import { setLastAction } from "../router/lastAction.native.js";
|
|
3
|
-
import { subscribeToLoadingState, subscribeToRootState } from "../router/router.native.js";
|
|
3
|
+
import { routeInfo, subscribeToLoadingState, subscribeToRootState } from "../router/router.native.js";
|
|
4
4
|
var KEY = "one-sr";
|
|
5
5
|
var GROUP_KEY = "one-sr-groups";
|
|
6
6
|
var getState = function () {
|
|
@@ -94,7 +94,7 @@ function configure(props) {
|
|
|
94
94
|
return;
|
|
95
95
|
}
|
|
96
96
|
disable === null || disable === void 0 ? void 0 : disable();
|
|
97
|
-
var initialLocation = `${window.location.pathname}${window.location.search}
|
|
97
|
+
var initialLocation = `${window.location.pathname}${window.location.search}`;
|
|
98
98
|
var isFirstStateChange = true;
|
|
99
99
|
previousPathname = window.location.pathname;
|
|
100
100
|
var popStateController = new AbortController();
|
|
@@ -110,11 +110,13 @@ function configure(props) {
|
|
|
110
110
|
}
|
|
111
111
|
});
|
|
112
112
|
var disposeOnRootState = subscribeToRootState(function (state) {
|
|
113
|
+
var _ref, _ref1;
|
|
113
114
|
var _state_linkOptions;
|
|
115
|
+
var currentHref = (_ref = routeInfo === null || routeInfo === void 0 ? void 0 : routeInfo.unstable_globalHref) !== null && _ref !== void 0 ? _ref : "";
|
|
116
|
+
var currentPathname = (_ref1 = routeInfo === null || routeInfo === void 0 ? void 0 : routeInfo.pathname) !== null && _ref1 !== void 0 ? _ref1 : "";
|
|
114
117
|
if (isFirstStateChange) {
|
|
115
118
|
isFirstStateChange = false;
|
|
116
|
-
|
|
117
|
-
if (currentLocation === initialLocation) {
|
|
119
|
+
if (currentHref === initialLocation) {
|
|
118
120
|
return;
|
|
119
121
|
}
|
|
120
122
|
}
|
|
@@ -124,7 +126,6 @@ function configure(props) {
|
|
|
124
126
|
var {
|
|
125
127
|
hash
|
|
126
128
|
} = state;
|
|
127
|
-
var currentPathname = window.location.pathname;
|
|
128
129
|
if (hash) {
|
|
129
130
|
setTimeout(function () {
|
|
130
131
|
scrollToHash(hash);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","setLastAction","subscribeToLoadingState","subscribeToRootState","KEY","GROUP_KEY","getState","JSON","parse","sessionStorage","getItem","getGroupState","activeGroups","Set","registerScrollGroup","groupId","add","delete","getGroupKey","pathname","longestMatch","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","group","value","startsWith","length","err","return","restorePosition","positions","saved","window","location","setTimeout","scrollTo","error","console","removeItem","restoreGroupPosition","didPop","previousPathname","rememberScrollPosition","state","scrollY","setItem","stringify","groupKey","groupState","disable","configure","props","addEventListener","initialLocation","search","
|
|
1
|
+
{"version":3,"names":["useEffect","setLastAction","routeInfo","subscribeToLoadingState","subscribeToRootState","KEY","GROUP_KEY","getState","JSON","parse","sessionStorage","getItem","getGroupState","activeGroups","Set","registerScrollGroup","groupId","add","delete","getGroupKey","pathname","longestMatch","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","group","value","startsWith","length","err","return","restorePosition","positions","saved","window","location","setTimeout","scrollTo","error","console","removeItem","restoreGroupPosition","didPop","previousPathname","rememberScrollPosition","state","scrollY","setItem","stringify","groupKey","groupState","disable","configure","props","addEventListener","initialLocation","search","isFirstStateChange","popStateController","AbortController","signal","disposeOnLoadState","disposeOnRootState","_ref","_ref1","_state_linkOptions","currentHref","unstable_globalHref","currentPathname","linkOptions","scroll","hash","scrollToHash","_state_linkOptions1","prevGroup","currentGroup","scrollGroup","abort"],"sources":["../../../src/views/ScrollBehavior.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -6,10 +6,19 @@ const subscriptions = vi.hoisted(() => ({
|
|
|
6
6
|
loading: void 0,
|
|
7
7
|
root: void 0
|
|
8
8
|
}));
|
|
9
|
+
const router = vi.hoisted(() => ({
|
|
10
|
+
routeInfo: {
|
|
11
|
+
unstable_globalHref: "/",
|
|
12
|
+
pathname: "/"
|
|
13
|
+
}
|
|
14
|
+
}));
|
|
9
15
|
vi.mock("../router/lastAction", () => ({
|
|
10
16
|
setLastAction: vi.fn()
|
|
11
17
|
}));
|
|
12
18
|
vi.mock("../router/router", () => ({
|
|
19
|
+
get routeInfo() {
|
|
20
|
+
return router.routeInfo;
|
|
21
|
+
},
|
|
13
22
|
subscribeToLoadingState: subscriber => {
|
|
14
23
|
subscriptions.loading = subscriber;
|
|
15
24
|
return () => {
|
|
@@ -27,6 +36,15 @@ globalThis.IS_REACT_ACT_ENVIRONMENT = true;
|
|
|
27
36
|
let renderer;
|
|
28
37
|
let location;
|
|
29
38
|
let scrollTo;
|
|
39
|
+
function navigate(pathname, search = "") {
|
|
40
|
+
router.routeInfo = {
|
|
41
|
+
unstable_globalHref: `${pathname}${search}`,
|
|
42
|
+
pathname
|
|
43
|
+
};
|
|
44
|
+
act(() => subscriptions.root?.({}));
|
|
45
|
+
location.pathname = pathname;
|
|
46
|
+
location.search = search;
|
|
47
|
+
}
|
|
30
48
|
beforeEach(() => {
|
|
31
49
|
process.env.VITE_ENVIRONMENT = "client";
|
|
32
50
|
location = {
|
|
@@ -34,6 +52,10 @@ beforeEach(() => {
|
|
|
34
52
|
search: "",
|
|
35
53
|
hash: ""
|
|
36
54
|
};
|
|
55
|
+
router.routeInfo = {
|
|
56
|
+
unstable_globalHref: "/",
|
|
57
|
+
pathname: "/"
|
|
58
|
+
};
|
|
37
59
|
scrollTo = vi.fn();
|
|
38
60
|
const windowMock = Object.assign(new EventTarget(), {
|
|
39
61
|
location,
|
|
@@ -67,13 +89,11 @@ describe("ScrollBehavior initial navigation", () => {
|
|
|
67
89
|
expect(scrollTo).not.toHaveBeenCalled();
|
|
68
90
|
});
|
|
69
91
|
it("scrolls to the top when the first state notification is a real navigation", () => {
|
|
70
|
-
|
|
71
|
-
act(() => subscriptions.root?.({}));
|
|
92
|
+
navigate("/compat/react-native-gesture-handler");
|
|
72
93
|
expect(scrollTo).toHaveBeenCalledWith(0, 0);
|
|
73
94
|
});
|
|
74
95
|
it("handles a query change as a first navigation", () => {
|
|
75
|
-
|
|
76
|
-
act(() => subscriptions.root?.({}));
|
|
96
|
+
navigate("/", "?platform=ios");
|
|
77
97
|
expect(scrollTo).toHaveBeenCalledWith(0, 0);
|
|
78
98
|
});
|
|
79
99
|
});
|
|
@@ -81,13 +101,10 @@ describe("ScrollBehavior groups", () => {
|
|
|
81
101
|
it("preserves position between routes in the same group", () => {
|
|
82
102
|
vi.useFakeTimers();
|
|
83
103
|
const unregister = registerScrollGroup("/compat/react-native-gesture-handler");
|
|
84
|
-
|
|
85
|
-
location.pathname = "/compat/react-native-gesture-handler";
|
|
86
|
-
act(() => subscriptions.root?.({}));
|
|
104
|
+
navigate("/compat/react-native-gesture-handler");
|
|
87
105
|
scrollTo.mockClear();
|
|
88
106
|
act(() => subscriptions.loading?.("loading"));
|
|
89
|
-
|
|
90
|
-
act(() => subscriptions.root?.({}));
|
|
107
|
+
navigate("/compat/react-native-gesture-handler/pan-gesture");
|
|
91
108
|
vi.runAllTimers();
|
|
92
109
|
expect(scrollTo).toHaveBeenCalledWith(0, 500);
|
|
93
110
|
unregister();
|
|
@@ -95,13 +112,10 @@ describe("ScrollBehavior groups", () => {
|
|
|
95
112
|
});
|
|
96
113
|
it("does not match a different route whose slug has the same prefix", () => {
|
|
97
114
|
const unregister = registerScrollGroup("/compat/react-native");
|
|
98
|
-
|
|
99
|
-
location.pathname = "/compat/react-native/core";
|
|
100
|
-
act(() => subscriptions.root?.({}));
|
|
115
|
+
navigate("/compat/react-native/core");
|
|
101
116
|
scrollTo.mockClear();
|
|
102
117
|
act(() => subscriptions.loading?.("loading"));
|
|
103
|
-
|
|
104
|
-
act(() => subscriptions.root?.({}));
|
|
118
|
+
navigate("/compat/react-native-gesture-handler");
|
|
105
119
|
expect(scrollTo).toHaveBeenCalledWith(0, 0);
|
|
106
120
|
unregister();
|
|
107
121
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TestRenderer","act","afterEach","beforeEach","describe","expect","it","vi","registerScrollGroup","ScrollBehavior","jsx","subscriptions","hoisted","loading","root","mock","setLastAction","fn","subscribeToLoadingState","subscriber","subscribeToRootState","globalThis","IS_REACT_ACT_ENVIRONMENT","renderer","location","scrollTo","
|
|
1
|
+
{"version":3,"names":["TestRenderer","act","afterEach","beforeEach","describe","expect","it","vi","registerScrollGroup","ScrollBehavior","jsx","subscriptions","hoisted","loading","root","router","routeInfo","unstable_globalHref","pathname","mock","setLastAction","fn","subscribeToLoadingState","subscriber","subscribeToRootState","globalThis","IS_REACT_ACT_ENVIRONMENT","renderer","location","scrollTo","navigate","search","process","env","VITE_ENVIRONMENT","hash","windowMock","Object","assign","EventTarget","scrollY","storage","Map","stubGlobal","getElementById","getItem","key","get","setItem","value","set","removeItem","delete","create","unmount","useRealTimers","unstubAllGlobals","not","toHaveBeenCalled","toHaveBeenCalledWith","useFakeTimers","unregister","mockClear","runAllTimers"],"sources":["../../../src/views/ScrollBehavior.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -9,6 +9,14 @@ var subscriptions = vi.hoisted(function () {
|
|
|
9
9
|
root: void 0
|
|
10
10
|
};
|
|
11
11
|
});
|
|
12
|
+
var router = vi.hoisted(function () {
|
|
13
|
+
return {
|
|
14
|
+
routeInfo: {
|
|
15
|
+
unstable_globalHref: "/",
|
|
16
|
+
pathname: "/"
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
});
|
|
12
20
|
vi.mock("../router/lastAction", function () {
|
|
13
21
|
return {
|
|
14
22
|
setLastAction: vi.fn()
|
|
@@ -16,6 +24,9 @@ vi.mock("../router/lastAction", function () {
|
|
|
16
24
|
});
|
|
17
25
|
vi.mock("../router/router", function () {
|
|
18
26
|
return {
|
|
27
|
+
get routeInfo() {
|
|
28
|
+
return router.routeInfo;
|
|
29
|
+
},
|
|
19
30
|
subscribeToLoadingState: function (subscriber) {
|
|
20
31
|
subscriptions.loading = subscriber;
|
|
21
32
|
return function () {
|
|
@@ -34,6 +45,19 @@ globalThis.IS_REACT_ACT_ENVIRONMENT = true;
|
|
|
34
45
|
var renderer;
|
|
35
46
|
var location;
|
|
36
47
|
var scrollTo;
|
|
48
|
+
function navigate(pathname) {
|
|
49
|
+
var search = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "";
|
|
50
|
+
router.routeInfo = {
|
|
51
|
+
unstable_globalHref: `${pathname}${search}`,
|
|
52
|
+
pathname
|
|
53
|
+
};
|
|
54
|
+
act(function () {
|
|
55
|
+
var _subscriptions_root;
|
|
56
|
+
return (_subscriptions_root = subscriptions.root) === null || _subscriptions_root === void 0 ? void 0 : _subscriptions_root.call(subscriptions, {});
|
|
57
|
+
});
|
|
58
|
+
location.pathname = pathname;
|
|
59
|
+
location.search = search;
|
|
60
|
+
}
|
|
37
61
|
beforeEach(function () {
|
|
38
62
|
process.env.VITE_ENVIRONMENT = "client";
|
|
39
63
|
location = {
|
|
@@ -41,6 +65,10 @@ beforeEach(function () {
|
|
|
41
65
|
search: "",
|
|
42
66
|
hash: ""
|
|
43
67
|
};
|
|
68
|
+
router.routeInfo = {
|
|
69
|
+
unstable_globalHref: "/",
|
|
70
|
+
pathname: "/"
|
|
71
|
+
};
|
|
44
72
|
scrollTo = vi.fn();
|
|
45
73
|
var windowMock = Object.assign(new EventTarget(), {
|
|
46
74
|
location,
|
|
@@ -86,19 +114,11 @@ describe("ScrollBehavior initial navigation", function () {
|
|
|
86
114
|
expect(scrollTo).not.toHaveBeenCalled();
|
|
87
115
|
});
|
|
88
116
|
it("scrolls to the top when the first state notification is a real navigation", function () {
|
|
89
|
-
|
|
90
|
-
act(function () {
|
|
91
|
-
var _subscriptions_root;
|
|
92
|
-
return (_subscriptions_root = subscriptions.root) === null || _subscriptions_root === void 0 ? void 0 : _subscriptions_root.call(subscriptions, {});
|
|
93
|
-
});
|
|
117
|
+
navigate("/compat/react-native-gesture-handler");
|
|
94
118
|
expect(scrollTo).toHaveBeenCalledWith(0, 0);
|
|
95
119
|
});
|
|
96
120
|
it("handles a query change as a first navigation", function () {
|
|
97
|
-
|
|
98
|
-
act(function () {
|
|
99
|
-
var _subscriptions_root;
|
|
100
|
-
return (_subscriptions_root = subscriptions.root) === null || _subscriptions_root === void 0 ? void 0 : _subscriptions_root.call(subscriptions, {});
|
|
101
|
-
});
|
|
121
|
+
navigate("/", "?platform=ios");
|
|
102
122
|
expect(scrollTo).toHaveBeenCalledWith(0, 0);
|
|
103
123
|
});
|
|
104
124
|
});
|
|
@@ -106,25 +126,13 @@ describe("ScrollBehavior groups", function () {
|
|
|
106
126
|
it("preserves position between routes in the same group", function () {
|
|
107
127
|
vi.useFakeTimers();
|
|
108
128
|
var unregister = registerScrollGroup("/compat/react-native-gesture-handler");
|
|
109
|
-
|
|
110
|
-
var _subscriptions_root;
|
|
111
|
-
return (_subscriptions_root = subscriptions.root) === null || _subscriptions_root === void 0 ? void 0 : _subscriptions_root.call(subscriptions, {});
|
|
112
|
-
});
|
|
113
|
-
location.pathname = "/compat/react-native-gesture-handler";
|
|
114
|
-
act(function () {
|
|
115
|
-
var _subscriptions_root;
|
|
116
|
-
return (_subscriptions_root = subscriptions.root) === null || _subscriptions_root === void 0 ? void 0 : _subscriptions_root.call(subscriptions, {});
|
|
117
|
-
});
|
|
129
|
+
navigate("/compat/react-native-gesture-handler");
|
|
118
130
|
scrollTo.mockClear();
|
|
119
131
|
act(function () {
|
|
120
132
|
var _subscriptions_loading;
|
|
121
133
|
return (_subscriptions_loading = subscriptions.loading) === null || _subscriptions_loading === void 0 ? void 0 : _subscriptions_loading.call(subscriptions, "loading");
|
|
122
134
|
});
|
|
123
|
-
|
|
124
|
-
act(function () {
|
|
125
|
-
var _subscriptions_root;
|
|
126
|
-
return (_subscriptions_root = subscriptions.root) === null || _subscriptions_root === void 0 ? void 0 : _subscriptions_root.call(subscriptions, {});
|
|
127
|
-
});
|
|
135
|
+
navigate("/compat/react-native-gesture-handler/pan-gesture");
|
|
128
136
|
vi.runAllTimers();
|
|
129
137
|
expect(scrollTo).toHaveBeenCalledWith(0, 500);
|
|
130
138
|
unregister();
|
|
@@ -132,25 +140,13 @@ describe("ScrollBehavior groups", function () {
|
|
|
132
140
|
});
|
|
133
141
|
it("does not match a different route whose slug has the same prefix", function () {
|
|
134
142
|
var unregister = registerScrollGroup("/compat/react-native");
|
|
135
|
-
|
|
136
|
-
var _subscriptions_root;
|
|
137
|
-
return (_subscriptions_root = subscriptions.root) === null || _subscriptions_root === void 0 ? void 0 : _subscriptions_root.call(subscriptions, {});
|
|
138
|
-
});
|
|
139
|
-
location.pathname = "/compat/react-native/core";
|
|
140
|
-
act(function () {
|
|
141
|
-
var _subscriptions_root;
|
|
142
|
-
return (_subscriptions_root = subscriptions.root) === null || _subscriptions_root === void 0 ? void 0 : _subscriptions_root.call(subscriptions, {});
|
|
143
|
-
});
|
|
143
|
+
navigate("/compat/react-native/core");
|
|
144
144
|
scrollTo.mockClear();
|
|
145
145
|
act(function () {
|
|
146
146
|
var _subscriptions_loading;
|
|
147
147
|
return (_subscriptions_loading = subscriptions.loading) === null || _subscriptions_loading === void 0 ? void 0 : _subscriptions_loading.call(subscriptions, "loading");
|
|
148
148
|
});
|
|
149
|
-
|
|
150
|
-
act(function () {
|
|
151
|
-
var _subscriptions_root;
|
|
152
|
-
return (_subscriptions_root = subscriptions.root) === null || _subscriptions_root === void 0 ? void 0 : _subscriptions_root.call(subscriptions, {});
|
|
153
|
-
});
|
|
149
|
+
navigate("/compat/react-native-gesture-handler");
|
|
154
150
|
expect(scrollTo).toHaveBeenCalledWith(0, 0);
|
|
155
151
|
unregister();
|
|
156
152
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["jsx","_jsx","React","TestRenderer","act","afterEach","beforeEach","describe","expect","it","vi","registerScrollGroup","ScrollBehavior","subscriptions","hoisted","loading","root","mock","setLastAction","fn","subscribeToLoadingState","subscriber","subscribeToRootState","globalThis","IS_REACT_ACT_ENVIRONMENT","renderer","location","scrollTo","
|
|
1
|
+
{"version":3,"names":["jsx","_jsx","React","TestRenderer","act","afterEach","beforeEach","describe","expect","it","vi","registerScrollGroup","ScrollBehavior","subscriptions","hoisted","loading","root","router","routeInfo","unstable_globalHref","pathname","mock","setLastAction","fn","subscribeToLoadingState","subscriber","subscribeToRootState","globalThis","IS_REACT_ACT_ENVIRONMENT","renderer","location","scrollTo","navigate","search","arguments","length","_subscriptions_root","call","process","env","VITE_ENVIRONMENT","hash","windowMock","Object","assign","EventTarget","scrollY","storage","Map","stubGlobal","getElementById","getItem","key","_storage_get","get","setItem","value","set","removeItem","delete","create","unmount","useRealTimers","unstubAllGlobals"],"sources":["../../../src/views/ScrollBehavior.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.12",
|
|
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.12",
|
|
197
|
+
"@vxrn/compiler": "1.25.12",
|
|
198
|
+
"@vxrn/resolve": "1.25.12",
|
|
199
|
+
"@vxrn/tslib-lite": "1.25.12",
|
|
200
|
+
"@vxrn/use-isomorphic-layout-effect": "1.25.12",
|
|
201
|
+
"@vxrn/vite-plugin-metro": "1.25.12",
|
|
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.12",
|
|
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.12",
|
|
228
228
|
"web-streams-polyfill": "^4.3.0",
|
|
229
229
|
"ws": "^8.21.0",
|
|
230
230
|
"xxhashjs": "^0.2.2"
|
|
@@ -7,11 +7,25 @@ const subscriptions = vi.hoisted(() => ({
|
|
|
7
7
|
root: undefined as ((state: any) => void) | undefined,
|
|
8
8
|
}))
|
|
9
9
|
|
|
10
|
+
// the router's committed route. updateState writes this and then notifies root
|
|
11
|
+
// state subscribers, so it is current inside the subscriber while
|
|
12
|
+
// window.location still points at the route being left — react-navigation's
|
|
13
|
+
// linking listener writes the URL after. every test below drives the two in
|
|
14
|
+
// that order.
|
|
15
|
+
const router = vi.hoisted(() => ({
|
|
16
|
+
routeInfo: { unstable_globalHref: '/', pathname: '/' } as
|
|
17
|
+
| { unstable_globalHref: string; pathname: string }
|
|
18
|
+
| undefined,
|
|
19
|
+
}))
|
|
20
|
+
|
|
10
21
|
vi.mock('../router/lastAction', () => ({
|
|
11
22
|
setLastAction: vi.fn(),
|
|
12
23
|
}))
|
|
13
24
|
|
|
14
25
|
vi.mock('../router/router', () => ({
|
|
26
|
+
get routeInfo() {
|
|
27
|
+
return router.routeInfo
|
|
28
|
+
},
|
|
15
29
|
subscribeToLoadingState: (subscriber: typeof subscriptions.loading) => {
|
|
16
30
|
subscriptions.loading = subscriber
|
|
17
31
|
return () => {
|
|
@@ -40,9 +54,19 @@ let renderer: TestRenderer.ReactTestRenderer | undefined
|
|
|
40
54
|
let location: MockLocation
|
|
41
55
|
let scrollTo: ReturnType<typeof vi.fn>
|
|
42
56
|
|
|
57
|
+
// one navigation, in the order the router performs it: commit the route, notify
|
|
58
|
+
// subscribers, then let the linking listener catch the URL up.
|
|
59
|
+
function navigate(pathname: string, search = '') {
|
|
60
|
+
router.routeInfo = { unstable_globalHref: `${pathname}${search}`, pathname }
|
|
61
|
+
act(() => subscriptions.root?.({}))
|
|
62
|
+
location.pathname = pathname
|
|
63
|
+
location.search = search
|
|
64
|
+
}
|
|
65
|
+
|
|
43
66
|
beforeEach(() => {
|
|
44
67
|
process.env.VITE_ENVIRONMENT = 'client'
|
|
45
68
|
location = { pathname: '/', search: '', hash: '' }
|
|
69
|
+
router.routeInfo = { unstable_globalHref: '/', pathname: '/' }
|
|
46
70
|
scrollTo = vi.fn()
|
|
47
71
|
|
|
48
72
|
const windowMock = Object.assign(new EventTarget(), {
|
|
@@ -81,17 +105,13 @@ describe('ScrollBehavior initial navigation', () => {
|
|
|
81
105
|
})
|
|
82
106
|
|
|
83
107
|
it('scrolls to the top when the first state notification is a real navigation', () => {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
act(() => subscriptions.root?.({}))
|
|
108
|
+
navigate('/compat/react-native-gesture-handler')
|
|
87
109
|
|
|
88
110
|
expect(scrollTo).toHaveBeenCalledWith(0, 0)
|
|
89
111
|
})
|
|
90
112
|
|
|
91
113
|
it('handles a query change as a first navigation', () => {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
act(() => subscriptions.root?.({}))
|
|
114
|
+
navigate('/', '?platform=ios')
|
|
95
115
|
|
|
96
116
|
expect(scrollTo).toHaveBeenCalledWith(0, 0)
|
|
97
117
|
})
|
|
@@ -102,14 +122,11 @@ describe('ScrollBehavior groups', () => {
|
|
|
102
122
|
vi.useFakeTimers()
|
|
103
123
|
const unregister = registerScrollGroup('/compat/react-native-gesture-handler')
|
|
104
124
|
|
|
105
|
-
|
|
106
|
-
location.pathname = '/compat/react-native-gesture-handler'
|
|
107
|
-
act(() => subscriptions.root?.({}))
|
|
125
|
+
navigate('/compat/react-native-gesture-handler')
|
|
108
126
|
scrollTo.mockClear()
|
|
109
127
|
|
|
110
128
|
act(() => subscriptions.loading?.('loading'))
|
|
111
|
-
|
|
112
|
-
act(() => subscriptions.root?.({}))
|
|
129
|
+
navigate('/compat/react-native-gesture-handler/pan-gesture')
|
|
113
130
|
vi.runAllTimers()
|
|
114
131
|
|
|
115
132
|
expect(scrollTo).toHaveBeenCalledWith(0, 500)
|
|
@@ -121,14 +138,11 @@ describe('ScrollBehavior groups', () => {
|
|
|
121
138
|
it('does not match a different route whose slug has the same prefix', () => {
|
|
122
139
|
const unregister = registerScrollGroup('/compat/react-native')
|
|
123
140
|
|
|
124
|
-
|
|
125
|
-
location.pathname = '/compat/react-native/core'
|
|
126
|
-
act(() => subscriptions.root?.({}))
|
|
141
|
+
navigate('/compat/react-native/core')
|
|
127
142
|
scrollTo.mockClear()
|
|
128
143
|
|
|
129
144
|
act(() => subscriptions.loading?.('loading'))
|
|
130
|
-
|
|
131
|
-
act(() => subscriptions.root?.({}))
|
|
145
|
+
navigate('/compat/react-native-gesture-handler')
|
|
132
146
|
|
|
133
147
|
expect(scrollTo).toHaveBeenCalledWith(0, 0)
|
|
134
148
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useEffect } from 'react'
|
|
2
2
|
import { setLastAction } from '../router/lastAction'
|
|
3
|
-
import { subscribeToLoadingState, subscribeToRootState } from '../router/router'
|
|
3
|
+
import { routeInfo, subscribeToLoadingState, subscribeToRootState } from '../router/router'
|
|
4
4
|
|
|
5
5
|
const KEY = 'one-sr'
|
|
6
6
|
const GROUP_KEY = 'one-sr-groups'
|
|
@@ -105,8 +105,8 @@ function configure(props: ScrollBehaviorProps) {
|
|
|
105
105
|
|
|
106
106
|
disable?.()
|
|
107
107
|
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
// routeInfo carries no hash, so the mount comparison below is pathname+search
|
|
109
|
+
const initialLocation = `${window.location.pathname}${window.location.search}`
|
|
110
110
|
let isFirstStateChange = true
|
|
111
111
|
previousPathname = window.location.pathname
|
|
112
112
|
|
|
@@ -130,16 +130,21 @@ function configure(props: ScrollBehaviorProps) {
|
|
|
130
130
|
})
|
|
131
131
|
|
|
132
132
|
const disposeOnRootState = subscribeToRootState((state) => {
|
|
133
|
+
// updateState refreshes routeInfo and then notifies these subscribers, all
|
|
134
|
+
// before react-navigation's linking listener writes the new URL. so
|
|
135
|
+
// window.location here still reports the route being left, and the router's
|
|
136
|
+
// own route info is the only current view of where we just navigated to.
|
|
137
|
+
const currentHref = routeInfo?.unstable_globalHref ?? ''
|
|
138
|
+
const currentPathname = routeInfo?.pathname ?? ''
|
|
139
|
+
|
|
133
140
|
if (isFirstStateChange) {
|
|
134
141
|
isFirstStateChange = false
|
|
135
142
|
|
|
136
143
|
// Depending on navigator mount timing, the initial state notification may
|
|
137
144
|
// happen before or after this effect subscribes. Only ignore it when the
|
|
138
|
-
//
|
|
145
|
+
// router is still on the route where ScrollBehavior mounted. Otherwise this
|
|
139
146
|
// is the first real navigation and must receive normal scroll handling.
|
|
140
|
-
|
|
141
|
-
`${window.location.pathname}${window.location.search}${window.location.hash}`
|
|
142
|
-
if (currentLocation === initialLocation) {
|
|
147
|
+
if (currentHref === initialLocation) {
|
|
143
148
|
return
|
|
144
149
|
}
|
|
145
150
|
}
|
|
@@ -149,7 +154,6 @@ function configure(props: ScrollBehaviorProps) {
|
|
|
149
154
|
}
|
|
150
155
|
|
|
151
156
|
const { hash } = state
|
|
152
|
-
const currentPathname = window.location.pathname
|
|
153
157
|
|
|
154
158
|
if (hash) {
|
|
155
159
|
setTimeout(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollBehavior.d.ts","sourceRoot":"","sources":["../../src/views/ScrollBehavior.tsx"],"names":[],"mappings":"AAaA;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,cAKlD;AAqED,KAAK,mBAAmB,GAAG;IACzB,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9B,CAAA;
|
|
1
|
+
{"version":3,"file":"ScrollBehavior.d.ts","sourceRoot":"","sources":["../../src/views/ScrollBehavior.tsx"],"names":[],"mappings":"AAaA;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,cAKlD;AAqED,KAAK,mBAAmB,GAAG;IACzB,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9B,CAAA;AA4GD,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,QAcxD"}
|