appointments-software / frontend / app / src / components / account / LoginPage.js
LoginPage.js
Raw
import React, { useState } from "react";
import { useDispatch, useSelector } from "react-redux";
import { Navigate, useNavigate } from "react-router-dom";
import { login } from "../../redux/actions/auth";

const LoginPage = (props) => {
  const [username, setUsername] = useState("");
  const [password, setPassword] = useState("");
  const { isLoggedIn } = useSelector((state) => state.auth);
  const { message } = useSelector((state) => state.message);

  const navigate = useNavigate();
  const dispatch = useDispatch();

  const handleChangeUser = (event) => {
    setUsername(event.target.value);
  };

  const handleChangePass = (event) => {
    setPassword(event.target.value);
  };

  const handleSubmit = (event) => {
    event.preventDefault();
    dispatch(login(username, password)).then(() => {
      navigate("/profile");
      window.location.reload();
    });
  };

  if (isLoggedIn) {
    return <Navigate to="/profile" />;
  }

  return (
    <div className="landing-content">
      <form className="generic-column-20px" onSubmit={handleSubmit}>
        <input
          type="text"
          className="contact-form-field"
          placeholder="Username"
          onChange={handleChangeUser}
        />
        <input
          type="password"
          className="contact-form-field"
          placeholder="Password"
          onChange={handleChangePass}
        />
        <input
          type="submit"
          value="Login"
          className="action-button"
          style={{ padding: "15px 50px" }}
        />
        <p className="error">{message}</p>
      </form>
    </div>
  );
};

export default LoginPage;