mirror of
https://github.com/ershisan99/it-incubator-todolist-ts-17-live-2024-08-17.git
synced 2025-12-16 12:33:29 +00:00
102 lines
2.4 KiB
TypeScript
102 lines
2.4 KiB
TypeScript
import React, { useCallback, useEffect } from 'react'
|
|
import './App.css'
|
|
import { TodolistsList } from 'features/TodolistsList/TodolistsList'
|
|
import { ErrorSnackbar } from 'components/ErrorSnackbar/ErrorSnackbar'
|
|
import { useDispatch, useSelector } from 'react-redux'
|
|
import {
|
|
initializeAppTC,
|
|
selectAppInitialized,
|
|
selectAppStatus,
|
|
} from './app-reducer'
|
|
import { BrowserRouter, Route, Routes } from 'react-router-dom'
|
|
import { Login } from 'features/Login/Login'
|
|
import { logoutTC, selectIsLoggedIn } from 'features/Login/auth-reducer'
|
|
import {
|
|
AppBar,
|
|
Button,
|
|
CircularProgress,
|
|
Container,
|
|
IconButton,
|
|
LinearProgress,
|
|
Toolbar,
|
|
Typography,
|
|
} from '@mui/material'
|
|
import { Menu } from '@mui/icons-material'
|
|
|
|
type Props = {
|
|
demo?: boolean
|
|
}
|
|
|
|
function App({ demo = false }: Props) {
|
|
const status = useSelector(selectAppStatus)
|
|
const isInitialized = useSelector(selectAppInitialized)
|
|
const isLoggedIn = useSelector(selectIsLoggedIn)
|
|
const dispatch = useDispatch<any>()
|
|
|
|
useEffect(() => {
|
|
dispatch(initializeAppTC())
|
|
}, [])
|
|
|
|
const logoutHandler = useCallback(() => {
|
|
dispatch(logoutTC())
|
|
}, [])
|
|
|
|
if (!isInitialized) {
|
|
return (
|
|
<div
|
|
style={{
|
|
position: 'fixed',
|
|
top: '30%',
|
|
textAlign: 'center',
|
|
width: '100%',
|
|
}}
|
|
>
|
|
<CircularProgress />
|
|
</div>
|
|
)
|
|
}
|
|
|
|
return (
|
|
<BrowserRouter>
|
|
<div className='App'>
|
|
<ErrorSnackbar />
|
|
<AppBar position='static'>
|
|
<Toolbar>
|
|
<IconButton
|
|
edge='start'
|
|
color='inherit'
|
|
aria-label='menu'
|
|
>
|
|
<Menu />
|
|
</IconButton>
|
|
<Typography variant='h6'>News</Typography>
|
|
{isLoggedIn && (
|
|
<Button
|
|
color='inherit'
|
|
onClick={logoutHandler}
|
|
>
|
|
Log out
|
|
</Button>
|
|
)}
|
|
</Toolbar>
|
|
{status === 'loading' && <LinearProgress />}
|
|
</AppBar>
|
|
<Container fixed>
|
|
<Routes>
|
|
<Route
|
|
path={'/'}
|
|
element={<TodolistsList demo={demo} />}
|
|
/>
|
|
<Route
|
|
path={'/login'}
|
|
element={<Login />}
|
|
/>
|
|
</Routes>
|
|
</Container>
|
|
</div>
|
|
</BrowserRouter>
|
|
)
|
|
}
|
|
|
|
export default App
|