import { z } from 'zod'; import { zodResolver } from '@hookform/resolvers/zod'; import { useForm } from 'react-hook-form'; import { CardContent, CardDescription, CardHeader, CardTitle, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, Input, } from '@/components/ui'; import { SubmitButton } from '@/components/default'; import { useState } from 'react'; import { type Result } from '@/lib/actions'; import { StatusMessage } from '@/components/default'; const formSchema = z .object({ password: z.string().min(8, { message: 'Password must be at least 8 characters.', }), confirmPassword: z.string(), }) .refine((data) => data.password === data.confirmPassword, { message: 'Passwords do not match.', path: ['confirmPassword'], }); type ResetPasswordFormProps = { onSubmit: (formData: FormData) => Promise>; message?: string; }; export const ResetPasswordForm = ({ onSubmit, message, }: ResetPasswordFormProps) => { const [isLoading, setIsLoading] = useState(false); const [statusMessage, setStatusMessage] = useState(message ?? ''); const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { password: '', confirmPassword: '', }, }); const handleUpdatePassword = async (values: z.infer) => { setIsLoading(true); try { // Convert form values to FormData for your server action const formData = new FormData(); formData.append('password', values.password); formData.append('confirmPassword', values.confirmPassword); const result = await onSubmit(formData); if (result?.success) { setStatusMessage('Password updated successfully!'); form.reset(); // Clear the form on success } else { setStatusMessage('Error: Unable to update password!'); } } catch (error) { setStatusMessage( error instanceof Error ? error.message : 'Password was not updated!', ); } finally { setIsLoading(false); } }; return (
Change Password Update your password to keep your account secure
( New Password Enter your new password. Must be at least 8 characters. )} /> ( Confirm Password Please re-enter your new password to confirm. )} /> {statusMessage && (statusMessage.includes('Error') || statusMessage.includes('error') || statusMessage.includes('failed') || statusMessage.includes('invalid') ? ( ) : ( ))}
Update Password
); };