import { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { AutoComplete, Form, Modal, message } from 'antd'; import { FormProvider, useForm, useWatch } from 'react-hook-form'; import { FormField } from '@/components/form/rhf'; type GroupFormValues = { group: string }; const EMPTY: GroupFormValues = { group: '' }; interface BulkAddToGroupModalProps { open: boolean; count: number; groups: string[]; onOpenChange: (open: boolean) => void; onSubmit: (group: string) => Promise<{ affected?: number } | null>; } export default function BulkAddToGroupModal({ open, count, groups, onOpenChange, onSubmit, }: BulkAddToGroupModalProps) { const { t } = useTranslation(); const [messageApi, messageContextHolder] = message.useMessage(); const [submitting, setSubmitting] = useState(false); const methods = useForm({ defaultValues: EMPTY }); const group = useWatch({ control: methods.control, name: 'group' }); useEffect(() => { if (open) methods.reset(EMPTY); }, [open, methods]); async function submit() { const next = (methods.getValues().group ?? '').trim(); if (!next) return; setSubmitting(true); try { const result = await onSubmit(next); if (result) { const affected = result.affected ?? 0; messageApi.success(t('pages.clients.addToGroupSuccessToast', { count: affected, group: next })); onOpenChange(false); } } finally { setSubmitting(false); } } return ( <> {messageContextHolder} onOpenChange(false)} onOk={submit} destroyOnHidden >
v ?? '' }} > ({ value: g }))} allowClear autoFocus />
); }