Co-authored-by: Alex van Andel <me@alexvanandel.com> Co-authored-by: Peer Richelsen <peeroke@gmail.com> Co-authored-by: Bailey Pumfleet <bailey@pumfleet.co.uk> Co-authored-by: Peer Richelsen <peer@cal.com> Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
18 lines
633 B
TypeScript
18 lines
633 B
TypeScript
import { usePathname, useRouter, useSearchParams } from "next/navigation";
|
|
|
|
export default function useRouterQuery<T extends string>(name: T) {
|
|
const searchParams = useSearchParams();
|
|
const pathname = usePathname();
|
|
const router = useRouter();
|
|
|
|
const setQuery = (newValue: string | number | null | undefined) => {
|
|
const _searchParams = new URLSearchParams(searchParams);
|
|
_searchParams.set(name, newValue as string);
|
|
router.replace(`${pathname}?${_searchParams.toString()}`);
|
|
};
|
|
|
|
return { [name]: searchParams.get(name), setQuery } as {
|
|
[K in T]: string | undefined;
|
|
} & { setQuery: typeof setQuery };
|
|
}
|