@offlegacy/nuqs-hash-router
Version:
nuqs adaptor for Hash Router (unofficial)
86 lines (82 loc) • 3.03 kB
JavaScript
//#region rolldown:runtime
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
key = keys[i];
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
get: ((k) => from[k]).bind(null, key),
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
});
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
value: mod,
enumerable: true
}) : target, mod));
//#endregion
const nuqs_adapters_custom = __toESM(require("nuqs/adapters/custom"));
const react = __toESM(require("react"));
//#region src/utils.ts
function getCurrentURL() {
return new URL(window.location.hash.slice(1), window.location.origin);
}
//#endregion
//#region src/NuqsAdapter.tsx
function useHashAdapter() {
const url = getCurrentURL();
const [hashParams, setHashParams] = (0, react.useState)(new URLSearchParams(url.search));
function updateUrl(updated, options) {
const url$1 = getCurrentURL();
const currentParams = new URLSearchParams(url$1.search);
currentParams.forEach((_, key) => {
if (!updated.has(key)) currentParams.delete(key);
});
updated.forEach((value, key) => {
if (value) currentParams.set(key, value);
});
const updatedHashUrl = `#${url$1.pathname}${currentParams.toString() ? `?${currentParams.toString()}` : ""}`;
switch (options.history) {
case "push":
window.history.pushState(null, "", updatedHashUrl);
break;
case "replace":
window.history.replaceState(null, "", updatedHashUrl);
break;
default:
window.history.pushState(null, "", updatedHashUrl);
break;
}
setHashParams(updated);
}
function getSearchParamsSnapshot() {
const url$1 = getCurrentURL();
return new URLSearchParams(url$1.search);
}
(0, react.useEffect)(() => {
function handleHashChange() {
const url$1 = getCurrentURL();
setHashParams(new URLSearchParams(url$1.search));
}
window.addEventListener("hashchange", handleHashChange);
return () => window.removeEventListener("hashchange", handleHashChange);
}, []);
return {
searchParams: hashParams,
updateUrl,
getSearchParamsSnapshot
};
}
/**
* @see https://github.com/47ng/nuqs/issues/810#issuecomment-2863556483
* @see https://github.com/47ng/nuqs/blob/84ee9aa49d74f3a0782ae7bbe5646a3e42cb8e52/packages/nuqs/src/adapters/lib/react-router.ts#L43
*/
const NuqsAdapter = (0, nuqs_adapters_custom.unstable_createAdapterProvider)(useHashAdapter);
//#endregion
exports.NuqsAdapter = NuqsAdapter;
//# sourceMappingURL=index.cjs.map