2023-09-07 16:42:34 +08:00
|
|
|
import { baseRoutes } from "./router.config";
|
|
|
|
import { Route, RouteObject, Routes, useLocation } from "react-router-dom";
|
|
|
|
import { RouteGuard } from "./AuthGuard";
|
|
|
|
import { pathToRegexp } from "path-to-regexp";
|
|
|
|
import { defaultTitle } from "@/constant";
|
2023-08-27 14:37:59 +08:00
|
|
|
|
2023-09-07 16:42:34 +08:00
|
|
|
// export const RouterElements = () => useRoutes(routesConfig);
|
|
|
|
|
|
|
|
export type ExpandRouteProps = {
|
|
|
|
title?: string;
|
|
|
|
};
|
|
|
|
|
|
|
|
export const RouterElements = () => {
|
|
|
|
const location = useLocation();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* document.title
|
|
|
|
*/
|
|
|
|
const currentRoute = [...baseRoutes].find((r) =>
|
|
|
|
pathToRegexp(location.pathname).test(r.path!)
|
|
|
|
);
|
|
|
|
document.title = currentRoute?.title ?? defaultTitle;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 递归children
|
|
|
|
*/
|
|
|
|
const generateRoutes = (routes: (RouteObject & ExpandRouteProps)[]) =>
|
|
|
|
routes.map((r) => (
|
|
|
|
<Route key={r.path} path={r.path} element={r.element}>
|
|
|
|
{r.children && generateRoutes(r.children)}
|
|
|
|
</Route>
|
|
|
|
));
|
|
|
|
|
|
|
|
return (
|
|
|
|
<RouteGuard ignorePaths={[]}>
|
|
|
|
<Routes>
|
|
|
|
{generateRoutes(baseRoutes)}
|
|
|
|
<Route key="notfound" path="*" element={<span>404</span>} />
|
|
|
|
</Routes>
|
|
|
|
</RouteGuard>
|
|
|
|
);
|
|
|
|
};
|