Browse Source

[REF] custom private route

amenpunk 3 years ago
parent
commit
0a181b31c9
7 changed files with 39411 additions and 60 deletions
  1. 39345 0
      package-lock.json
  2. 2 1
      package.json
  3. 1 1
      src/Auth/AuthProvider.js
  4. 1 1
      src/Components/Candidatos.js
  5. 46 29
      src/Components/Routes.js
  6. 13 25
      src/Components/listItems.js
  7. 3 3
      src/Pages/404.jsx

File diff suppressed because it is too large
+ 39345 - 0
package-lock.json


+ 2 - 1
package.json

20
     "react": "^17.0.2",
20
     "react": "^17.0.2",
21
     "react-bootstrap": "^2.0.2",
21
     "react-bootstrap": "^2.0.2",
22
     "react-dom": "^17.0.2",
22
     "react-dom": "^17.0.2",
23
-    "react-router-dom": "^6.0.2",
23
+    "react-router": "6.2.1",
24
+    "react-router-dom": "6.2.1",
24
     "react-scripts": "4.0.3",
25
     "react-scripts": "4.0.3",
25
     "web-vitals": "^1.0.1",
26
     "web-vitals": "^1.0.1",
26
     "yup": "^0.32.11"
27
     "yup": "^0.32.11"

+ 1 - 1
src/Auth/AuthProvider.js

1
 import React from 'react'
1
 import React from 'react'
2
 import Cookies from 'js-cookie'
2
 import Cookies from 'js-cookie'
3
 
3
 
4
-export const AuthContext = React.createContext();
4
+export const AuthContext = React.createContext(null);
5
 
5
 
