import React, { useEffect } from 'react'; import { observer } from 'mobx-react-lite'; import { useStore } from 'App/mstore'; import ReCAPTCHA from 'react-google-recaptcha'; import { Form, Input, Loader, Button, Icon, Message } from 'UI'; import stl from './forgotPassword.module.css'; import { validatePassword } from 'App/validate'; import { PASSWORD_POLICY } from 'App/constants'; const recaptchaRef = React.createRef(); const ERROR_DONT_MATCH = "Passwords don't match."; const CAPTCHA_ENABLED = window.env.CAPTCHA_ENABLED === 'true'; const CAPTCHA_SITE_KEY = window.env.CAPTCHA_SITE_KEY; interface Props { params: any; } function CreatePassword(props: Props) { const { params } = props; const { userStore } = useStore(); const loading = userStore.loading; const resetPassword = userStore.resetPassword; const [error, setError] = React.useState(null); const [validationError, setValidationError] = React.useState(null); const [updated, setUpdated] = React.useState(false); const [passwordRepeat, setPasswordRepeat] = React.useState(''); const [password, setPassword] = React.useState(''); const pass = params.get('pass'); const invitation = params.get('invitation'); const handleSubmit = () => { if (!validatePassword(password)) { return; } resetPassword({ invitation, pass, password }).then((response: any) => { if (response && response.errors && response.errors.length > 0) { setError(response.errors[0]); } else { setUpdated(true); } }); }; const onSubmit = (e: any) => { e.preventDefault(); if (CAPTCHA_ENABLED && recaptchaRef.current) { recaptchaRef.current.execute(); } else if (!CAPTCHA_ENABLED) { handleSubmit(); } }; const write = (e: any) => { const { name, value } = e.target; if (name === 'password') setPassword(value); if (name === 'passwordRepeat') setPasswordRepeat(value); }; useEffect(() => { if (passwordRepeat.length > 0 && passwordRepeat !== password) { setValidationError(ERROR_DONT_MATCH); } else if (passwordRepeat.length > 0 && !validatePassword(password)) { setValidationError(PASSWORD_POLICY); } else { setValidationError(null); } }, [passwordRepeat, password]); return (
{!error && ( <>
{CAPTCHA_ENABLED && (
handleSubmit(token)} />
)}
{'Your password has been updated successfully.'}
{validationError && {validationError}} )} {error && (
{error}
)}
); } export default observer(CreatePassword);