Files
supersonic/webapp/packages/chat-sdk/src/components/ChatItem/ExecuteItem.tsx

104 lines
2.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { Button, Spin } from 'antd';
import { CheckCircleFilled, ReloadOutlined } from '@ant-design/icons';
import { PREFIX_CLS } from '../../common/constants';
import { MsgDataType } from '../../common/type';
import ChatMsg from '../ChatMsg';
import WebPage from '../ChatMsg/WebPage';
import Loading from './Loading';
import React, { ReactNode } from 'react';
type Props = {
queryId?: number;
executeLoading: boolean;
entitySwitchLoading: boolean;
chartIndex: number;
executeTip?: string;
executeItemNode?: ReactNode;
renderCustomExecuteNode?: boolean;
data?: MsgDataType;
triggerResize?: boolean;
onRefresh: () => void;
};
const ExecuteItem: React.FC<Props> = ({
queryId,
executeLoading,
entitySwitchLoading,
chartIndex,
executeTip,
executeItemNode,
renderCustomExecuteNode,
data,
triggerResize,
onRefresh,
}) => {
const prefixCls = `${PREFIX_CLS}-item`;
const getNodeTip = (title: ReactNode, tip?: string) => {
return (
<>
<div className={`${prefixCls}-title-bar`}>
<CheckCircleFilled className={`${prefixCls}-step-icon`} />
<div className={`${prefixCls}-step-title`}>
{title}
{!tip && <Loading />}
</div>
</div>
{tip && <div className={`${prefixCls}-content-container`}>{tip}</div>}
</>
);
};
const reloadNode = (
<Button className={`${prefixCls}-reload`} size="small" onClick={onRefresh}>
<ReloadOutlined />
</Button>
);
if (executeLoading) {
return getNodeTip('数据查询中');
}
if (executeTip) {
return getNodeTip(<>{reloadNode}</>, executeTip);
}
if (!data) {
return null;
}
return (
<>
<div className={`${prefixCls}-title-bar`}>
<CheckCircleFilled className={`${prefixCls}-step-icon`} />
<div className={`${prefixCls}-step-title`}>
{reloadNode}
</div>
</div>
<div className={`${prefixCls}-content-container`}>
<Spin spinning={entitySwitchLoading}>
{data.queryAuthorization?.message && (
<div className={`${prefixCls}-auth-tip`}>{data.queryAuthorization.message}</div>
)}
{renderCustomExecuteNode && executeItemNode ? (
executeItemNode
) : data?.queryMode === 'WEB_PAGE' ? (
<WebPage id={queryId!} data={data} />
) : (
<ChatMsg
queryId={queryId}
data={data}
chartIndex={chartIndex}
triggerResize={triggerResize}
/>
)}
</Spin>
</div>
</>
);
};
export default ExecuteItem;