'use client'; import { useRouter } from 'next/navigation'; import { zodResolver } from '@hookform/resolvers/zod'; import { ExclamationTriangleIcon } from '@radix-ui/react-icons'; import { useForm } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { toast } from 'sonner'; import { useUpdateUser } from '@kit/supabase/hooks/use-update-user-mutation'; import { Alert, AlertDescription, AlertTitle } from '@kit/ui/alert'; import { Button } from '@kit/ui/button'; import { Form, FormControl, FormDescription, FormField, FormItem, FormMessage, } from '@kit/ui/form'; import { Heading } from '@kit/ui/heading'; import { Trans } from '@kit/ui/trans'; import { PasswordResetSchema } from '../schemas/password-reset.schema'; import { PasswordInput } from './password-input'; export function UpdatePasswordForm(params: { redirectTo: string; heading?: React.ReactNode; }) { const updateUser = useUpdateUser(); const router = useRouter(); const { t } = useTranslation(); const form = useForm({ resolver: zodResolver(PasswordResetSchema), defaultValues: { password: '', repeatPassword: '', }, }); if (updateUser.error) { const error = updateUser.error as unknown as { code: string }; return updateUser.reset()} />; } return (
{params.heading && ( {params.heading} )}
{ await updateUser.mutateAsync({ password, redirectTo: params.redirectTo, }); router.replace(params.redirectTo); toast.success(t('account:updatePasswordSuccessMessage')); })} >
( )} /> ( )} />
); } function ErrorState(props: { onRetry: () => void; error: { code: string; }; }) { const { t } = useTranslation('auth'); const errorMessage = t(`errors.${props.error.code}`, { defaultValue: t('errors.resetPasswordError'), }); return (
{errorMessage}
); }