import { DeleteOutlined } from '@ant-design/icons/lib' import { Button, Card, Checkbox, Form, Input, Popconfirm, Tag } from 'antd' import { FormInstance } from 'antd/lib/form' import { FieldData } from 'rc-field-form/lib/interface' import React, { useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import { AdminFormFieldFragment } from '../../../graphql/fragment/admin.form.fragment' import { adminTypes } from './types' import { TextType } from './types/text.type' interface Props { form: FormInstance fields: AdminFormFieldFragment[] onChangeFields: (fields: AdminFormFieldFragment[]) => void field: FieldData remove: (index: number) => void index: number } export const FieldCard: React.FC = (props) => { const { t } = useTranslation() const { form, field, fields, onChangeFields, remove, index } = props const type = form.getFieldValue(['form', 'fields', field.name as string, 'type']) as string const TypeComponent = adminTypes[type] || TextType const [nextTitle, setNextTitle] = useState( form.getFieldValue(['form', 'fields', field.name as string, 'title']) ) useEffect(() => { const id = setTimeout(() => { onChangeFields( fields.map((field, i) => { if (i === index) { return { ...field, title: nextTitle, } } else { return field } }) ) }, 500) return () => clearTimeout(id) }, [nextTitle]) return ( {t(`type:${type}.name`)} { remove(index) onChangeFields(fields.filter((e, i) => i !== index)) }} > } actions={[ remove(index)} />]} > setNextTitle(e.target.value)} /> ) }