import React, { useState, useMemo, useEffect } from "react"; import { ThemeProvider, CssBaseline, Switch, Box, CircularProgress, Typography } from "@mui/material"; import Dashboard from "./Components/Layout/Dashboard"; import LoginModal from "./Components/UI/LoginModal"; import { lightTheme, darkTheme } from "./Style/theme"; import Logo from './assets/images/logo.svg?react'; import { checkAuth } from "./Components/UI/auth"; function App() { const [authState, setAuthState] = useState({ isAuthenticated: false, isLoading: true, user: null }); const [showLoginModal, setShowLoginModal] = useState(false); const [isDarkMode, setIsDarkMode] = useState( window.matchMedia("(prefers-color-scheme: dark)").matches ); const theme = useMemo(() => (isDarkMode ? darkTheme : lightTheme), [isDarkMode]); useEffect(() => { const verifyAuth = async () => { try { const authStatus = await checkAuth(); setAuthState({ isAuthenticated: authStatus.isAuthenticated, isLoading: false, user: authStatus.user || null }); setShowLoginModal(!authStatus.isAuthenticated); } catch (error) { console.error('Auth verification error:', error); setAuthState({ isAuthenticated: false, isLoading: false, user: null }); setShowLoginModal(true); } }; verifyAuth(); }, []); const handleLogin = (userData) => { setAuthState({ isAuthenticated: true, isLoading: false, user: userData }); setShowLoginModal(false); }; const handleLogout = async () => { try { await axios.post(`${import.meta.env.VITE_BACK_URL}/api/auth/logout`, null, { withCredentials: true, // чтобы отправлялись куки }); localStorage.removeItem('access_token'); setAuthState({ isAuthenticated: false, isLoading: false, user: null, }); setShowLoginModal(true); } catch (error) { console.error('Logout failed:', error); } }; // Полноэкранный лоадер во время проверки авторизации if (authState.isLoading) { return ( Проверка авторизации... ); } return ( {!authState.isAuthenticated ? ( <> setShowLoginModal(false)} /> ) : ( )} ); } export default App;