6
 export function AuthProvider ({ children }){
6
 export function AuthProvider ({ children }){
7
 
7
 

+ 1 - 1
src/Components/Candidatos.js

23
 
23
 
24
     const [page, setPage] = useState(1);
24
     const [page, setPage] = useState(1);
25
     const handleChange = ( _ , value) => {
25
     const handleChange = ( _ , value) => {
26
-        console.log("INDEX => ", value)
26
+        console.log("INDEX => ", _ ,value)
27
         setPage(value);
27
         setPage(value);
28
     };
28
     };
29
 
29
 

+ 46 - 29
src/Components/Routes.js

1
 import React, {useEffect} from 'react'
1
 import React, {useEffect} from 'react'
2
-import { Routes, Route, Navigate, useNavigate } from "react-router-dom";
2
+import { Routes, Route, Navigate, useNavigate, useLocation } from "react-router-dom";
3
 
3
 
4
 import { Dashboard } from "./Dashboard";
4
 import { Dashboard } from "./Dashboard";
5
 import { Login } from '../Pages/Login'
5
 import { Login } from '../Pages/Login'
18
 
18
 
19
 import useAuth from '../Auth/useAuth'
19
 import useAuth from '../Auth/useAuth'
20
 
20
 
21
+export function RequireAuth({ children }) {
22
+    let auth = useAuth();
23
+    let location = useLocation();
24
+
25
+    console.log('requier auth >> ', auth)
26
+
27
+
28
+    if (!auth.isLogged()) {
29
+        // Redirect them to the /login page, but save the current location they were
30
+        // trying to go to when they were redirected. This allows us to send them
31
+        // along to that page after they login, which is a nicer user experience
32
+        // than dropping them off on the home page.
33
+        return <Navigate to="/login" state={{ from: location }} replace />;
34
+    }
35
+
36
+    return children;
37
+}
38
+
39
+
21
 export default function MyRoutes () {
40
 export default function MyRoutes () {
22
 
41
 
23
     let auth = useAuth();
42
     let auth = useAuth();
24
     let navigate = useNavigate()
43
     let navigate = useNavigate()
25
 
44
 
26
     useEffect(() => {
45
     useEffect(() => {
27
-        if(!auth.isLogged(0)){
46
+        console.log('usse fec check user')
28
-            return navigate('/')
47
+        if(!auth.isLogged()){
48
+            return navigate('login')
49
+        }else{
50
+            return navigate('dashboard/home')
29
         }
51
         }
30
     },[auth,navigate])
52
     },[auth,navigate])
31
-    
32
 
53
 
33
     return(
54
     return(
34
         <Routes>
55
         <Routes>
35
-
56
+            <Route path="/login" element={<Login/>} />
36
-            <Route path="/" element={auth.isLogged() ? <Navigate to='dashboard/home'/> : <Login/>}/>
57
+            <Route 
37
-
58
+                path="dashboard" 
38
-            {
59
+                element={
39
-                auth.isLogged() ? 
60
+                    <RequireAuth>
40
-                    (
61
+                        <Dashboard/>
41
-                        <Route path="dashboard" element={<Dashboard/>}>
62
+                    </RequireAuth>
42
-                            <Route path="home" element={<Home/>} />
63
+                }
43
-                            <Route path="puestos" element={<Puestos/>} />
64
+            >
44
-                            <Route path="perfil" element={<Profile/>} />
65
+                <Route path="home" element={<Home/>} />
45
-                            <Route path="contrasenas" element={<Contras/>} />
66
+                <Route path="puestos" element={<Puestos/>} />
46
-                            <Route path="expedientes" element={<Expedientes/>} />
67
+                <Route path="perfil" element={<Profile/>} />
47
-                            <Route path="resultados" element={<Resultados/>} />
68
+                <Route path="contrasenas" element={<Contras/>} />
48
-                            <Route path="configuraciones" element={<Configuracion/>} />
69
+                <Route path="expedientes" element={<Expedientes/>} />
49
-                            <Route path="historial" element={<Historial/>} />
70
+                <Route path="resultados" element={<Resultados/>} />
50
-                            <Route path="pruebas/listar" element={<Pruebas/>} />
71
+                <Route path="configuraciones" element={<Configuracion/>} />
51
-                            <Route path="pruebas/crear" element={<PruebaNueva/>} />
72
+                <Route path="historial" element={<Historial/>} />
52
-                            <Route path="pruebas/aplicar" element={<PruebaAsignar/>} />
73
+                <Route path="pruebas/listar" element={<Pruebas/>} />
53
-                        </Route>
74
+                <Route path="pruebas/crear" element={<PruebaNueva/>} />
54
-                    )
75
+                <Route path="pruebas/aplicar" element={<PruebaAsignar/>} />
55
-                : ( <Route path="dashboard" element={<Navigate to='/'/>} />)
76
+            </Route>
56
-            }
57
-
58
-
59
-
60
             <Route path="*" element={<NotFound/>}/>
77
             <Route path="*" element={<NotFound/>}/>
61
 
78
 
62
         </Routes>
79
         </Routes>

+ 13 - 25
src/Components/listItems.js

26
 import ExpandLess from '@mui/icons-material/ExpandLess';
26
 import ExpandLess from '@mui/icons-material/ExpandLess';
27
 import ExpandMore from '@mui/icons-material/ExpandMore';
27
 import ExpandMore from '@mui/icons-material/ExpandMore';
28
 import { useNavigate } from 'react-router-dom'
28
 import { useNavigate } from 'react-router-dom'
29
-import useAuth from '../Auth/useAuth'
29
+
30
-    
31
 const SubMenuList = [5,6,7,8,9]
30
 const SubMenuList = [5,6,7,8,9]
32
 
31
 
33
 function SubMenuItem (props) {
32
 function SubMenuItem (props) {
66
 function Item (props) {
65
 function Item (props) {
67
 
66
 
68
     let navigate = useNavigate()
67
     let navigate = useNavigate()
69
-    let auth = useAuth()
70
 
68
 
71
     function change (event){
69
     function change (event){
70
+        console.log('change >>> ', props)
72
         props.change(event, props.index)
71
         props.change(event, props.index)
73
-        // console.log('is logged', auth.isLogged())
74
-
75
-        if(!auth.isLogged()){
76
-            return navigate('/')
77
-        }
78
-
79
         navigate(props.route)
72
         navigate(props.route)
80
     } 
73
     } 
81
 
74
 
82
     let isOn = props.selected === props.index
75
     let isOn = props.selected === props.index
83
 
76
 
84
-    //.css-10oikv1-MuiButtonBase-root-MuiListItem-root.Mui-selected
85
     return(
77
     return(
86
         <ListItem
78
         <ListItem
87
             sx={{ color : '#25344f'}}
79
             sx={{ color : '#25344f'}}
88
             selected={isOn}
80
             selected={isOn}
89
             onClick={change} 
81
             onClick={change} 
90
             button
82
             button
91
-            >
83
+        >
92
             <ListItemIcon>
84
             <ListItemIcon>
93
                 {props.icon}
85
                 {props.icon}
94
             </ListItemIcon>
86
             </ListItemIcon>
125
 
117
 
126
         if( SubMenuList.includes(selectedIndex) && !open ){
118
         if( SubMenuList.includes(selectedIndex) && !open ){
127
             if(props.AppBarVisible){
119
             if(props.AppBarVisible){
128
-                console.log('yes show')
129
                 return setOpen(false)
120
                 return setOpen(false)
130
             }else{
121
             }else{
131
-                console.log('not show')
132
                 return setOpen(true)
122
                 return setOpen(true)
133
             }
123
             }
134
         }
124
         }
136
         if( !SubMenuList.includes(selectedIndex) && !props.AppBarVisible ){
126
         if( !SubMenuList.includes(selectedIndex) && !props.AppBarVisible ){
137
             return setOpen(false)
127
             return setOpen(false)
138
         }
128
         }
139
-        
129
+
140
 
130
 
141
     }, [props, selectedIndex, open])
131
     }, [props, selectedIndex, open])
142
 
132
 
155
             <Item icon={<VisibilityOffIcon/>} selected={selectedIndex}  change={handleListItemClick} index={2} title="Contraseñas" route="contrasenas" />
145
             <Item icon={<VisibilityOffIcon/>} selected={selectedIndex}  change={handleListItemClick} index={2} title="Contraseñas" route="contrasenas" />
156
             <Item icon={<PeopleAltIcon/>} selected={selectedIndex}  change={handleListItemClick} index={3} title="Expedientes" route="expedientes" />
146
             <Item icon={<PeopleAltIcon/>} selected={selectedIndex}  change={handleListItemClick} index={3} title="Expedientes" route="expedientes" />
157
             <Item icon={<EqualizerIcon/>} selected={selectedIndex}  change={handleListItemClick} index={4} title="Resultados" route="resultados" />
147
             <Item icon={<EqualizerIcon/>} selected={selectedIndex}  change={handleListItemClick} index={4} title="Resultados" route="resultados" />
158
-            {/* <Item icon={<FingerprintIcon/>} selected={selectedIndex}  change={handleListItemClick} index={5} title="Pruebas" route="/pruebas" /> */}
159
 
148
 
160
-           <ListItem selected={ SubMenuList.includes(selectedIndex) } onClick={showPruebas}>
149
+            <ListItem selected={ SubMenuList.includes(selectedIndex) } onClick={showPruebas}>
161
-           {/* <ListItem selected={  SubMenuIndex.includes(selectedIndex) && !open } onClick={showPruebas}> */}
162
                 <ListItemIcon>
150
                 <ListItemIcon>
163
                     <FingerprintIcon />
151
                     <FingerprintIcon />
164
                 </ListItemIcon>
152
                 </ListItemIcon>
165
 
153
 
166
 
154
 
167
                 <ListItemText 
155
                 <ListItemText 
168
-                sx={{
156
+                    sx={{
169
-                    fontSize: 12,
157
+                        fontSize: 12,
170
-                    ' .css-10hburv-MuiTypography-root' : {
158
+                        ' .css-10hburv-MuiTypography-root' : {
171
-                        fontSize : '.875rem'
159
+                            fontSize : '.875rem'
172
-                    },
160
+                        },
173
-                }}
161
+                    }}
174
-                primary="Pruebas" 
162
+                    primary="Pruebas" 
175
                 />
163
                 />
176
                 {open ? <ExpandLess /> : <ExpandMore />}
164
                 {open ? <ExpandLess /> : <ExpandMore />}
177
             </ListItem>
165
             </ListItem>
179
 
167
 
180
             <Collapse in={open} timeout="auto" unmountOnExit>
168
             <Collapse in={open} timeout="auto" unmountOnExit>
181
                 <List component="div" disablePadding>
169
                 <List component="div" disablePadding>
182
-                        
170
+
183
                     <SubMenuItem route="pruebas/crear" selected={selectedIndex} index={5} change={handleListItemClick} title="Crear Prueba" />
171
                     <SubMenuItem route="pruebas/crear" selected={selectedIndex} index={5} change={handleListItemClick} title="Crear Prueba" />
184
                     <SubMenuItem route="pruebas/listar" change={handleListItemClick} selected={selectedIndex} index={6} title="Listado de pruebas" />
172
                     <SubMenuItem route="pruebas/listar" change={handleListItemClick} selected={selectedIndex} index={6} title="Listado de pruebas" />
185
                     <SubMenuItem route="pruebas/aplicar"  selected={selectedIndex} index={7} change={handleListItemClick} title="Aplicar" />
173
                     <SubMenuItem route="pruebas/aplicar"  selected={selectedIndex} index={7} change={handleListItemClick} title="Aplicar" />

+ 3 - 3
src/Pages/404.jsx

2
 
2
 
3
 export function NotFound() {
3
 export function NotFound() {
4
     return(
4
     return(
5
-        <section class="error_page">
5
+        <section className="error_page">
6
-            <div class="page_notfound">
6
+            <div className="page_notfound">
7
-                <Row class="row">
7
+                <Row className="row">
8
                     <Col md="12">
8
                     <Col md="12">
9
                         <h1>404</h1>
9
                         <h1>404</h1>
10
                         <h3>Upss!.. Algo salió mal</h3>
10
                         <h3>Upss!.. Algo salió mal</h3>