source: frontend/src/screens/SigninScreen.js@ 55ed171

Last change on this file since 55ed171 was 55ed171, checked in by Nace Gjorgjievski <nace.gorgievski123@…>, 21 months ago

Full Admin Functionality Added

  • Property mode set to 100644
File size: 2.7 KB
Line 
1import Axios from "axios";
2import Container from "react-bootstrap/Container";
3import Form from "react-bootstrap/Form";
4import { Helmet } from "react-helmet-async";
5import Button from "react-bootstrap/Button";
6import "../styles/SigninScreen.css";
7import React, { useContext, useEffect, useState } from "react";
8import { Link, useLocation, useNavigate } from "react-router-dom";
9import { Store } from "../Store";
10import { toast } from "react-toastify";
11import { getError } from "../components/utils";
12
13function SigninScreen() {
14 const navigate = useNavigate();
15 const { search } = useLocation();
16 const redirectInUrl = new URLSearchParams(search).get("redirect");
17 const redirect = redirectInUrl ? redirectInUrl : "/";
18
19 const [email, setEmail] = useState("");
20 const [password, setPassword] = useState("");
21
22 const { state, dispatch: ctxDispatch } = useContext(Store);
23 const { userInfo } = state;
24
25 const submitHandler = async (e) => {
26 e.preventDefault();
27 try {
28 const { data } = await Axios.post("/api/users/signin", {
29 email,
30 password,
31 });
32 ctxDispatch({ type: "USER_SIGNIN", payload: data });
33 localStorage.setItem("userInfo", JSON.stringify(data));
34 if (data.isAdmin) navigate("/admin/dashboard");
35 else navigate(redirect || "/");
36 } catch (err) {
37 toast.error(getError(err));
38 }
39 };
40
41 useEffect(() => {
42 if (userInfo) {
43 navigate(redirect);
44 }
45 }, [navigate, redirect, userInfo]);
46
47 return (
48 <div className="pageContainer">
49 <Container className="main">
50 <Helmet>
51 <title>Најави се</title>
52 </Helmet>
53 <h1>Најави се</h1>
54 <Form className="formCointainer" onSubmit={submitHandler}>
55 <Form.Group controlId="email">
56 <Form.Label>Email</Form.Label>
57 <Form.Control
58 type="email"
59 required
60 onChange={(e) => setEmail(e.target.value)}
61 />
62 </Form.Group>
63 <Form.Group controlId="password">
64 <Form.Label>Лозинка</Form.Label>
65 <Form.Control
66 type="password"
67 required
68 onChange={(e) => setPassword(e.target.value)}
69 />
70 </Form.Group>
71 <div className="submitBtnContainer">
72 <Button variant="danger" size="lg" type="submit">
73 Најави се
74 </Button>
75 </div>
76 <div className="registerParagraph">
77 Нов корисник?{" "}
78 <Link to={`/signup?redirect=${redirect}`}>Регистрирај се</Link>
79 </div>
80 </Form>
81 </Container>
82 </div>
83 );
84}
85
86export default SigninScreen;
Note: See TracBrowser for help on using the repository browser.