@multiplatform.one/router 6.1.0 → 6.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +51 -0
- package/dist/cjs/hooks/useUrlState.cjs +30 -9
- package/dist/cjs/hooks/useUrlState.native.js +32 -9
- package/dist/cjs/hooks/useUrlState.native.js.map +1 -1
- package/dist/cjs/seam/DomNavigationHost.cjs +122 -0
- package/dist/cjs/seam/DomNavigationHost.native.js +186 -0
- package/dist/cjs/seam/DomNavigationHost.native.js.map +1 -0
- package/dist/cjs/seam/index.cjs +47 -0
- package/dist/cjs/seam/index.native.js +50 -0
- package/dist/cjs/seam/index.native.js.map +1 -0
- package/dist/cjs/seam/navigator.cjs +309 -0
- package/dist/cjs/seam/navigator.native.js +479 -0
- package/dist/cjs/seam/navigator.native.js.map +1 -0
- package/dist/cjs/seam/oneAdapter.cjs +128 -0
- package/dist/cjs/seam/oneAdapter.native.js +141 -0
- package/dist/cjs/seam/oneAdapter.native.js.map +1 -0
- package/dist/esm/hooks/useUrlState.mjs +31 -10
- package/dist/esm/hooks/useUrlState.mjs.map +1 -1
- package/dist/esm/hooks/useUrlState.native.js +33 -10
- package/dist/esm/hooks/useUrlState.native.js.map +1 -1
- package/dist/esm/seam/DomNavigationHost.mjs +96 -0
- package/dist/esm/seam/DomNavigationHost.mjs.map +1 -0
- package/dist/esm/seam/DomNavigationHost.native.js +157 -0
- package/dist/esm/seam/DomNavigationHost.native.js.map +1 -0
- package/dist/esm/seam/index.mjs +5 -0
- package/dist/esm/seam/index.mjs.map +1 -0
- package/dist/esm/seam/index.native.js +5 -0
- package/dist/esm/seam/index.native.js.map +1 -0
- package/dist/esm/seam/navigator.mjs +279 -0
- package/dist/esm/seam/navigator.mjs.map +1 -0
- package/dist/esm/seam/navigator.native.js +446 -0
- package/dist/esm/seam/navigator.native.js.map +1 -0
- package/dist/esm/seam/oneAdapter.mjs +90 -0
- package/dist/esm/seam/oneAdapter.mjs.map +1 -0
- package/dist/esm/seam/oneAdapter.native.js +100 -0
- package/dist/esm/seam/oneAdapter.native.js.map +1 -0
- package/dist/jsx/hooks/useUrlState.mjs +31 -10
- package/dist/jsx/hooks/useUrlState.mjs.map +1 -1
- package/dist/jsx/hooks/useUrlState.native.js +32 -9
- package/dist/jsx/hooks/useUrlState.native.js.map +1 -1
- package/dist/jsx/seam/DomNavigationHost.mjs +96 -0
- package/dist/jsx/seam/DomNavigationHost.mjs.map +1 -0
- package/dist/jsx/seam/DomNavigationHost.native.js +186 -0
- package/dist/jsx/seam/DomNavigationHost.native.js.map +1 -0
- package/dist/jsx/seam/index.mjs +5 -0
- package/dist/jsx/seam/index.mjs.map +1 -0
- package/dist/jsx/seam/index.native.js +50 -0
- package/dist/jsx/seam/index.native.js.map +1 -0
- package/dist/jsx/seam/navigator.mjs +279 -0
- package/dist/jsx/seam/navigator.mjs.map +1 -0
- package/dist/jsx/seam/navigator.native.js +479 -0
- package/dist/jsx/seam/navigator.native.js.map +1 -0
- package/dist/jsx/seam/oneAdapter.mjs +90 -0
- package/dist/jsx/seam/oneAdapter.mjs.map +1 -0
- package/dist/jsx/seam/oneAdapter.native.js +141 -0
- package/dist/jsx/seam/oneAdapter.native.js.map +1 -0
- package/package.json +26 -9
- package/src/hooks/urlStateEdges.spec.ts +98 -0
- package/src/hooks/useUrlState.ts +34 -8
- package/src/seam/DomNavigationHost.spec.tsx +78 -0
- package/src/seam/DomNavigationHost.tsx +150 -0
- package/src/seam/index.ts +41 -0
- package/src/seam/navigator.spec.ts +189 -0
- package/src/seam/navigator.ts +405 -0
- package/src/seam/oneAdapter.tsx +166 -0
- package/types/hooks/index.d.ts +2 -0
- package/types/hooks/index.d.ts.map +1 -0
- package/types/hooks/useUrlState.d.ts +36 -0
- package/types/hooks/useUrlState.d.ts.map +1 -0
- package/types/index.d.ts +4 -0
- package/types/index.d.ts.map +1 -0
- package/types/index.storybook.d.ts +4 -0
- package/types/index.storybook.d.ts.map +1 -0
- package/types/router/EmptyRouter.d.ts +7 -0
- package/types/router/EmptyRouter.d.ts.map +1 -0
- package/types/router/ReactRouter.d.ts +6 -0
- package/types/router/ReactRouter.d.ts.map +1 -0
- package/types/router/index.d.ts +2 -0
- package/types/router/index.d.ts.map +1 -0
- package/types/router/index.storybook-expo.d.ts +2 -0
- package/types/router/index.storybook-expo.d.ts.map +1 -0
- package/types/router/index.storybook.d.ts +2 -0
- package/types/router/index.storybook.d.ts.map +1 -0
- package/types/router/index.webext.d.ts +2 -0
- package/types/router/index.webext.d.ts.map +1 -0
- package/types/seam/DomNavigationHost.d.ts +33 -0
- package/types/seam/DomNavigationHost.d.ts.map +1 -0
- package/types/seam/index.d.ts +7 -0
- package/types/seam/index.d.ts.map +1 -0
- package/types/seam/navigator.d.ts +133 -0
- package/types/seam/navigator.d.ts.map +1 -0
- package/types/seam/oneAdapter.d.ts +57 -0
- package/types/seam/oneAdapter.d.ts.map +1 -0
- package/types/types.d.ts +40 -0
- package/types/types.d.ts.map +1 -0
- package/dist/cjs/hooks/useUrlState.spec.cjs +0 -280
- package/dist/cjs/hooks/useUrlState.spec.native.js +0 -315
- package/dist/cjs/hooks/useUrlState.spec.native.js.map +0 -1
- package/dist/esm/hooks/useUrlState.spec.mjs +0 -257
- package/dist/esm/hooks/useUrlState.spec.mjs.map +0 -1
- package/dist/esm/hooks/useUrlState.spec.native.js +0 -289
- package/dist/esm/hooks/useUrlState.spec.native.js.map +0 -1
- package/dist/jsx/hooks/useUrlState.spec.mjs +0 -257
- package/dist/jsx/hooks/useUrlState.spec.mjs.map +0 -1
- package/dist/jsx/hooks/useUrlState.spec.native.js +0 -315
- package/dist/jsx/hooks/useUrlState.spec.native.js.map +0 -1
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
import { act, renderHook, waitFor } from "@testing-library/react";
|
|
2
|
-
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
3
|
-
import * as router from "../router/index.mjs";
|
|
4
|
-
import { useSearchParams, useTypedSearchParams, useUrlState } from "./useUrlState.mjs";
|
|
5
|
-
vi.mock("../router", () => {
|
|
6
|
-
const mockSetParams = vi.fn();
|
|
7
|
-
return {
|
|
8
|
-
useParams: vi.fn(() => ({})),
|
|
9
|
-
useRouter: vi.fn(() => ({
|
|
10
|
-
setParams: mockSetParams
|
|
11
|
-
}))
|
|
12
|
-
};
|
|
13
|
-
});
|
|
14
|
-
const mockUseParams = router.useParams;
|
|
15
|
-
const mockUseRouter = router.useRouter;
|
|
16
|
-
describe("useUrlState", () => {
|
|
17
|
-
beforeEach(() => {
|
|
18
|
-
vi.clearAllMocks();
|
|
19
|
-
});
|
|
20
|
-
describe("useSearchParams", () => {
|
|
21
|
-
it("should return current search params", () => {
|
|
22
|
-
mockUseParams.mockReturnValue({
|
|
23
|
-
foo: "bar",
|
|
24
|
-
baz: "qux"
|
|
25
|
-
});
|
|
26
|
-
const {
|
|
27
|
-
result
|
|
28
|
-
} = renderHook(() => useSearchParams());
|
|
29
|
-
const [params] = result.current;
|
|
30
|
-
expect(params).toEqual({
|
|
31
|
-
foo: "bar",
|
|
32
|
-
baz: "qux"
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
it("should update search params", () => {
|
|
36
|
-
const setParamsMock = vi.fn();
|
|
37
|
-
mockUseRouter.mockReturnValue({
|
|
38
|
-
setParams: setParamsMock
|
|
39
|
-
});
|
|
40
|
-
const {
|
|
41
|
-
result
|
|
42
|
-
} = renderHook(() => useSearchParams());
|
|
43
|
-
const [, setParams] = result.current;
|
|
44
|
-
act(() => {
|
|
45
|
-
setParams({
|
|
46
|
-
foo: "bar"
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
expect(setParamsMock).toHaveBeenCalledWith({
|
|
50
|
-
foo: "bar"
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
it("should support function updates", () => {
|
|
54
|
-
const setParamsMock = vi.fn();
|
|
55
|
-
mockUseParams.mockReturnValue({
|
|
56
|
-
existing: "value"
|
|
57
|
-
});
|
|
58
|
-
mockUseRouter.mockReturnValue({
|
|
59
|
-
setParams: setParamsMock
|
|
60
|
-
});
|
|
61
|
-
const {
|
|
62
|
-
result
|
|
63
|
-
} = renderHook(() => useSearchParams());
|
|
64
|
-
const [, setParams] = result.current;
|
|
65
|
-
act(() => {
|
|
66
|
-
setParams(prev => ({
|
|
67
|
-
...prev,
|
|
68
|
-
new: "param"
|
|
69
|
-
}));
|
|
70
|
-
});
|
|
71
|
-
expect(setParamsMock).toHaveBeenCalledWith({
|
|
72
|
-
existing: "value",
|
|
73
|
-
new: "param"
|
|
74
|
-
});
|
|
75
|
-
});
|
|
76
|
-
it("should debounce updates when specified", async () => {
|
|
77
|
-
const setParamsMock = vi.fn();
|
|
78
|
-
mockUseRouter.mockReturnValue({
|
|
79
|
-
setParams: setParamsMock
|
|
80
|
-
});
|
|
81
|
-
const {
|
|
82
|
-
result
|
|
83
|
-
} = renderHook(() => useSearchParams());
|
|
84
|
-
const [, setParams] = result.current;
|
|
85
|
-
act(() => {
|
|
86
|
-
setParams({
|
|
87
|
-
foo: "bar"
|
|
88
|
-
}, {
|
|
89
|
-
debounceMs: 100
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
expect(setParamsMock).not.toHaveBeenCalled();
|
|
93
|
-
await waitFor(() => {
|
|
94
|
-
expect(setParamsMock).toHaveBeenCalledWith({
|
|
95
|
-
foo: "bar"
|
|
96
|
-
});
|
|
97
|
-
}, {
|
|
98
|
-
timeout: 200
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
});
|
|
102
|
-
describe("useUrlState", () => {
|
|
103
|
-
it("should initialize with default values", () => {
|
|
104
|
-
mockUseParams.mockReturnValue({});
|
|
105
|
-
const defaultValues = {
|
|
106
|
-
name: "",
|
|
107
|
-
age: 0,
|
|
108
|
-
active: false
|
|
109
|
-
};
|
|
110
|
-
const {
|
|
111
|
-
result
|
|
112
|
-
} = renderHook(() => useUrlState(defaultValues));
|
|
113
|
-
const [state] = result.current;
|
|
114
|
-
expect(state).toEqual(defaultValues);
|
|
115
|
-
});
|
|
116
|
-
it("should deserialize URL params", () => {
|
|
117
|
-
mockUseParams.mockReturnValue({
|
|
118
|
-
name: "John",
|
|
119
|
-
age: "25",
|
|
120
|
-
active: "true"
|
|
121
|
-
});
|
|
122
|
-
const defaultValues = {
|
|
123
|
-
name: "",
|
|
124
|
-
age: 0,
|
|
125
|
-
active: false
|
|
126
|
-
};
|
|
127
|
-
const {
|
|
128
|
-
result
|
|
129
|
-
} = renderHook(() => useUrlState(defaultValues));
|
|
130
|
-
const [state] = result.current;
|
|
131
|
-
expect(state).toEqual({
|
|
132
|
-
name: "John",
|
|
133
|
-
age: 25,
|
|
134
|
-
active: true
|
|
135
|
-
});
|
|
136
|
-
});
|
|
137
|
-
it("should serialize state to URL params", () => {
|
|
138
|
-
const setParamsMock = vi.fn();
|
|
139
|
-
mockUseParams.mockReturnValue({});
|
|
140
|
-
mockUseRouter.mockReturnValue({
|
|
141
|
-
setParams: setParamsMock
|
|
142
|
-
});
|
|
143
|
-
const defaultValues = {
|
|
144
|
-
name: "",
|
|
145
|
-
age: 0,
|
|
146
|
-
active: false
|
|
147
|
-
};
|
|
148
|
-
const {
|
|
149
|
-
result
|
|
150
|
-
} = renderHook(() => useUrlState(defaultValues, {
|
|
151
|
-
debounceMs: 0
|
|
152
|
-
}));
|
|
153
|
-
const [, setState] = result.current;
|
|
154
|
-
act(() => {
|
|
155
|
-
setState({
|
|
156
|
-
name: "John",
|
|
157
|
-
age: 25,
|
|
158
|
-
active: true
|
|
159
|
-
});
|
|
160
|
-
});
|
|
161
|
-
expect(setParamsMock).toHaveBeenCalledWith({
|
|
162
|
-
name: "John",
|
|
163
|
-
age: "25",
|
|
164
|
-
active: "true"
|
|
165
|
-
});
|
|
166
|
-
});
|
|
167
|
-
it("should handle arrays", () => {
|
|
168
|
-
mockUseParams.mockReturnValue({
|
|
169
|
-
tags: ["react", "typescript"]
|
|
170
|
-
});
|
|
171
|
-
const defaultValues = {
|
|
172
|
-
tags: []
|
|
173
|
-
};
|
|
174
|
-
const {
|
|
175
|
-
result
|
|
176
|
-
} = renderHook(() => useUrlState(defaultValues));
|
|
177
|
-
const [state] = result.current;
|
|
178
|
-
expect(state).toEqual({
|
|
179
|
-
tags: ["react", "typescript"]
|
|
180
|
-
});
|
|
181
|
-
});
|
|
182
|
-
it("should handle objects with JSON serialization", () => {
|
|
183
|
-
mockUseParams.mockReturnValue({
|
|
184
|
-
config: '{"theme":"dark","lang":"en"}'
|
|
185
|
-
});
|
|
186
|
-
const defaultValues = {
|
|
187
|
-
config: {
|
|
188
|
-
theme: "light",
|
|
189
|
-
lang: "en"
|
|
190
|
-
}
|
|
191
|
-
};
|
|
192
|
-
const {
|
|
193
|
-
result
|
|
194
|
-
} = renderHook(() => useUrlState(defaultValues));
|
|
195
|
-
const [state] = result.current;
|
|
196
|
-
expect(state).toEqual({
|
|
197
|
-
config: {
|
|
198
|
-
theme: "dark",
|
|
199
|
-
lang: "en"
|
|
200
|
-
}
|
|
201
|
-
});
|
|
202
|
-
});
|
|
203
|
-
});
|
|
204
|
-
describe("useTypedSearchParams", () => {
|
|
205
|
-
it("should parse params with schema", () => {
|
|
206
|
-
mockUseParams.mockReturnValue({
|
|
207
|
-
page: "2",
|
|
208
|
-
limit: "50",
|
|
209
|
-
search: "test"
|
|
210
|
-
});
|
|
211
|
-
const schema = {
|
|
212
|
-
page: {
|
|
213
|
-
default: 1,
|
|
214
|
-
parse: value => value ? Number.parseInt(String(value), 10) : 1
|
|
215
|
-
},
|
|
216
|
-
limit: {
|
|
217
|
-
default: 20,
|
|
218
|
-
parse: value => value ? Number.parseInt(String(value), 10) : 20
|
|
219
|
-
},
|
|
220
|
-
search: {
|
|
221
|
-
default: ""
|
|
222
|
-
}
|
|
223
|
-
};
|
|
224
|
-
const {
|
|
225
|
-
result
|
|
226
|
-
} = renderHook(() => useTypedSearchParams(schema));
|
|
227
|
-
expect(result.current).toEqual({
|
|
228
|
-
page: 2,
|
|
229
|
-
limit: 50,
|
|
230
|
-
search: "test"
|
|
231
|
-
});
|
|
232
|
-
});
|
|
233
|
-
it("should use defaults for missing params", () => {
|
|
234
|
-
mockUseParams.mockReturnValue({});
|
|
235
|
-
const schema = {
|
|
236
|
-
page: {
|
|
237
|
-
default: 1
|
|
238
|
-
},
|
|
239
|
-
limit: {
|
|
240
|
-
default: 20
|
|
241
|
-
},
|
|
242
|
-
search: {
|
|
243
|
-
default: ""
|
|
244
|
-
}
|
|
245
|
-
};
|
|
246
|
-
const {
|
|
247
|
-
result
|
|
248
|
-
} = renderHook(() => useTypedSearchParams(schema));
|
|
249
|
-
expect(result.current).toEqual({
|
|
250
|
-
page: 1,
|
|
251
|
-
limit: 20,
|
|
252
|
-
search: ""
|
|
253
|
-
});
|
|
254
|
-
});
|
|
255
|
-
});
|
|
256
|
-
});
|
|
257
|
-
//# sourceMappingURL=useUrlState.spec.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["act","renderHook","waitFor","beforeEach","describe","expect","it","vi","router","useSearchParams","useTypedSearchParams","useUrlState","mock","mockSetParams","fn","useParams","useRouter","setParams","mockUseParams","mockUseRouter","clearAllMocks","mockReturnValue","foo","baz","result","params","current","toEqual","setParamsMock","toHaveBeenCalledWith","existing","prev","new","debounceMs","not","toHaveBeenCalled","timeout","defaultValues","name","age","active","state","setState","tags","config","theme","lang","page","limit","search","schema","default","parse","value","Number","parseInt","String"],"sources":["../../../src/hooks/useUrlState.spec.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,289 +0,0 @@
|
|
|
1
|
-
import { act, renderHook, waitFor } from "@testing-library/react";
|
|
2
|
-
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
3
|
-
import * as router from "../router/index.native.js";
|
|
4
|
-
import { useSearchParams, useTypedSearchParams, useUrlState } from "./useUrlState.native.js";
|
|
5
|
-
vi.mock("../router", function () {
|
|
6
|
-
var mockSetParams = vi.fn();
|
|
7
|
-
return {
|
|
8
|
-
useParams: vi.fn(function () {
|
|
9
|
-
return {};
|
|
10
|
-
}),
|
|
11
|
-
useRouter: vi.fn(function () {
|
|
12
|
-
return {
|
|
13
|
-
setParams: mockSetParams
|
|
14
|
-
};
|
|
15
|
-
})
|
|
16
|
-
};
|
|
17
|
-
});
|
|
18
|
-
var mockUseParams = router.useParams;
|
|
19
|
-
var mockUseRouter = router.useRouter;
|
|
20
|
-
describe("useUrlState", function () {
|
|
21
|
-
beforeEach(function () {
|
|
22
|
-
vi.clearAllMocks();
|
|
23
|
-
});
|
|
24
|
-
describe("useSearchParams", function () {
|
|
25
|
-
it("should return current search params", function () {
|
|
26
|
-
mockUseParams.mockReturnValue({
|
|
27
|
-
foo: "bar",
|
|
28
|
-
baz: "qux"
|
|
29
|
-
});
|
|
30
|
-
var {
|
|
31
|
-
result
|
|
32
|
-
} = renderHook(function () {
|
|
33
|
-
return useSearchParams();
|
|
34
|
-
});
|
|
35
|
-
var [params] = result.current;
|
|
36
|
-
expect(params).toEqual({
|
|
37
|
-
foo: "bar",
|
|
38
|
-
baz: "qux"
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
it("should update search params", function () {
|
|
42
|
-
var setParamsMock = vi.fn();
|
|
43
|
-
mockUseRouter.mockReturnValue({
|
|
44
|
-
setParams: setParamsMock
|
|
45
|
-
});
|
|
46
|
-
var {
|
|
47
|
-
result
|
|
48
|
-
} = renderHook(function () {
|
|
49
|
-
return useSearchParams();
|
|
50
|
-
});
|
|
51
|
-
var [, setParams] = result.current;
|
|
52
|
-
act(function () {
|
|
53
|
-
setParams({
|
|
54
|
-
foo: "bar"
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
expect(setParamsMock).toHaveBeenCalledWith({
|
|
58
|
-
foo: "bar"
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
it("should support function updates", function () {
|
|
62
|
-
var setParamsMock = vi.fn();
|
|
63
|
-
mockUseParams.mockReturnValue({
|
|
64
|
-
existing: "value"
|
|
65
|
-
});
|
|
66
|
-
mockUseRouter.mockReturnValue({
|
|
67
|
-
setParams: setParamsMock
|
|
68
|
-
});
|
|
69
|
-
var {
|
|
70
|
-
result
|
|
71
|
-
} = renderHook(function () {
|
|
72
|
-
return useSearchParams();
|
|
73
|
-
});
|
|
74
|
-
var [, setParams] = result.current;
|
|
75
|
-
act(function () {
|
|
76
|
-
setParams(function (prev) {
|
|
77
|
-
return {
|
|
78
|
-
...prev,
|
|
79
|
-
new: "param"
|
|
80
|
-
};
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
expect(setParamsMock).toHaveBeenCalledWith({
|
|
84
|
-
existing: "value",
|
|
85
|
-
new: "param"
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
it("should debounce updates when specified", async function () {
|
|
89
|
-
var setParamsMock = vi.fn();
|
|
90
|
-
mockUseRouter.mockReturnValue({
|
|
91
|
-
setParams: setParamsMock
|
|
92
|
-
});
|
|
93
|
-
var {
|
|
94
|
-
result
|
|
95
|
-
} = renderHook(function () {
|
|
96
|
-
return useSearchParams();
|
|
97
|
-
});
|
|
98
|
-
var [, setParams] = result.current;
|
|
99
|
-
act(function () {
|
|
100
|
-
setParams({
|
|
101
|
-
foo: "bar"
|
|
102
|
-
}, {
|
|
103
|
-
debounceMs: 100
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
expect(setParamsMock).not.toHaveBeenCalled();
|
|
107
|
-
await waitFor(function () {
|
|
108
|
-
expect(setParamsMock).toHaveBeenCalledWith({
|
|
109
|
-
foo: "bar"
|
|
110
|
-
});
|
|
111
|
-
}, {
|
|
112
|
-
timeout: 200
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
});
|
|
116
|
-
describe("useUrlState", function () {
|
|
117
|
-
it("should initialize with default values", function () {
|
|
118
|
-
mockUseParams.mockReturnValue({});
|
|
119
|
-
var defaultValues = {
|
|
120
|
-
name: "",
|
|
121
|
-
age: 0,
|
|
122
|
-
active: false
|
|
123
|
-
};
|
|
124
|
-
var {
|
|
125
|
-
result
|
|
126
|
-
} = renderHook(function () {
|
|
127
|
-
return useUrlState(defaultValues);
|
|
128
|
-
});
|
|
129
|
-
var [state] = result.current;
|
|
130
|
-
expect(state).toEqual(defaultValues);
|
|
131
|
-
});
|
|
132
|
-
it("should deserialize URL params", function () {
|
|
133
|
-
mockUseParams.mockReturnValue({
|
|
134
|
-
name: "John",
|
|
135
|
-
age: "25",
|
|
136
|
-
active: "true"
|
|
137
|
-
});
|
|
138
|
-
var defaultValues = {
|
|
139
|
-
name: "",
|
|
140
|
-
age: 0,
|
|
141
|
-
active: false
|
|
142
|
-
};
|
|
143
|
-
var {
|
|
144
|
-
result
|
|
145
|
-
} = renderHook(function () {
|
|
146
|
-
return useUrlState(defaultValues);
|
|
147
|
-
});
|
|
148
|
-
var [state] = result.current;
|
|
149
|
-
expect(state).toEqual({
|
|
150
|
-
name: "John",
|
|
151
|
-
age: 25,
|
|
152
|
-
active: true
|
|
153
|
-
});
|
|
154
|
-
});
|
|
155
|
-
it("should serialize state to URL params", function () {
|
|
156
|
-
var setParamsMock = vi.fn();
|
|
157
|
-
mockUseParams.mockReturnValue({});
|
|
158
|
-
mockUseRouter.mockReturnValue({
|
|
159
|
-
setParams: setParamsMock
|
|
160
|
-
});
|
|
161
|
-
var defaultValues = {
|
|
162
|
-
name: "",
|
|
163
|
-
age: 0,
|
|
164
|
-
active: false
|
|
165
|
-
};
|
|
166
|
-
var {
|
|
167
|
-
result
|
|
168
|
-
} = renderHook(function () {
|
|
169
|
-
return useUrlState(defaultValues, {
|
|
170
|
-
debounceMs: 0
|
|
171
|
-
});
|
|
172
|
-
});
|
|
173
|
-
var [, setState] = result.current;
|
|
174
|
-
act(function () {
|
|
175
|
-
setState({
|
|
176
|
-
name: "John",
|
|
177
|
-
age: 25,
|
|
178
|
-
active: true
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
expect(setParamsMock).toHaveBeenCalledWith({
|
|
182
|
-
name: "John",
|
|
183
|
-
age: "25",
|
|
184
|
-
active: "true"
|
|
185
|
-
});
|
|
186
|
-
});
|
|
187
|
-
it("should handle arrays", function () {
|
|
188
|
-
mockUseParams.mockReturnValue({
|
|
189
|
-
tags: ["react", "typescript"]
|
|
190
|
-
});
|
|
191
|
-
var defaultValues = {
|
|
192
|
-
tags: []
|
|
193
|
-
};
|
|
194
|
-
var {
|
|
195
|
-
result
|
|
196
|
-
} = renderHook(function () {
|
|
197
|
-
return useUrlState(defaultValues);
|
|
198
|
-
});
|
|
199
|
-
var [state] = result.current;
|
|
200
|
-
expect(state).toEqual({
|
|
201
|
-
tags: ["react", "typescript"]
|
|
202
|
-
});
|
|
203
|
-
});
|
|
204
|
-
it("should handle objects with JSON serialization", function () {
|
|
205
|
-
mockUseParams.mockReturnValue({
|
|
206
|
-
config: '{"theme":"dark","lang":"en"}'
|
|
207
|
-
});
|
|
208
|
-
var defaultValues = {
|
|
209
|
-
config: {
|
|
210
|
-
theme: "light",
|
|
211
|
-
lang: "en"
|
|
212
|
-
}
|
|
213
|
-
};
|
|
214
|
-
var {
|
|
215
|
-
result
|
|
216
|
-
} = renderHook(function () {
|
|
217
|
-
return useUrlState(defaultValues);
|
|
218
|
-
});
|
|
219
|
-
var [state] = result.current;
|
|
220
|
-
expect(state).toEqual({
|
|
221
|
-
config: {
|
|
222
|
-
theme: "dark",
|
|
223
|
-
lang: "en"
|
|
224
|
-
}
|
|
225
|
-
});
|
|
226
|
-
});
|
|
227
|
-
});
|
|
228
|
-
describe("useTypedSearchParams", function () {
|
|
229
|
-
it("should parse params with schema", function () {
|
|
230
|
-
mockUseParams.mockReturnValue({
|
|
231
|
-
page: "2",
|
|
232
|
-
limit: "50",
|
|
233
|
-
search: "test"
|
|
234
|
-
});
|
|
235
|
-
var schema = {
|
|
236
|
-
page: {
|
|
237
|
-
default: 1,
|
|
238
|
-
parse: function parse(value) {
|
|
239
|
-
return value ? Number.parseInt(String(value), 10) : 1;
|
|
240
|
-
}
|
|
241
|
-
},
|
|
242
|
-
limit: {
|
|
243
|
-
default: 20,
|
|
244
|
-
parse: function parse(value) {
|
|
245
|
-
return value ? Number.parseInt(String(value), 10) : 20;
|
|
246
|
-
}
|
|
247
|
-
},
|
|
248
|
-
search: {
|
|
249
|
-
default: ""
|
|
250
|
-
}
|
|
251
|
-
};
|
|
252
|
-
var {
|
|
253
|
-
result
|
|
254
|
-
} = renderHook(function () {
|
|
255
|
-
return useTypedSearchParams(schema);
|
|
256
|
-
});
|
|
257
|
-
expect(result.current).toEqual({
|
|
258
|
-
page: 2,
|
|
259
|
-
limit: 50,
|
|
260
|
-
search: "test"
|
|
261
|
-
});
|
|
262
|
-
});
|
|
263
|
-
it("should use defaults for missing params", function () {
|
|
264
|
-
mockUseParams.mockReturnValue({});
|
|
265
|
-
var schema = {
|
|
266
|
-
page: {
|
|
267
|
-
default: 1
|
|
268
|
-
},
|
|
269
|
-
limit: {
|
|
270
|
-
default: 20
|
|
271
|
-
},
|
|
272
|
-
search: {
|
|
273
|
-
default: ""
|
|
274
|
-
}
|
|
275
|
-
};
|
|
276
|
-
var {
|
|
277
|
-
result
|
|
278
|
-
} = renderHook(function () {
|
|
279
|
-
return useTypedSearchParams(schema);
|
|
280
|
-
});
|
|
281
|
-
expect(result.current).toEqual({
|
|
282
|
-
page: 1,
|
|
283
|
-
limit: 20,
|
|
284
|
-
search: ""
|
|
285
|
-
});
|
|
286
|
-
});
|
|
287
|
-
});
|
|
288
|
-
});
|
|
289
|
-
//# sourceMappingURL=useUrlState.spec.native.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["act","renderHook","waitFor","beforeEach","describe","expect","it","vi","router","useSearchParams","useTypedSearchParams","useUrlState","mock","mockSetParams","fn","useParams","useRouter","setParams","mockUseParams","mockUseRouter","clearAllMocks","mockReturnValue","foo","baz","result","params","current","toEqual","setParamsMock","toHaveBeenCalledWith","existing","prev","new","debounceMs","not","toHaveBeenCalled","timeout","defaultValues","name","age","active","state","setState"],"sources":["../../../src/hooks/useUrlState.spec.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|