import React, { useState } from "react"; import { useRouter } from "next/router"; import { setCookie } from 'cookies-next'; import Link from "next/link"; import Grid from "@mui/material/Grid"; import LoadingButton from "@mui/lab/LoadingButton"; import IconButton from "@mui/material/IconButton"; import { Typography } from "@mui/material"; import { Box } from "@mui/system"; import TextField from "@mui/material/TextField"; import InputAdornment from "@mui/material/InputAdornment"; import Button from "@mui/material/Button"; import Visibility from "@mui/icons-material/Visibility"; import VisibilityOff from "@mui/icons-material/VisibilityOff"; import styles from "./signinform.module.css"; import Fetcher from "services/Fetcher"; const SignInForm = () => { const [formValues, setFormValues] = useState({ email: "", password: "", }); const [errorHandlers, setErrorHandlers] = useState({ email: false, password: false, }); const [loading, setLoading] = useState(false); const [errMsg, setErrMsg] = useState(""); const api = new Fetcher(); const router = useRouter(); const handleChange = (event) => { setFormValues({ ...formValues, [event.target.name]: event.target.value }); }; // "use server" const handleSubmit = async (event) => { event.preventDefault(); const { email, password } = formValues; if (email === "" || password === "") { setErrorHandlers({ ...errorHandlers, email: true, password: true }); setTimeout(() => { setErrorHandlers({ ...errorHandlers, email: false, password: false }); }, 1500); return; } else if (email === "") { setErrorHandlers({ ...errorHandlers, email: true }); setTimeout(() => { setErrorHandlers({ ...errorHandlers, email: false }); }, 1500); return; } else if (password === "") { setErrorHandlers({ ...errorHandlers, password: true }); setTimeout(() => { setErrorHandlers({ ...errorHandlers, password: false }); }, 1500); return; } setLoading(true); try { const data = { username: email, password, }; const res = await api.login(data); if (res.status === 204 || res.length === 0) { setErrorHandlers({ ...errorHandlers, email: true, password: true }); setErrMsg("Wrong Credentials"); setTimeout(() => { setErrorHandlers({ ...errorHandlers, email: false, password: false }); setLoading(false); setErrMsg(""); }, 1500); } // Store the token in cookies await setCookie("cmc-token", res.token); router.push("/"); console.log(res); } catch (error) { setLoading(false); console.log(error); } finally { setTimeout(() => { setLoading(false); }, 5000); } }; const [showPassword, setShowPassword] = useState(false); const handleTogglePassword = () => { setShowPassword(!showPassword); }; return ( <>
logo {/* Sign In{" "} */} {/* Email */} {/* Password */} {showPassword ? ( ) : ( )} ), }} sx={textFieldStyles} /> {loading ? "Signing in…" : errMsg ? errMsg : "Sign In"}
); }; export default SignInForm; // Custom styles for text fields in sign up const textFieldStyles = { "& .MuiOutlinedInput-root": { "& fieldset": { borderColor: "#4687BA", "&:hover": { borderColor: "#4687BA", }, }, "&.Mui-focused fieldset": { borderColor: "#4687BA", }, }, "& .MuiInputAdornment-positionEnd": { cursor: "pointer", }, "& .MuiFormLabel-root": { color: "#4687BA", }, "&:hover .MuiFormLabel-root": { color: "#4687BA", }, "&.Mui-focused .MuiFormLabel-root": { color: "#4687BA", }, "& .MuiInputBase-input": { color: "#4687BA", }, "&:hover .MuiInputBase-input": { color: "#4687BA", }, "&.Mui-focused .MuiInputBase-input": { color: "#4687BA", }, };