diff --git a/Client/src/Pages/CheckEmail/index.css b/Client/src/Pages/CheckEmail/index.css index dac0a0a0d..fbf3e47af 100644 --- a/Client/src/Pages/CheckEmail/index.css +++ b/Client/src/Pages/CheckEmail/index.css @@ -1,83 +1,34 @@ .check-email-page { - width: var(--env-var-width-1); display: flex; justify-content: center; - min-height: var(--env-var-height-1); + height: var(--env-var-height-1); +} +.check-email-page button:not(.MuiIconButton-root) { + height: 34px; + border-radius: var(--env-var-radius-2); + line-height: 0; +} +.check-email-page h1.MuiTypography-root { + font-size: var(--env-var-font-size-large); + color: var(--env-var-color-1); + font-weight: 600; +} +.check-email-page p.MuiTypography-root, +.check-email-page button, +.check-email-page span.MuiTypography-root { + font-size: var(--env-var-font-size-medium); +} +.check-email-page span.MuiTypography-root { + font-weight: 600; +} +.check-email-page p.MuiTypography-root { + color: var(--env-var-color-2); +} +.check-email-page button svg { + margin-right: 5px; } .check-email-form { - width: var(--env-var-width-2); - margin: 90px auto; -} - -.check-email-form-header { - justify-content: center; - align-items: center; - text-align: center; -} - -.check-email-v-gap-large { - height: var(--env-var-spacing-3); -} - -.check-email-v-gap-medium { - height: var(--env-var-spacing-2); -} - -.check-email-v-gap-small { - height: var(--env-var-spacing-1); -} - -.check-email-form-heading { - font-size: var(--env-var-font-size-large); - font-weight: 700; - color: var(--env-var-color-1); -} - -.check-email-form-subheading { - font-size: var(--env-var-font-size-medium); - font-weight: 400; - color: var(--env-var-color-2); -} - -.check-email-form-subheading span { - font-weight: 700; -} - -.check-email-body { + margin-top: 65px; width: var(--env-var-width-2); } - -.check-email-resend { - font-size: var(--env-var-font-size-medium); - font-weight: 400; - color: var(--env-var-color-2); - text-align: center; - cursor: pointer; -} - -.check-email-resend span { - font-weight: 700; - color: var(--env-var-color-3); -} - -.check-email-back-button { - display: flex; - justify-content: center; - align-items: center; -} - -.check-email-back-button-img { - width: var(--env-var-img-width-1); - height: var(--env-var-img-width-1); - margin-right: 5px; - align-items: center; -} - -.check-email-back-button-text { - height: var(--env-var-img-width-1); - font-size: var(--env-var-font-size-medium); - font-weight: 500; - color: var(--env-var-color-2); - align-items: center; -} diff --git a/Client/src/Pages/CheckEmail/index.jsx b/Client/src/Pages/CheckEmail/index.jsx index 97cb2a5d9..5d30d67aa 100644 --- a/Client/src/Pages/CheckEmail/index.jsx +++ b/Client/src/Pages/CheckEmail/index.jsx @@ -1,56 +1,143 @@ import BackgroundPattern from "../../Components/BackgroundPattern/BackgroundPattern"; import "./index.css"; -import React from "react"; -import EmailIcon from "../../assets/Images/email.png"; +import React, { useEffect, useState } from "react"; +import EmailIcon from "../../assets/icons/email.svg?react"; import Button from "../../Components/Button"; -import LeftArrow from "../../assets/Images/arrow-left.png"; +import ArrowBackRoundedIcon from "@mui/icons-material/ArrowBackRounded"; +import { Stack, Typography } from "@mui/material"; +import { useTheme } from "@emotion/react"; +import { useDispatch } from "react-redux"; +import { useNavigate } from "react-router"; +import { createToast } from "../../Utils/toastUtils"; +import { forgotPassword } from "../../Features/Auth/authSlice"; const CheckEmail = () => { + const theme = useTheme(); + const navigate = useNavigate(); + const dispatch = useDispatch(); + + const [email, setEmail] = useState(); + const [disabled, setDisabled] = useState(false); + useEffect(() => { + setEmail(sessionStorage.getItem("email")); + }, []); + + // TODO - fix + const openMail = () => { + window.location.href = "mailto:"; + }; + + const toastFail = [ + { + variant: "info", + body: "Email not found.", + hasIcon: false, + }, + { + variant: "info", + body: "Redirecting in 3...", + hasIcon: false, + }, + { + variant: "info", + body: "Redirecting in 2...", + hasIcon: false, + }, + { + variant: "info", + body: "Redirecting in 1...", + hasIcon: false, + }, + ]; + + const resendToken = async () => { + setDisabled(true); // prevent resent button from being spammed + if (!email) { + let index = 0; + const interval = setInterval(() => { + if (index < toastFail.length) { + createToast(toastFail[index]); + index++; + } else { + clearInterval(interval); + navigate("/forgot-password"); + } + }, 1000); + } else { + const form = { email: email }; + const action = await dispatch(forgotPassword(form)); + if (action.payload.success) { + createToast({ + variant: "info", + body: `Instructions sent to ${form.email}.`, + hasIcon: false, + }); + setDisabled(false); + } else { + if (action.payload) { + // dispatch errors + createToast({ + variant: "info", + body: action.payload.msg, + hasIcon: false, + }); + } else { + // unknown errors + createToast({ + variant: "info", + body: "Unknown error.", + hasIcon: false, + }); + } + } + } + }; + return (