1
- import { Route , Routes } from "react-router-dom" ;
1
+ import { Route , Routes , useNavigate } from "react-router-dom" ;
2
+ import { useEffect } from "react" ;
2
3
3
4
import RootLayout from "../components/layouts/RootLayout" ;
4
5
import Homepage from "../pages/Homepage" ;
@@ -20,33 +21,64 @@ import Settings from "../dashboard/admin/Settings";
20
21
import Analytics from "../dashboard/admin/Analytics" ;
21
22
import Dashboard from "../dashboard/admin/Dashboard" ;
22
23
import CartManagement from "../pages/CartManagement" ;
24
+ import { setNavigateFunction } from "../redux/api/api" ;
23
25
24
- const AppRoutes = ( ) => (
25
- < Routes >
26
- < Route path = "/" element = { < RootLayout /> } >
27
- < Route index element = { < Homepage /> } />
28
- < Route path = "products" element = { < ProductPage /> } />
29
- < Route path = "products/:id" element = { < ProductDetails /> } />
30
- < Route path = "/carts" element = { < CartManagement /> } />
31
- </ Route >
32
- < Route path = "/password-reset-link" element = { < GetLinkPage /> } />
33
- < Route path = "/reset-password" element = { < ResetPassword /> } />
34
- < Route path = "/register" element = { < RegisterUser /> } />
35
- < Route path = "/login" element = { < Login /> } />
36
- < Route path = "2fa-verify" element = { < OtpVerificationForm /> } />
37
- < Route path = "/dashboard" element = { < SellerDashboard /> } />
38
- < Route path = "/dashboard/addproduct" element = { < AddProduct /> } />
39
- < Route path = "/update-password" element = { < UpdatePasswordPage /> } />
40
- < Route path = "/profile" element = { < UsersProfile /> } />
41
- < Route path = "/profile/update" element = { < UpdateUserProfile /> } />
42
- < Route path = "/dashboard/products" element = { < Products /> } />
43
- < Route path = "/dashboard/products/:id" element = { < AddProduct /> } />
44
- < Route path = "/admin/dashboard" element = { < Dashboard /> } />
45
- < Route path = "/admin/users" element = { < UserManagement /> } />
46
- < Route path = "/admin/settings" element = { < Settings /> } />
47
- < Route path = "/admin/analytics" element = { < Analytics /> } />
48
- < Route path = "/admin/Products" element = { < Products /> } />
49
- </ Routes >
50
- ) ;
26
+ const AppRoutes = ( ) => {
27
+ const navigate = useNavigate ( ) ;
28
+ useEffect ( ( ) => {
29
+ setNavigateFunction ( navigate ) ;
30
+ } , [ navigate ] ) ;
31
+
32
+ const AlreadyLogged = ( { children } ) => {
33
+ const navigate = useNavigate ( ) ;
34
+ const token = localStorage . getItem ( "accessToken" ) ;
35
+ const decodedToken = token ? JSON . parse ( atob ( token ! . split ( "." ) [ 1 ] ) ) : { } ;
36
+ const tokenIsValid = decodedToken . id && decodedToken . roleId ;
37
+ const isSeller = decodedToken . roleId === 2 ;
38
+
39
+ useEffect ( ( ) => {
40
+ if ( tokenIsValid ) {
41
+ isSeller ? navigate ( "/dashboard" ) : navigate ( "/" ) ;
42
+ }
43
+ } , [ tokenIsValid , navigate ] ) ;
44
+
45
+ return tokenIsValid ? null : children ;
46
+ } ;
47
+
48
+ return (
49
+ < Routes >
50
+ < Route path = "/" element = { < RootLayout /> } >
51
+ < Route index element = { < Homepage /> } />
52
+ < Route path = "products" element = { < ProductPage /> } />
53
+ < Route path = "products/:id" element = { < ProductDetails /> } />
54
+ < Route path = "/carts" element = { < CartManagement /> } />
55
+ </ Route >
56
+ < Route path = "/password-reset-link" element = { < GetLinkPage /> } />
57
+ < Route path = "/reset-password" element = { < ResetPassword /> } />
58
+ < Route path = "/register" element = { < RegisterUser /> } />
59
+ < Route
60
+ path = "/login"
61
+ element = { (
62
+ < AlreadyLogged >
63
+ < Login />
64
+ </ AlreadyLogged >
65
+ ) }
66
+ />
67
+ < Route path = "2fa-verify" element = { < OtpVerificationForm /> } />
68
+ < Route path = "/dashboard" element = { < SellerDashboard /> } />
69
+ < Route path = "/dashboard/addproduct" element = { < AddProduct /> } />
70
+ < Route path = "/update-password" element = { < UpdatePasswordPage /> } />
71
+ < Route path = "/profile" element = { < UsersProfile /> } />
72
+ < Route path = "/profile/update" element = { < UpdateUserProfile /> } />
73
+ < Route path = "/dashboard/products" element = { < Products /> } />
74
+ < Route path = "/dashboard/products/:id" element = { < AddProduct /> } />
75
+ < Route path = "/admin/dashboard" element = { < Dashboard /> } />
76
+ < Route path = "/admin/users" element = { < UserManagement /> } />
77
+ < Route path = "/admin/settings" element = { < Settings /> } />
78
+ < Route path = "/admin/analytics" element = { < Analytics /> } />
79
+ < Route path = "/admin/Products" element = { < Products /> } />
80
+ </ Routes >
81
+ ) ;
82
+ } ;
51
83
52
84
export default AppRoutes ;
0 commit comments