From c84c73b7a71bfd8abd3e6dfba95286a0d879afa9 Mon Sep 17 00:00:00 2001 From: Yash Date: Fri, 20 Feb 2026 00:01:38 +0530 Subject: [PATCH] feat: Add `useNavigation` hook for managing URL parameters and navigation. --- src/components/hooks/useNavigation.ts | 35 +++++++++++++++++---------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/src/components/hooks/useNavigation.ts b/src/components/hooks/useNavigation.ts index 0a18ac7b2..278cd57f2 100644 --- a/src/components/hooks/useNavigation.ts +++ b/src/components/hooks/useNavigation.ts @@ -1,5 +1,5 @@ import { usePathname, useRouter, useSearchParams } from 'next/navigation'; -import { useEffect, useState } from 'react'; +import { useCallback, useEffect, useState } from 'react'; import { buildPath } from '@/lib/url'; export function useNavigation() { @@ -10,20 +10,29 @@ export function useNavigation() { const [, websiteId] = pathname.match(/\/websites\/([a-f0-9-]+)/) || []; const [queryParams, setQueryParams] = useState(Object.fromEntries(searchParams)); - const updateParams = (params?: Record) => { - return buildPath(pathname, { ...queryParams, ...params }); - }; + const updateParams = useCallback( + (params?: Record) => { + return buildPath(pathname, { ...queryParams, ...params }); + }, + [pathname, queryParams], + ); - const replaceParams = (params?: Record) => { - return buildPath(pathname, params); - }; + const replaceParams = useCallback( + (params?: Record) => { + return buildPath(pathname, params); + }, + [pathname], + ); - const renderUrl = (path: string, params?: Record | false) => { - return buildPath( - teamId ? `/teams/${teamId}${path}` : path, - params === false ? {} : { ...queryParams, ...params }, - ); - }; + const renderUrl = useCallback( + (path: string, params?: Record | false) => { + return buildPath( + teamId ? `/teams/${teamId}${path}` : path, + params === false ? {} : { ...queryParams, ...params }, + ); + }, + [pathname, teamId, queryParams], + ); useEffect(() => { setQueryParams(Object.fromEntries(searchParams));