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[]) => any 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']) 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)}/> ) }