pstream is dead; long live pstream taciturnaxolotl.github.io/pstream-ng/
at main 39 lines 978 B view raw
1import { useCallback, useMemo } from "react"; 2import { useLocation, useNavigate } from "react-router-dom"; 3 4export function useQueryParams() { 5 const loc = useLocation(); 6 7 const queryParams = useMemo(() => { 8 const obj: Record<string, string> = Object.fromEntries( 9 new URLSearchParams(loc.search).entries(), 10 ); 11 12 return obj; 13 }, [loc.search]); 14 15 return queryParams; 16} 17 18export function useQueryParam( 19 param: string, 20): [string | null, (a: string | null) => void] { 21 const params = useQueryParams(); 22 const location = useLocation(); 23 const navigate = useNavigate(); 24 const currentValue = params[param] ?? null; 25 26 const set = useCallback( 27 (value: string | null) => { 28 const parsed = new URLSearchParams(location.search); 29 if (value) parsed.set(param, value); 30 else parsed.delete(param); 31 navigate({ 32 search: parsed.toString(), 33 }); 34 }, 35 [param, location.search, navigate], 36 ); 37 38 return [currentValue, set]; 39}