WhiteNightsAdminPanel/src/App.tsx

274 lines
12 KiB
TypeScript

import {Refine, Authenticated} from '@refinedev/core'
import {DevtoolsPanel, DevtoolsProvider} from '@refinedev/devtools'
import {RefineKbar, RefineKbarProvider} from '@refinedev/kbar'
import {ErrorComponent, useNotificationProvider, RefineSnackbarProvider, ThemedLayoutV2} from '@refinedev/mui'
import {customDataProvider} from './providers/data'
import CssBaseline from '@mui/material/CssBaseline'
import GlobalStyles from '@mui/material/GlobalStyles'
import {BrowserRouter, Route, Routes, Outlet} from 'react-router'
import routerBindings, {NavigateToResource, CatchAllNavigate, UnsavedChangesNotifier, DocumentTitleHandler} from '@refinedev/react-router'
import {ColorModeContextProvider} from './contexts/color-mode'
import {Header} from './components/header'
import {Login} from './pages/login'
import {authProvider} from './authProvider'
import {i18nProvider} from './i18nProvider'
import {CountryList, CountryCreate, CountryEdit, CountryShow} from './pages/country'
import {CityList, CityCreate, CityEdit, CityShow} from './pages/city'
import {CarrierList, CarrierCreate, CarrierEdit, CarrierShow} from './pages/carrier'
import {MediaList, MediaCreate, MediaEdit, MediaShow} from './pages/media'
import {ArticleList, ArticleCreate, ArticleEdit, ArticleShow} from './pages/article'
import {SightList, SightCreate, SightEdit, SightShow} from './pages/sight'
import {StationList, StationCreate, StationEdit, StationShow} from './pages/station'
import {VehicleList, VehicleCreate, VehicleEdit, VehicleShow} from './pages/vehicle'
import {RouteList, RouteCreate, RouteEdit, RouteShow} from './pages/route'
import {CountryIcon, CityIcon, CarrierIcon, MediaIcon, ArticleIcon, SightIcon, StationIcon, VehicleIcon, RouteIcon} from './components/ui/Icons'
import SidebarTitle from './components/ui/SidebarTitle'
function App() {
return (
<BrowserRouter>
<RefineKbarProvider>
<ColorModeContextProvider>
<CssBaseline />
<GlobalStyles styles={{html: {WebkitFontSmoothing: 'auto'}}} />
<RefineSnackbarProvider>
<DevtoolsProvider>
<Refine
dataProvider={customDataProvider}
notificationProvider={useNotificationProvider}
routerProvider={routerBindings}
authProvider={authProvider}
i18nProvider={i18nProvider}
resources={[
{
name: 'country',
list: '/country',
create: '/country/create',
edit: '/country/edit/:id',
show: '/country/show/:id',
meta: {
canDelete: true,
label: 'Страны',
icon: <CountryIcon />,
},
},
{
name: 'city',
list: '/city',
create: '/city/create',
edit: '/city/edit/:id',
show: '/city/show/:id',
meta: {
canDelete: true,
label: 'Города',
icon: <CityIcon />,
},
},
{
name: 'carrier',
list: '/carrier',
create: '/carrier/create',
edit: '/carrier/edit/:id',
show: '/carrier/show/:id',
meta: {
canDelete: true,
label: 'Перевозчики',
icon: <CarrierIcon />,
},
},
{
name: 'media',
list: '/media',
create: '/media/create',
edit: '/media/edit/:id',
show: '/media/show/:id',
meta: {
canDelete: true,
label: 'Медиа',
icon: <MediaIcon />,
},
},
{
name: 'article',
list: '/article',
create: '/article/create',
edit: '/article/edit/:id',
show: '/article/show/:id',
meta: {
canDelete: true,
label: 'Статьи',
icon: <ArticleIcon />,
},
},
{
name: 'sight',
list: '/sight',
create: '/sight/create',
edit: '/sight/edit/:id',
show: '/sight/show/:id',
meta: {
canDelete: true,
label: 'Достопримечательности',
icon: <SightIcon />,
},
},
{
name: 'station',
list: '/station',
create: '/station/create',
edit: '/station/edit/:id',
show: '/station/show/:id',
meta: {
canDelete: true,
label: 'Остановки',
icon: <StationIcon />,
},
},
{
name: 'vehicle',
list: '/vehicle',
create: '/vehicle/create',
edit: '/vehicle/edit/:id',
show: '/vehicle/show/:id',
// добавить SHOW для vehicle->routes (https://wn.krbl.ru/vehicle/routes?id=1)
meta: {
canDelete: true,
label: 'Транспорт',
icon: <VehicleIcon />,
},
},
{
name: 'route',
list: '/route',
create: '/route/create',
edit: '/route/edit/:id',
show: '/route/show/:id',
// добавить SHOW для route->station (https://wn.krbl.ru/route/station)
// добавить SHOW для route->vehicle (https://wn.krbl.ru/route/vehicle)
meta: {
canDelete: true,
label: 'Маршруты',
icon: <RouteIcon />,
},
},
]}
options={{
syncWithLocation: true,
warnWhenUnsavedChanges: true,
useNewQueryKeys: true,
projectId: 'Wv044J-t53S3s-PcbJGe',
}}
>
<Routes>
<Route
element={
<Authenticated key="authenticated-inner" fallback={<CatchAllNavigate to="/login" />}>
<ThemedLayoutV2 Header={Header} Title={SidebarTitle}>
<Outlet />
</ThemedLayoutV2>
</Authenticated>
}
>
<Route index element={<NavigateToResource resource="country" />} />
<Route path="/country">
<Route index element={<CountryList />} />
<Route path="create" element={<CountryCreate />} />
<Route path="edit/:id" element={<CountryEdit />} />
<Route path="show/:id" element={<CountryShow />} />
</Route>
<Route path="/city">
<Route index element={<CityList />} />
<Route path="create" element={<CityCreate />} />
<Route path="edit/:id" element={<CityEdit />} />
<Route path="show/:id" element={<CityShow />} />
</Route>
<Route path="/carrier">
<Route index element={<CarrierList />} />
<Route path="create" element={<CarrierCreate />} />
<Route path="edit/:id" element={<CarrierEdit />} />
<Route path="show/:id" element={<CarrierShow />} />
</Route>
<Route path="/media">
<Route index element={<MediaList />} />
<Route path="create" element={<MediaCreate />} />
<Route path="edit/:id" element={<MediaEdit />} />
<Route path="show/:id" element={<MediaShow />} />
</Route>
<Route path="/article">
<Route index element={<ArticleList />} />
<Route path="create" element={<ArticleCreate />} />
<Route path="edit/:id" element={<ArticleEdit />} />
<Route path="show/:id" element={<ArticleShow />} />
</Route>
<Route path="/sight">
<Route index element={<SightList />} />
<Route path="create" element={<SightCreate />} />
<Route path="edit/:id" element={<SightEdit />} />
<Route path="show/:id" element={<SightShow />} />
</Route>
<Route path="/station">
<Route index element={<StationList />} />
<Route path="create" element={<StationCreate />} />
<Route path="edit/:id" element={<StationEdit />} />
<Route path="show/:id" element={<StationShow />} />
</Route>
<Route path="/vehicle">
<Route index element={<VehicleList />} />
<Route path="create" element={<VehicleCreate />} />
<Route path="edit/:id" element={<VehicleEdit />} />
<Route path="show/:id" element={<VehicleShow />} />
</Route>
<Route path="/route">
<Route index element={<RouteList />} />
<Route path="create" element={<RouteCreate />} />
<Route path="edit/:id" element={<RouteEdit />} />
<Route path="show/:id" element={<RouteShow />} />
</Route>
<Route path="*" element={<ErrorComponent />} />
</Route>
<Route
element={
<Authenticated key="authenticated-outer" fallback={<Outlet />}>
<NavigateToResource />
</Authenticated>
}
>
<Route path="/login" element={<Login />} />
</Route>
</Routes>
<RefineKbar />
<UnsavedChangesNotifier />
<DocumentTitleHandler
handler={() => {
// const cleanedTitle = title.autoGeneratedTitle.split('|')[0].trim()
// return `${cleanedTitle} — Белые ночи`
return 'Белые ночи'
}}
/>
</Refine>
<DevtoolsPanel />
</DevtoolsProvider>
</RefineSnackbarProvider>
</ColorModeContextProvider>
</RefineKbarProvider>
</BrowserRouter>
)
}
export default App