[feature](webapp) merge query steps to one card

This commit is contained in:
williamhliu
2023-08-29 22:14:14 +08:00
parent 93ca060c45
commit 36fd737440
40 changed files with 994 additions and 496 deletions

View File

@@ -1,9 +1,7 @@
import { isMobile } from '../../utils/utils';
import { DislikeOutlined, LikeOutlined } from '@ant-design/icons';
import { Button, Popover, message } from 'antd';
import { CLS_PREFIX } from '../../common/constants';
import { MsgDataType } from '../../common/type';
import RecommendOptions from '../RecommendOptions';
import { useState } from 'react';
import classNames from 'classnames';
import { updateQAFeedback } from '../../service';
@@ -12,55 +10,19 @@ type Props = {
data: MsgDataType;
scoreValue?: number;
isLastMessage?: boolean;
isMobileMode?: boolean;
onSwitchEntity: (entityId: string) => void;
onChangeChart: () => void;
};
const Tools: React.FC<Props> = ({
data,
scoreValue,
isLastMessage,
isMobileMode,
onSwitchEntity,
onChangeChart,
}) => {
const [recommendOptionsOpen, setRecommendOptionsOpen] = useState(false);
const { queryColumns, queryResults, queryId, chatContext, queryMode, entityInfo } = data || {};
const Tools: React.FC<Props> = ({ data, scoreValue, isLastMessage }) => {
const { queryResults, queryId, chatContext, queryMode } = data || {};
const [score, setScore] = useState(scoreValue || 0);
const { dimensionFilters, elementMatches } = data.chatContext;
const entityId = dimensionFilters?.length > 0 ? dimensionFilters[0].value : undefined;
const entityName = elementMatches?.find((item: any) => item.element?.type === 'ID')?.element
?.name;
const isEntityMode =
queryMode === 'ENTITY_LIST_FILTER' && typeof entityId === 'string' && entityName !== undefined;
const prefixCls = `${CLS_PREFIX}-tools`;
const singleData = queryResults.length === 1;
const singleData = queryResults?.length === 1;
const isMetricCard =
queryMode.includes('METRIC') &&
(singleData || chatContext?.dateInfo?.startDate === chatContext?.dateInfo?.endDate);
const noDashboard =
(queryColumns?.length === 1 &&
queryColumns[0].showType === 'CATEGORY' &&
queryResults?.length === 1) ||
(!queryMode.includes('METRIC') && !queryMode.includes('ENTITY')) ||
isMetricCard ||
isEntityMode;
const changeChart = () => {
onChangeChart();
};
const addToDashboard = () => {
message.info('正在开发中,敬请期待');
};
const like = () => {
setScore(5);
updateQAFeedback(queryId, 5);
@@ -71,11 +33,6 @@ const Tools: React.FC<Props> = ({
updateQAFeedback(queryId, 1);
};
const switchEntity = (option: string) => {
setRecommendOptionsOpen(false);
onSwitchEntity(option);
};
const likeClass = classNames(`${prefixCls}-like`, {
[`${prefixCls}-feedback-active`]: score === 5,
});
@@ -85,51 +42,18 @@ const Tools: React.FC<Props> = ({
return (
<div className={prefixCls}>
{isLastMessage && chatContext?.modelId && entityInfo?.entityId && (
<Popover
content={
<RecommendOptions
entityId={entityInfo.entityId}
modelId={chatContext.modelId}
modelName={chatContext.modelName}
isMobileMode={isMobileMode}
onSelect={switchEntity}
/>
}
placement={isMobileMode ? 'top' : 'right'}
trigger="click"
open={recommendOptionsOpen}
onOpenChange={open => setRecommendOptionsOpen(open)}
>
<Button shape="round"></Button>
</Popover>
)}
{!isMobile && (
<>
{queryMode === 'METRIC_FILTER' && (
<Button shape="round" onClick={changeChart}>
</Button>
)}
{!noDashboard && (
<Button shape="round" onClick={addToDashboard}>
</Button>
)}
{isLastMessage && !isMetricCard && (
<div className={`${prefixCls}-feedback`}>
<div></div>
<LikeOutlined className={likeClass} onClick={like} />
<DislikeOutlined
className={dislikeClass}
onClick={e => {
e.stopPropagation();
dislike();
}}
/>
</div>
)}
</>
{!isMobile && isLastMessage && (
<div className={`${prefixCls}-feedback`}>
<div></div>
<LikeOutlined className={likeClass} onClick={like} />
<DislikeOutlined
className={dislikeClass}
onClick={e => {
e.stopPropagation();
dislike();
}}
/>
</div>
)}
</div>
);