výkon: manualChunks vendor knihoven a lazy route komponenty
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,16 +1,29 @@
|
||||
import { Toaster } from 'sonner'
|
||||
import { lazy, Suspense } from 'react'
|
||||
import { NavLink, Outlet, Route, Routes } from 'react-router-dom'
|
||||
|
||||
import { SiteSelectionProvider, useSiteSelection } from './context/SiteSelectionContext'
|
||||
import { useWsLogErrorCount } from './hooks/useWsLogErrorCount'
|
||||
import { Dashboard } from './pages/Dashboard'
|
||||
import Economics from './pages/Economics'
|
||||
import EnergyFlows from './pages/EnergyFlows'
|
||||
import ForecastVsActual from './pages/ForecastVsActual'
|
||||
import { Logs } from './pages/Logs'
|
||||
import Planning from './pages/Planning'
|
||||
import SiteConfiguration from './pages/SiteConfiguration'
|
||||
import { Settings } from './pages/Settings'
|
||||
|
||||
// Lazy route komponenty — initial bundle nese jen layout; stránky se dotahují per route.
|
||||
const Dashboard = lazy(() =>
|
||||
import('./pages/Dashboard').then((m) => ({ default: m.Dashboard })),
|
||||
)
|
||||
const Economics = lazy(() => import('./pages/Economics'))
|
||||
const EnergyFlows = lazy(() => import('./pages/EnergyFlows'))
|
||||
const ForecastVsActual = lazy(() => import('./pages/ForecastVsActual'))
|
||||
const Logs = lazy(() => import('./pages/Logs').then((m) => ({ default: m.Logs })))
|
||||
const Planning = lazy(() => import('./pages/Planning'))
|
||||
const SiteConfiguration = lazy(() => import('./pages/SiteConfiguration'))
|
||||
const Settings = lazy(() => import('./pages/Settings').then((m) => ({ default: m.Settings })))
|
||||
|
||||
function RouteFallback() {
|
||||
return (
|
||||
<div className="flex min-h-[40vh] items-center justify-center" role="status" aria-label="Načítání stránky">
|
||||
<div className="h-8 w-8 animate-spin rounded-full border-2 border-slate-700 border-t-slate-300" />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
function SiteCombo() {
|
||||
const { sites, selectedSiteId, setSelectedSiteId, ready, error } = useSiteSelection()
|
||||
@@ -102,7 +115,9 @@ function AppLayout() {
|
||||
<SiteCombo />
|
||||
</div>
|
||||
</nav>
|
||||
<Outlet />
|
||||
<Suspense fallback={<RouteFallback />}>
|
||||
<Outlet />
|
||||
</Suspense>
|
||||
<Toaster richColors position="top-right" theme="dark" />
|
||||
</div>
|
||||
)
|
||||
@@ -121,7 +136,14 @@ export default function App() {
|
||||
<Route path="site-config" element={<SiteConfiguration />} />
|
||||
<Route path="settings" element={<Settings />} />
|
||||
</Route>
|
||||
<Route path="logs" element={<Logs />} />
|
||||
<Route
|
||||
path="logs"
|
||||
element={
|
||||
<Suspense fallback={<RouteFallback />}>
|
||||
<Logs />
|
||||
</Suspense>
|
||||
}
|
||||
/>
|
||||
</Routes>
|
||||
</SiteSelectionProvider>
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user