umami/src/components/hooks/useNavigation.ts
2024-03-21 16:30:03 -07:00

32 lines
846 B
TypeScript

import { useMemo } from 'react';
import { usePathname, useRouter, useSearchParams } from 'next/navigation';
import { buildUrl, safeDecodeURIComponent } from 'next-basics';
export function useNavigation(): {
pathname: string;
query: { [key: string]: string };
router: any;
renderUrl: (params: any, reset?: boolean) => string;
} {
const router = useRouter();
const pathname = usePathname();
const params = useSearchParams();
const query = useMemo(() => {
const obj = {};
for (const [key, value] of params.entries()) {
obj[key] = safeDecodeURIComponent(value);
}
return obj;
}, [params]);
function renderUrl(params: any, reset?: boolean) {
return reset ? pathname : buildUrl(pathname, { ...query, ...params });
}
return { pathname, query, router, renderUrl };
}
export default useNavigation;