UNPKG

nuqs

Version:

Type-safe search params state manager for React - Like useState, but stored in the URL query string

38 lines (35 loc) 1.51 kB
'use client'; import { createAdapterProvider, renderQueryString } from "../context-BWo_DoaC.js"; import { startTransition, useCallback, useMemo } from "react"; import { useLocation, useMatches, useNavigate } from "@tanstack/react-router"; //#region src/adapters/tanstack-router.ts function useNuqsTanstackRouterAdapter(watchKeys) { const search = useLocation({ select: (state) => Object.fromEntries(Object.entries(state.search).filter(([key]) => watchKeys.includes(key))) }); const navigate = useNavigate(); const from = useMatches({ select: (matches) => matches.length > 0 ? matches[matches.length - 1]?.fullPath : void 0 }); const searchParams = useMemo(() => new URLSearchParams(Object.entries(search).flatMap(([key, value]) => { if (Array.isArray(value)) return value.map((v) => [key, v]); else if (typeof value === "object" && value !== null) return [[key, JSON.stringify(value)]]; else return [[key, value]]; })), [search, watchKeys.join(",")]); const updateUrl = useCallback((search$1, options) => { startTransition(() => { navigate({ to: renderQueryString(search$1) || ".", ...from ? { from } : {}, replace: options.history === "replace", resetScroll: options.scroll, hash: (prevHash) => prevHash ?? "" }); }); }, [navigate, from]); return { searchParams, updateUrl, rateLimitFactor: 1 }; } const NuqsAdapter = createAdapterProvider(useNuqsTanstackRouterAdapter); //#endregion export { NuqsAdapter }; //# sourceMappingURL=tanstack-router.js.map