UNPKG

@generouted/react-router

Version:

Generated file-based routes for React Router and Vite

43 lines (41 loc) 1.58 kB
// 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 };