Browse Source

add query login

amenpunk 3 years ago
parent
commit
ec9f4079f4
5 changed files with 67 additions and 100 deletions
  1. 1 0
      package.json
  2. 13 9
      src/App.js
  3. 1 8
      src/Pages/Contras.jsx
  4. 42 14
      src/Pages/Login.jsx
  5. 10 69
      src/Utils/HTTP.js

+ 1 - 0
package.json

22
     "react-bootstrap": "^2.0.2",
22
     "react-bootstrap": "^2.0.2",
23
     "react-dom": "^17.0.2",
23
     "react-dom": "^17.0.2",
24
     "react-hot-toast": "^2.2.0",
24
     "react-hot-toast": "^2.2.0",
25
+    "react-query": "^3.34.12",
25
     "react-router": "6.2.1",
26
     "react-router": "6.2.1",
26
     "react-router-dom": "6.2.1",
27
     "react-router-dom": "6.2.1",
27
     "react-scripts": "^5.0.0",
28
     "react-scripts": "^5.0.0",

+ 13 - 9
src/App.js

5
 import { BrowserRouter as Router } from "react-router-dom";
5
 import { BrowserRouter as Router } from "react-router-dom";
6
 import { Container } from 'react-bootstrap'
6
 import { Container } from 'react-bootstrap'
7
 import { AuthProvider } from './Auth/AuthProvider'
7
 import { AuthProvider } from './Auth/AuthProvider'
8
+import { QueryClient, QueryClientProvider } from 'react-query'
8
 
9
 
9
 import Routes from './Components/Routes'
10
 import Routes from './Components/Routes'
11
+const queryClient = new QueryClient()
10
 
12
 
