@offlegacy/nuqs-hash-router
Version:
nuqs adaptor for Hash Router (unofficial)
1 lines • 3.56 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","names":["updated: URLSearchParams","options: Required<unstable_AdapterOptions>","url"],"sources":["../src/utils.ts","../src/NuqsAdapter.tsx"],"sourcesContent":["export function getCurrentURL() {\n return new URL(window.location.hash.slice(1), window.location.origin);\n}\n","import {\n type unstable_AdapterOptions,\n unstable_createAdapterProvider,\n type unstable_UseAdapterHook,\n} from 'nuqs/adapters/custom';\nimport { useEffect, useState } from 'react';\nimport { getCurrentURL } from './utils';\n\nfunction useHashAdapter(): ReturnType<unstable_UseAdapterHook> {\n const url = getCurrentURL();\n const [hashParams, setHashParams] = useState<URLSearchParams>(new URLSearchParams(url.search));\n\n function updateUrl(updated: URLSearchParams, options: Required<unstable_AdapterOptions>) {\n const url = getCurrentURL();\n const currentParams = new URLSearchParams(url.search);\n\n currentParams.forEach((_, key) => {\n if (!updated.has(key)) currentParams.delete(key);\n });\n updated.forEach((value, key) => {\n if (value) currentParams.set(key, value);\n });\n\n const updatedHashUrl = `#${url.pathname}${currentParams.toString() ? `?${currentParams.toString()}` : ''}`;\n switch (options.history) {\n case 'push':\n window.history.pushState(null, '', updatedHashUrl);\n break;\n case 'replace':\n window.history.replaceState(null, '', updatedHashUrl);\n break;\n default: // fallback\n window.history.pushState(null, '', updatedHashUrl);\n break;\n }\n setHashParams(updated);\n }\n\n function getSearchParamsSnapshot() {\n const url = getCurrentURL();\n return new URLSearchParams(url.search);\n }\n\n useEffect(() => {\n function handleHashChange() {\n const url = getCurrentURL();\n setHashParams(new URLSearchParams(url.search));\n }\n\n window.addEventListener('hashchange', handleHashChange);\n\n return () => window.removeEventListener('hashchange', handleHashChange);\n }, []);\n\n return {\n searchParams: hashParams,\n updateUrl,\n getSearchParamsSnapshot,\n };\n}\n\n/**\n * @see https://github.com/47ng/nuqs/issues/810#issuecomment-2863556483\n * @see https://github.com/47ng/nuqs/blob/84ee9aa49d74f3a0782ae7bbe5646a3e42cb8e52/packages/nuqs/src/adapters/lib/react-router.ts#L43\n */\nexport const NuqsAdapter = unstable_createAdapterProvider(useHashAdapter);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAgB,gBAAgB;AAC9B,QAAO,IAAI,IAAI,OAAO,SAAS,KAAK,MAAM,EAAE,EAAE,OAAO,SAAS;AAC/D;;;;ACMD,SAAS,iBAAsD;CAC7D,MAAM,MAAM,eAAe;CAC3B,MAAM,CAAC,YAAY,cAAc,uBAA6B,IAAI,gBAAgB,IAAI,QAAQ;CAE9F,SAAS,UAAUA,SAA0BC,SAA4C;EACvF,MAAMC,QAAM,eAAe;EAC3B,MAAM,gBAAgB,IAAI,gBAAgBA,MAAI;EAE9C,cAAc,QAAQ,CAAC,GAAG,QAAQ;AAChC,OAAI,CAAC,QAAQ,IAAI,IAAI,EAAE,cAAc,OAAO,IAAI;EACjD,EAAC;EACF,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AAC9B,OAAI,OAAO,cAAc,IAAI,KAAK,MAAM;EACzC,EAAC;EAEF,MAAM,iBAAiB,CAAC,CAAC,EAAEA,MAAI,WAAW,cAAc,UAAU,GAAG,CAAC,CAAC,EAAE,cAAc,UAAU,EAAE,GAAG,IAAI;AAC1G,UAAQ,QAAQ,SAAhB;GACE,KAAK;IACH,OAAO,QAAQ,UAAU,MAAM,IAAI,eAAe;AAClD;GACF,KAAK;IACH,OAAO,QAAQ,aAAa,MAAM,IAAI,eAAe;AACrD;GACF;IACE,OAAO,QAAQ,UAAU,MAAM,IAAI,eAAe;AAClD;EACH;EACD,cAAc,QAAQ;CACvB;CAED,SAAS,0BAA0B;EACjC,MAAMA,QAAM,eAAe;AAC3B,SAAO,IAAI,gBAAgBA,MAAI;CAChC;sBAES,MAAM;EACd,SAAS,mBAAmB;GAC1B,MAAMA,QAAM,eAAe;GAC3B,cAAc,IAAI,gBAAgBA,MAAI,QAAQ;EAC/C;EAED,OAAO,iBAAiB,cAAc,iBAAiB;AAEvD,SAAO,MAAM,OAAO,oBAAoB,cAAc,iBAAiB;CACxE,GAAE,CAAE,EAAC;AAEN,QAAO;EACL,cAAc;EACd;EACA;CACD;AACF;;;;;AAMD,MAAa,uEAA6C,eAAe"}