import React, { useEffect } from 'react'; import { connect } from 'react-redux'; import ReCAPTCHA from 'react-google-recaptcha'; import { Form, Input, Loader, Button, Icon, Message } from 'UI'; import { requestResetPassword, resetPassword, resetErrors } from 'Duck/user'; 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 { errors: any; resetErrors: any; loading: boolean; params: any; resetPassword: Function; } function CreatePassword(props: Props) { const { loading, params } = props; const [error, setError] = React.useState(null); const [validationError, setValidationError] = React.useState(null); const [updated, setUpdated] = React.useState(false); const [requested, setRequested] = React.useState(false); const [passwordRepeat, setPasswordRepeat] = React.useState(''); const [password, setPassword] = React.useState(''); const [doesntMatch, setDoesntMatch] = React.useState(false); const pass = params.get('pass'); const invitation = params.get('invitation'); const handleSubmit = (token?: any) => { if (!validatePassword(password)) { return; } props.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 sucessfully.'}
{validationError && {validationError}} )} {error && (
{error}
)}
); } export default connect( (state: any) => ({ errors: state.getIn(['user', 'requestResetPassowrd', 'errors']), resetErrors: state.getIn(['user', 'resetPassword', 'errors']), loading: state.getIn(['user', 'requestResetPassowrd', 'loading']) || state.getIn(['user', 'resetPassword', 'loading']), }), { requestResetPassword, resetPassword, resetErrors, } )(CreatePassword);