| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- import { IModalManagerChildrenProps } from '@/components/modal-manager';
- import { useTranslate } from '@/hooks/commonHooks';
- 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('createFlow', { 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;
|