From 396acf3bbbe00a192cb0ea0a9ccf91b1d8d2850b Mon Sep 17 00:00:00 2001 From: Fuwn <50817549+Fuwn@users.noreply.github.com> Date: Sat, 24 Jan 2026 13:09:50 +0000 Subject: Initial commit Created from https://vercel.com/new --- src/components/hooks/useNavigation.ts | 43 +++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/components/hooks/useNavigation.ts (limited to 'src/components/hooks/useNavigation.ts') diff --git a/src/components/hooks/useNavigation.ts b/src/components/hooks/useNavigation.ts new file mode 100644 index 0000000..0a18ac7 --- /dev/null +++ b/src/components/hooks/useNavigation.ts @@ -0,0 +1,43 @@ +import { usePathname, useRouter, useSearchParams } from 'next/navigation'; +import { useEffect, useState } from 'react'; +import { buildPath } from '@/lib/url'; + +export function useNavigation() { + const router = useRouter(); + const pathname = usePathname(); + const searchParams = useSearchParams(); + const [, teamId] = pathname.match(/\/teams\/([a-f0-9-]+)/) || []; + 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 replaceParams = (params?: Record) => { + return buildPath(pathname, params); + }; + + const renderUrl = (path: string, params?: Record | false) => { + return buildPath( + teamId ? `/teams/${teamId}${path}` : path, + params === false ? {} : { ...queryParams, ...params }, + ); + }; + + useEffect(() => { + setQueryParams(Object.fromEntries(searchParams)); + }, [searchParams.toString()]); + + return { + router, + pathname, + searchParams, + query: queryParams, + teamId, + websiteId, + updateParams, + replaceParams, + renderUrl, + }; +} -- cgit v1.2.3