import React, { PropsWithChildren, Suspense } from 'react'; import { BrowserRouter, HashRouter, Navigate, Route, Routes, } from 'react-router-dom'; import { TcProvider, useColorScheme, useLanguage } from 'tailchat-shared'; import clsx from 'clsx'; import { Loadable } from './components/Loadable'; import { ConfigProvider as AntdProvider } from 'antd'; import { Helmet } from 'react-helmet'; import { useRecordMeasure } from './utils/measure-helper'; import { getPopupContainer, preventDefault } from './utils/dom-helper'; import { LoadingSpinner } from './components/LoadingSpinner'; import { pluginRootRoute } from './plugin/common'; import { PortalHost as FallbackPortalHost } from './components/Portal'; import isElectron from 'is-electron'; const AppRouter: any = isElectron() ? HashRouter : BrowserRouter; const MainRoute = Loadable(() => import('./routes/Main')); const EntryRoute = Loadable(() => import('./routes/Entry')); const PanelRoute = Loadable(() => import('./routes/Panel')); const InviteRoute = Loadable(() => import('./routes/Invite')); const AppProvider: React.FC = React.memo((props) => { return ( }> {props.children} ); }); AppProvider.displayName = 'AppProvider'; const AppContainer: React.FC = React.memo((props) => { const { isDarkMode, extraSchemeName } = useColorScheme(); return (
{props.children}
); }); AppContainer.displayName = 'AppContainer'; const AppHeader: React.FC = React.memo(() => { const { language } = useLanguage(); return ( ); }); AppHeader.displayName = 'AppHeader'; export const App: React.FC = React.memo(() => { useRecordMeasure('AppRenderStart'); return ( } /> } /> } /> } /> {pluginRootRoute.map((r, i) => ( // NOTICE: Switch里不能出现动态路由 ))} } /> } /> ); }); App.displayName = 'App';