import axios from 'axios'; import { useEffect, useMemo, useState } from 'react'; import { toast } from 'react-toastify'; import BackendError, { ErrorInfo } from '../../components/BackendError'; import SubmitButton from '../../components/Common/SubmitButton'; import TextInput from '../../components/Common/TextInput'; import { useAuth } from '../../context/AuthContext'; import { useConceptNavigation } from '../../context/NagivationContext'; import { IUserUpdatePassword } from '../../models/library'; function ProcessError({error}: {error: ErrorInfo}): React.ReactElement { if (axios.isAxiosError(error) && error.response && error.response.status === 400) { return (
Неверно введен старый пароль
); } else { return (); } } function EditorPassword() { const { navigateTo } = useConceptNavigation(); const { updatePassword, error, setError, loading } = useAuth(); const [oldPassword, setOldPassword] = useState(''); const [newPassword, setNewPassword] = useState(''); const [newPasswordRepeat, setNewPasswordRepeat] = useState(''); const passwordColor = useMemo( () => { return !!newPassword && !!newPasswordRepeat && newPassword !== newPasswordRepeat ? 'clr-warning' : 'clr-input'; }, [newPassword, newPasswordRepeat]); const canSubmit = useMemo( () => { return !!oldPassword && !!newPassword && !!newPasswordRepeat && newPassword === newPasswordRepeat; }, [newPassword, newPasswordRepeat, oldPassword]); function handleSubmit(event: React.FormEvent) { event.preventDefault(); if (newPassword !== newPasswordRepeat) { toast.error('Пароли не совпадают'); return; } const data: IUserUpdatePassword = { old_password: oldPassword, new_password: newPassword, }; updatePassword(data, () => { toast.success('Изменения сохранены'); navigateTo('/login'); }); } useEffect(() => { setError(undefined); }, [newPassword, oldPassword, newPasswordRepeat, setError]); return (
setOldPassword(event.target.value)} /> { setNewPassword(event.target.value); }} /> { setNewPasswordRepeat(event.target.value); }} />
{ error && }
) } export default EditorPassword;