|
import { PlusOutlined } from '@ant-design/icons'; |
|
import { Button, Form, Input } from 'antd'; |
|
import { useCallback } from 'react'; |
|
import { useTranslation } from 'react-i18next'; |
|
import { BeginQuery, IOperatorForm } from '../../interface'; |
|
import { useEditQueryRecord } from './hooks'; |
|
import { ModalForm } from './paramater-modal'; |
|
import QueryTable from './query-table'; |
|
|
|
import styles from './index.less'; |
|
|
|
type FieldType = { |
|
prologue?: string; |
|
}; |
|
|
|
const BeginForm = ({ onValuesChange, form }: IOperatorForm) => { |
|
const { t } = useTranslation(); |
|
const { |
|
ok, |
|
currentRecord, |
|
visible, |
|
hideModal, |
|
showModal, |
|
otherThanCurrentQuery, |
|
} = useEditQueryRecord({ |
|
form, |
|
onValuesChange, |
|
}); |
|
|
|
const handleDeleteRecord = useCallback( |
|
(idx: number) => { |
|
const query = form?.getFieldValue('query') || []; |
|
const nextQuery = query.filter( |
|
(item: BeginQuery, index: number) => index !== idx, |
|
); |
|
onValuesChange?.( |
|
{ query: nextQuery }, |
|
{ query: nextQuery, prologue: form?.getFieldValue('prologue') }, |
|
); |
|
}, |
|
[form, onValuesChange], |
|
); |
|
|
|
return ( |
|
<Form.Provider |
|
onFormFinish={(name, { values }) => { |
|
if (name === 'queryForm') { |
|
ok(values as BeginQuery); |
|
} |
|
}} |
|
> |
|
<Form |
|
name="basicForm" |
|
onValuesChange={onValuesChange} |
|
autoComplete="off" |
|
form={form} |
|
layout="vertical" |
|
> |
|
<Form.Item<FieldType> |
|
name={'prologue'} |
|
label={t('chat.setAnOpener')} |
|
tooltip={t('chat.setAnOpenerTip')} |
|
initialValue={t('chat.setAnOpenerInitial')} |
|
> |
|
<Input.TextArea autoSize={{ minRows: 5 }} /> |
|
</Form.Item> |
|
{/* Create a hidden field to make Form instance record this */} |
|
<Form.Item name="query" noStyle /> |
|
|
|
<Form.Item |
|
shouldUpdate={(prevValues, curValues) => |
|
prevValues.query !== curValues.query |
|
} |
|
> |
|
{({ getFieldValue }) => { |
|
const query: BeginQuery[] = getFieldValue('query') || []; |
|
return ( |
|
<QueryTable |
|
data={query} |
|
showModal={showModal} |
|
deleteRecord={handleDeleteRecord} |
|
></QueryTable> |
|
); |
|
}} |
|
</Form.Item> |
|
|
|
<Button |
|
htmlType="button" |
|
style={{ margin: '0 8px' }} |
|
onClick={() => showModal()} |
|
icon={<PlusOutlined />} |
|
block |
|
className={styles.addButton} |
|
> |
|
{t('flow.addItem')} |
|
</Button> |
|
{visible && ( |
|
<ModalForm |
|
visible={visible} |
|
hideModal={hideModal} |
|
initialValue={currentRecord} |
|
onOk={ok} |
|
otherThanCurrentQuery={otherThanCurrentQuery} |
|
/> |
|
)} |
|
</Form> |
|
</Form.Provider> |
|
); |
|
}; |
|
|
|
export default BeginForm; |
|
|