aboutsummaryrefslogtreecommitdiff
path: root/src/components/hooks/useNavigation.ts
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-01-24 13:09:50 +0000
committerFuwn <[email protected]>2026-01-24 13:09:50 +0000
commit396acf3bbbe00a192cb0ea0a9ccf91b1d8d2850b (patch)
treeb9df4ca6a70db45cfffbae6fdd7252e20fb8e93c /src/components/hooks/useNavigation.ts
downloadumami-396acf3bbbe00a192cb0ea0a9ccf91b1d8d2850b.tar.xz
umami-396acf3bbbe00a192cb0ea0a9ccf91b1d8d2850b.zip
Initial commitHEADmain
Created from https://vercel.com/new
Diffstat (limited to 'src/components/hooks/useNavigation.ts')
-rw-r--r--src/components/hooks/useNavigation.ts43
1 files changed, 43 insertions, 0 deletions
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<string, string | number>) => {
+ return buildPath(pathname, { ...queryParams, ...params });
+ };
+
+ const replaceParams = (params?: Record<string, string | number>) => {
+ return buildPath(pathname, params);
+ };
+
+ const renderUrl = (path: string, params?: Record<string, string | number> | 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,
+ };
+}