import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@/components/ui/form'; import { Input } from '@/components/ui/input'; import { zodResolver } from '@hookform/resolvers/zod'; import { useCallback, useId, useMemo } from 'react'; import { useForm } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { z } from 'zod'; interface ChangePasswordFormData { newPassword: string; confirmPassword: string; } interface ChangePasswordFormProps { id: string; form: ReturnType>; email?: string; onSubmit?: (data: ChangePasswordFormData) => void; } export const ChangePasswordForm = ({ id, form, email, onSubmit = () => {}, }: ChangePasswordFormProps) => { const { t } = useTranslation(); return (
{/* Email field (readonly) */}
{t('admin.email')}
{/* New password field */} ( {t('admin.newPassword')} )} /> {/* Confirm password field */} ( {t('admin.confirmNewPassword')} )} /> ); }; // Export the form validation state for parent component function useChangePasswordForm() { const { t } = useTranslation(); const id = useId(); const schema = useMemo(() => { return z .object({ newPassword: z .string() .min(8, { message: t('admin.passwordMinLength') }), confirmPassword: z .string() .min(8, { message: t('admin.confirmPasswordRequired') }), }) .refine((data) => data.newPassword === data.confirmPassword, { message: t('admin.confirmPasswordDoNotMatch'), path: ['confirmPassword'], }); }, [t]); const form = useForm({ defaultValues: { newPassword: '', confirmPassword: '', }, resolver: zodResolver(schema), }); const FormComponent = useCallback( (props: Partial) => ( ), [id, form], ); return { schema, id, form, FormComponent, }; } export default useChangePasswordForm;