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
RevLine 
[d8b6c91]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";
[befb988]9import {notifyIncorrectEmailOrPassword} from "../../utils/toastUtils";
[d8b6c91]10
[4d97b63]11import {GoogleOAuthProvider, GoogleLogin} from "@react-oauth/google";
12
[d8b6c91]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 {
[befb988]31 dispatch(AuthActions.signIn(values.emailLog, values.passwordLog, success => {
32 if(success) {
33 navigate("/")
34 } else {
35 notifyIncorrectEmailOrPassword()
36 }
[d8b6c91]37 }));
38 } catch (err) {
[befb988]39 // console.error(err);
[d8b6c91]40 }
41 }
42
[4d97b63]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
[d8b6c91]62 return (
63
[4d97b63]64 <div className="">
[d8b6c91]65 <div className="container">
[4d97b63]66 <div className="row d-flex flex-column justify-content-center align-items-center">
67 <div className="col-md-8 form-container">
[d8b6c91]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
[19398ad]91 className="btn btn-lg auth-primary-btn text-uppercase fw-bold mb-2"
[d8b6c91]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
[4d97b63]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
[d8b6c91]124 <div className="row">
125 <div className="col-md-6">
[19398ad]126 <Link to="/signup/recruiter" className="btn auth-secondary-btn text-uppercase fw-bold mb-2 w-100">SIGN UP AS RECRUITER</Link>
[d8b6c91]127 </div>
128 <div className="col-md-6">
[19398ad]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>
[d8b6c91]130 </div>
131 </div>
132 </div>
[4d97b63]133
[d8b6c91]134 </div>
135 </div>
136 </div>
137 )
138}
Note: See TracBrowser for help on using the repository browser.