import React, { useEffect, useState } from 'react'; import { Navigate, Route, Routes } from 'react-router-dom'; import { defaultAuthParams, useCheckAuth } from '../api/auth'; import { useTushanContext } from '../context/tushan'; import { useConfigureAdminRouterFromChildren } from '../hooks/useConfigureAdminRouterFromChildren'; import { useDelay } from '../hooks/useDelay'; import { useUserStore } from '../store/user'; import type { TushanChildren } from '../types'; import { createSelector } from '../utils/createSelector'; import { Dashboard } from './defaults/Dashboard'; import { LoginPage } from './defaults/LoginPage'; import { BasicLayout } from './layout'; import { LoadingView } from './LoadingView'; export interface BuiltinRoutesProps { children: TushanChildren; } export const BuiltinRoutes: React.FC = React.memo( (props) => { const { customRoutesWithLayout, customRoutesWithoutLayout, resources, components, } = useConfigureAdminRouterFromChildren(props.children); const { dashboard = , authProvider, layout = , loginPage = , } = useTushanContext(); const requireAuth = Boolean(authProvider); const [canRender, setCanRender] = useState(!requireAuth); const oneSecondHasPassed = useDelay(1000); const { isLogin } = useUserStore(createSelector('isLogin')); const checkAuth = useCheckAuth(); useEffect(() => { if (requireAuth) { checkAuth() .then(() => { setCanRender(true); }) .catch(() => {}); } }, [checkAuth, requireAuth, isLogin]); return ( <> {customRoutesWithoutLayout} {canRender ? ( {dashboard && ( )} {customRoutesWithLayout.map((item) => ( ))} {resources.map((resource) => ( ))} } /> 404} /> } /> ) : oneSecondHasPassed ? ( } /> ) : ( )} {components} ); } ); BuiltinRoutes.displayName = 'BuiltinRoutes';