38 lines
1.1 KiB
React
38 lines
1.1 KiB
React
import { useState } from 'react'
|
|
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'
|
|
import Login from './components/Login'
|
|
import Layout from './components/Layout'
|
|
import Dashboard from './components/Dashboard'
|
|
|
|
function App() {
|
|
const [token, setToken] = useState(localStorage.getItem('charles_token'))
|
|
const [user, setUser] = useState(() => { try { return JSON.parse(localStorage.getItem('charles_user')) } catch { return null } })
|
|
|
|
const handleLogin = (t, u) => {
|
|
localStorage.setItem('charles_token', t)
|
|
localStorage.setItem('charles_user', JSON.stringify(u))
|
|
setToken(t)
|
|
setUser(u)
|
|
}
|
|
const handleLogout = () => {
|
|
localStorage.removeItem('charles_token')
|
|
localStorage.removeItem('charles_user')
|
|
setToken(null)
|
|
setUser(null)
|
|
}
|
|
|
|
if (!token) return <Login onLogin={handleLogin} />
|
|
|
|
return (
|
|
<BrowserRouter>
|
|
<Layout user={user} onLogout={handleLogout}>
|
|
<Routes>
|
|
<Route path='/' element={<Dashboard token={token} user={user} />} />
|
|
<Route path='*' element={<Navigate to='/' />} />
|
|
</Routes>
|
|
</Layout>
|
|
</BrowserRouter>
|
|
)
|
|
}
|
|
export default App
|