### What problem does this PR solve? Right now we cannot embed a chat in website when it has variables in the begin component. This PR tries to read the variables values from the query string via a data_ prefixed variable. #5016 ### Type of change - [x] New Feature (non-breaking change which adds functionality) --------- Co-authored-by: gstrat88 <gstrat@innews.gr>
103 lines
3.0 KiB
TypeScript
103 lines
3.0 KiB
TypeScript
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,
|
|
useGetBeginNodeDataQueryIsSafe,
|
|
} 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 isBeginNodeDataQuerySafe = useGetBeginNodeDataQueryIsSafe();
|
|
|
|
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={!isBeginNodeDataQuerySafe}
|
|
>
|
|
<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;
|