From 8f5df6367c03191ee7ecb9e967c217c4c8f6862f Mon Sep 17 00:00:00 2001 From: Isaac Ibiapina Date: Mon, 22 Jul 2024 12:28:46 -0400 Subject: [PATCH] Preserve query params on top navigation --- src/components/NavLink.tsx | 4 ++-- src/hooks/searchParams.ts | 10 +++++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/components/NavLink.tsx b/src/components/NavLink.tsx index ccc70753..396f5760 100644 --- a/src/components/NavLink.tsx +++ b/src/components/NavLink.tsx @@ -1,9 +1,9 @@ import { Button } from "flowbite-react"; -import { useLocation } from "wouter"; +import { useSearchParams } from "#/hooks/searchParams"; export default function NavLink({ href, children, useButton = false, ...opts }) { const LinkComponent = useButton ? Button : "a"; - const [_location, navigate] = useLocation(); + const [, , navigate] = useSearchParams(); const goTo = (event, ref) => { if (navigate) { event.preventDefault(); diff --git a/src/hooks/searchParams.ts b/src/hooks/searchParams.ts index b8e7c3b5..4cd862cd 100644 --- a/src/hooks/searchParams.ts +++ b/src/hooks/searchParams.ts @@ -14,5 +14,13 @@ export function useSearchParams() { [location, navigate], ); - return [searchParams, setSearchParams] as const; + const handleNavigate = useCallback( + (href: string, preserveParams = true) => { + const params = preserveParams ? `?${search}` : ""; + navigate(`${href}${params}`); + }, + [navigate, search], + ); + + return [searchParams, setSearchParams, handleNavigate] as const; }