mirror of
https://github.com/fosrl/pangolin.git
synced 2026-02-17 02:16:38 +00:00
37 lines
1004 B
TypeScript
37 lines
1004 B
TypeScript
import { useSearchParams, usePathname, useRouter } from "next/navigation";
|
|
import { useTransition } from "react";
|
|
|
|
export function useNavigationContext() {
|
|
const router = useRouter();
|
|
const searchParams = useSearchParams();
|
|
const path = usePathname();
|
|
const [isNavigating, startTransition] = useTransition();
|
|
|
|
function navigate({
|
|
searchParams: params,
|
|
pathname = path,
|
|
replace = false
|
|
}: {
|
|
pathname?: string;
|
|
searchParams?: URLSearchParams;
|
|
replace?: boolean;
|
|
}) {
|
|
startTransition(() => {
|
|
const fullPath = pathname + (params ? `?${params.toString()}` : "");
|
|
|
|
if (replace) {
|
|
router.replace(fullPath);
|
|
} else {
|
|
router.push(fullPath);
|
|
}
|
|
});
|
|
}
|
|
|
|
return {
|
|
pathname: path,
|
|
searchParams: new URLSearchParams(searchParams), // we want the search params to be writeable
|
|
navigate,
|
|
isNavigating
|
|
};
|
|
}
|