burger-online
122 строки · 3.8 Кб
1import React from 'react'
2import { Route, Routes, useLocation, useNavigate } from 'react-router-dom'
3import IngredientDetails from '../components/ingredient-details/ingredient-details'
4import Modal from '../components/modal/modal'
5import OrderModal from '../components/order-modal/order-modal'
6import { OnlyAuth, OnlyUnAuth } from '../hoc/protected-route'
7import { useAppDispatch } from '../hooks'
8import ErrorPage from '../pages/error-page'
9import FeedOrders from '../pages/feed-orders'
10import ForgotPassword from '../pages/forgot-password'
11import Home from '../pages/home'
12import Ingredient from '../pages/ingredient'
13import Layout from '../pages/layout'
14import Login from '../pages/login'
15import Order from '../pages/order'
16import Profile from '../pages/profile'
17import ProfileOrders from '../pages/profile-orders'
18import ProfileUser from '../pages/profile-user'
19import Register from '../pages/register'
20import ResetPassword from '../pages/reset-password'
21import { fetchIngredients } from '../redux/ingredients/actions'
22import { fetchCheckUser } from '../redux/user/actions'
23
24function App() {
25const navigate = useNavigate()
26const dispatch = useAppDispatch()
27const location = useLocation()
28const background = location.state && location.state.background
29
30React.useEffect(() => {
31dispatch(fetchCheckUser())
32dispatch(fetchIngredients())
33}, [dispatch])
34
35const handleCLoseModal = () => {
36navigate(-1)
37}
38const ingredientModal = (
39<Modal onClose={handleCLoseModal}>
40<IngredientDetails />
41</Modal>
42)
43const orderModal = (
44<Modal onClose={handleCLoseModal}>
45<OrderModal />
46</Modal>
47)
48
49return (
50<>
51<Routes location={background || location}>
52<Route path='/' element={<Layout />}>
53<Route index element={<Home />} />
54<Route path='/ingredients/:id' element={<Ingredient />} />
55<Route path='/feed' element={<FeedOrders />} />
56<Route path='/feed/:number' element={<Order />} />
57<Route path='/profile' element={<OnlyAuth element={<Profile />} />}>
58<Route index element={<OnlyAuth element={<ProfileUser />} />} />
59<Route path='/profile/order' element={<OnlyAuth element={<ProfileOrders />} />} />
60</Route>
61<Route path='/profile/order/:number' element={<OnlyAuth element={<Order />} />} />
62<Route path='/register' element={<OnlyUnAuth element={<Register />} />} />
63<Route path='/login' element={<OnlyUnAuth element={<Login />} />} />
64<Route path='/forgot-password' element={<OnlyUnAuth element={<ForgotPassword />} />} />
65<Route path='/reset-password' element={<OnlyUnAuth element={<ResetPassword />} />} />
66<Route path='/*' element={<ErrorPage />} />
67</Route>
68</Routes>
69{background && (
70<Routes>
71<Route path='/feed/:number' element={orderModal} />
72<Route path='/profile/order/:number' element={orderModal} />
73<Route path='/ingredients/:id' element={ingredientModal} />
74</Routes>
75)}
76</>
77)
78}
79
80export default App
81
82/*
83const router = createBrowserRouter([
84{
85path: '/',
86element: <Layout />,
87errorElement: <ErrorPage />,
88children: [
89{
90path: 'ingredients',
91element: <ProtectedRoute element={<Home />} />,
92children: [
93{
94path: '/ingredients/:id',
95element: <ProtectedRoute element={ingredientModal} />
96}
97]
98},
99{
100path: 'profile',
101element: <ProtectedRoute element={<Profile />} />
102},
103{
104path: 'login',
105element: <Login />
106},
107{
108path: 'register',
109element: <Register />
110},
111{
112path: 'forgot-password',
113element: <ForgotPassword />
114},
115{
116path: 'reset-password',
117element: <ResetPassword />
118}
119]
120}
121])
122*/
123