1
- // import React from 'react';
2
- // import { useNavigate } from 'react-router-dom';
3
- // import { Button, Container, Row, Col } from 'react-bootstrap';
4
-
5
- // function Login() {
6
- // const navigate = useNavigate();
7
-
8
- // const goToSignUp = () => {
9
- // navigate('/signup'); // Redirects to the sign-up page
10
- // };
11
-
12
- // return (
13
- // <Container className="d-flex align-items-center justify-content-center" style={{ height: '100vh' }}>
14
- // <Row>
15
- // <Col md={6} className="text-center">
16
- // <h2>Login Page</h2>
17
- // <p>If you don't have an account, click the button below to sign up!</p>
18
- // <Button variant="primary" onClick={goToSignUp}>
19
- // Go to Sign Up
20
- // </Button>
21
- // </Col>
22
- // </Row>
23
- // </Container>
24
- // );
25
- // }
26
-
27
- // export default Login;
28
-
29
1
import React , { useState } from 'react' ;
30
- import { Link } from 'react-router-dom' ; // Import Link for navigation
2
+ import { Link , useNavigate } from 'react-router-dom' ; // Import Link for navigation
31
3
import '../../css/Login.css' ; // Import the CSS for styling
32
4
import InputField from './InputField' ;
5
+ import userService from '../../services/users' ;
33
6
34
7
const Login = ( ) => {
35
8
const [ email , setEmail ] = useState ( '' ) ;
36
9
const [ password , setPassword ] = useState ( '' ) ;
10
+ const [ error , setError ] = useState ( '' ) ;
11
+ const [ emailError , setEmailError ] = useState ( false ) ;
12
+ const [ passwordError , setPasswordError ] = useState ( false ) ;
13
+ const navigate = useNavigate ( ) ;
37
14
38
15
const handleLogin = ( e ) => {
39
16
e . preventDefault ( ) ;
40
- // Add your login logic here
17
+
18
+ const userCredentials = { email, password} ;
41
19
console . log ( 'Logging in with:' , { email, password } ) ;
20
+
21
+ // call the login user API
22
+ userService . loginUser ( userCredentials )
23
+ . then ( result => {
24
+ // navigate to home page if successful
25
+ console . log ( result ) ;
26
+ navigate ( '/home' )
27
+ } )
28
+ . catch ( e => {
29
+ // handle errors here
30
+ if ( e . response ) {
31
+ switch ( e . response . status ) {
32
+ case 400 :
33
+ setError ( e . response . data . message ) ; // Missing email and/or password
34
+ setEmailError ( true ) ;
35
+ setPasswordError ( true ) ;
36
+ break ;
37
+ case 401 :
38
+ setError ( e . response . data . message ) ; // Wrong email and/or password
39
+ setEmailError ( true ) ;
40
+ setPasswordError ( true ) ;
41
+ break ;
42
+ case 500 :
43
+ setError ( e . response . data . message ) ; // Database or server error
44
+ break ;
45
+ default :
46
+ setError ( "An unexpected error occurred." ) ;
47
+ break ;
48
+ }
49
+ } else {
50
+ setError ( "Network error. Please check your connection." ) ;
51
+ }
52
+ } )
42
53
} ;
43
54
44
55
return (
@@ -51,14 +62,36 @@ const Login = () => {
51
62
< div className = "input-container" >
52
63
< form onSubmit = { handleLogin } >
53
64
< div >
54
- < InputField label = "Email" type = "email" placeholder = "Enter your email" />
55
- < InputField label = "Password" type = "password" placeholder = "Enter your password" />
65
+ < InputField
66
+ label = "Email"
67
+ type = "email"
68
+ placeholder = "Enter your email"
69
+ onChange = { ( e ) => {
70
+ setEmail ( e . target . value )
71
+ setEmailError ( false ) ;
72
+ } }
73
+ error = { emailError }
74
+ required
75
+ />
76
+ < InputField label = "Password"
77
+ type = "password"
78
+ placeholder = "Enter your password"
79
+ onChange = { ( e ) => {
80
+ setPassword ( e . target . value )
81
+ setPasswordError ( false )
82
+ } }
83
+ error = { passwordError }
84
+ required
85
+ />
56
86
</ div >
57
87
< div className = "button-container" >
58
88
< Link to = "/signup" className = "create-account-link" > Create Account</ Link >
59
89
< button type = "submit" className = "login-button" > Sign In</ button >
60
90
</ div >
61
91
</ form >
92
+ < div className = 'notification' >
93
+ { error && < p className = "text-danger mt-3" > { error } </ p > }
94
+ </ div >
62
95
</ div >
63
96
</ div >
64
97
</ div >
0 commit comments