Spaces:
Paused
Paused
import { IModalManagerChildrenProps } from '@/components/modal-manager'; | |
import { useTranslate } from '@/hooks/common-hooks'; | |
import { useFetchFlowTemplates } from '@/hooks/flow-hooks'; | |
import { useSelectItem } from '@/hooks/logic-hooks'; | |
import { Card, Flex, Form, Input, Modal, Space, Typography } from 'antd'; | |
import classNames from 'classnames'; | |
import { useEffect } from 'react'; | |
import GraphAvatar from './graph-avatar'; | |
import styles from './index.less'; | |
const { Title } = Typography; | |
interface IProps extends Omit<IModalManagerChildrenProps, 'showModal'> { | |
loading: boolean; | |
initialName: string; | |
onOk: (name: string, templateId: string) => void; | |
showModal?(): void; | |
} | |
const CreateFlowModal = ({ | |
visible, | |
hideModal, | |
loading, | |
initialName, | |
onOk, | |
}: IProps) => { | |
const [form] = Form.useForm(); | |
const { t } = useTranslate('common'); | |
const { data: list } = useFetchFlowTemplates(); | |
const { selectedId, handleItemClick } = useSelectItem(list?.at(0)?.id); | |
type FieldType = { | |
name?: string; | |
}; | |
const handleOk = async () => { | |
const ret = await form.validateFields(); | |
return onOk(ret.name, selectedId); | |
}; | |
useEffect(() => { | |
if (visible) { | |
form.setFieldValue('name', initialName); | |
} | |
}, [initialName, form, visible]); | |
return ( | |
<Modal | |
title={t('createGraph', { keyPrefix: 'flow' })} | |
open={visible} | |
onOk={handleOk} | |
width={600} | |
onCancel={hideModal} | |
okButtonProps={{ loading }} | |
confirmLoading={loading} | |
> | |
<Form | |
name="basic" | |
labelCol={{ span: 4 }} | |
wrapperCol={{ span: 20 }} | |
autoComplete="off" | |
layout={'vertical'} | |
form={form} | |
> | |
<Form.Item<FieldType> | |
label={<b>{t('name')}</b>} | |
name="name" | |
rules={[{ required: true, message: t('namePlaceholder') }]} | |
> | |
<Input /> | |
</Form.Item> | |
</Form> | |
<Title level={5}>{t('createFromTemplates', { keyPrefix: 'flow' })}</Title> | |
<Flex vertical gap={16} className={styles.templatesBox}> | |
{list?.map((x) => ( | |
<Card | |
key={x.id} | |
className={classNames(styles.flowTemplateCard, { | |
[styles.selectedFlowTemplateCard]: selectedId === x.id, | |
})} | |
onClick={handleItemClick(x.id)} | |
> | |
<Space size={'middle'}> | |
<GraphAvatar avatar={x.avatar}></GraphAvatar> | |
<b>{x.title}</b> | |
</Space> | |
<p>{x.description}</p> | |
</Card> | |
))} | |
</Flex> | |
</Modal> | |
); | |
}; | |
export default CreateFlowModal; | |