@generouted/react-router
Version:
Generated file-based routes for React Router and Vite
43 lines (41 loc) • 1.58 kB
JavaScript
// src/client/hooks.ts
import { useCallback, useMemo } from "react";
import { generatePath, useLocation, useNavigate, useParams } from "react-router";
var hooks = () => {
return {
useParams: (path) => useParams(),
useNavigate: () => {
const navigate = useNavigate();
return useCallback(
(to, ...[options]) => {
if (typeof to === "number") return navigate(to);
const path = generatePath(typeof to === "string" ? to : to.pathname, options?.params || {});
return navigate(typeof to === "string" ? path : { pathname: path, search: to.search, hash: to.hash }, options);
},
[navigate]
);
},
useModals: () => {
const location = useLocation();
const navigate = useNavigate();
return useMemo(() => {
return {
current: location.state?.modal || "",
open: (path, options) => {
const { at, state, ...opts } = options || {};
const pathname = options?.params ? generatePath(at || "", options.params || {}) : at;
navigate(pathname || location.pathname, { ...opts, state: { ...location.state, ...state, modal: path } });
},
close: (options) => {
const { at, state, ...opts } = options || {};
const pathname = options?.params ? generatePath(at || "", options.params || {}) : at;
navigate(pathname || location.pathname, { ...opts, state: { ...location.state, ...state, modal: "" } });
}
};
}, [location, navigate]);
}
};
};
export {
hooks
};