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, useRef } from 'react'; import { useForm } from 'react-hook-form'; import { Trans, useTranslation } from 'react-i18next'; import { z } from 'zod'; export interface ImportExcelFormData { file: File; overwriteExisting: boolean; } interface ImportExcelFormProps { id: string; form: ReturnType>; onSubmit?: (data: ImportExcelFormData) => void; } export const ImportExcelForm = ({ id, form, onSubmit = () => {}, }: ImportExcelFormProps) => { const { t } = useTranslation(); const filePickerRef = useRef(null); return (
{/* File input field */} ( {t('admin.importSelectExcelFile')} { const files = e.target.files; onChange(files?.[0]); }} {...field} ref={(ref) => { filePickerRef.current = ref; field.ref(ref); }} /> )} />

}} />

); }; // Export the form validation state for parent component function useImportExcelForm() { const { t } = useTranslation(); const id = useId(); const schema = useMemo(() => { return z.object({ file: z .instanceof(File, { message: t('admin.importFileRequired') }) .refine( (file) => { return ( file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' || file.name.endsWith('.xlsx') ); }, { message: t('admin.invalidExcelFile'), }, ), overwriteExisting: z.boolean().optional(), }); }, [t]); const form = useForm({ defaultValues: { file: undefined, overwriteExisting: false, }, resolver: zodResolver(schema), }); const FormComponent = useCallback( (props: Partial) => ( ), [id, form], ); return { schema, id, form, FormComponent, }; } export default useImportExcelForm;