@multiplatform.one/router 5.0.27 → 6.0.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/dist/cjs/hooks/index.cjs +31 -0
- package/dist/cjs/hooks/index.native.js +34 -0
- package/dist/cjs/hooks/index.native.js.map +1 -0
- package/dist/cjs/hooks/useUrlState.cjs +185 -0
- package/dist/cjs/hooks/useUrlState.native.js +203 -0
- package/dist/cjs/hooks/useUrlState.native.js.map +1 -0
- package/dist/cjs/hooks/useUrlState.spec.cjs +280 -0
- package/dist/cjs/hooks/useUrlState.spec.native.js +315 -0
- package/dist/cjs/hooks/useUrlState.spec.native.js.map +1 -0
- package/dist/cjs/index.cjs +9 -6
- package/dist/cjs/index.native.js +16 -13
- package/dist/cjs/index.native.js.map +1 -6
- package/dist/cjs/index.storybook.cjs +34 -0
- package/dist/cjs/index.storybook.native.js +37 -0
- package/dist/cjs/index.storybook.native.js.map +1 -0
- package/dist/cjs/router/EmptyRouter.cjs +78 -0
- package/dist/cjs/router/EmptyRouter.native.js +106 -0
- package/dist/cjs/router/EmptyRouter.native.js.map +1 -0
- package/dist/cjs/router/ReactRouter.cjs +107 -0
- package/dist/cjs/router/ReactRouter.native.js +135 -0
- package/dist/cjs/router/ReactRouter.native.js.map +1 -0
- package/dist/cjs/router/index.cjs +17 -67
- package/dist/cjs/router/index.native.js +22 -81
- package/dist/cjs/router/index.native.js.map +1 -6
- package/dist/cjs/router/index.storybook-expo.cjs +8 -6
- package/dist/cjs/router/index.storybook-expo.native.js +14 -11
- package/dist/cjs/router/index.storybook-expo.native.js.map +1 -6
- package/dist/cjs/router/index.storybook.cjs +8 -6
- package/dist/cjs/router/index.storybook.native.js +14 -11
- package/dist/cjs/router/index.storybook.native.js.map +1 -6
- package/dist/cjs/router/index.webext.cjs +8 -6
- package/dist/cjs/router/index.webext.native.js +14 -11
- package/dist/cjs/router/index.webext.native.js.map +1 -6
- package/dist/cjs/types.cjs +7 -5
- package/dist/cjs/types.native.js +11 -5
- package/dist/cjs/types.native.js.map +1 -6
- package/dist/esm/hooks/index.mjs +3 -0
- package/dist/esm/hooks/index.mjs.map +1 -0
- package/dist/esm/hooks/index.native.js +3 -0
- package/dist/esm/hooks/index.native.js.map +1 -0
- package/dist/esm/hooks/useUrlState.mjs +157 -0
- package/dist/esm/hooks/useUrlState.mjs.map +1 -0
- package/dist/esm/hooks/useUrlState.native.js +172 -0
- package/dist/esm/hooks/useUrlState.native.js.map +1 -0
- package/dist/esm/hooks/useUrlState.spec.mjs +257 -0
- package/dist/esm/hooks/useUrlState.spec.mjs.map +1 -0
- package/dist/esm/hooks/useUrlState.spec.native.js +289 -0
- package/dist/esm/hooks/useUrlState.spec.native.js.map +1 -0
- package/dist/esm/index.mjs +1 -0
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +4 -3
- package/dist/esm/index.native.js.map +1 -6
- package/dist/esm/index.storybook.mjs +5 -0
- package/dist/esm/index.storybook.mjs.map +1 -0
- package/dist/esm/index.storybook.native.js +5 -0
- package/dist/esm/index.storybook.native.js.map +1 -0
- package/dist/esm/router/EmptyRouter.mjs +49 -0
- package/dist/esm/router/EmptyRouter.mjs.map +1 -0
- package/dist/esm/router/EmptyRouter.native.js +74 -0
- package/dist/esm/router/EmptyRouter.native.js.map +1 -0
- package/dist/esm/router/ReactRouter.mjs +79 -0
- package/dist/esm/router/ReactRouter.mjs.map +1 -0
- package/dist/esm/router/ReactRouter.native.js +104 -0
- package/dist/esm/router/ReactRouter.native.js.map +1 -0
- package/dist/esm/router/index.mjs +1 -53
- package/dist/esm/router/index.mjs.map +1 -1
- package/dist/esm/router/index.native.js +3 -71
- package/dist/esm/router/index.native.js.map +1 -6
- package/dist/esm/router/index.storybook-expo.mjs +1 -1
- package/dist/esm/router/index.storybook-expo.mjs.map +1 -1
- package/dist/esm/router/index.storybook-expo.native.js +2 -2
- package/dist/esm/router/index.storybook-expo.native.js.map +1 -6
- package/dist/esm/router/index.storybook.mjs +1 -1
- package/dist/esm/router/index.storybook.mjs.map +1 -1
- package/dist/esm/router/index.storybook.native.js +2 -2
- package/dist/esm/router/index.storybook.native.js.map +1 -6
- package/dist/esm/router/index.webext.mjs +1 -1
- package/dist/esm/router/index.webext.mjs.map +1 -1
- package/dist/esm/router/index.webext.native.js +2 -2
- package/dist/esm/router/index.webext.native.js.map +1 -6
- package/dist/esm/types.native.js +2 -1
- package/dist/esm/types.native.js.map +1 -6
- package/dist/jsx/hooks/index.mjs +3 -0
- package/dist/jsx/hooks/index.mjs.map +1 -0
- package/dist/jsx/hooks/index.native.js +34 -0
- package/dist/jsx/hooks/index.native.js.map +1 -0
- package/dist/jsx/hooks/useUrlState.mjs +157 -0
- package/dist/jsx/hooks/useUrlState.mjs.map +1 -0
- package/dist/jsx/hooks/useUrlState.native.js +203 -0
- package/dist/jsx/hooks/useUrlState.native.js.map +1 -0
- package/dist/jsx/hooks/useUrlState.spec.mjs +257 -0
- package/dist/jsx/hooks/useUrlState.spec.mjs.map +1 -0
- package/dist/jsx/hooks/useUrlState.spec.native.js +315 -0
- package/dist/jsx/hooks/useUrlState.spec.native.js.map +1 -0
- package/dist/jsx/index.js +3 -2
- package/dist/jsx/index.js.map +1 -6
- package/dist/jsx/index.mjs +1 -0
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +25 -3
- package/dist/jsx/index.native.js.map +1 -6
- package/dist/jsx/index.storybook.mjs +5 -0
- package/dist/jsx/index.storybook.mjs.map +1 -0
- package/dist/jsx/index.storybook.native.js +37 -0
- package/dist/jsx/index.storybook.native.js.map +1 -0
- package/dist/jsx/router/EmptyRouter.mjs +49 -0
- package/dist/jsx/router/EmptyRouter.mjs.map +1 -0
- package/dist/jsx/router/EmptyRouter.native.js +106 -0
- package/dist/jsx/router/EmptyRouter.native.js.map +1 -0
- package/dist/jsx/router/ReactRouter.mjs +79 -0
- package/dist/jsx/router/ReactRouter.mjs.map +1 -0
- package/dist/jsx/router/ReactRouter.native.js +135 -0
- package/dist/jsx/router/ReactRouter.native.js.map +1 -0
- package/dist/jsx/router/index.mjs +1 -53
- package/dist/jsx/router/index.mjs.map +1 -1
- package/dist/jsx/router/index.native.js +31 -68
- package/dist/jsx/router/index.native.js.map +1 -6
- package/dist/jsx/router/index.storybook-expo.mjs +1 -1
- package/dist/jsx/router/index.storybook-expo.mjs.map +1 -1
- package/dist/jsx/router/index.storybook-expo.native.js +23 -2
- package/dist/jsx/router/index.storybook-expo.native.js.map +1 -6
- package/dist/jsx/router/index.storybook.mjs +1 -1
- package/dist/jsx/router/index.storybook.mjs.map +1 -1
- package/dist/jsx/router/index.storybook.native.js +23 -2
- package/dist/jsx/router/index.storybook.native.js.map +1 -6
- package/dist/jsx/router/index.webext.mjs +1 -1
- package/dist/jsx/router/index.webext.mjs.map +1 -1
- package/dist/jsx/router/index.webext.native.js +23 -2
- package/dist/jsx/router/index.webext.native.js.map +1 -6
- package/dist/jsx/types.native.js +21 -1
- package/dist/jsx/types.native.js.map +1 -6
- package/package.json +46 -36
- package/src/hooks/README.md +232 -0
- package/src/hooks/index.ts +8 -0
- package/src/hooks/useUrlState.spec.ts +219 -0
- package/src/hooks/useUrlState.ts +231 -0
- package/src/index.storybook.ts +3 -0
- package/src/index.ts +1 -21
- package/src/router/EmptyRouter.tsx +50 -0
- package/src/router/{reactRouter.tsx → ReactRouter.tsx} +27 -22
- package/src/router/index.storybook-expo.tsx +1 -22
- package/src/router/index.storybook.tsx +1 -22
- package/src/router/index.tsx +1 -97
- package/src/router/index.webext.tsx +1 -22
- package/src/types.tsx +3 -24
- package/dist/cjs/index.js +0 -16
- package/dist/cjs/index.js.map +0 -6
- package/dist/cjs/router/emptyRouter.cjs +0 -55
- package/dist/cjs/router/emptyRouter.js +0 -47
- package/dist/cjs/router/emptyRouter.js.map +0 -6
- package/dist/cjs/router/emptyRouter.native.js +0 -77
- package/dist/cjs/router/emptyRouter.native.js.map +0 -6
- package/dist/cjs/router/index.electron.cjs +0 -18
- package/dist/cjs/router/index.electron.js +0 -15
- package/dist/cjs/router/index.electron.js.map +0 -6
- package/dist/cjs/router/index.electron.native.js +0 -20
- package/dist/cjs/router/index.electron.native.js.map +0 -6
- package/dist/cjs/router/index.js +0 -63
- package/dist/cjs/router/index.js.map +0 -6
- package/dist/cjs/router/index.storybook-expo.js +0 -15
- package/dist/cjs/router/index.storybook-expo.js.map +0 -6
- package/dist/cjs/router/index.storybook.js +0 -15
- package/dist/cjs/router/index.storybook.js.map +0 -6
- package/dist/cjs/router/index.webext.js +0 -15
- package/dist/cjs/router/index.webext.js.map +0 -6
- package/dist/cjs/router/reactRouter.cjs +0 -74
- package/dist/cjs/router/reactRouter.js +0 -48
- package/dist/cjs/router/reactRouter.js.map +0 -6
- package/dist/cjs/router/reactRouter.native.js +0 -96
- package/dist/cjs/router/reactRouter.native.js.map +0 -6
- package/dist/cjs/types.js +0 -14
- package/dist/cjs/types.js.map +0 -6
- package/dist/esm/index.js +0 -3
- package/dist/esm/index.js.map +0 -6
- package/dist/esm/router/emptyRouter.js +0 -31
- package/dist/esm/router/emptyRouter.js.map +0 -6
- package/dist/esm/router/emptyRouter.mjs +0 -29
- package/dist/esm/router/emptyRouter.mjs.map +0 -1
- package/dist/esm/router/emptyRouter.native.js +0 -54
- package/dist/esm/router/emptyRouter.native.js.map +0 -6
- package/dist/esm/router/index.electron.js +0 -2
- package/dist/esm/router/index.electron.js.map +0 -6
- package/dist/esm/router/index.electron.mjs +0 -2
- package/dist/esm/router/index.electron.mjs.map +0 -1
- package/dist/esm/router/index.electron.native.js +0 -2
- package/dist/esm/router/index.electron.native.js.map +0 -6
- package/dist/esm/router/index.js +0 -52
- package/dist/esm/router/index.js.map +0 -6
- package/dist/esm/router/index.storybook-expo.js +0 -2
- package/dist/esm/router/index.storybook-expo.js.map +0 -6
- package/dist/esm/router/index.storybook.js +0 -2
- package/dist/esm/router/index.storybook.js.map +0 -6
- package/dist/esm/router/index.webext.js +0 -2
- package/dist/esm/router/index.webext.js.map +0 -6
- package/dist/esm/router/reactRouter.js +0 -38
- package/dist/esm/router/reactRouter.js.map +0 -6
- package/dist/esm/router/reactRouter.mjs +0 -48
- package/dist/esm/router/reactRouter.mjs.map +0 -1
- package/dist/esm/router/reactRouter.native.js +0 -74
- package/dist/esm/router/reactRouter.native.js.map +0 -6
- package/dist/esm/types.js +0 -1
- package/dist/esm/types.js.map +0 -6
- package/dist/jsx/router/emptyRouter.js +0 -31
- package/dist/jsx/router/emptyRouter.js.map +0 -6
- package/dist/jsx/router/emptyRouter.mjs +0 -29
- package/dist/jsx/router/emptyRouter.mjs.map +0 -1
- package/dist/jsx/router/emptyRouter.native.js +0 -54
- package/dist/jsx/router/emptyRouter.native.js.map +0 -6
- package/dist/jsx/router/index.electron.js +0 -2
- package/dist/jsx/router/index.electron.js.map +0 -6
- package/dist/jsx/router/index.electron.mjs +0 -2
- package/dist/jsx/router/index.electron.mjs.map +0 -1
- package/dist/jsx/router/index.electron.native.js +0 -2
- package/dist/jsx/router/index.electron.native.js.map +0 -6
- package/dist/jsx/router/index.js +0 -52
- package/dist/jsx/router/index.js.map +0 -6
- package/dist/jsx/router/index.storybook-expo.js +0 -2
- package/dist/jsx/router/index.storybook-expo.js.map +0 -6
- package/dist/jsx/router/index.storybook.js +0 -2
- package/dist/jsx/router/index.storybook.js.map +0 -6
- package/dist/jsx/router/index.webext.js +0 -2
- package/dist/jsx/router/index.webext.js.map +0 -6
- package/dist/jsx/router/reactRouter.js +0 -38
- package/dist/jsx/router/reactRouter.js.map +0 -6
- package/dist/jsx/router/reactRouter.mjs +0 -48
- package/dist/jsx/router/reactRouter.mjs.map +0 -1
- package/dist/jsx/router/reactRouter.native.js +0 -74
- package/dist/jsx/router/reactRouter.native.js.map +0 -6
- package/dist/jsx/types.js +0 -1
- package/dist/jsx/types.js.map +0 -6
- package/src/router/emptyRouter.tsx +0 -56
- package/src/router/index.electron.tsx +0 -22
- package/types/index.d.ts +0 -3
- package/types/index.d.ts.map +0 -1
- package/types/router/emptyRouter.d.ts +0 -26
- package/types/router/emptyRouter.d.ts.map +0 -1
- package/types/router/index.d.ts +0 -27
- package/types/router/index.d.ts.map +0 -1
- package/types/router/index.electron.d.ts +0 -22
- package/types/router/index.electron.d.ts.map +0 -1
- package/types/router/index.storybook-expo.d.ts +0 -22
- package/types/router/index.storybook-expo.d.ts.map +0 -1
- package/types/router/index.storybook.d.ts +0 -22
- package/types/router/index.storybook.d.ts.map +0 -1
- package/types/router/index.webext.d.ts +0 -22
- package/types/router/index.webext.d.ts.map +0 -1
- package/types/router/reactRouter.d.ts +0 -27
- package/types/router/reactRouter.d.ts.map +0 -1
- package/types/types.d.ts +0 -60
- package/types/types.d.ts.map +0 -1
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all) __defProp(target, name, {
|
|
9
|
+
get: all[name],
|
|
10
|
+
enumerable: true
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
16
|
+
get: () => from[key],
|
|
17
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
22
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
23
|
+
value: true
|
|
24
|
+
}), mod);
|
|
25
|
+
var useUrlState_exports = {};
|
|
26
|
+
__export(useUrlState_exports, {
|
|
27
|
+
useSearchParams: () => useSearchParams,
|
|
28
|
+
useShareableUrl: () => useShareableUrl,
|
|
29
|
+
useTypedSearchParams: () => useTypedSearchParams,
|
|
30
|
+
useUrlState: () => useUrlState
|
|
31
|
+
});
|
|
32
|
+
module.exports = __toCommonJS(useUrlState_exports);
|
|
33
|
+
var import_react = require("react");
|
|
34
|
+
var import_platform = require("@multiplatform.one/platform");
|
|
35
|
+
var import_router = require("../router/index.native.js");
|
|
36
|
+
function _type_of(obj) {
|
|
37
|
+
"@swc/helpers - typeof";
|
|
38
|
+
|
|
39
|
+
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
40
|
+
}
|
|
41
|
+
function useSearchParams() {
|
|
42
|
+
var router = (0, import_router.useRouter)();
|
|
43
|
+
var currentParams = (0, import_router.useParams)();
|
|
44
|
+
var debounceTimerRef = (0, import_react.useRef)(void 0);
|
|
45
|
+
var searchParams = (0, import_react.useMemo)(function () {
|
|
46
|
+
var params = {};
|
|
47
|
+
Object.entries(currentParams).forEach(function (param) {
|
|
48
|
+
var [key, value] = param;
|
|
49
|
+
if (value !== void 0 && value !== null) {
|
|
50
|
+
params[key] = value;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
return params;
|
|
54
|
+
}, [currentParams]);
|
|
55
|
+
var setSearchParams = (0, import_react.useCallback)(function (newParams) {
|
|
56
|
+
var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
57
|
+
var {
|
|
58
|
+
replace: _replace = true,
|
|
59
|
+
debounceMs = 0
|
|
60
|
+
} = options;
|
|
61
|
+
var updateParams = function updateParams2() {
|
|
62
|
+
var updatedParams = typeof newParams === "function" ? newParams(searchParams) : newParams;
|
|
63
|
+
var cleanParams = {};
|
|
64
|
+
Object.entries(updatedParams).forEach(function (param) {
|
|
65
|
+
var [key, value] = param;
|
|
66
|
+
if (value !== void 0 && value !== null && value !== "") {
|
|
67
|
+
cleanParams[key] = value;
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
router.setParams(cleanParams);
|
|
71
|
+
};
|
|
72
|
+
if (debounceMs > 0) {
|
|
73
|
+
if (debounceTimerRef.current) {
|
|
74
|
+
clearTimeout(debounceTimerRef.current);
|
|
75
|
+
}
|
|
76
|
+
debounceTimerRef.current = setTimeout(updateParams, debounceMs);
|
|
77
|
+
} else {
|
|
78
|
+
updateParams();
|
|
79
|
+
}
|
|
80
|
+
}, [router, searchParams]);
|
|
81
|
+
(0, import_react.useEffect)(function () {
|
|
82
|
+
return function () {
|
|
83
|
+
if (debounceTimerRef.current) {
|
|
84
|
+
clearTimeout(debounceTimerRef.current);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
}, []);
|
|
88
|
+
return [searchParams, setSearchParams];
|
|
89
|
+
}
|
|
90
|
+
function useUrlState(defaultValues) {
|
|
91
|
+
var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
92
|
+
var {
|
|
93
|
+
debounceMs = 500,
|
|
94
|
+
serialize = function (value) {
|
|
95
|
+
var params = {};
|
|
96
|
+
Object.entries(value).forEach(function (param) {
|
|
97
|
+
var [key, val] = param;
|
|
98
|
+
if (val !== void 0 && val !== null && val !== "") {
|
|
99
|
+
if (Array.isArray(val)) {
|
|
100
|
+
params[key] = val.map(String);
|
|
101
|
+
} else if ((typeof val === "undefined" ? "undefined" : _type_of(val)) === "object") {
|
|
102
|
+
params[key] = JSON.stringify(val);
|
|
103
|
+
} else {
|
|
104
|
+
params[key] = String(val);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
return params;
|
|
109
|
+
},
|
|
110
|
+
deserialize = function (params) {
|
|
111
|
+
var result = {};
|
|
112
|
+
Object.entries(params).forEach(function (param) {
|
|
113
|
+
var [key, value] = param;
|
|
114
|
+
if (key in defaultValues) {
|
|
115
|
+
var defaultValue = defaultValues[key];
|
|
116
|
+
if (value === void 0) {
|
|
117
|
+
result[key] = defaultValue;
|
|
118
|
+
} else if (Array.isArray(defaultValue)) {
|
|
119
|
+
result[key] = Array.isArray(value) ? value : [value];
|
|
120
|
+
} else if (typeof defaultValue === "boolean") {
|
|
121
|
+
result[key] = value === "true";
|
|
122
|
+
} else if (typeof defaultValue === "number") {
|
|
123
|
+
result[key] = Number(value);
|
|
124
|
+
} else if ((typeof defaultValue === "undefined" ? "undefined" : _type_of(defaultValue)) === "object" && defaultValue !== null) {
|
|
125
|
+
try {
|
|
126
|
+
result[key] = JSON.parse(String(value));
|
|
127
|
+
} catch (unused) {
|
|
128
|
+
result[key] = defaultValue;
|
|
129
|
+
}
|
|
130
|
+
} else {
|
|
131
|
+
result[key] = value;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
Object.keys(defaultValues).forEach(function (key) {
|
|
136
|
+
if (!(key in result)) {
|
|
137
|
+
result[key] = defaultValues[key];
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
return result;
|
|
141
|
+
}
|
|
142
|
+
} = options;
|
|
143
|
+
var [searchParams, setSearchParams] = useSearchParams();
|
|
144
|
+
var currentState = (0, import_react.useMemo)(function () {
|
|
145
|
+
return deserialize(searchParams);
|
|
146
|
+
}, [searchParams, deserialize]);
|
|
147
|
+
var setState = (0, import_react.useCallback)(function (newState) {
|
|
148
|
+
var updatedState = typeof newState === "function" ? newState(currentState) : newState;
|
|
149
|
+
var mergedState = {
|
|
150
|
+
...currentState,
|
|
151
|
+
...updatedState
|
|
152
|
+
};
|
|
153
|
+
var serialized = serialize(mergedState);
|
|
154
|
+
setSearchParams(serialized, {
|
|
155
|
+
debounceMs
|
|
156
|
+
});
|
|
157
|
+
}, [currentState, serialize, setSearchParams, debounceMs]);
|
|
158
|
+
return [currentState, setState];
|
|
159
|
+
}
|
|
160
|
+
function useShareableUrl() {
|
|
161
|
+
var params = (0, import_router.useParams)();
|
|
162
|
+
var shareableUrl = (0, import_react.useMemo)(function () {
|
|
163
|
+
if (!import_platform.isWeb || typeof window === "undefined") {
|
|
164
|
+
return "";
|
|
165
|
+
}
|
|
166
|
+
var url = new URL(window.location.href);
|
|
167
|
+
url.search = "";
|
|
168
|
+
Object.entries(params).forEach(function (param) {
|
|
169
|
+
var [key, value] = param;
|
|
170
|
+
if (value !== void 0 && value !== null && value !== "") {
|
|
171
|
+
if (Array.isArray(value)) {
|
|
172
|
+
value.forEach(function (v) {
|
|
173
|
+
return url.searchParams.append(key, String(v));
|
|
174
|
+
});
|
|
175
|
+
} else {
|
|
176
|
+
url.searchParams.set(key, String(value));
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
return url.toString();
|
|
181
|
+
}, [params]);
|
|
182
|
+
return shareableUrl;
|
|
183
|
+
}
|
|
184
|
+
function useTypedSearchParams(schema) {
|
|
185
|
+
var params = (0, import_router.useParams)();
|
|
186
|
+
var typedParams = (0, import_react.useMemo)(function () {
|
|
187
|
+
var result = {};
|
|
188
|
+
Object.entries(schema).forEach(function (param) {
|
|
189
|
+
var [key, config] = param;
|
|
190
|
+
var rawValue = params[key];
|
|
191
|
+
if (config.parse) {
|
|
192
|
+
result[key] = config.parse(rawValue);
|
|
193
|
+
} else if (rawValue === void 0) {
|
|
194
|
+
result[key] = config.default;
|
|
195
|
+
} else {
|
|
196
|
+
result[key] = rawValue;
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
return result;
|
|
200
|
+
}, [params, schema]);
|
|
201
|
+
return typedParams;
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=useUrlState.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","useUrlState_exports","useSearchParams","useShareableUrl","useTypedSearchParams","useUrlState","module","exports","import_react","require","import_platform","import_router","_type_of","obj","Symbol","constructor","router","useRouter","currentParams","useParams","debounceTimerRef","useRef","searchParams","useMemo","params","entries","forEach","param","setSearchParams","useCallback","newParams","options","arguments","length","replace","_replace","debounceMs","updateParams","updateParams2","updatedParams","cleanParams","setParams","current","clearTimeout","setTimeout","useEffect","defaultValues","serialize","val","Array","isArray","map","String","JSON","stringify","deserialize","result","defaultValue","Number","parse","unused","keys","currentState","setState","newState","updatedState","mergedState","serialized"],"sources":["../../../src/hooks/useUrlState.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,257 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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":[]}
|