| import EmbedModal from '@/components/api-service/embed-modal'; | |
| import { useShowEmbedModal } from '@/components/api-service/hooks'; | |
| import { SharedFrom } from '@/constants/chat'; | |
| import { useTranslate } from '@/hooks/common-hooks'; | |
| import { useFetchFlow } from '@/hooks/flow-hooks'; | |
| import { ArrowLeftOutlined } from '@ant-design/icons'; | |
| import { Button, Flex, Space } from 'antd'; | |
| import { useCallback } from 'react'; | |
| import { Link, useParams } from 'umi'; | |
| import { | |
| useGetBeginNodeDataQuery, | |
| useGetBeginNodeDataQueryIsEmpty, | |
| } from '../hooks/use-get-begin-query'; | |
| import { | |
| useSaveGraph, | |
| useSaveGraphBeforeOpeningDebugDrawer, | |
| useWatchAgentChange, | |
| } from '../hooks/use-save-graph'; | |
| import { BeginQuery } from '../interface'; | |
| import styles from './index.less'; | |
| interface IProps { | |
| showChatDrawer(): void; | |
| chatDrawerVisible: boolean; | |
| } | |
| const FlowHeader = ({ showChatDrawer, chatDrawerVisible }: IProps) => { | |
| const { saveGraph } = useSaveGraph(); | |
| const { handleRun } = useSaveGraphBeforeOpeningDebugDrawer(showChatDrawer); | |
| const { data } = useFetchFlow(); | |
| const { t } = useTranslate('flow'); | |
| const { id } = useParams(); | |
| const time = useWatchAgentChange(chatDrawerVisible); | |
| const getBeginNodeDataQuery = useGetBeginNodeDataQuery(); | |
| const { showEmbedModal, hideEmbedModal, embedVisible, beta } = | |
| useShowEmbedModal(); | |
| const isBeginNodeDataQueryEmpty = useGetBeginNodeDataQueryIsEmpty(); | |
| const handleShowEmbedModal = useCallback(() => { | |
| showEmbedModal(); | |
| }, [showEmbedModal]); | |
| const handleRunAgent = useCallback(() => { | |
| const query: BeginQuery[] = getBeginNodeDataQuery(); | |
| if (query.length > 0) { | |
| showChatDrawer(); | |
| } else { | |
| handleRun(); | |
| } | |
| }, [getBeginNodeDataQuery, handleRun, showChatDrawer]); | |
| return ( | |
| <> | |
| <Flex | |
| align="center" | |
| justify={'space-between'} | |
| gap={'large'} | |
| className={styles.flowHeader} | |
| > | |
| <Space size={'large'}> | |
| <Link to={`/flow`}> | |
| <ArrowLeftOutlined /> | |
| </Link> | |
| <div className="flex flex-col"> | |
| <span className="font-semibold text-[18px]">{data.title}</span> | |
| <span className="font-normal text-sm"> | |
| {t('autosaved')} {time} | |
| </span> | |
| </div> | |
| </Space> | |
| <Space size={'large'}> | |
| <Button onClick={handleRunAgent}> | |
| <b>{t('run')}</b> | |
| </Button> | |
| <Button type="primary" onClick={() => saveGraph()}> | |
| <b>{t('save')}</b> | |
| </Button> | |
| <Button | |
| type="primary" | |
| onClick={handleShowEmbedModal} | |
| disabled={!isBeginNodeDataQueryEmpty} | |
| > | |
| <b>{t('embedIntoSite', { keyPrefix: 'common' })}</b> | |
| </Button> | |
| </Space> | |
| </Flex> | |
| {embedVisible && ( | |
| <EmbedModal | |
| visible={embedVisible} | |
| hideModal={hideEmbedModal} | |
| token={id!} | |
| form={SharedFrom.Agent} | |
| beta={beta} | |
| isAgent | |
| ></EmbedModal> | |
| )} | |
| </> | |
| ); | |
| }; | |
| export default FlowHeader; | |