Skip to content

Commit 8ca97e9

Browse files
authored
Merge pull request #1241 from lyp000119/dev
Date Level supports all charts
2 parents 4a47af3 + cd7c1e9 commit 8ca97e9

File tree

6 files changed

+98
-19
lines changed

6 files changed

+98
-19
lines changed

frontend/src/app/components/ChartDrill/ChartDrillContextMenu.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { CheckOutlined } from '@ant-design/icons';
2020
import { Dropdown, Menu } from 'antd';
2121
import {
2222
ChartDataSectionType,
23-
ChartDataViewFieldCategory,
23+
DataViewFieldType,
2424
RUNTIME_DATE_LEVEL_KEY,
2525
} from 'app/constants';
2626
import useI18NPrefix from 'app/hooks/useI18NPrefix';
@@ -154,9 +154,7 @@ const ChartDrillContextMenu: FC<{ chartConfig?: ChartConfig }> = memo(
154154
{drillOption?.mode !== DrillMode.Expand && selectDrillStatusMenu}
155155

156156
{runtimeDateLevelFields?.map((v, i) => {
157-
if (
158-
v.category === ChartDataViewFieldCategory.DateLevelComputedField
159-
) {
157+
if (v.type === DataViewFieldType.DATE) {
160158
return (
161159
<Menu.SubMenu key={i} title={v.colName}>
162160
<DateLevelMenuItems

frontend/src/app/components/ChartEditor.tsx

Lines changed: 52 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ import { IChart } from 'app/types/Chart';
5858
import { IChartDrillOption } from 'app/types/ChartDrillOption';
5959
import { ChartDTO } from 'app/types/ChartDTO';
6060
import {
61+
clearRuntimeDateLevelFieldsInChartConfig,
6162
getRuntimeComputedFields,
6263
getRuntimeDateLevelFields,
6364
} from 'app/utils/chartHelper';
@@ -224,6 +225,37 @@ export const ChartEditor: FC<ChartEditorProps> = ({
224225
}
225226
}, [dataview?.sourceId, dispatch]);
226227

228+
const resetOriginalComputedFields = useCallback(
229+
config => {
230+
const index = config?.datas?.findIndex(
231+
v => v.type === ChartDataSectionType.GROUP,
232+
);
233+
if (index !== undefined) {
234+
const groupRows = config?.datas?.[index]?.rows;
235+
if (groupRows) {
236+
const dateLevelComputedFields = groupRows.filter(
237+
v =>
238+
v.category === ChartDataViewFieldCategory.DateLevelComputedField,
239+
);
240+
241+
const computedFields = getRuntimeComputedFields(
242+
dateLevelComputedFields,
243+
'',
244+
dataview?.computedFields,
245+
chartConfig,
246+
);
247+
248+
dispatch(
249+
workbenchSlice.actions.updateCurrentDataViewComputedFields(
250+
computedFields,
251+
),
252+
);
253+
}
254+
}
255+
},
256+
[chartConfig, dataview?.computedFields, dispatch],
257+
);
258+
227259
const registerChartEvents = useCallback(
228260
chart => {
229261
chart?.registerMouseEvents([
@@ -303,10 +335,12 @@ export const ChartEditor: FC<ChartEditorProps> = ({
303335
setChart(c);
304336
const targetChartConfig = CloneValueDeep(c.config);
305337

306-
const finalChartConfig = transferChartConfigs(
307-
targetChartConfig,
308-
shadowChartConfig || chartConfig,
338+
const finalChartConfig = clearRuntimeDateLevelFieldsInChartConfig(
339+
transferChartConfigs(targetChartConfig, shadowChartConfig || chartConfig),
309340
);
341+
342+
resetOriginalComputedFields(finalChartConfig);
343+
310344
dispatch(
311345
workbenchSlice.actions.updateChartConfig({
312346
type: ChartConfigReducerActionType.INIT,
@@ -347,11 +381,12 @@ export const ChartEditor: FC<ChartEditorProps> = ({
347381
const dateLevelComputedFields = payload.value.rows.filter(
348382
v => v.category === ChartDataViewFieldCategory.DateLevelComputedField,
349383
);
384+
350385
const replacedColName = payload.value.replacedColName;
351386
const computedFields = getRuntimeComputedFields(
352387
dateLevelComputedFields,
353388
replacedColName,
354-
CloneValueDeep(dataview?.computedFields),
389+
dataview?.computedFields,
355390
chartConfig,
356391
);
357392

@@ -361,11 +396,16 @@ export const ChartEditor: FC<ChartEditorProps> = ({
361396
});
362397
}
363398

364-
dispatch(
365-
workbenchSlice.actions.updateCurrentDataViewComputedFields(
366-
computedFields,
367-
),
368-
);
399+
if (
400+
JSON.stringify(computedFields) !==
401+
JSON.stringify(dataview?.computedFields)
402+
) {
403+
dispatch(
404+
workbenchSlice.actions.updateCurrentDataViewComputedFields(
405+
computedFields,
406+
),
407+
);
408+
}
369409
}
370410

371411
dispatch(
@@ -428,6 +468,8 @@ export const ChartEditor: FC<ChartEditorProps> = ({
428468
}, [buildDataChart, chartType, dataview, onSaveInWidget]);
429469

430470
const saveChart = useCallback(async () => {
471+
resetOriginalComputedFields(chartConfig);
472+
431473
if (container === 'dataChart') {
432474
if (dataChartId) {
433475
await dispatch(
@@ -511,6 +553,7 @@ export const ChartEditor: FC<ChartEditorProps> = ({
511553
chartConfig,
512554
dataview?.computedFields,
513555
history,
556+
resetOriginalComputedFields,
514557
]);
515558

516559
const saveChartToDashBoard = useCallback(

frontend/src/app/components/ChartGraph/BasicBarChart/BasicBarChart.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ import {
3838
getExtraSeriesRowData,
3939
getGridStyle,
4040
getReference2,
41-
getRuntimeDateLevelFields,
4241
getSeriesTooltips4Rectangular2,
4342
getStyles,
4443
hadAxisLabelOverflowConfig,
@@ -130,8 +129,9 @@ class BasicBarChart extends Chart {
130129
const dataConfigs: ChartDataConfig[] = config.datas || [];
131130
const settingConfigs: ChartStyleConfig[] = config.settings || [];
132131

133-
const groupConfigs: ChartDataSectionField[] = getRuntimeDateLevelFields(
134-
getDrillableRows(dataConfigs, drillOption),
132+
const groupConfigs: ChartDataSectionField[] = getDrillableRows(
133+
dataConfigs,
134+
drillOption,
135135
);
136136
const aggregateConfigs: ChartDataSectionField[] = dataConfigs
137137
.filter(c => c.type === ChartDataSectionType.AGGREGATE)

frontend/src/app/components/ChartIFrameContainer/ChartIFrameContainer.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ import ChartI18NContext from 'app/pages/ChartWorkbenchPage/contexts/Chart18NCont
2424
import { IChart } from 'app/types/Chart';
2525
import { ChartConfig } from 'app/types/ChartConfig';
2626
import { IChartDrillOption } from 'app/types/ChartDrillOption';
27+
import { setRuntimeDateLevelFieldsInChartConfig } from 'app/utils/chartHelper';
2728
import { FC, memo } from 'react';
2829
import { StyleSheetManager } from 'styled-components/macro';
2930
import { isEmpty } from 'utils/object';
3031
import ChartIFrameLifecycleAdapter from './ChartIFrameLifecycleAdapter';
31-
3232
const ChartIFrameContainer: FC<{
3333
dataset: any;
3434
chart: IChart;
@@ -42,6 +42,7 @@ const ChartIFrameContainer: FC<{
4242
scale?: [number, number];
4343
}> = memo(props => {
4444
const iframeContainerId = `chart-iframe-root-${props.containerId}`;
45+
const config = setRuntimeDateLevelFieldsInChartConfig(props.config);
4546

4647
const transformToSafeCSSProps = (width, height) => {
4748
let newStyle = { width, height };
@@ -74,7 +75,7 @@ const ChartIFrameContainer: FC<{
7475
<ChartIFrameLifecycleAdapter
7576
dataset={props.dataset}
7677
chart={props.chart}
77-
config={props.config}
78+
config={config}
7879
style={transformToSafeCSSProps(props?.width, props?.height)}
7980
widgetSpecialConfig={props.widgetSpecialConfig}
8081
isShown={props.isShown}
@@ -136,7 +137,7 @@ const ChartIFrameContainer: FC<{
136137
<ChartIFrameLifecycleAdapter
137138
dataset={props.dataset}
138139
chart={props.chart}
139-
config={props.config}
140+
config={config}
140141
style={transformToSafeCSSProps(props?.width, props?.height)}
141142
widgetSpecialConfig={props.widgetSpecialConfig}
142143
isShown={props.isShown}

frontend/src/app/pages/ChartWorkbenchPage/components/ChartOperationPanel/components/ChartPresentPanel/ChartPresentPanel.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import { datasetLoadingSelector } from 'app/pages/ChartWorkbenchPage/slice/selec
2828
import { IChart } from 'app/types/Chart';
2929
import { ChartConfig } from 'app/types/ChartConfig';
3030
import ChartDataSetDTO from 'app/types/ChartDataSet';
31+
import { setRuntimeDateLevelFieldsInChartConfig } from 'app/utils/chartHelper';
3132
import { FC, memo, useContext, useState } from 'react';
3233
import { useSelector } from 'react-redux';
3334
import styled from 'styled-components/macro';
@@ -85,6 +86,7 @@ const ChartPresentPanel: FC<{
8586
if (!chart?.isMatchRequirement(chartConfig)) {
8687
return <Chart404Graph chart={chart} chartConfig={chartConfig} />;
8788
}
89+
chartConfig = setRuntimeDateLevelFieldsInChartConfig(chartConfig);
8890
return (
8991
!!chart &&
9092
chartDispatcher.getContainers(

frontend/src/app/utils/chartHelper.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1640,3 +1640,38 @@ export const getRuntimeComputedFields = (
16401640
}
16411641
return _computedFields;
16421642
};
1643+
1644+
export const clearRuntimeDateLevelFieldsInChartConfig = (
1645+
config: ChartConfig,
1646+
) => {
1647+
return updateBy(config, draft => {
1648+
if (draft?.datas) {
1649+
const index = draft.datas.findIndex(
1650+
v => v.type === ChartDataSectionType.GROUP,
1651+
);
1652+
const groupRows = draft.datas[index]?.rows;
1653+
groupRows?.forEach((v, i) => {
1654+
if (groupRows[i]) {
1655+
delete groupRows[i][RUNTIME_DATE_LEVEL_KEY];
1656+
}
1657+
});
1658+
}
1659+
});
1660+
};
1661+
1662+
export const setRuntimeDateLevelFieldsInChartConfig = (config: ChartConfig) => {
1663+
return updateBy(config, draft => {
1664+
if (draft?.datas) {
1665+
const index = draft.datas.findIndex(
1666+
v => v.type === ChartDataSectionType.GROUP,
1667+
);
1668+
const groupRows = draft.datas[index]?.rows;
1669+
groupRows?.forEach((v, i) => {
1670+
const runtimeDateLevel = groupRows[i][RUNTIME_DATE_LEVEL_KEY];
1671+
if (groupRows[i].uid === runtimeDateLevel?.uid) {
1672+
groupRows[i] = runtimeDateLevel;
1673+
}
1674+
});
1675+
}
1676+
});
1677+
};

0 commit comments

Comments
 (0)