import React, { useState, useRef, useEffect, useMemo } from "react";
|
import { Route } from 'react-router-dom'
|
import {
|
Admin,
|
Resource,
|
CustomRoutes,
|
localStorageStore,
|
useStore,
|
StoreContextProvider,
|
resolveBrowserLocale,
|
} from "react-admin";
|
import polyglotI18nProvider from 'ra-i18n-polyglot';
|
import englishMessages from './i18n/en';
|
import { Layout } from "./layout";
|
import AuthProvider from "./config/authProvider";
|
import DataProvider from "./config/dataProvider";
|
import Dashboard from "./page/dashboard/Dashboard";
|
import Settings from "./page/settings/Settings";
|
import Login from "./page/login/index1";
|
import * as Common from './utils/common'
|
import { themes } from './themes/themes';
|
import { SPA_NAME, SPA_VERSION, DEFAULT_THEME_NAME, DEFAULT_THEME_MODE, DATA_PROVIDER_SPRING } from "./config/setting";
|
import ResourceContent from "./page/ResourceContent";
|
|
const i18nProvider = polyglotI18nProvider(
|
locale => {
|
if (locale === 'zh') {
|
return import('./i18n/zh').then(messages => messages.default);
|
}
|
// fallback
|
return englishMessages;
|
},
|
// default
|
// 'en',
|
resolveBrowserLocale('en', { fullLocale: true }),
|
[
|
{ locale: 'en', name: 'English' },
|
{ locale: 'zh', name: '简体中文' },
|
],
|
{
|
// msg in console
|
allowMissing: true,
|
}
|
);
|
|
const store = localStorageStore(SPA_VERSION, SPA_NAME);
|
|
const App = () => {
|
const [themeName] = useStore('themeName', DEFAULT_THEME_NAME);
|
const lightTheme = themes.find(theme => theme.name === themeName)?.light;
|
const darkTheme = themes.find(theme => theme.name === themeName)?.dark;
|
|
return (
|
<>
|
<Admin
|
disableTelemetry
|
layout={Layout}
|
authProvider={AuthProvider}
|
store={store}
|
lightTheme={lightTheme}
|
darkTheme={darkTheme}
|
defaultTheme={DEFAULT_THEME_MODE}
|
i18nProvider={i18nProvider}
|
dataProvider={DataProvider(DATA_PROVIDER_SPRING)}
|
loginPage={Login}
|
dashboard={Dashboard}
|
>
|
{permissions => (
|
<>
|
{
|
Common.extractNavMenus(permissions)?.map(node => {
|
return (
|
<Resource
|
key={node.id}
|
name={node.component}
|
{...ResourceContent(node)}
|
/>
|
)
|
})
|
}
|
</>
|
)}
|
{/* CustomRoutes don't trigger checkAuth */}
|
<CustomRoutes>
|
<Route path="/dashboard" element={<Dashboard />} />
|
<Route path="/settings" element={<Settings />} />
|
</CustomRoutes>
|
</Admin>
|
</>
|
)
|
};
|
|
const AppWrapper = () => (
|
<StoreContextProvider value={store}>
|
<App />
|
</StoreContextProvider>
|
);
|
|
export default AppWrapper;
|