import React from "react";
import {
useAuthenticated,
useRefineContext,
useResource,
useRouterContext,
LoginPage as DefaultLoginPage,
LayoutWrapper,
CanAccess,
ErrorComponent,
} from "@pankod/refine-core";
import { rankRoutes } from "@tanstack/react-location-rank-routes";
import {
Router,
ReactLocation,
Route,
Navigate,
useRouter,
RouterProps,
Outlet,
} from "@tanstack/react-location";
import { ResourceComponentWrapper } from "./resourceComponent";
import { RefineRouteProps } from "./index";
export const location = new ReactLocation();
export function RouterComponent(
this: { initialRoute?: string },
{ children: _children, location: locationFromProps, ...rest }: RouterProps,
): JSX.Element | null {
const { resources } = useResource();
const { DashboardPage, catchAll, LoginPage } = useRefineContext();
const { routes: customRoutes }: { routes: Route[] } = useRouterContext();
const { isFetching, isError } = useAuthenticated({
type: "routeProvider",
});
if (isFetching) {
return null;
}
const isAuthenticated = isError ? false : true;
const renderLoginRouteElement = (): JSX.Element => {
if (LoginPage) return ;
return ;
};
if (!isAuthenticated) {
const routes: Route[] = [
...[...(customRoutes || [])],
{
path: "/",
element: renderLoginRouteElement(),
},
{
path: "/login",
element: renderLoginRouteElement(),
},
{
path: "*",
element: ,
},
];
return (
);
}
const resourceRoutes: Route[] = [];
resources.map((resource) => {
const route: Route = {
path: `${resource.route}`,
children: [
{
path: "/",
element: (
),
},
{
path: `:action`,
element: (
),
},
{
path: `:action/:id`,
element: (
),
},
],
};
resourceRoutes.push(route);
});
const routes: Route[] = [
...[...(customRoutes || [])].filter((p: RefineRouteProps) => !p.layout),
{
path: "/",
element: (
),
children: [
...[...(customRoutes || [])].filter(
(p: RefineRouteProps) => p.layout,
),
...[...(resourceRoutes || [])],
{
path: "*",
id: "catch-all",
element: catchAll ?? ,
},
{
path: "/",
id: "index",
element: DashboardPage ? (
}
>
) : (
p.list)?.route}`
}
/>
),
},
],
},
];
return (
);
}
const LoginNavigateWithToParam: React.FC = () => {
const { state } = useRouter();
return (
);
};