mirror of
https://git.mirrors.martin98.com/https://github.com/infiniflow/ragflow.git
synced 2025-05-28 09:09:21 +08:00

### What problem does this PR solve? feat: Modify the modal style of creating an agent so that there are more templates in the field of view #2122 ### Type of change - [x] New Feature (non-breaking change which adds functionality)
117 lines
3.6 KiB
TypeScript
117 lines
3.6 KiB
TypeScript
import { IModalManagerChildrenProps } from '@/components/modal-manager';
|
|
import { useSetModalState, useTranslate } from '@/hooks/common-hooks';
|
|
import { useFetchFlowTemplates } from '@/hooks/flow-hooks';
|
|
import { useSelectItem } from '@/hooks/logic-hooks';
|
|
import { Button, Card, Flex, List, Modal, Typography } from 'antd';
|
|
import { useCallback, useState } from 'react';
|
|
import CreateAgentModal from './create-agent-modal';
|
|
import GraphAvatar from './graph-avatar';
|
|
|
|
import styles from './index.less';
|
|
|
|
const { Title, Text, Paragraph } = Typography;
|
|
interface IProps extends Omit<IModalManagerChildrenProps, 'showModal'> {
|
|
loading: boolean;
|
|
onOk: (name: string, templateId: string) => void;
|
|
showModal?(): void;
|
|
}
|
|
|
|
const AgentTemplateModal = ({ visible, hideModal, loading, onOk }: IProps) => {
|
|
const { t } = useTranslate('common');
|
|
const { data: list } = useFetchFlowTemplates();
|
|
const { selectedId, handleItemClick } = useSelectItem('');
|
|
const [checkedId, setCheckedId] = useState<string>('');
|
|
|
|
const {
|
|
visible: creatingVisible,
|
|
hideModal: hideCreatingModal,
|
|
showModal: showCreatingModal,
|
|
} = useSetModalState();
|
|
|
|
const handleOk = useCallback(
|
|
async (name: string) => {
|
|
return onOk(name, checkedId);
|
|
},
|
|
[onOk, checkedId],
|
|
);
|
|
|
|
const onShowCreatingModal = useCallback(
|
|
(id: string) => () => {
|
|
showCreatingModal();
|
|
setCheckedId(id);
|
|
},
|
|
[showCreatingModal],
|
|
);
|
|
|
|
return (
|
|
<Modal
|
|
title={t('createGraph', { keyPrefix: 'flow' })}
|
|
open={visible}
|
|
width={'100vw'}
|
|
onCancel={hideModal}
|
|
okButtonProps={{ loading }}
|
|
confirmLoading={loading}
|
|
className={styles.agentTemplateModal}
|
|
wrapClassName={styles.agentTemplateModalWrapper}
|
|
footer={null}
|
|
>
|
|
<section className={styles.createModalContent}>
|
|
<Title level={5}>
|
|
{t('createFromTemplates', { keyPrefix: 'flow' })}
|
|
</Title>
|
|
<List
|
|
grid={{ gutter: 16, column: 4 }}
|
|
dataSource={list}
|
|
renderItem={(x) => (
|
|
<List.Item>
|
|
<Card
|
|
key={x.id}
|
|
onMouseEnter={handleItemClick(x.id)}
|
|
onMouseLeave={handleItemClick('')}
|
|
className={styles.flowTemplateCard}
|
|
>
|
|
<Flex gap={'middle'} align="center">
|
|
<GraphAvatar avatar={x.avatar}></GraphAvatar>
|
|
<b className={styles.agentTitleWrapper}>
|
|
<Text
|
|
style={{ width: '96%' }}
|
|
ellipsis={{ tooltip: x.title }}
|
|
>
|
|
{x.title}
|
|
</Text>
|
|
</b>
|
|
</Flex>
|
|
<div className={styles.agentDescription}>
|
|
<Paragraph ellipsis={{ tooltip: x.description, rows: 5 }}>
|
|
{x.description}
|
|
</Paragraph>
|
|
</div>
|
|
{selectedId === x.id && (
|
|
<Button
|
|
type={'primary'}
|
|
block
|
|
onClick={onShowCreatingModal(x.id)}
|
|
className={styles.useButton}
|
|
>
|
|
{t('useTemplate', { keyPrefix: 'flow' })}
|
|
</Button>
|
|
)}
|
|
</Card>
|
|
</List.Item>
|
|
)}
|
|
/>
|
|
</section>
|
|
{creatingVisible && (
|
|
<CreateAgentModal
|
|
loading={loading}
|
|
visible={creatingVisible}
|
|
hideModal={hideCreatingModal}
|
|
onOk={handleOk}
|
|
></CreateAgentModal>
|
|
)}
|
|
</Modal>
|
|
);
|
|
};
|
|
|
|
export default AgentTemplateModal;
|