'use client'; import axios from 'axios'; import clsx from 'clsx'; import { useEffect, useMemo, useState } from 'react'; import { toast } from 'react-toastify'; import { urls } from '@/app/urls'; import InfoError, { ErrorData } from '@/components/info/InfoError'; import FlexColumn from '@/components/ui/FlexColumn'; import SubmitButton from '@/components/ui/SubmitButton'; import TextInput from '@/components/ui/TextInput'; import { useAuth } from '@/context/AuthContext'; import { useConceptNavigation } from '@/context/NavigationContext'; import { IUserUpdatePassword } from '@/models/user'; import { errors, information } from '@/utils/labels'; function EditorPassword() { const router = useConceptNavigation(); const { updatePassword, error, setError, loading } = useAuth(); const [oldPassword, setOldPassword] = useState(''); const [newPassword, setNewPassword] = useState(''); const [newPasswordRepeat, setNewPasswordRepeat] = useState(''); const passwordColor = useMemo(() => { if (!!newPassword && !!newPasswordRepeat && newPassword !== newPasswordRepeat) { return 'clr-warning'; } else { return '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(errors.passwordsMismatch); return; } const data: IUserUpdatePassword = { old_password: oldPassword, new_password: newPassword }; updatePassword(data, () => { toast.success(information.changesSaved); router.push(urls.login); }); } useEffect(() => { setError(undefined); }, [newPassword, oldPassword, newPasswordRepeat, setError]); return (
setOldPassword(event.target.value)} /> { setNewPassword(event.target.value); }} /> { setNewPasswordRepeat(event.target.value); }} /> {error ? : null} ); } export default EditorPassword; // ====== Internals ========= function ProcessError({ error }: { error: ErrorData }): React.ReactElement { if (axios.isAxiosError(error) && error.response && error.response.status === 400) { return
Неверно введен старый пароль
; } else { return ; } }