import { useState, useEffect, lazy, Suspense } from 'react'; import { Truck, Loader2, LogOut, CircleHelp } from 'lucide-react'; import { DeliveryForm } from './components/delivery/DeliveryForm'; import { LoginForm } from './components/auth/LoginForm'; import { ToastContainer } from './components/ui/Toast'; import { Button } from './components/ui/Button'; import { UpdatePrompt } from './components/ui/UpdatePrompt'; import { GuidedTour } from './components/ui/GuidedTour'; import { useDeliveryStore } from './stores/deliveryStore'; import { useAuthStore } from './stores/authStore'; import { useToastStore } from './stores/toastStore'; import { useWebSocket } from './hooks/useWebSocket'; import { getTodayFrontend } from './utils/date'; const Dashboard = lazy(() => import('./pages/Dashboard')); const DeliveryListPage = lazy(() => import('./pages/DeliveryListPage')); const PageLoader = () =>
Загрузка…
; function App() { const [view, setView] = useState<'dashboard' | 'delivery-list'>('dashboard'); const [selectedDate, setSelectedDate] = useState(getTodayFrontend); const [formOpen, setFormOpen] = useState(false); const [tourReplay, setTourReplay] = useState(0); const { isAuthenticated, isAuthChecking, user, restoreAuth, logout } = useAuthStore(); const { addDelivery, isLoading, isLoadingCounts, error, countsError, currentDate } = useDeliveryStore(); useWebSocket(); useEffect(() => { restoreAuth(); }, [restoreAuth]); const selectDate = (date: string) => { setSelectedDate(date); setView('delivery-list'); }; const submitDelivery = async (data: Parameters[0]) => { await addDelivery(data); useToastStore.getState().addToast('Доставка создана', 'success'); selectDate(data.date); }; if (isAuthChecking) return ; if (!isAuthenticated) return <>; return (
Перейти к содержимому
}> {view === 'dashboard' ? setFormOpen(true)} /> : setView('dashboard')} />}
setFormOpen(false)} onSubmit={submitDelivery} defaultDate={getTodayFrontend()} />
); } export default App;