/* eslint-disable react/display-name */ import React from "react"; import { Route, Routes, Navigate, Outlet } from "react-router-dom"; import { LoginPage as DefaultLoginPage, ErrorComponent, LayoutWrapper, useAuthenticated, useResource, useRefineContext, useRouterContext, CanAccess, ResourceRouterParams, } from "@pankod/refine-core"; import { RefineRouteProps } from "./index"; const ResourceComponent: React.FC<{ route: string }> = ({ route }) => { const { catchAll } = useRefineContext(); const { useParams } = useRouterContext(); const { resources } = useResource(); const { action, id } = useParams(); const resource = resources.find((res) => res.route === route); if (resource) { const { list, create, edit, show, name, canCreate, canEdit, canShow, canDelete, options, } = resource; const List = list ?? (() => null); const Create = create ?? (() => null); const Edit = edit ?? (() => null); const Show = show ?? (() => null); const renderCrud = () => { switch (action) { case undefined: return ( } params={{ resource, }} > {!list ? ( catchAll ?? ) : ( )} ); case "create": case "clone": return ( } params={{ id: id ? decodeURIComponent(id) : undefined, resource, }} > {!create ? ( catchAll ?? ) : ( )} ); case "edit": return ( } > {!edit ? ( catchAll ?? ) : ( )} ); case "show": return ( } > {!show ? ( catchAll ?? ) : ( )} ); default: return <>{catchAll ?? }; } }; return renderCrud(); } return <>{catchAll ?? }; }; type RouteProviderProps = { initialRoute?: string; }; export const RouteProvider = ({ initialRoute, }: RouteProviderProps): JSX.Element => { const { resources } = useResource(); const { catchAll, DashboardPage, LoginPage } = useRefineContext(); const { routes: customRoutes } = useRouterContext(); const { isFetching, isError } = useAuthenticated({ type: "routeProvider", }); if (isFetching) { return ( ); } const isAuthenticated = isError ? false : true; const CustomPathAfterLogin: React.FC = (): JSX.Element | null => { const { pathname, search } = location; const toURL = `${pathname}${search}`; return ; }; const resourceRoutes: JSX.Element[] = []; resources.map((resource) => { const route = ( } > } > } /> ); resourceRoutes.push(route); }); const renderAuthorized = () => ( {[...(customRoutes || [])] .filter((p: RefineRouteProps) => !p.layout) .map((route, i) => ( ))} } > {[...(customRoutes || [])] .filter((p: RefineRouteProps) => p.layout) .map((route, i) => ( ))} } > ) : ( p.list)?.route}` } /> ) } /> {...[...(resourceRoutes || [])]} } /> ); const renderLoginRouteElement = (): JSX.Element => { if (LoginPage) return ; return ; }; const renderUnauthorized = () => ( {[...(customRoutes || [])].map((route, i) => ( ))} } /> ); return isAuthenticated ? renderAuthorized() : renderUnauthorized(); };