/
kan64
/
spreadsheet-lab
Обзор
Документация
Войти
/
kan64
/
spreadsheet-lab
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
client/src/App.tsx
72 строки
2 KB
Anton Kravchenkov
Add registration and login
02 мар 2026, 20:07
02 мар 2026, 20:07
5917a22
Код
Авторство
О чём код?
import React from 'react'; import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'; import { FilesPage } from './pages/FilesPage'; import { SpreadsheetPage } from './pages/SpreadsheetPage'; import { AuthPage } from './pages/AuthPage'; import { AuthProvider, useAuth } from './contexts/AuthContext'; class ErrorBoundary extends React.Component< { children: React.ReactNode }, { error: Error | null } > { state = { error: null as Error | null }; static getDerivedStateFromError(error: Error) { return { error }; } render() { if (this.state.error) { return ( <div style={{ padding: 32, fontFamily: 'monospace' }}> <h2 style={{ color: '#d93025' }}>Произошла ошибка</h2> <pre style={{ whiteSpace: 'pre-wrap', marginTop: 16 }}> {this.state.error.message} {'\n\n'} {this.state.error.stack} </pre> <button style={{ marginTop: 16, padding: '8px 16px', cursor: 'pointer' }} onClick={() => { this.setState({ error: null }); window.location.href = '/'; }} > На главную </button> </div> ); } return this.props.children; } } const ProtectedRoute: React.FC<{ children: React.ReactNode }> = ({ children }) => { const { isAuthenticated } = useAuth(); if (!isAuthenticated) return <Navigate to="/auth" replace />; return <>{children}</>; }; const PublicRoute: React.FC<{ children: React.ReactNode }> = ({ children }) => { const { isAuthenticated } = useAuth(); if (isAuthenticated) return <Navigate to="/" replace />; return <>{children}</>; }; const App: React.FC = () => { return ( <ErrorBoundary> <AuthProvider> <BrowserRouter> <Routes> <Route path="/auth" element={<PublicRoute><AuthPage /></PublicRoute>} /> <Route path="/" element={<ProtectedRoute><FilesPage /></ProtectedRoute>} /> <Route path="/spreadsheet/:fileId" element={<ProtectedRoute><SpreadsheetPage /></ProtectedRoute>} /> </Routes> </BrowserRouter> </AuthProvider> </ErrorBoundary> ); }; export default App;