UNPKG

query-state-hook

Version:

Easily manage the state of your React components via URL query parameters

33 lines (25 loc) 819 B
import { StateValue } from "./types"; export function unhandledValue(v: never): v is never { throw new Error("Unhandled type " + v); } type CleanProps = { deleteValue: string | string[] | "all"; searchParams: URLSearchParams; name: string; currentState: string | string[]; }; export function cleanState(props: CleanProps) { const { currentState, deleteValue, name, searchParams } = props; if (deleteValue === "all") { searchParams.delete(name); return searchParams; } const currentValues = new Set([currentState].flat()); const cleanedValues = currentValues.difference(new Set([deleteValue].flat())); if (cleanedValues.size === 0) { searchParams.delete(name); return searchParams; } searchParams.set(name, Array.from(cleanedValues).toString()); return searchParams; }