import { useEffect, useState } from 'react' import './app.css' import { logout } from './api' import { Login } from './pages/Login' import { Endpoints } from './pages/Endpoints' import { Tasks } from './pages/Tasks' import { TaskDetail } from './pages/TaskDetail' type Route = | { name: 'login' } | { name: 'tasks' } | { name: 'endpoints' } | { name: 'task'; id: number } | { name: 'notfound' } function parseRoute(hash: string): Route { const path = hash.replace(/^#/, '') || '/' if (path === '/login') return { name: 'login' } if (path === '/') return { name: 'tasks' } if (path === '/endpoints') return { name: 'endpoints' } const m = path.match(/^\/tasks\/(\d+)$/) if (m) return { name: 'task', id: Number(m[1]) } return { name: 'notfound' } } function useHashRoute(): Route { const [hash, setHash] = useState(location.hash) useEffect(() => { const onChange = () => setHash(location.hash) window.addEventListener('hashchange', onChange) return () => window.removeEventListener('hashchange', onChange) }, []) return parseRoute(hash) } function App() { const route = useHashRoute() if (route.name === 'login') { return (location.hash = '#/')} /> } function handleLogout() { logout() .catch(() => {}) .finally(() => (location.hash = '#/login')) } return (
[IMAP/COPIER ]
session active
{route.name === 'tasks' && } {route.name === 'endpoints' && } {route.name === 'task' && } {route.name === 'notfound' && (

Unknown route.

← back to tasks
)}
) } export default App