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
JavaScript
'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