tanstack-search-state
Version:
A utility for managing search params state with TanStack Router in a type-safe way
42 lines (41 loc) • 1.1 kB
JavaScript
// src/index.ts
import { useNavigate, useSearch } from "@tanstack/react-router";
function createSearch(initialState) {
return function useSearchState() {
const search = useSearch({ strict: false });
const navigate = useNavigate();
async function set(update) {
await navigate({
to: ".",
search: (prevRaw) => {
const prev = { ...initialState, ...prevRaw };
const next = typeof update === "function" ? update(prev) : update;
const definedValues = Object.entries(next).reduce(
(acc, [key, value]) => {
if (value !== void 0) {
acc[key] = value;
}
return acc;
},
{}
);
const result = { ...prev };
Object.keys(next).forEach((key) => {
if (next[key] === void 0) {
delete result[key];
}
});
return { ...result, ...definedValues };
}
});
}
return {
...initialState,
...search,
set
};
};
}
export {
createSearch
};