import React, { FC, useCallback, useEffect, useMemo, useState } from 'react'; import { connect } from 'react-redux'; import { BetterScrollDialog } from '../BetterScrollDialog'; import { Group } from '~/components/containers/Group'; import { InputText } from '~/components/input/InputText'; import { Button } from '~/components/input/Button'; import styles from './styles.module.scss'; import * as AUTH_ACTIONS from '~/redux/auth/actions'; import { pick } from 'ramda'; import { selectAuthRestore } from '~/redux/auth/selectors'; import { ERROR_LITERAL, ERRORS } from '~/constants/errors'; import { Icon } from '~/components/input/Icon'; import { useCloseOnEscape } from '~/hooks'; import { DialogComponentProps } from '~/types/modal'; const mapStateToProps = state => ({ restore: selectAuthRestore(state), }); const mapDispatchToProps = pick(['authRestorePassword', 'authSetRestore'], AUTH_ACTIONS); type IProps = DialogComponentProps & ReturnType & typeof mapDispatchToProps & {}; const RestorePasswordDialogUnconnected: FC = ({ restore: { error, is_loading, is_succesfull, user }, authSetRestore, onRequestClose, authRestorePassword, }) => { const [password, setPassword] = useState(''); const [password_again, setPasswordAgain] = useState(''); const doesnt_match = useMemo( () => !password || !password_again || password.trim() !== password_again.trim(), [password_again, password] ); const onSubmit = useCallback( event => { event.preventDefault(); if (doesnt_match) return; authRestorePassword(password); }, [doesnt_match, authRestorePassword, password] ); useEffect(() => { if (error || is_succesfull) { authSetRestore({ error: '', is_succesfull: false }); } }, [authSetRestore, error, is_succesfull, password, password_again]); const buttons = useMemo( () => ( ), [doesnt_match] ); const overlay = useMemo( () => is_succesfull ? (
Пароль обновлен
Добро пожаловать домой, ~{user?.username}!
) : ( undefined ), [is_succesfull, onRequestClose, user] ); const not_ready = useMemo( () => (is_loading && !user ?
: undefined), [is_loading, user] ); const invalid_code = useMemo( () => !is_loading && !user ? (
{ERROR_LITERAL[error || ERRORS.CODE_IS_INVALID]}
) : ( undefined ), [is_loading, user, error, onRequestClose] ); useCloseOnEscape(onRequestClose); return (
Пришло время сменить пароль{user && user.username && `, ~${user.username}`}

Новый пароль должен быть не короче 6 символов.

Вряд ли кто-нибудь будет пытаться нас взломать, но сложный пароль всегда лучше простого.

); }; const RestorePasswordDialog = connect( mapStateToProps, mapDispatchToProps )(RestorePasswordDialogUnconnected); export { RestorePasswordDialog };