source: jobvista-frontend/src/views/auth/SignInForm.js@ 4d97b63

main
Last change on this file since 4d97b63 was 4d97b63, checked in by 223021 <daniel.ilievski.2@…>, 4 weeks ago

Implemented Google login, additional file uploads, response messages and email notifications

  • Property mode set to 100644
File size: 5.7 KB
Line 
1import {Link} from "react-router-dom";
2import "./auth.css"
3import {useDispatch} from "react-redux";
4import {useNavigate} from "react-router";
5import * as yup from "yup";
6import {useForm} from "react-hook-form";
7import {yupResolver} from "@hookform/resolvers/yup";
8import {AuthActions} from "../../redux/actions/authActions";
9import {notifyIncorrectEmailOrPassword} from "../../utils/toastUtils";
10
11import {GoogleOAuthProvider, GoogleLogin} from "@react-oauth/google";
12
13export const SignInForm = () => {
14
15 const dispatch = useDispatch();
16 const navigate = useNavigate()
17
18 const schema = yup.object().shape({
19
20 emailLog: yup.string().required("Email is required.").email("Email is not valid."),
21 passwordLog: yup.string().min(3, "Password must be at least 6 characters.").required("Password is required."),
22
23 });
24
25 const {register, handleSubmit, formState: {errors}} = useForm({
26 resolver: yupResolver(schema),
27 });
28
29 const signIn = async (values) => {
30 try {
31 dispatch(AuthActions.signIn(values.emailLog, values.passwordLog, success => {
32 if(success) {
33 navigate("/")
34 } else {
35 notifyIncorrectEmailOrPassword()
36 }
37 }));
38 } catch (err) {
39 // console.error(err);
40 }
41 }
42
43 const handleGoogleSuccess = (response) => {
44 const tokenId = response.credential;
45
46 dispatch(AuthActions.signInGoogle(tokenId, (success, error) => {
47 if (success) {
48 console.log("User signed in successfully");
49 if(success) {
50 navigate("/")
51 }
52 } else {
53 console.error("Google sign-in failed", error);
54 }
55 }));
56 };
57
58 const handleGoogleFailure = (error) => {
59 console.error(error);
60 };
61
62 return (
63
64 <div className="">
65 <div className="container">
66 <div className="row d-flex flex-column justify-content-center align-items-center">
67 <div className="col-md-8 form-container">
68 <h3 className="login-heading mb-4">Sign in</h3>
69 <form onSubmit={handleSubmit(signIn)}>
70 <div className="form-floating mb-3">
71 <input type="email" className="form-control" {...register("emailLog")}
72 placeholder="name@example.com"/>
73 <label htmlFor="floatingEmail">Email address</label>
74 </div>
75 <div className="form-floating mb-3">
76 <input type="password" className="form-control" {...register("passwordLog")}
77 placeholder="Password"/>
78 <label htmlFor="floatingPassword">Password</label>
79 </div>
80
81 <div className="form-check mb-3">
82 <input className="form-check-input" type="checkbox" value=""
83 id="rememberPasswordCheck"/>
84 <label className="form-check-label" htmlFor="rememberPasswordCheck">
85 Remember password
86 </label>
87 </div>
88
89 <div className="d-grid mb-3">
90 <button
91 className="btn btn-lg auth-primary-btn text-uppercase fw-bold mb-2"
92 type="submit">Sign in
93 </button>
94 {/*<div className="text-center">*/}
95 {/* <a className="small" href="#">Forgot password?</a>*/}
96 {/*</div>*/}
97 </div>
98 </form>
99
100 <div className="or-thing">
101 <span>or</span>
102 </div>
103
104 <div className="row">
105 <GoogleOAuthProvider clientId={process.env.REACT_APP_GOOGLE_CLIENT_ID}>
106 <GoogleLogin
107 onSuccess={handleGoogleSuccess}
108 onError={handleGoogleFailure}
109 type={"standard"}
110 text={"signin_with"}
111 locale={"en"}
112 redirectUri="http://localhost:3000/login/oauth2/code/google"
113 />
114 </GoogleOAuthProvider>
115 </div>
116 <br/>
117 </div>
118
119 <div className="col-md-8 mt-5 form-container">
120 <div>
121 <h5 className="mb-3">Don't have an account?</h5>
122 </div>
123
124 <div className="row">
125 <div className="col-md-6">
126 <Link to="/signup/recruiter" className="btn auth-secondary-btn text-uppercase fw-bold mb-2 w-100">SIGN UP AS RECRUITER</Link>
127 </div>
128 <div className="col-md-6">
129 <Link to="/signup/job-seeker" className="btn auth-secondary-btn text-uppercase fw-bold mb-2 w-100">SIGN UP AS JOB SEEKER</Link>
130 </div>
131 </div>
132 </div>
133
134 </div>
135 </div>
136 </div>
137 )
138}
Note: See TracBrowser for help on using the repository browser.