import { useCallback, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useNavigate } from 'react-router-dom'; import SecondaryPageLayout from '@/Layout/SecondaryPageLayout'; import { setUserPassword } from '@/apis/interaction'; import SetPassword from '@/containers/SetPassword'; import { useConfirmModal } from '@/hooks/use-confirm-modal'; import { type ErrorHandlers } from '@/hooks/use-error-handler'; import usePasswordAction, { type SuccessHandler } from '@/hooks/use-password-action'; import { usePasswordPolicy } from '@/hooks/use-sie'; import useToast from '@/hooks/use-toast'; const ResetPassword = () => { const [errorMessage, setErrorMessage] = useState(); const clearErrorMessage = useCallback(() => { setErrorMessage(undefined); }, []); const { t } = useTranslation(); const { setToast } = useToast(); const navigate = useNavigate(); const { show } = useConfirmModal(); const errorHandlers: ErrorHandlers = useMemo( () => ({ 'session.verification_session_not_found': async (error) => { await show({ type: 'alert', ModalContent: error.message, cancelText: 'action.got_it' }); navigate(-2); }, 'user.same_password': (error) => { setErrorMessage(error.message); }, }), [navigate, setErrorMessage, show] ); const successHandler: SuccessHandler = useCallback( (result) => { if (result) { setToast(t('description.password_changed')); navigate('/sign-in', { replace: true }); } }, [navigate, setToast, t] ); const { action } = usePasswordAction({ api: setUserPassword, setErrorMessage, errorHandlers, successHandler, }); const { policy: { length: { min }, characterTypes: { min: count }, }, } = usePasswordPolicy(); return ( ); }; export default ResetPassword;