ソースを参照

add query login

amenpunk 3 年 前
コミット
ec9f4079f4
共有5 個のファイルを変更した67 個の追加100 個の削除を含む
  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,6 +22,7 @@
22 22
     "react-bootstrap": "^2.0.2",
23 23
     "react-dom": "^17.0.2",
24 24
     "react-hot-toast": "^2.2.0",
25
+    "react-query": "^3.34.12",
25 26
     "react-router": "6.2.1",
26 27
     "react-router-dom": "6.2.1",
27 28
     "react-scripts": "^5.0.0",

+ 13 - 9
src/App.js

@@ -5,8 +5,10 @@ import { createContext } from 'react'
5 5
 import { BrowserRouter as Router } from "react-router-dom";
6 6
 import { Container } from 'react-bootstrap'
7 7
 import { AuthProvider } from './Auth/AuthProvider'
8
+import { QueryClient, QueryClientProvider } from 'react-query'
8 9
 
9 10
 import Routes from './Components/Routes'
11
+const queryClient = new QueryClient()
10 12
 
11 13
 const GATEWAY =  {
12 14
     dev : {
@@ -21,15 +23,17 @@ export const API_GATEWAY = createContext(GATEWAY)
21 23
 
22 24
 function App() {
23 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,6 +1,5 @@
1 1
 import $ from 'jquery'  
2 2
 import { Button, Col , Row } from 'react-bootstrap'
3
-import { HTTP_ } from '../Utils/HTTP'
4 3
 
5 4
 export function Contras() {
6 5
 
@@ -13,12 +12,6 @@ export function Contras() {
13 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 16
     return (
24 17
         <div className="content-section">
@@ -41,7 +34,7 @@ export function Contras() {
41 34
                     
42 35
                     <Row>
43 36
                         <Col>
44
-                            <Button onClick={HTTPV3}>Request tipo 3</Button>
37
+                            <Button >Request tipo 3</Button>
45 38
                         </Col>
46 39
                     </Row>
47 40
 

+ 42 - 14
src/Pages/Login.jsx

@@ -1,10 +1,10 @@
1 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 4
 import { 
6 5
     Paper, Box, Grid, Checkbox, FormControlLabel, Typography,
7
-    TextField, CssBaseline, Button, Avatar
6
+    TextField, CssBaseline, Button, Avatar,
7
+    Backdrop, CircularProgress
8 8
 } from '@mui/material'
9 9
 
10 10
 import { createTheme, ThemeProvider } from '@mui/material/styles';
@@ -18,18 +18,18 @@ import useAuth from '../Auth/useAuth';
18 18
 import { useFormik } from 'formik';
19 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 23
 const LoginSchema = Yup.object().shape({
24 24
     email : Yup
25 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 29
     password : Yup
30 30
     .string()
31 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 35
 const theme = createTheme();
@@ -39,22 +39,40 @@ export function Login() {
39 39
     let auth = useAuth();
40 40
     let navigate = useNavigate()
41 41
 
42
+    const [open, setOpen] = React.useState(false);
43
+    const handleClose = () => {
44
+        setOpen(false);
45
+    };
46
+
42 47
     const formik = useFormik({
43 48
         initialValues: {
44 49
             email: '',
45 50
             password: '',
46 51
         },
47 52
         validationSchema: LoginSchema,
48
-        onSubmit: (values) => {
53
+        onSubmit: async (values) => {
49 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 74
             // toast.success('Bienvenido!!')
55
-            // toast.error("This didn't work.")
56 75
             // return navigate('/dashboard/home')
57
-            auth.login(values)
58 76
         },
59 77
     });
60 78
 
@@ -84,6 +102,7 @@ export function Login() {
84 102
                     }}
85 103
                 />
86 104
                 <Grid item xs={12} sm={8} md={5} component={Paper} elevation={6} square>
105
+
87 106
                     <Box
88 107
                         sx={{
89 108
                             my: 8,
@@ -168,6 +187,15 @@ export function Login() {
168 187
                 position="top-left"
169 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 198
         </ThemeProvider>
199
+
172 200
     );
173 201
 }

+ 10 - 69
src/Utils/HTTP.js

@@ -1,78 +1,19 @@
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 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