mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-10 11:07:06 +00:00
(feat)(chat-sdk) Optimize ChatMsg chart conditions (#2286)
This commit is contained in:
@@ -52,14 +52,14 @@ const ChatMsg: React.FC<Props> = ({
|
|||||||
|
|
||||||
const prefixCls = `${PREFIX_CLS}-chat-msg`;
|
const prefixCls = `${PREFIX_CLS}-chat-msg`;
|
||||||
|
|
||||||
const updateColummns = (queryColumnsValue: ColumnType[]) => {
|
const updateColumns = (queryColumnsValue: ColumnType[]) => {
|
||||||
const referenceColumn = queryColumnsValue.find(item => item.showType === 'more');
|
const referenceColumn = queryColumnsValue.find(item => item.showType === 'more');
|
||||||
setReferenceColumn(referenceColumn);
|
setReferenceColumn(referenceColumn);
|
||||||
setColumns(queryColumnsValue.filter(item => item.showType !== 'more'));
|
setColumns(queryColumnsValue.filter(item => item.showType !== 'more'));
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
updateColummns(queryColumns);
|
updateColumns(queryColumns);
|
||||||
setDataSource(queryResults);
|
setDataSource(queryResults);
|
||||||
setDefaultMetricField(chatContext?.metrics?.[0]);
|
setDefaultMetricField(chatContext?.metrics?.[0]);
|
||||||
setActiveMetricField(chatContext?.metrics?.[0]);
|
setActiveMetricField(chatContext?.metrics?.[0]);
|
||||||
@@ -115,26 +115,45 @@ const ChatMsg: React.FC<Props> = ({
|
|||||||
metricFields.length > 0 &&
|
metricFields.length > 0 &&
|
||||||
categoryField.length <= 1 &&
|
categoryField.length <= 1 &&
|
||||||
!(metricFields.length > 1 && categoryField.length > 0) &&
|
!(metricFields.length > 1 && categoryField.length > 0) &&
|
||||||
!dataSource.every(item => item[dateField.bizName] === dataSource[0][dateField.bizName]);
|
dataSource.some(item => item[dateField.bizName] !== dataSource[0][dateField.bizName]);
|
||||||
|
|
||||||
if (isMetricTrend) {
|
if (isMetricTrend) {
|
||||||
return MsgContentTypeEnum.METRIC_TREND;
|
return MsgContentTypeEnum.METRIC_TREND;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For Pie Chart:
|
||||||
|
* 1. There should be at least one category field.
|
||||||
|
* 2. There should be exactly one metric field.
|
||||||
|
* 3. All metric values should be non-negative.
|
||||||
|
* 4. limit the number of data points based on device type:
|
||||||
|
* - For mobile devices, limit to 5 data points.
|
||||||
|
* - For desktop devices, limit to 10 data points.
|
||||||
|
*/
|
||||||
const isMetricPie =
|
const isMetricPie =
|
||||||
categoryField.length > 0 &&
|
categoryField.length > 0 &&
|
||||||
metricFields?.length === 1 &&
|
metricFields?.length === 1 &&
|
||||||
(isMobile ? dataSource?.length <= 5 : dataSource?.length <= 10) &&
|
(isMobile ? dataSource?.length <= 5 : dataSource?.length <= 10) &&
|
||||||
dataSource.every(item => item[metricFields[0].bizName] > 0);
|
dataSource.every(item => item[metricFields[0].bizName] >= 0);
|
||||||
|
|
||||||
if (isMetricPie) {
|
if (isMetricPie) {
|
||||||
return MsgContentTypeEnum.METRIC_PIE;
|
return MsgContentTypeEnum.METRIC_PIE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For Bar Chart:
|
||||||
|
* 1. There should be at least one category field.
|
||||||
|
* 2. There should be exactly one metric field.
|
||||||
|
* 3. The number of data points should be limited based on device type:
|
||||||
|
* - For mobile devices, limit to 5 data points.
|
||||||
|
* - For desktop devices, limit to 50 data points.
|
||||||
|
* 4. All metric values should be finite numbers.
|
||||||
|
*/
|
||||||
const isMetricBar =
|
const isMetricBar =
|
||||||
categoryField?.length > 0 &&
|
categoryField?.length > 0 &&
|
||||||
metricFields?.length === 1 &&
|
metricFields?.length === 1 &&
|
||||||
(isMobile ? dataSource?.length <= 5 : dataSource?.length <= 50);
|
(isMobile ? dataSource?.length <= 5 : dataSource?.length <= 50) &&
|
||||||
|
dataSource.every(item => isFinite(Number(item[metricFields[0].bizName])));
|
||||||
|
|
||||||
if (isMetricBar) {
|
if (isMetricBar) {
|
||||||
return MsgContentTypeEnum.METRIC_BAR;
|
return MsgContentTypeEnum.METRIC_BAR;
|
||||||
@@ -226,9 +245,6 @@ const ChatMsg: React.FC<Props> = ({
|
|||||||
);
|
);
|
||||||
case MsgContentTypeEnum.METRIC_PIE:
|
case MsgContentTypeEnum.METRIC_PIE:
|
||||||
const categoryField = columns.find(item => item.showType === 'CATEGORY');
|
const categoryField = columns.find(item => item.showType === 'CATEGORY');
|
||||||
if (!categoryField) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return (
|
return (
|
||||||
<Pie
|
<Pie
|
||||||
data={{ ...data, queryColumns: columns, queryResults: dataSource }}
|
data={{ ...data, queryColumns: columns, queryResults: dataSource }}
|
||||||
@@ -236,7 +252,7 @@ const ChatMsg: React.FC<Props> = ({
|
|||||||
triggerResize={triggerResize}
|
triggerResize={triggerResize}
|
||||||
loading={loading}
|
loading={loading}
|
||||||
metricField={metricFields[0]}
|
metricField={metricFields[0]}
|
||||||
categoryField={categoryField}
|
categoryField={categoryField!}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
case MsgContentTypeEnum.MARKDOWN:
|
case MsgContentTypeEnum.MARKDOWN:
|
||||||
@@ -266,7 +282,7 @@ const ChatMsg: React.FC<Props> = ({
|
|||||||
});
|
});
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
updateColummns(res.data?.queryColumns || []);
|
updateColumns(res.data?.queryColumns || []);
|
||||||
setDataSource(res.data?.queryResults || []);
|
setDataSource(res.data?.queryResults || []);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user