import React, { FC, useState, useMemo, useCallback, useEffect } from 'react'; import { IDialogProps } from '~/redux/types'; 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.scss'; import * as AUTH_ACTIONS from '~/redux/auth/actions'; import pick from 'ramda/es/pick'; import { selectAuthRestore } from '~/redux/auth/selectors'; import { ERROR_LITERAL, ERRORS } from '~/constants/errors'; import { Icon } from '~/components/input/Icon'; import { useCloseOnEscape } from '~/utils/hooks'; const mapStateToProps = state => ({ restore: selectAuthRestore(state), }); const mapDispatchToProps = pick(['authRestorePassword', 'authSetRestore'], AUTH_ACTIONS); type IProps = IDialogProps & 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] ); useEffect(() => { if (error || is_succesfull) { authSetRestore({ error: null, is_succesfull: false }); } }, [password, password_again]); const buttons = useMemo( () => ( ), [doesnt_match] ); const overlay = useMemo( () => is_succesfull ? (
Пароль обновлен
Добро пожаловать домой, ~{user.username}!
) : null, [is_succesfull] ); const not_ready = useMemo(() => (is_loading && !user ?
: null), [ is_loading, user, ]); const invalid_code = useMemo( () => !is_loading && !user ? (
{ERROR_LITERAL[error || ERRORS.CODE_IS_INVALID]}
) : null, [is_loading, user, error] ); useCloseOnEscape(onRequestClose); return (
Пришло время сменить пароль{user && user.username && `, ~${user.username}`}

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

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

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