11
 const GATEWAY =  {
13
 const GATEWAY =  {
12
     dev : {
14
     dev : {
21
 
23
 
22
 function App() {
24
 function App() {
23
     return (
25
     return (
24
-        <Router>
25
-            <AuthProvider>
26
-                <API_GATEWAY.Provider value={GATEWAY.dev}>
27
-                    <Container fluid>
28
-                        <Routes/>
29
-                    </Container>
30
-                </API_GATEWAY.Provider>
31
-            </AuthProvider>
32
-        </Router>
26
+        <QueryClientProvider client={queryClient}>
27
+            <Router>
28
+                <AuthProvider>
29
+                    <API_GATEWAY.Provider value={GATEWAY.dev}>
30
+                        <Container fluid>
31
+                            <Routes/>
32
+                        </Container>
33
+                    </API_GATEWAY.Provider>
34
+                </AuthProvider>
35
+            </Router>
36
+        </QueryClientProvider>
33
     );
37
     );
34
 }
38
 }
35
 
39
 

+ 1 - 8
src/Pages/Contras.jsx

1
 import $ from 'jquery'  
1
 import $ from 'jquery'  
2
 import { Button, Col , Row } from 'react-bootstrap'
2
 import { Button, Col , Row } from 'react-bootstrap'
3
-import { HTTP_ } from '../Utils/HTTP'
4
 
3
 
5
 export function Contras() {
4
 export function Contras() {
6
 
5
 
13
         await fetch('http://psicoadmin.ditca.org:8081/user?user=patrik&password=12345', { method : 'POST' });
12
         await fetch('http://psicoadmin.ditca.org:8081/user?user=patrik&password=12345', { method : 'POST' });
14
     }
13
     }
15
 
14
 
16
-    const HTTPV3  =  async () => {
17
-        let htp = new HTTP_()
18
-        await htp.get_()
19
-    }
20
-
21
-
22
 
15
 
23
     return (
16
     return (
24
         <div className="content-section">
17
         <div className="content-section">
41
                     
34
                     
42
                     <Row>
35
                     <Row>
43
                         <Col>
36
                         <Col>
44
-                            <Button onClick={HTTPV3}>Request tipo 3</Button>
37
+                            <Button >Request tipo 3</Button>
45
                         </Col>
38
                         </Col>
46
                     </Row>
39
                     </Row>
47
 
40
 

+ 42 - 14
src/Pages/Login.jsx

1
 import * as React from 'react';
1
 import * as React from 'react';
2
-// import toast, { Toaster } from 'react-hot-toast';
3
-import { Toaster } from 'react-hot-toast';
2
+import toast, { Toaster } from 'react-hot-toast';
4
 
3
 
5
 import { 
4
 import { 
6
     Paper, Box, Grid, Checkbox, FormControlLabel, Typography,
5
     Paper, Box, Grid, Checkbox, FormControlLabel, Typography,
7
-    TextField, CssBaseline, Button, Avatar
6
+    TextField, CssBaseline, Button, Avatar,
7
+    Backdrop, CircularProgress
8
 } from '@mui/material'
8
 } from '@mui/material'
9
 
9
 
10
 import { createTheme, ThemeProvider } from '@mui/material/styles';
10
 import { createTheme, ThemeProvider } from '@mui/material/styles';
18
 import { useFormik } from 'formik';
18
 import { useFormik } from 'formik';
19
 import * as Yup from 'yup';
19
 import * as Yup from 'yup';
20
 
20
 
21
-import { HTTP_ } from '../Utils/HTTP.js'
21
+import { Service } from '../Utils/HTTP.js'
22
 
22
 
23
 const LoginSchema = Yup.object().shape({
23
 const LoginSchema = Yup.object().shape({
24
     email : Yup
24
     email : Yup
25
     .string()
25
     .string()
26
-    .email('El correo debe ser válido')
27
-    .required('El correo es requerido'),
26
+    // .email('El correo debe ser válido')
27
+    .required('El correo o usuario es requerido'),
28
 
28
 
29
     password : Yup
29
     password : Yup
30
     .string()
30
     .string()
31
     .required('El campo contraseña es requerido')
31
     .required('El campo contraseña es requerido')
32
-    .min(6, 'La contraseña debe contener mínimo 6 caracteres')
32
+    .min(5, 'La contraseña debe contener mínimo 5 caracteres')
33
 })
33
 })
34
 
34
 
35
 const theme = createTheme();
35
 const theme = createTheme();
39
     let auth = useAuth();
39
     let auth = useAuth();
40
     let navigate = useNavigate()
40
     let navigate = useNavigate()
41
 
41
 
42
+    const [open, setOpen] = React.useState(false);
43
+    const handleClose = () => {
44
+        setOpen(false);
45
+    };
46
+
42
     const formik = useFormik({
47
     const formik = useFormik({
43
         initialValues: {
48
         initialValues: {
44
             email: '',
49
             email: '',
45
             password: '',
50
             password: '',
46
         },
51
         },
47
         validationSchema: LoginSchema,
52
         validationSchema: LoginSchema,
48
-        onSubmit: (values) => {
53
+        onSubmit: async (values) => {
49
             let { email, password } = values
54
             let { email, password } = values
50
-            console.log(email,password);
51
-            // let request = new HTTP('/user?' + `user=${email}&password=${password}`)
52
-            let request = new HTTP_()
53
-            request.get_()
55
+            setOpen(true)
56
+
57
+            let request = new Service(`/user?user=${email}&password=${password}`)
58
+            request
59
+                .post({})
60
+                .then( () => {
61
+                    toast.success('Bienvenido!!')
62
+
63
+                    setTimeout( () => {
64
+                        setOpen(false)
65
+                        auth.login(values)
66
+                    }, 2000)
67
+                }) 
68
+                .catch( err => {
69
+                        setOpen(false)
70
+                    toast.error("Ups! usuario o contraseña incorrectos")
71
+                    console.log("ERROR ", err)
72
+                })
73
+
54
             // toast.success('Bienvenido!!')
74
             // toast.success('Bienvenido!!')
55
-            // toast.error("This didn't work.")
56
             // return navigate('/dashboard/home')
75
             // return navigate('/dashboard/home')
57
-            auth.login(values)
58
         },
76
         },
59
     });
77
     });
60
 
78
 
84
                     }}
102
                     }}
85
                 />
103
                 />
86
                 <Grid item xs={12} sm={8} md={5} component={Paper} elevation={6} square>
104
                 <Grid item xs={12} sm={8} md={5} component={Paper} elevation={6} square>
105
+
87
                     <Box
106
                     <Box
88
                         sx={{
107
                         sx={{
89
                             my: 8,
108
                             my: 8,
168
                 position="top-left"
187
                 position="top-left"
169
                 reverseOrder={false}
188
                 reverseOrder={false}
170
             />
189
             />
190
+            <Backdrop
191
+                sx={{ color: '#fd4b4b', zIndex: (theme) => theme.zIndex.drawer + 1 }}
192
+                open={open}
193
+                onClick={handleClose}
194
+            >
195
+                <CircularProgress color="inherit" />
196
+            </Backdrop>
197
+
171
         </ThemeProvider>
198
         </ThemeProvider>
199
+
172
     );
200
     );
173
 }
201
 }

+ 10 - 69
src/Utils/HTTP.js

1
-// import axios from 'axios';
2
-import $ from "jquery" 
1
+export class Service {
3
 
2
 
4
-export class HTTP_ {
5
-
6
-    constructor(url){
7
-        this.base_url = 'http://204.48.25.93:8081/users'; 
8
-        this.url =  this.base_url + url
3
+    constructor(path){
4
+        this.base_url = 'http://psicoadmin.ditca.org:8081'
5
+        this.url =  this.base_url + path
9
         // this.api =  'http://204.48.25.93:8081/user?user=patrik&password=12345'
6
         // this.api =  'http://204.48.25.93:8081/user?user=patrik&password=12345'
10
-        this.api =  'http://psicoadmin.ditca.org:8081/user?user=patrik&password=12345'
7
+        // this.api =  'http://psicoadmin.ditca.org:8081/user?user=patrik&password=12345'
11
     }
8
     }
12
 
9
 
13
-    async post(){
14
-        try{ 
15
-
16
-            let request = fetch(this.api, {
17
-                method: 'POST', 
18
-                mode: 'cors',
19
-                // cache: 'no-cache',
20
-                headers: {
21
-                    "Cache-Control": "no-cache, no-store, max-age=0, must-revalidate",
22
-                    "Connection": "keep-alive",
23
-                    "Content-Type": "application/json",
24
-                    "Date": new Date().toUTCString(),
25
-                    "Expires": 0,
26
-                    "Keep-Alive": "timeout=60",
27
-                    "Pragma": "no-cache",
28
-                    "Transfer-Encoding": "chunked",
29
-                    "Vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers",
30
-                    "X-Content-Type-Options": "nosniff",
31
-                    "X-Frame-Options": "DENY",
32
-                    "X-XSS-Protection": 1
33
-                },
34
-                // body: body
35
-            });
36
-
37
-            // let response = await request.json();
38
-            console.log(await request)
39
-
40
-        }catch(error)    {
41
-            console.log(error)
42
-            return {  status : 0, message  :  error.message }
43
-        }
44
-    }
45
-
46
-    async get_() {
47
-
48
-        // POST request using fetch with async/await
49
-        const requestOptions = {
50
-            method: 'POST',
51
-            headers : new Headers( {
52
-                'Content-Type': 'application/json', 
53
-                'Access-Control-Allow-Origin': '*',
54
-                'Access-Control-Request-Method' : 'POST',
55
-            } ),
56
-            // body: JSON.stringify({ title: 'React POST Request Example' })
57
-        }
58
-
59
-        let response = await fetch(this.api, requestOptions);
60
-        // const data = 
61
-        console.log(response)
62
-        // this.setState({ postId: data.id });
63
-    }
64
-
65
-
66
-    async get(){
67
-        $.ajax(this.url, {
68
-            contentType : 'application/json',
69
-            type : 'POST',
70
-            onSucces :  (res) => console.log(res),
71
-            onError :  (err) => console.log(err),
10
+    async post(body){
11
+        let response = await fetch(this.url, {
12
+            method: "POST",
13
+            data : body
72
         })
14
         })
15
+        return await response.json(); 
73
     }
16
     }
74
 
17
 
75
-
76
-
77
 }
18
 }
78
 
19