Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

ForgotPasswordPage.js 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. import React, { useState } from "react";
  2. import { useFormik } from "formik";
  3. import { useTranslation } from "react-i18next";
  4. // import i18next from "i18next";
  5. import { ReactComponent as Logo } from "../../assets/images/svg/logo-vertical.svg";
  6. import {
  7. ForgotPasswordPageContainer,
  8. ForgotPasswordDescription,
  9. ForgotPasswordTitle,
  10. FormContainer,
  11. ErrorMessage,
  12. LoginTextContainer,
  13. LoginAltText,
  14. } from "./ForgotPassword.styled";
  15. import { TextField } from "../../components/TextFields/TextField/TextField";
  16. import { PrimaryButton } from "../../components/Buttons/PrimaryButton/PrimaryButton";
  17. import { NavLink, useHistory } from "react-router-dom";
  18. import { FORGOT_PASSWORD_MAIL_SENT } from "../../constants/pages";
  19. import selectedTheme from "../../themes";
  20. import { useDispatch } from "react-redux";
  21. import { forgotPassword } from "../../store/actions/user/userActions";
  22. import forgotPasswordValidation from "../../validations/forgotPasswordValidation";
  23. import forgotPasswordInitialValues from "../../initialValues/forgotPasswordInitialValues";
  24. import Link from "../../components/Link/Link";
  25. const ForgotPasswordPage = () => {
  26. const history = useHistory();
  27. const { t } = useTranslation();
  28. const dispatch = useDispatch();
  29. const [emailNotFoundStatus, setEmailNotFoundStatus] = useState(false);
  30. const handleResponseSuccess = () => {
  31. history.push({
  32. pathname: FORGOT_PASSWORD_MAIL_SENT,
  33. state: { email: formik.values.email },
  34. });
  35. };
  36. const handleResponseError = () => {
  37. setEmailNotFoundStatus(true);
  38. };
  39. const handleSubmit = (values) => {
  40. dispatch(
  41. forgotPassword({
  42. email: values.email,
  43. handleResponseSuccess,
  44. handleResponseError,
  45. })
  46. );
  47. };
  48. const formik = useFormik({
  49. initialValues: forgotPasswordInitialValues,
  50. validationSchema: forgotPasswordValidation,
  51. onSubmit: handleSubmit,
  52. validateOnBlur: true,
  53. enableReinitialize: true,
  54. });
  55. return (
  56. <ForgotPasswordPageContainer>
  57. <Logo />
  58. <ForgotPasswordTitle component="h1" variant="h5">
  59. {t("forgotPassword.title")}
  60. </ForgotPasswordTitle>
  61. <ForgotPasswordDescription component="h1" variant="h6">
  62. {t("forgotPassword.description")}
  63. </ForgotPasswordDescription>
  64. <FormContainer component="form" onSubmit={formik.handleSubmit}>
  65. {/* <Backdrop position="absolute" isLoading={isLoading} /> */}
  66. <TextField
  67. name="email"
  68. placeholder={t("common.labelEmail")}
  69. margin="normal"
  70. value={formik.values.email}
  71. error={
  72. (formik.touched.email && Boolean(formik.errors.email)) ||
  73. emailNotFoundStatus
  74. }
  75. helperText={formik.touched.email && formik.errors.email}
  76. onChange={formik.handleChange}
  77. autoFocus
  78. fullWidth
  79. />
  80. {formik.errors.email && formik.touched.email && (
  81. <ErrorMessage>{formik.errors.email}</ErrorMessage>
  82. )}
  83. {emailNotFoundStatus && (
  84. <ErrorMessage>{t("forgotPassword.mailNotFound")}</ErrorMessage>
  85. )}
  86. <PrimaryButton
  87. type="submit"
  88. variant="contained"
  89. height="48px"
  90. fullWidth
  91. buttoncolor={selectedTheme.primaryPurple}
  92. textcolor="white"
  93. disabled={formik.values.email?.length === 0}
  94. >
  95. {t("common.send")}
  96. </PrimaryButton>
  97. <LoginTextContainer>
  98. <LoginAltText>{t("register.loginText")}</LoginAltText>
  99. <Link
  100. to="/login"
  101. component={NavLink}
  102. underline="hover"
  103. align="center"
  104. >
  105. {t("register.login")}
  106. </Link>
  107. </LoginTextContainer>
  108. </FormContainer>
  109. </ForgotPasswordPageContainer>
  110. );
  111. };
  112. export default ForgotPasswordPage;