d2aura 26.0.14 → 26.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/eda/edaManagerApi.d.ts +7 -3
- package/api/eda/edaManagerApi.js +28 -2
- package/api/eda/edaManagerApi.js.map +1 -1
- package/api/eda/generated/events.d.ts +93 -62
- package/api/eda/generated/events.js +146 -88
- package/api/eda/generated/events.js.map +1 -1
- package/api/eda/generated/structures.d.ts +99 -86
- package/api/eda/generated/structures.js.map +1 -1
- package/api/types/advancedFilter.d.ts +3 -0
- package/api/types/advancedFilter.js.map +1 -1
- package/api/webPush/webPushApi.js.map +1 -1
- package/api/webPush/webPushUtils.js.map +1 -1
- package/core/i18n/d2aura.en.json +14 -0
- package/core/i18n/d2aura.sk.json +62 -0
- package/coreui/abstractListPanel.d.ts +2 -1
- package/coreui/abstractListPanel.js +5 -1
- package/coreui/abstractListPanel.js.map +1 -1
- package/coreui/components/advancedFilter/advancedFilterButton.d.ts +2 -2
- package/coreui/components/advancedFilter/advancedFilterButton.js.map +1 -1
- package/coreui/components/advancedFilter/advancedFilteredGrid.d.ts +3 -2
- package/coreui/components/advancedFilter/advancedFilteredGrid.js +9 -1
- package/coreui/components/advancedFilter/advancedFilteredGrid.js.map +1 -1
- package/coreui/components/advancedFilter/conditionList/advancedFilterConditionDetailPanel.d.ts +2 -2
- package/coreui/components/advancedFilter/conditionList/advancedFilterConditionDetailPanel.js +1 -1
- package/coreui/components/advancedFilter/conditionList/advancedFilterConditionDetailPanel.js.map +1 -1
- package/coreui/components/advancedFilter/conditionList/advancedFilterConditionListModalDialog.d.ts +2 -2
- package/coreui/components/advancedFilter/conditionList/advancedFilterConditionListModalDialog.js.map +1 -1
- package/coreui/components/advancedFilter/conditionList/advancedFilterConditionListPanel.d.ts +2 -2
- package/coreui/components/advancedFilter/conditionList/advancedFilterConditionListPanel.js +10 -2
- package/coreui/components/advancedFilter/conditionList/advancedFilterConditionListPanel.js.map +1 -1
- package/coreui/components/d2Chart/d2ChartAdvancedZoom.d.ts +25 -0
- package/coreui/components/d2Chart/d2ChartAdvancedZoom.js +197 -0
- package/coreui/components/d2Chart/d2ChartAdvancedZoom.js.map +1 -0
- package/coreui/components/d2Chart/d2ChartPanel.d.ts +2 -0
- package/coreui/components/d2Chart/d2ChartPanel.js +9 -2
- package/coreui/components/d2Chart/d2ChartPanel.js.map +1 -1
- package/coreui/components/d2Chart/d2ChartToolboxPanel.d.ts +1 -0
- package/coreui/components/d2Chart/d2ChartToolboxPanel.js +2 -2
- package/coreui/components/d2Chart/d2ChartToolboxPanel.js.map +1 -1
- package/coreui/components/edaManager/abstract/edaManagerAbstractPanel.js +1 -1
- package/coreui/components/edaManager/abstract/edaManagerAbstractPanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaChartViewer.js +23 -19
- package/coreui/components/edaManagerComponent/components/edaChartViewer.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaDataBasePanel.js +1 -1
- package/coreui/components/edaManagerComponent/components/edaDataBasePanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaGraphPanel.js +15 -18
- package/coreui/components/edaManagerComponent/components/edaGraphPanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaSampleRangePickerPanel.d.ts +11 -3
- package/coreui/components/edaManagerComponent/components/edaSampleRangePickerPanel.js +31 -24
- package/coreui/components/edaManagerComponent/components/edaSampleRangePickerPanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaTablePanel.js +116 -95
- package/coreui/components/edaManagerComponent/components/edaTablePanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaTreeView.d.ts +5 -0
- package/coreui/components/edaManagerComponent/components/edaTreeView.js +189 -60
- package/coreui/components/edaManagerComponent/components/edaTreeView.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaVectorDetailPanel.js +1 -1
- package/coreui/components/edaManagerComponent/components/edaVectorDetailPanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/constants/actionTypes.d.ts +5 -0
- package/coreui/components/edaManagerComponent/constants/actionTypes.js +7 -0
- package/coreui/components/edaManagerComponent/constants/actionTypes.js.map +1 -0
- package/coreui/components/edaManagerComponent/constants/edaTypes.d.ts +13 -0
- package/coreui/components/edaManagerComponent/constants/edaTypes.js +15 -0
- package/coreui/components/edaManagerComponent/constants/edaTypes.js.map +1 -1
- package/coreui/components/edaManagerComponent/context/edaVectorDataContext.d.ts +1 -0
- package/coreui/components/edaManagerComponent/context/edaVectorDataContext.js +8 -1
- package/coreui/components/edaManagerComponent/context/edaVectorDataContext.js.map +1 -1
- package/coreui/components/edaManagerComponent/context/edaVectorDataProvider.js +31 -38
- package/coreui/components/edaManagerComponent/context/edaVectorDataProvider.js.map +1 -1
- package/coreui/components/edaManagerComponent/context/sharedSampleRangeContext.d.ts +6 -1
- package/coreui/components/edaManagerComponent/context/sharedSampleRangeContext.js +8 -1
- package/coreui/components/edaManagerComponent/context/sharedSampleRangeContext.js.map +1 -1
- package/coreui/components/edaManagerComponent/context/useEdaActions.d.ts +5 -3
- package/coreui/components/edaManagerComponent/context/useEdaActions.js +21 -7
- package/coreui/components/edaManagerComponent/context/useEdaActions.js.map +1 -1
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/controlButtons.d.ts +13 -0
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/controlButtons.js +19 -0
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/controlButtons.js.map +1 -0
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/descriptiveVectorDetailPanel.d.ts +8 -0
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/descriptiveVectorDetailPanel.js +171 -0
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/descriptiveVectorDetailPanel.js.map +1 -0
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/graphPanel.d.ts +22 -0
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/graphPanel.js +75 -0
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/graphPanel.js.map +1 -0
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/intervalInput.d.ts +12 -0
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/intervalInput.js +52 -0
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/intervalInput.js.map +1 -0
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/tablePanel.d.ts +22 -0
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/tablePanel.js +130 -0
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/tablePanel.js.map +1 -0
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/types.d.ts +58 -0
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/types.js +51 -0
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/types.js.map +1 -0
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/useSharedData.d.ts +18 -0
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/useSharedData.js +74 -0
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/useSharedData.js.map +1 -0
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/utils.d.ts +38 -0
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/utils.js +299 -0
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/utils.js.map +1 -0
- package/coreui/components/edaManagerComponent/dialogs/edaDescriptiveVectorEditorDialog.d.ts +10 -0
- package/coreui/components/edaManagerComponent/dialogs/edaDescriptiveVectorEditorDialog.js +343 -0
- package/coreui/components/edaManagerComponent/dialogs/edaDescriptiveVectorEditorDialog.js.map +1 -0
- package/coreui/components/edaManagerComponent/{components → dialogs}/edaTableEditorDialog.js +1 -1
- package/coreui/components/edaManagerComponent/dialogs/edaTableEditorDialog.js.map +1 -0
- package/coreui/components/edaManagerComponent/{components → dialogs}/exportDialog.d.ts +2 -2
- package/coreui/components/edaManagerComponent/{components → dialogs}/exportDialog.js +7 -8
- package/coreui/components/edaManagerComponent/dialogs/exportDialog.js.map +1 -0
- package/coreui/components/edaManagerComponent/dialogs/groupVectorSelection.d.ts +12 -0
- package/coreui/components/edaManagerComponent/dialogs/groupVectorSelection.js +74 -0
- package/coreui/components/edaManagerComponent/dialogs/groupVectorSelection.js.map +1 -0
- package/coreui/components/edaManagerComponent/dialogs/insertVectorDialog.d.ts +16 -0
- package/coreui/components/edaManagerComponent/dialogs/insertVectorDialog.js +32 -0
- package/coreui/components/edaManagerComponent/dialogs/insertVectorDialog.js.map +1 -0
- package/coreui/components/edaManagerComponent/edaDetail.js +21 -7
- package/coreui/components/edaManagerComponent/edaDetail.js.map +1 -1
- package/coreui/components/edaManagerComponent/edaNavigator.d.ts +2 -0
- package/coreui/components/edaManagerComponent/edaNavigator.js +4 -4
- package/coreui/components/edaManagerComponent/edaNavigator.js.map +1 -1
- package/coreui/components/edaManagerComponent/edaSelect.d.ts +2 -0
- package/coreui/components/edaManagerComponent/edaSelect.js +13 -13
- package/coreui/components/edaManagerComponent/edaSelect.js.map +1 -1
- package/coreui/components/edaManagerComponent/icons/folderRemoveOutlined.d.ts +6 -0
- package/coreui/components/edaManagerComponent/icons/folderRemoveOutlined.js +7 -0
- package/coreui/components/edaManagerComponent/icons/folderRemoveOutlined.js.map +1 -0
- package/coreui/components/edaManagerComponent/utils/export.d.ts +1 -1
- package/coreui/components/edaManagerComponent/utils/export.js +20 -23
- package/coreui/components/edaManagerComponent/utils/export.js.map +1 -1
- package/coreui/components/select/abstractMultiSelect.d.ts +32 -0
- package/coreui/components/select/abstractMultiSelect.js +126 -0
- package/coreui/components/select/abstractMultiSelect.js.map +1 -0
- package/coreui/components/select/abstractSelectModalDialog.d.ts +5 -0
- package/coreui/components/select/abstractSelectModalDialog.js +45 -5
- package/coreui/components/select/abstractSelectModalDialog.js.map +1 -1
- package/coreui/components/webPush/webPushSwitch.js.map +1 -1
- package/coreui/images/logo.svg +9 -9
- package/coreui/images/logo_full.svg +11 -11
- package/d2configuration/edaManager/{DB.EM_EDA_DescriptiveVector.xml → DB.EM_EDA_VectorScenario.xml} +10 -10
- package/d2configuration/edaManager/E.EM_DETAIL_IMPL.xml +4 -4
- package/d2configuration/edaManager/E.EM_DETAIL_UNIT.xml +35 -15
- package/d2configuration/edaManager/E.EM_NAVIGATOR_IMPL.xml +13 -5
- package/d2configuration/edaManager/E.EM_NAVIGATOR_SQL.xml +12 -1
- package/d2configuration/edaManager/E.EM_NAVIGATOR_UNIT.xml +113 -5
- package/d2configuration/edaManager/E.EM_VECTOR_IMPL.xml +11 -1
- package/d2configuration/edaManager/E.EM_VECTOR_UNIT.xml +25 -1
- package/d2configuration/edaManager/{SD.EM_EDA_StatVectorRec_V1.xml → SD.EM_EDA_VectorScenario.xml} +13 -36
- package/package.json +2 -2
- package/coreui/components/edaManagerComponent/components/edaTableEditorDialog.js.map +0 -1
- package/coreui/components/edaManagerComponent/components/exportDialog.js.map +0 -1
- package/d2configuration/edaManager/SD.EM_EDA_DescriptiveVector.xml +0 -179
- package/d2configuration/edaManager/SD.EM_EDA_InsertValuesToVector_V1.xml +0 -227
- package/d2configuration/edaManager/SD.EM_EDA_ReadValuesFromVector_V1.xml +0 -178
- package/d2configuration/edaManager/SD.EM_EDA_VectorValues.xml +0 -58
- /package/coreui/components/edaManagerComponent/{components → dialogs}/edaTableEditorDialog.d.ts +0 -0
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import dayjs from "d2core/dayjs";
|
|
2
|
+
import { LocaleHolder } from "d2core/i18n/localeHolder";
|
|
3
|
+
class D2ChartAdvancedZoom {
|
|
4
|
+
constructor(chartInstance) {
|
|
5
|
+
this.startPixelX = null;
|
|
6
|
+
this.chartInstance = chartInstance;
|
|
7
|
+
}
|
|
8
|
+
register() {
|
|
9
|
+
const zr = this.chartInstance.getZr();
|
|
10
|
+
zr.on("click", (e) => this.onClick(e));
|
|
11
|
+
zr.on("mousemove", (e) => {
|
|
12
|
+
if (this.startPixelX !== null) {
|
|
13
|
+
this.updateSelection(e.offsetX, e.offsetY);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
zr.on("globalout", () => this.clearSelection());
|
|
17
|
+
}
|
|
18
|
+
getGridRect() {
|
|
19
|
+
try {
|
|
20
|
+
return this.chartInstance.getModel().getComponent("grid", 0).coordinateSystem.getRect();
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
onClick(e) {
|
|
27
|
+
if (!this.chartInstance.containPixel("grid", [e.offsetX, e.offsetY])) {
|
|
28
|
+
this.clearSelection();
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (this.startPixelX === null) {
|
|
32
|
+
this.startPixelX = e.offsetX;
|
|
33
|
+
this.updateSelection(e.offsetX, e.offsetY);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
this.finishZoom(e.offsetX);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
static measureLabel(text) {
|
|
40
|
+
if (!D2ChartAdvancedZoom.measureContext) {
|
|
41
|
+
D2ChartAdvancedZoom.measureContext = document.createElement("canvas").getContext("2d");
|
|
42
|
+
}
|
|
43
|
+
const context = D2ChartAdvancedZoom.measureContext;
|
|
44
|
+
if (!context) {
|
|
45
|
+
return text.length * 7;
|
|
46
|
+
}
|
|
47
|
+
context.font = D2ChartAdvancedZoom.LABEL_FONT;
|
|
48
|
+
return context.measureText(text).width;
|
|
49
|
+
}
|
|
50
|
+
static getTimestampFormat(visibleSpanMillis) {
|
|
51
|
+
const timeFormat = LocaleHolder.getTimeFormat(false, false);
|
|
52
|
+
if (visibleSpanMillis < D2ChartAdvancedZoom.MILLISECONDS_PER_DAY) {
|
|
53
|
+
return timeFormat;
|
|
54
|
+
}
|
|
55
|
+
return `${timeFormat} ${LocaleHolder.getDateFormat(visibleSpanMillis >= D2ChartAdvancedZoom.MILLISECONDS_PER_YEAR)}`;
|
|
56
|
+
}
|
|
57
|
+
static formatDuration(durationMillis) {
|
|
58
|
+
const duration = dayjs.duration(durationMillis);
|
|
59
|
+
const format = LocaleHolder.getDurationFormat(duration.asDays() >= 1, false).replace("DDDDD", "D");
|
|
60
|
+
return duration.format(format);
|
|
61
|
+
}
|
|
62
|
+
getLabel(id, text, x, y, accentColor, visible) {
|
|
63
|
+
return {
|
|
64
|
+
id: id,
|
|
65
|
+
type: "text",
|
|
66
|
+
z: 1001,
|
|
67
|
+
silent: true,
|
|
68
|
+
invisible: !visible,
|
|
69
|
+
x: x,
|
|
70
|
+
y: y,
|
|
71
|
+
style: {
|
|
72
|
+
text: text,
|
|
73
|
+
font: D2ChartAdvancedZoom.LABEL_FONT,
|
|
74
|
+
fill: "#333",
|
|
75
|
+
backgroundColor: "rgba(255, 255, 255, 0.85)",
|
|
76
|
+
borderColor: accentColor,
|
|
77
|
+
borderWidth: 1,
|
|
78
|
+
borderRadius: 2,
|
|
79
|
+
padding: [2, 4],
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
updateSelection(currentPixelX, currentPixelY) {
|
|
84
|
+
const gridRect = this.getGridRect();
|
|
85
|
+
if (!gridRect || this.startPixelX === null) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const startPixelX = this.startPixelX;
|
|
89
|
+
const gridRightPixelX = gridRect.x + gridRect.width;
|
|
90
|
+
const clampedPixelX = Math.min(Math.max(currentPixelX, gridRect.x), gridRightPixelX);
|
|
91
|
+
const clampedPixelY = Math.min(Math.max(currentPixelY, gridRect.y), gridRect.y + gridRect.height);
|
|
92
|
+
const zoomIn = clampedPixelX >= startPixelX;
|
|
93
|
+
const accentColor = zoomIn ? "rgba(64, 150, 255, 0.8)" : "rgba(255, 77, 79, 0.8)";
|
|
94
|
+
const leftPixelX = Math.min(startPixelX, clampedPixelX);
|
|
95
|
+
const rightPixelX = Math.max(startPixelX, clampedPixelX);
|
|
96
|
+
const leftValue = this.chartInstance.convertFromPixel({ xAxisIndex: 0 }, leftPixelX);
|
|
97
|
+
const rightValue = this.chartInstance.convertFromPixel({ xAxisIndex: 0 }, rightPixelX);
|
|
98
|
+
const visibleStartValue = this.chartInstance.convertFromPixel({ xAxisIndex: 0 }, gridRect.x);
|
|
99
|
+
const visibleEndValue = this.chartInstance.convertFromPixel({ xAxisIndex: 0 }, gridRightPixelX);
|
|
100
|
+
const timestampFormat = D2ChartAdvancedZoom.getTimestampFormat(visibleEndValue - visibleStartValue);
|
|
101
|
+
const labelMargin = 6;
|
|
102
|
+
const labelPaddingWidth = 10;
|
|
103
|
+
const labelHeight = 22;
|
|
104
|
+
const labelY = gridRect.y + 4;
|
|
105
|
+
const leftLabelText = dayjs(leftValue).format(timestampFormat);
|
|
106
|
+
const leftLabelWidth = D2ChartAdvancedZoom.measureLabel(leftLabelText) + labelPaddingWidth;
|
|
107
|
+
let leftLabelX = leftPixelX - labelMargin - leftLabelWidth;
|
|
108
|
+
if (leftLabelX < gridRect.x) {
|
|
109
|
+
leftLabelX = leftPixelX + labelMargin;
|
|
110
|
+
}
|
|
111
|
+
const rightLabelText = dayjs(rightValue).format(timestampFormat);
|
|
112
|
+
const rightLabelWidth = D2ChartAdvancedZoom.measureLabel(rightLabelText) + labelPaddingWidth;
|
|
113
|
+
let rightLabelX = rightPixelX + labelMargin;
|
|
114
|
+
if (rightLabelX + rightLabelWidth > gridRightPixelX) {
|
|
115
|
+
rightLabelX = rightPixelX - labelMargin - rightLabelWidth;
|
|
116
|
+
}
|
|
117
|
+
const labelsOverlap = leftLabelX < rightLabelX + rightLabelWidth + labelMargin
|
|
118
|
+
&& rightLabelX < leftLabelX + leftLabelWidth + labelMargin;
|
|
119
|
+
const rightLabelY = labelsOverlap ? labelY + labelHeight : labelY;
|
|
120
|
+
const durationLabelText = D2ChartAdvancedZoom.formatDuration(rightValue - leftValue);
|
|
121
|
+
const durationLabelWidth = D2ChartAdvancedZoom.measureLabel(durationLabelText) + labelPaddingWidth;
|
|
122
|
+
let durationLabelX = clampedPixelX + 2 * labelMargin;
|
|
123
|
+
if (durationLabelX + durationLabelWidth > gridRightPixelX) {
|
|
124
|
+
durationLabelX = clampedPixelX - 2 * labelMargin - durationLabelWidth;
|
|
125
|
+
}
|
|
126
|
+
this.chartInstance.setOption({
|
|
127
|
+
graphic: [{
|
|
128
|
+
id: D2ChartAdvancedZoom.RECT_ID,
|
|
129
|
+
type: "rect",
|
|
130
|
+
z: 1000,
|
|
131
|
+
silent: true,
|
|
132
|
+
shape: {
|
|
133
|
+
x: leftPixelX,
|
|
134
|
+
y: gridRect.y,
|
|
135
|
+
width: rightPixelX - leftPixelX,
|
|
136
|
+
height: gridRect.height,
|
|
137
|
+
},
|
|
138
|
+
style: {
|
|
139
|
+
fill: zoomIn ? "rgba(64, 150, 255, 0.15)" : "rgba(255, 77, 79, 0.15)",
|
|
140
|
+
stroke: accentColor,
|
|
141
|
+
lineWidth: 1,
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
this.getLabel(D2ChartAdvancedZoom.START_LABEL_ID, leftLabelText, leftLabelX, labelY, accentColor, zoomIn),
|
|
145
|
+
this.getLabel(D2ChartAdvancedZoom.END_LABEL_ID, rightLabelText, rightLabelX, rightLabelY, accentColor, zoomIn),
|
|
146
|
+
this.getLabel(D2ChartAdvancedZoom.DURATION_LABEL_ID, durationLabelText, durationLabelX, clampedPixelY - 10, accentColor, zoomIn),
|
|
147
|
+
]
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
clearSelection() {
|
|
151
|
+
if (this.startPixelX !== null) {
|
|
152
|
+
this.startPixelX = null;
|
|
153
|
+
this.chartInstance.setOption({
|
|
154
|
+
graphic: [
|
|
155
|
+
D2ChartAdvancedZoom.RECT_ID,
|
|
156
|
+
D2ChartAdvancedZoom.START_LABEL_ID,
|
|
157
|
+
D2ChartAdvancedZoom.END_LABEL_ID,
|
|
158
|
+
D2ChartAdvancedZoom.DURATION_LABEL_ID,
|
|
159
|
+
].map(id => ({ id: id, $action: "remove" }))
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
finishZoom(endPixelX) {
|
|
164
|
+
const startPixelX = this.startPixelX;
|
|
165
|
+
this.clearSelection();
|
|
166
|
+
const selectionWidthPixels = Math.abs(endPixelX - startPixelX);
|
|
167
|
+
const gridRect = this.getGridRect();
|
|
168
|
+
if (!gridRect || selectionWidthPixels < D2ChartAdvancedZoom.MIN_WIDTH_PIXELS) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
if (endPixelX > startPixelX) {
|
|
172
|
+
this.chartInstance.dispatchAction({
|
|
173
|
+
type: "dataZoom",
|
|
174
|
+
startValue: this.chartInstance.convertFromPixel({ xAxisIndex: 0 }, startPixelX),
|
|
175
|
+
endValue: this.chartInstance.convertFromPixel({ xAxisIndex: 0 }, endPixelX),
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
this.chartInstance.dispatchAction({
|
|
180
|
+
type: "dataZoom",
|
|
181
|
+
start: 0,
|
|
182
|
+
end: 100,
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
D2ChartAdvancedZoom.RECT_ID = "__advanced-zoom-rect";
|
|
188
|
+
D2ChartAdvancedZoom.START_LABEL_ID = "__advanced-zoom-start-label";
|
|
189
|
+
D2ChartAdvancedZoom.END_LABEL_ID = "__advanced-zoom-end-label";
|
|
190
|
+
D2ChartAdvancedZoom.DURATION_LABEL_ID = "__advanced-zoom-duration-label";
|
|
191
|
+
D2ChartAdvancedZoom.MIN_WIDTH_PIXELS = 3;
|
|
192
|
+
D2ChartAdvancedZoom.LABEL_FONT = "12px sans-serif";
|
|
193
|
+
D2ChartAdvancedZoom.MILLISECONDS_PER_DAY = 24 * 60 * 60 * 1000;
|
|
194
|
+
D2ChartAdvancedZoom.MILLISECONDS_PER_YEAR = 365 * D2ChartAdvancedZoom.MILLISECONDS_PER_DAY;
|
|
195
|
+
D2ChartAdvancedZoom.measureContext = null;
|
|
196
|
+
export default D2ChartAdvancedZoom;
|
|
197
|
+
//# sourceMappingURL=d2ChartAdvancedZoom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"d2ChartAdvancedZoom.js","sourceRoot":"","sources":["../../../../../coreui/components/d2Chart/d2ChartAdvancedZoom.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,cAAc,CAAC;AACjC,OAAO,EAAC,YAAY,EAAC,MAAM,0BAA0B,CAAC;AActD,MAAqB,mBAAmB;IAiBpC,YAAY,aAA8B;QAFlC,gBAAW,GAAkB,IAAI,CAAC;QAGtC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACvC,CAAC;IAMD,QAAQ;QACJ,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QACtC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAuC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAuC,EAAE,EAAE;YAC3D,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;gBAC5B,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC/C,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IACpD,CAAC;IAGO,WAAW;QACf,IAAI,CAAC;YACD,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;QAC5F,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAGO,OAAO,CAAC,CAAuC;QACnD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YACnE,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,OAAO;QACX,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC;YAC7B,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;IACL,CAAC;IAGO,MAAM,CAAC,YAAY,CAAC,IAAY;QACpC,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,CAAC;YACtC,mBAAmB,CAAC,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC3F,CAAC;QAED,MAAM,OAAO,GAAG,mBAAmB,CAAC,cAAc,CAAC;QACnD,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3B,CAAC;QAED,OAAO,CAAC,IAAI,GAAG,mBAAmB,CAAC,UAAU,CAAC;QAC9C,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;IAC3C,CAAC;IAOO,MAAM,CAAC,kBAAkB,CAAC,iBAAyB;QACvD,MAAM,UAAU,GAAG,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC5D,IAAI,iBAAiB,GAAG,mBAAmB,CAAC,oBAAoB,EAAE,CAAC;YAC/D,OAAO,UAAU,CAAC;QACtB,CAAC;QAED,OAAO,GAAG,UAAU,IAAI,YAAY,CAAC,aAAa,CAAC,iBAAiB,IAAI,mBAAmB,CAAC,qBAAqB,CAAC,EAAE,CAAC;IACzH,CAAC;IAOO,MAAM,CAAC,cAAc,CAAC,cAAsB;QAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,YAAY,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACnG,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAGO,QAAQ,CAAC,EAAU,EAAE,IAAY,EAAE,CAAS,EAAE,CAAS,EAAE,WAAmB,EAAE,OAAgB;QAClG,OAAO;YACH,EAAE,EAAE,EAAE;YACN,IAAI,EAAE,MAAM;YACZ,CAAC,EAAE,IAAI;YACP,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,CAAC,OAAO;YACnB,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,KAAK,EAAE;gBACH,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,mBAAmB,CAAC,UAAU;gBACpC,IAAI,EAAE,MAAM;gBACZ,eAAe,EAAE,2BAA2B;gBAC5C,WAAW,EAAE,WAAW;gBACxB,WAAW,EAAE,CAAC;gBACd,YAAY,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;aAClB;SACJ,CAAC;IACN,CAAC;IAYO,eAAe,CAAC,aAAqB,EAAE,aAAqB;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YACzC,OAAO;QACX,CAAC;QAGD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,MAAM,eAAe,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;QACpD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;QACrF,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClG,MAAM,MAAM,GAAG,aAAa,IAAI,WAAW,CAAC;QAC5C,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,wBAAwB,CAAC;QAElF,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACxD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAC,UAAU,EAAE,CAAC,EAAC,EAAE,UAAU,CAAW,CAAC;QAC7F,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAC,UAAU,EAAE,CAAC,EAAC,EAAE,WAAW,CAAW,CAAC;QAG/F,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAC,UAAU,EAAE,CAAC,EAAC,EAAE,QAAQ,CAAC,CAAC,CAAW,CAAC;QACrG,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAC,UAAU,EAAE,CAAC,EAAC,EAAE,eAAe,CAAW,CAAC;QACxG,MAAM,eAAe,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,eAAe,GAAG,iBAAiB,CAAC,CAAC;QAEpG,MAAM,WAAW,GAAG,CAAC,CAAC;QACtB,MAAM,iBAAiB,GAAG,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;QAG9B,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC/D,MAAM,cAAc,GAAG,mBAAmB,CAAC,YAAY,CAAC,aAAa,CAAC,GAAG,iBAAiB,CAAC;QAC3F,IAAI,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,cAAc,CAAC;QAC3D,IAAI,UAAU,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC;YAC1B,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;QAC1C,CAAC;QAGD,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACjE,MAAM,eAAe,GAAG,mBAAmB,CAAC,YAAY,CAAC,cAAc,CAAC,GAAG,iBAAiB,CAAC;QAC7F,IAAI,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;QAC5C,IAAI,WAAW,GAAG,eAAe,GAAG,eAAe,EAAE,CAAC;YAClD,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,eAAe,CAAC;QAC9D,CAAC;QAGD,MAAM,aAAa,GAAG,UAAU,GAAG,WAAW,GAAG,eAAe,GAAG,WAAW;eACvE,WAAW,GAAG,UAAU,GAAG,cAAc,GAAG,WAAW,CAAC;QAC/D,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;QAGlE,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,cAAc,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;QACrF,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,YAAY,CAAC,iBAAiB,CAAC,GAAG,iBAAiB,CAAC;QACnG,IAAI,cAAc,GAAG,aAAa,GAAG,CAAC,GAAG,WAAW,CAAC;QACrD,IAAI,cAAc,GAAG,kBAAkB,GAAG,eAAe,EAAE,CAAC;YACxD,cAAc,GAAG,aAAa,GAAG,CAAC,GAAG,WAAW,GAAG,kBAAkB,CAAC;QAC1E,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;YACzB,OAAO,EAAE,CAAC;oBACN,EAAE,EAAE,mBAAmB,CAAC,OAAO;oBAC/B,IAAI,EAAE,MAAM;oBACZ,CAAC,EAAE,IAAI;oBACP,MAAM,EAAE,IAAI;oBACZ,KAAK,EAAE;wBACH,CAAC,EAAE,UAAU;wBACb,CAAC,EAAE,QAAQ,CAAC,CAAC;wBACb,KAAK,EAAE,WAAW,GAAG,UAAU;wBAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM;qBAC1B;oBACD,KAAK,EAAE;wBACH,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,yBAAyB;wBACrE,MAAM,EAAE,WAAW;wBACnB,SAAS,EAAE,CAAC;qBACf;iBACJ;gBACG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC;gBACzG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC;gBAC9G,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,GAAG,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC;aACnI;SACJ,CAAC,CAAC;IACP,CAAC;IAGO,cAAc;QAClB,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;gBACzB,OAAO,EAAE;oBACL,mBAAmB,CAAC,OAAO;oBAC3B,mBAAmB,CAAC,cAAc;oBAClC,mBAAmB,CAAC,YAAY;oBAChC,mBAAmB,CAAC,iBAAiB;iBACxC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAC,CAAC,CAAC;aAC7C,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAMO,UAAU,CAAC,SAAiB;QAChC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAY,CAAC;QACtC,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,WAAW,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,IAAI,CAAC,QAAQ,IAAI,oBAAoB,GAAG,mBAAmB,CAAC,gBAAgB,EAAE,CAAC;YAC3E,OAAO;QACX,CAAC;QAED,IAAI,SAAS,GAAG,WAAW,EAAE,CAAC;YAC1B,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;gBAC9B,IAAI,EAAE,UAAU;gBAChB,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAC,UAAU,EAAE,CAAC,EAAC,EAAE,WAAW,CAAW;gBACvF,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAC,UAAU,EAAE,CAAC,EAAC,EAAE,SAAS,CAAW;aACtF,CAAC,CAAC;QACP,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;gBAC9B,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,CAAC;gBACR,GAAG,EAAE,GAAG;aACX,CAAC,CAAC;QACP,CAAC;IACL,CAAC;;AAlQc,2BAAO,GAAG,sBAAsB,AAAzB,CAA0B;AACjC,kCAAc,GAAG,6BAA6B,AAAhC,CAAiC;AAC/C,gCAAY,GAAG,2BAA2B,AAA9B,CAA+B;AAC3C,qCAAiB,GAAG,gCAAgC,AAAnC,CAAoC;AAErD,oCAAgB,GAAG,CAAC,AAAJ,CAAK;AACrB,8BAAU,GAAG,iBAAiB,AAApB,CAAqB;AAC/B,wCAAoB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,AAAtB,CAAuB;AAC3C,yCAAqB,GAAG,GAAG,GAAG,mBAAmB,CAAC,oBAAoB,AAAjD,CAAkD;AAEvE,kCAAc,GAAoC,IAAI,AAAxC,CAAyC;eAXrD,mBAAmB","sourcesContent":["import {EChartsInstance} from \"echarts-for-react\";\r\nimport dayjs from \"d2core/dayjs\";\r\nimport {LocaleHolder} from \"d2core/i18n/localeHolder\";\r\n\r\n/**\r\n * Click-move-click mouse zoom for a D2 chart.\r\n *\r\n * The first click inside the chart grid starts an interval selection; while the mouse moves,\r\n * the selected interval is visualized together with its boundary timestamps and duration.\r\n * A second click to the right of the first one zooms into the selected interval,\r\n * a second click to the left resets the zoom to the full data range.\r\n *\r\n * The selection is cancelled by clicking outside the chart grid or by leaving the chart area.\r\n * All visuals are transient ECharts `graphic` elements identified by the `*_ID` constants,\r\n * positioned in pixel coordinates and removed when the selection ends.\r\n */\r\nexport default class D2ChartAdvancedZoom {\r\n private static RECT_ID = \"__advanced-zoom-rect\";\r\n private static START_LABEL_ID = \"__advanced-zoom-start-label\";\r\n private static END_LABEL_ID = \"__advanced-zoom-end-label\";\r\n private static DURATION_LABEL_ID = \"__advanced-zoom-duration-label\";\r\n /** Selections narrower than this are treated as an accidental double click and ignored. */\r\n private static MIN_WIDTH_PIXELS = 3;\r\n private static LABEL_FONT = \"12px sans-serif\";\r\n private static MILLISECONDS_PER_DAY = 24 * 60 * 60 * 1000;\r\n private static MILLISECONDS_PER_YEAR = 365 * D2ChartAdvancedZoom.MILLISECONDS_PER_DAY;\r\n /** Shared off-screen canvas context used to measure label widths, created lazily. */\r\n private static measureContext: CanvasRenderingContext2D | null = null;\r\n\r\n private readonly chartInstance: EChartsInstance;\r\n /** X pixel of the first click; null means no selection is in progress. */\r\n private startPixelX: number | null = null;\r\n\r\n constructor(chartInstance: EChartsInstance) {\r\n this.chartInstance = chartInstance;\r\n }\r\n\r\n /**\r\n * Attaches the mouse handlers to the chart's zrender instance.\r\n * The handlers live as long as the chart instance, no explicit cleanup is needed.\r\n */\r\n register() {\r\n const zr = this.chartInstance.getZr();\r\n zr.on(\"click\", (e: { offsetX: number, offsetY: number }) => this.onClick(e));\r\n zr.on(\"mousemove\", (e: { offsetX: number, offsetY: number }) => {\r\n if (this.startPixelX !== null) {\r\n this.updateSelection(e.offsetX, e.offsetY);\r\n }\r\n });\r\n // cancel the selection when the mouse leaves the chart canvas\r\n zr.on(\"globalout\", () => this.clearSelection());\r\n }\r\n\r\n /** Pixel rectangle of the chart grid (plotting area), null when the chart is not laid out yet. */\r\n private getGridRect(): { x: number, y: number, width: number, height: number } | null {\r\n try {\r\n return this.chartInstance.getModel().getComponent(\"grid\", 0).coordinateSystem.getRect();\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n /** First click starts the selection, second click finishes it; a click outside the grid cancels it. */\r\n private onClick(e: { offsetX: number, offsetY: number }) {\r\n if (!this.chartInstance.containPixel(\"grid\", [e.offsetX, e.offsetY])) {\r\n this.clearSelection();\r\n return;\r\n }\r\n\r\n if (this.startPixelX === null) {\r\n this.startPixelX = e.offsetX;\r\n this.updateSelection(e.offsetX, e.offsetY);\r\n } else {\r\n this.finishZoom(e.offsetX);\r\n }\r\n }\r\n\r\n /** Width of the label text in pixels, measured with the label font. */\r\n private static measureLabel(text: string): number {\r\n if (!D2ChartAdvancedZoom.measureContext) {\r\n D2ChartAdvancedZoom.measureContext = document.createElement(\"canvas\").getContext(\"2d\");\r\n }\r\n\r\n const context = D2ChartAdvancedZoom.measureContext;\r\n if (!context) {\r\n return text.length * 7;\r\n }\r\n\r\n context.font = D2ChartAdvancedZoom.LABEL_FONT;\r\n return context.measureText(text).width;\r\n }\r\n\r\n /**\r\n * Locale timestamp format for the boundary labels (time first, then date), chosen by the span\r\n * of the interval currently visible in the chart: time only when less than a day is visible,\r\n * time and date without the year when less than a year is visible, time and full date otherwise.\r\n */\r\n private static getTimestampFormat(visibleSpanMillis: number): string {\r\n const timeFormat = LocaleHolder.getTimeFormat(false, false);\r\n if (visibleSpanMillis < D2ChartAdvancedZoom.MILLISECONDS_PER_DAY) {\r\n return timeFormat;\r\n }\r\n\r\n return `${timeFormat} ${LocaleHolder.getDateFormat(visibleSpanMillis >= D2ChartAdvancedZoom.MILLISECONDS_PER_YEAR)}`;\r\n }\r\n\r\n /**\r\n * Formats a millisecond duration with the locale duration format provided by d2core's\r\n * LocaleHolder; the days part is included only when the duration is at least one day long\r\n * and is rendered without leading zeros.\r\n */\r\n private static formatDuration(durationMillis: number): string {\r\n const duration = dayjs.duration(durationMillis);\r\n const format = LocaleHolder.getDurationFormat(duration.asDays() >= 1, false).replace(\"DDDDD\", \"D\");\r\n return duration.format(format);\r\n }\r\n\r\n /** ECharts graphic definition of one selection label (timestamp or duration). */\r\n private getLabel(id: string, text: string, x: number, y: number, accentColor: string, visible: boolean) {\r\n return {\r\n id: id,\r\n type: \"text\",\r\n z: 1001,\r\n silent: true, // labels must not steal mouse events from the chart\r\n invisible: !visible,\r\n x: x,\r\n y: y,\r\n style: {\r\n text: text,\r\n font: D2ChartAdvancedZoom.LABEL_FONT,\r\n fill: \"#333\",\r\n backgroundColor: \"rgba(255, 255, 255, 0.85)\",\r\n borderColor: accentColor,\r\n borderWidth: 1,\r\n borderRadius: 2,\r\n padding: [2, 4],\r\n },\r\n };\r\n }\r\n\r\n /**\r\n * Redraws the selection visuals for the current mouse position: the selection rectangle,\r\n * the boundary timestamp labels at the top of the grid and the duration label next to the cursor.\r\n *\r\n * Labels are placed outside the selection by default and flip to the other side of their\r\n * boundary line when they would not fit into the grid; when the two timestamp labels would\r\n * overlap each other, the end label moves one row lower. The labels are hidden while the\r\n * selection direction means a zoom reset (mouse to the left of the start), because the\r\n * selected interval has no meaning then.\r\n */\r\n private updateSelection(currentPixelX: number, currentPixelY: number) {\r\n const gridRect = this.getGridRect();\r\n if (!gridRect || this.startPixelX === null) {\r\n return;\r\n }\r\n\r\n // keep the selection rectangle and the labels inside the grid even when the cursor is outside\r\n const startPixelX = this.startPixelX;\r\n const gridRightPixelX = gridRect.x + gridRect.width;\r\n const clampedPixelX = Math.min(Math.max(currentPixelX, gridRect.x), gridRightPixelX);\r\n const clampedPixelY = Math.min(Math.max(currentPixelY, gridRect.y), gridRect.y + gridRect.height);\r\n const zoomIn = clampedPixelX >= startPixelX;\r\n const accentColor = zoomIn ? \"rgba(64, 150, 255, 0.8)\" : \"rgba(255, 77, 79, 0.8)\";\r\n\r\n const leftPixelX = Math.min(startPixelX, clampedPixelX);\r\n const rightPixelX = Math.max(startPixelX, clampedPixelX);\r\n const leftValue = this.chartInstance.convertFromPixel({xAxisIndex: 0}, leftPixelX) as number;\r\n const rightValue = this.chartInstance.convertFromPixel({xAxisIndex: 0}, rightPixelX) as number;\r\n\r\n // boundary label format depends on how long an interval is currently visible in the chart\r\n const visibleStartValue = this.chartInstance.convertFromPixel({xAxisIndex: 0}, gridRect.x) as number;\r\n const visibleEndValue = this.chartInstance.convertFromPixel({xAxisIndex: 0}, gridRightPixelX) as number;\r\n const timestampFormat = D2ChartAdvancedZoom.getTimestampFormat(visibleEndValue - visibleStartValue);\r\n\r\n const labelMargin = 6;\r\n const labelPaddingWidth = 10; // padding [2, 4] + border\r\n const labelHeight = 22;\r\n const labelY = gridRect.y + 4;\r\n\r\n // interval start label - to the left of the selection, flipped right when there is no room\r\n const leftLabelText = dayjs(leftValue).format(timestampFormat);\r\n const leftLabelWidth = D2ChartAdvancedZoom.measureLabel(leftLabelText) + labelPaddingWidth;\r\n let leftLabelX = leftPixelX - labelMargin - leftLabelWidth;\r\n if (leftLabelX < gridRect.x) {\r\n leftLabelX = leftPixelX + labelMargin;\r\n }\r\n\r\n // interval end label - to the right of the selection, flipped left when there is no room\r\n const rightLabelText = dayjs(rightValue).format(timestampFormat);\r\n const rightLabelWidth = D2ChartAdvancedZoom.measureLabel(rightLabelText) + labelPaddingWidth;\r\n let rightLabelX = rightPixelX + labelMargin;\r\n if (rightLabelX + rightLabelWidth > gridRightPixelX) {\r\n rightLabelX = rightPixelX - labelMargin - rightLabelWidth;\r\n }\r\n\r\n // when the labels would overlap horizontally, move the end label one row lower\r\n const labelsOverlap = leftLabelX < rightLabelX + rightLabelWidth + labelMargin\r\n && rightLabelX < leftLabelX + leftLabelWidth + labelMargin;\r\n const rightLabelY = labelsOverlap ? labelY + labelHeight : labelY;\r\n\r\n // duration label follows the cursor, flipped to its left when there is no room on the right\r\n const durationLabelText = D2ChartAdvancedZoom.formatDuration(rightValue - leftValue);\r\n const durationLabelWidth = D2ChartAdvancedZoom.measureLabel(durationLabelText) + labelPaddingWidth;\r\n let durationLabelX = clampedPixelX + 2 * labelMargin;\r\n if (durationLabelX + durationLabelWidth > gridRightPixelX) {\r\n durationLabelX = clampedPixelX - 2 * labelMargin - durationLabelWidth;\r\n }\r\n\r\n this.chartInstance.setOption({\r\n graphic: [{\r\n id: D2ChartAdvancedZoom.RECT_ID,\r\n type: \"rect\",\r\n z: 1000,\r\n silent: true,\r\n shape: {\r\n x: leftPixelX,\r\n y: gridRect.y,\r\n width: rightPixelX - leftPixelX,\r\n height: gridRect.height,\r\n },\r\n style: {\r\n fill: zoomIn ? \"rgba(64, 150, 255, 0.15)\" : \"rgba(255, 77, 79, 0.15)\",\r\n stroke: accentColor,\r\n lineWidth: 1,\r\n },\r\n },\r\n this.getLabel(D2ChartAdvancedZoom.START_LABEL_ID, leftLabelText, leftLabelX, labelY, accentColor, zoomIn),\r\n this.getLabel(D2ChartAdvancedZoom.END_LABEL_ID, rightLabelText, rightLabelX, rightLabelY, accentColor, zoomIn),\r\n this.getLabel(D2ChartAdvancedZoom.DURATION_LABEL_ID, durationLabelText, durationLabelX, clampedPixelY - 10, accentColor, zoomIn),\r\n ]\r\n });\r\n }\r\n\r\n /** Ends the selection and removes all its graphic elements from the chart. */\r\n private clearSelection() {\r\n if (this.startPixelX !== null) {\r\n this.startPixelX = null;\r\n this.chartInstance.setOption({\r\n graphic: [\r\n D2ChartAdvancedZoom.RECT_ID,\r\n D2ChartAdvancedZoom.START_LABEL_ID,\r\n D2ChartAdvancedZoom.END_LABEL_ID,\r\n D2ChartAdvancedZoom.DURATION_LABEL_ID,\r\n ].map(id => ({id: id, $action: \"remove\"}))\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Applies the zoom on the second click: a selection made to the right zooms into the\r\n * selected interval, a selection made to the left resets the zoom to the full data range.\r\n */\r\n private finishZoom(endPixelX: number) {\r\n const startPixelX = this.startPixelX!;\r\n this.clearSelection();\r\n\r\n const selectionWidthPixels = Math.abs(endPixelX - startPixelX);\r\n const gridRect = this.getGridRect();\r\n if (!gridRect || selectionWidthPixels < D2ChartAdvancedZoom.MIN_WIDTH_PIXELS) {\r\n return;\r\n }\r\n\r\n if (endPixelX > startPixelX) {\r\n this.chartInstance.dispatchAction({\r\n type: \"dataZoom\",\r\n startValue: this.chartInstance.convertFromPixel({xAxisIndex: 0}, startPixelX) as number,\r\n endValue: this.chartInstance.convertFromPixel({xAxisIndex: 0}, endPixelX) as number,\r\n });\r\n } else {\r\n this.chartInstance.dispatchAction({\r\n type: \"dataZoom\",\r\n start: 0,\r\n end: 100,\r\n });\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -10,6 +10,7 @@ export interface D2ChartPanelProps {
|
|
|
10
10
|
markArea?: MarkArea;
|
|
11
11
|
compact?: boolean;
|
|
12
12
|
yAxisLabel?: string;
|
|
13
|
+
advancedMouseZoom?: boolean;
|
|
13
14
|
tableHeight: number | "auto";
|
|
14
15
|
tableWrapperStyle?: Omit<React.CSSProperties, "height">;
|
|
15
16
|
}
|
|
@@ -27,6 +28,7 @@ export default class D2ChartPanel extends React.Component<D2ChartPanelProps, Sta
|
|
|
27
28
|
private d2ChartPanelInModal;
|
|
28
29
|
private d2ChartTablePanel;
|
|
29
30
|
constructor(props: Readonly<D2ChartPanelProps>);
|
|
31
|
+
private get advancedMouseZoomEnabled();
|
|
30
32
|
componentDidUpdate(prevProps: Readonly<D2ChartPanelProps>): void;
|
|
31
33
|
private onSwitchLegend;
|
|
32
34
|
private onSwitchCalendarData;
|
|
@@ -11,6 +11,7 @@ import D2ChartToolboxPanel from "./d2ChartToolboxPanel";
|
|
|
11
11
|
import { LoadingOutlined } from "@ant-design/icons";
|
|
12
12
|
import { LineStyleEnum } from "../../../api/types/d2ChartTypes";
|
|
13
13
|
import D2ChartUtils from "../../../api/util/d2ChartUtils";
|
|
14
|
+
import D2ChartAdvancedZoom from "./d2ChartAdvancedZoom";
|
|
14
15
|
class D2ChartPanel extends React.Component {
|
|
15
16
|
constructor(props) {
|
|
16
17
|
super(props);
|
|
@@ -27,6 +28,9 @@ class D2ChartPanel extends React.Component {
|
|
|
27
28
|
this.onSwitchCalendarData = this.onSwitchCalendarData.bind(this);
|
|
28
29
|
this.onSwitchLegend = this.onSwitchLegend.bind(this);
|
|
29
30
|
}
|
|
31
|
+
get advancedMouseZoomEnabled() {
|
|
32
|
+
return this.props.advancedMouseZoom !== false;
|
|
33
|
+
}
|
|
30
34
|
componentDidUpdate(prevProps) {
|
|
31
35
|
if (!isEqual(this.props.markArea, prevProps.markArea) && this.props.d2ChartRecords.length > 0) {
|
|
32
36
|
this.onReload();
|
|
@@ -247,7 +251,7 @@ class D2ChartPanel extends React.Component {
|
|
|
247
251
|
});
|
|
248
252
|
}
|
|
249
253
|
renderToolbox() {
|
|
250
|
-
return (React.createElement(D2ChartToolboxPanel, { missingData: this.state.missingData, calendarDataVisible: this.state.calendarDataVisible, missingDataVisible: this.state.missingDataVisible, showCalendarIcon: !!this.props.d2ChartCalendarRecords, onSwitchCalendarData: () => {
|
|
254
|
+
return (React.createElement(D2ChartToolboxPanel, { missingData: this.state.missingData, calendarDataVisible: this.state.calendarDataVisible, missingDataVisible: this.state.missingDataVisible, showCalendarIcon: !!this.props.d2ChartCalendarRecords, showZoomIcons: !this.advancedMouseZoomEnabled, onSwitchCalendarData: () => {
|
|
251
255
|
this.setState({ calendarDataVisible: !this.state.calendarDataVisible }, () => {
|
|
252
256
|
this.onSwitchCalendarData();
|
|
253
257
|
});
|
|
@@ -277,7 +281,7 @@ class D2ChartPanel extends React.Component {
|
|
|
277
281
|
return (React.createElement(ModalDialog, { mode: "NO_BUTTONS", open: this.state.modalVisible, onCancel: () => this.setState({ modalVisible: false }), title: i18n("Chart"), initialWidth: window.innerWidth * 0.8, initialHeight: window.innerHeight * 0.98 },
|
|
278
282
|
React.createElement(D2ChartPanel, { ref: component => {
|
|
279
283
|
this.d2ChartPanelInModal = component;
|
|
280
|
-
}, d2ChartSeries: this.props.d2ChartSeries, d2ChartRecords: this.props.d2ChartRecords, d2ChartCalendarRecords: this.props.d2ChartCalendarRecords, loading: this.props.loading, tableHeight: 180, tableWrapperStyle: { padding: "0px 12px 8px" }, markArea: this.props.markArea })));
|
|
284
|
+
}, d2ChartSeries: this.props.d2ChartSeries, d2ChartRecords: this.props.d2ChartRecords, d2ChartCalendarRecords: this.props.d2ChartCalendarRecords, loading: this.props.loading, tableHeight: 180, tableWrapperStyle: { padding: "0px 12px 8px" }, markArea: this.props.markArea, advancedMouseZoom: this.props.advancedMouseZoom })));
|
|
281
285
|
}
|
|
282
286
|
render() {
|
|
283
287
|
const style = {
|
|
@@ -311,6 +315,9 @@ class D2ChartPanel extends React.Component {
|
|
|
311
315
|
this.d2ChartTablePanel?.updateGrid();
|
|
312
316
|
});
|
|
313
317
|
});
|
|
318
|
+
if (this.advancedMouseZoomEnabled) {
|
|
319
|
+
new D2ChartAdvancedZoom(instance).register();
|
|
320
|
+
}
|
|
314
321
|
setTimeout(() => instance.resize(), 50);
|
|
315
322
|
}, option: this.props.compact ? compactChartOptions : d2ChartOptions }),
|
|
316
323
|
React.createElement(D2ChartTablePanel, { style: { height: computedTableHeight, ...this.props.tableWrapperStyle }, ref: component => this.d2ChartTablePanel = component, tableItems: this.state.tableItems, tooltipTime: this.state.tooltipTime, onSwitchLegend: this.onSwitchLegend })));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"d2ChartPanel.js","sourceRoot":"","sources":["../../../../../coreui/components/d2Chart/d2ChartPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,YAA8C,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAC,mBAAmB,EAAE,cAAc,EAAC,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAC,EAAE,EAAC,MAAM,QAAQ,CAAC;AAC1B,OAAO,IAAI,MAAM,kBAAkB,CAAC;AACpC,OAAO,EAAC,KAAK,EAAC,MAAM,MAAM,CAAC;AAE3B,OAAO,OAAO,MAAM,gBAAgB,CAAC;AACrC,OAAO,iBAAqC,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAC,WAAW,EAAkB,MAAM,uCAAuC,CAAC;AACnF,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAmC,aAAa,EAAyB,MAAM,iCAAiC,CAAC;AACxH,OAAO,YAAY,MAAM,gCAAgC,CAAC;AAqC1D,MAAqB,YAAa,SAAQ,KAAK,CAAC,SAAmC;IAM/E,YAAY,KAAkC;QAC1C,KAAK,CAAC,KAAK,CAAC,CAAC;QALT,kBAAa,GAA2B,IAAI,CAAC;QAC7C,wBAAmB,GAAwB,IAAI,CAAC;QAChD,sBAAiB,GAA6B,IAAI,CAAC;QAKvD,IAAI,CAAC,KAAK,GAAG;YACT,UAAU,EAAE,EAAE;YACd,WAAW,EAAE,EAAE;YACf,YAAY,EAAE,KAAK;YACnB,mBAAmB,EAAE,KAAK;YAC1B,kBAAkB,EAAE,IAAI;SAC3B,CAAA;QAED,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC;IAED,kBAAkB,CAAC,SAAsC;QACrD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5F,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpB,CAAC;IACL,CAAC;IAEO,cAAc,CAAC,IAAY;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;QACxC,MAAM,gBAAgB,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;QAEpE,IAAI,gBAAgB,EAAE,CAAC;YACnB,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;gBAC9B,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,cAAc;gBAClE,IAAI,EAAE,IAAI;aACb,CAAC,CAAC;YAEH,gBAAgB,CAAC,OAAO,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAA;YACpD,IAAI,CAAC,QAAQ,CAAC,EAAC,UAAU,EAAE,SAAS,EAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,EAAE,CAAC,CAAC;QACvF,CAAC;IACL,CAAC;IAEO,oBAAoB;QACxB,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;QAE9C,IAAI,mBAAmB,EAAE,CAAC;YACtB,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/D,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAiB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAiB,CAAC;QAClI,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC3B,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;gBAC9B,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB;gBAC7D,IAAI,EAAE,KAAK,CAAC,IAAI;aACnB,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,uBAAuB,CAAC,MAAoB,EAAE,OAAY;QAC9D,IAAI,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC;YACpC,MAAM,SAAS,GAAG,YAAY,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAC7F,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACjC,MAAM,YAAY,GAAG,uBAAuB,GAAG,EAAE,CAAC;gBAClD,MAAM,QAAQ,GAAG;oBACb,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,YAAY,CAAC,aAAa;oBACpC,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC;oBACxB,MAAM,EAAE;wBACJ,CAAC,EAAE,WAAW;wBACd,CAAC,EAAE,YAAY;qBAClB;iBACJ,CAAA;gBAED,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;gBAC3E,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;oBACnB,MAAM,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC;gBACnC,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC1B,CAAC;gBAED,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC;gBAChG,IAAI,eAAe,IAAI,CAAC,EAAE,CAAC;oBACvB,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,YAAY,CAAC;gBACvD,CAAC;qBAAM,CAAC;oBACJ,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC1C,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAEO,mBAAmB;QACvB,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAC9B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB;YACvE,IAAI,EAAE,yBAAyB;SAClC,CAAC,CAAC;IACP,CAAC;IAEO,UAAU,CAAC,MAAqB;QACpC,MAAM,CAAC,OAAO,GAAG;YACb,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,CAAC,IAAS,EAAE,MAAa,EAAE,EAAE;gBACnC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACxB,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBACtB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;oBACnC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;wBAC1B,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;4BAChB,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;wBAC/C,CAAC;6BAAM,CAAC;4BACJ,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC;wBACnC,CAAC;oBACL,CAAC,CAAC,CAAC;oBAEH,IAAI,CAAC,QAAQ,CAAC,EAAC,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,EAAE,GAAG,EAAE;wBAC/D,IAAI,CAAC,iBAAiB,EAAE,UAAU,EAAE,CAAC;oBACzC,CAAC,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;YACD,SAAS,EAAE,CAAC,MAA2B,EAAE,EAAE;gBACvC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBACxB,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;oBACnF,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC/B,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;wBACrC,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;wBAClD,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;wBAClD,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,cAA0B,CAAC;wBAEjE,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAA;wBACzE,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAA;wBACzE,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;4BAC/C,MAAM,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC;4BAC5B,OAAO,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;wBACpC,CAAC;oBACL,CAAC;gBACL,CAAC;gBACD,OAAO,EAAE,CAAC;YACd,CAAC;SACJ,CAAA;IACL,CAAC;IAEO,WAAW,CAAC,IAAY,EAAE,KAAa;QAC3C,OAAO,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;IAC9B,CAAC;IAEO,aAAa,CAAC,aAAkC;QACpD,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACrF,CAAC;IAEO,eAAe,CAAC,aAAkC;QACtD,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC;IAC1D,CAAC;IAEO,SAAS,CAAC,aAAkC,EAAE,YAAsB;QACxE,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACtC,OAAO;gBACH,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAK,EAAE,KAAK,CAAC;gBAC1C,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,YAAY,CAAC,aAAa;gBACpC,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC;gBACpG,MAAM,EAAE;oBACJ,CAAC,EAAE,WAAW;oBACd,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAK,EAAE,KAAK,CAAC;iBAC1C;gBACD,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;gBAC3C,SAAS,EAAE,EAAC,IAAI,EAAE,KAAK,CAAC,SAAS,IAAI,aAAa,CAAC,KAAK,EAAC;aAC5D,CAAA;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IAEO,aAAa,CAAC,aAAkC,EAAE,YAAsB,EAAE,YAAsB;QACpG,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACvC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,SAAS,CAAa,CAAC;YAChJ,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAK,EAAE,KAAK,CAAC,CAAC;YACvD,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAC7D,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,EACvD,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAC1D,CAAC;YAEF,OAAO;gBACH,EAAE,EAAE,QAAQ;gBACZ,WAAW,EAAE,MAAM,CAAC,IAAK;gBACzB,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC;gBAC5H,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,OAAO,IAAI,IAAI;gBACpF,GAAG,EAAE,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG;gBAChD,GAAG,EAAE,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG;gBAChD,GAAG,EAAE,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC,MAAM;gBACtE,GAAG,EAAE,GAAG;aACX,CAAA;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,gBAAgB,CAAC,YAAsB;QAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAC1C,MAAM,kBAAkB,GAAkC,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YACnF,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAA2B,CAAC;YAC7J,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAEnD,OAAO,mBAAmB,CAAC;QAC/B,CAAC,CAAC,CAAA;IACN,CAAC;IAED,QAAQ;QACJ,MAAM,UAAU,GAAuB,EAAE,CAAC;QAC1C,IAAI,WAAW,GAAqB,EAAE,CAAC;QAEvC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,SAAS,EAAsC,CAAC;QACnF,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;YAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3D,MAAM,OAAO,GAA+D;gBACxE,UAAU,EAAE,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;gBAC/D,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;aAC9C,CAAA;YACD,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAElF,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAGxB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC;oBACR,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,YAAY,CAAC,aAAa;oBACpC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;oBAC7B,MAAM,EAAE;wBACJ,CAAC,EAAE,WAAW;wBACd,CAAC,EAAE,YAAY;qBAClB;iBACJ,CAAC,CAAC;gBAEH,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1C,CAAC;YAGD,IAAI,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;gBACjC,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAClD,CAAC;YAGD,MAAM,mBAAmB,GAAG,YAAY,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;YACzG,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE,yBAAyB;gBAC/B,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,YAAY,CAAC,aAAa;gBACpC,QAAQ,EAAE,mBAAmB;gBAC7B,MAAM,EAAE;oBACJ,CAAC,EAAE,WAAW;oBACd,CAAC,EAAE,yBAAyB;iBAC/B;aACJ,CAAC,CAAC;YAEH,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YAEnD,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;YACzB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;YACvB,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC;YAC5B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAEnG,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;gBACxB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YACjD,CAAC;YAED,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC;YACV,UAAU,EAAE,UAAU;YACtB,WAAW,EAAE,WAAW;SAC3B,CAAC,CAAC;IACP,CAAC;IAEO,aAAa;QACjB,OAAO,CACH,oBAAC,mBAAmB,IAChB,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EACnC,mBAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,EACnD,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,kBAAkB,EACjD,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,sBAAsB,EACrD,oBAAoB,EAAE,GAAG,EAAE;gBACvB,IAAI,CAAC,QAAQ,CAAC,EAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAC,EAAE,GAAG,EAAE;oBACvE,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAChC,CAAC,CAAC,CAAA;YACN,CAAC,EACD,mBAAmB,EAAE,GAAG,EAAE;gBACtB,IAAI,CAAC,QAAQ,CAAC,EAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAC,EAAE,GAAG,EAAE;oBACrE,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC/B,CAAC,CAAC,CAAA;YACN,CAAC,EACD,mBAAmB,EAAE,WAAW,CAAC,EAAE;gBAC/B,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;oBAC9B,IAAI,EAAE,kBAAkB;oBACxB,GAAG,EAAE,gBAAgB;oBACrB,oBAAoB,EAAE,WAAW;iBACpC,CAAC,CAAC;YACP,CAAC,EACD,WAAW,EAAE,GAAG,EAAE;gBACd,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;oBAC9B,IAAI,EAAE,UAAU;oBAChB,KAAK,EAAE,CAAC;oBACR,GAAG,EAAE,GAAG;iBACX,CAAC,CAAC;YACP,CAAC,EACD,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAC3B,YAAY,EAAE,GAAG,EAAE;gBACf,IAAI,CAAC,QAAQ,CAAC,EAAC,YAAY,EAAE,IAAI,EAAC,EAAE,GAAG,EAAE;oBACrC,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC3D,CAAC,CAAC,CAAA;YACN,CAAC,GACH,CACL,CAAA;IACL,CAAC;IAEO,iBAAiB;QACrB,OAAO,CACH,oBAAC,WAAW,IACR,IAAI,gBACJ,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,EAC7B,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAC,YAAY,EAAE,KAAK,EAAC,CAAC,EACpD,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EACpB,YAAY,EAAE,MAAM,CAAC,UAAU,GAAG,GAAG,EACrC,aAAa,EAAE,MAAM,CAAC,WAAW,GAAG,IAAI;YAExC,oBAAC,YAAY,IACT,GAAG,EAAE,SAAS,CAAC,EAAE;oBACb,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;gBACzC,CAAC,EACD,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,EACvC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,EACzC,sBAAsB,EAAE,IAAI,CAAC,KAAK,CAAC,sBAAsB,EACzD,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAC3B,WAAW,EAAE,GAAG,EAChB,iBAAiB,EAAE,EAAC,OAAO,EAAE,cAAc,EAAC,EAC5C,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAC/B,CACQ,CACjB,CAAA;IACL,CAAC;IAED,MAAM;QACF,MAAM,KAAK,GAAwB;YAC/B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,QAAQ;YACvB,cAAc,EAAE,QAAQ;SAC3B,CAAA;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,CACH,6BAAK,KAAK,EAAE,EAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAC;gBACxC,oBAAC,eAAe,OAAE,CAChB,CACT,CAAC;QACN,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChD,OAAO,CACH,oBAAC,KAAK,IACF,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,EACtC,UAAU,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC,GAC7B,CACL,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,IAAI,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;YACjD,IAAI,mBAAmB,KAAK,MAAM,EAAE,CAAC;gBACjC,mBAAmB,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,EAAE,CAAC;YACpE,CAAC;YAED,OAAO,CACH,6BAAK,KAAK,EAAE,EAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,KAAK,EAAC;gBACvC,IAAI,CAAC,iBAAiB,EAAE;gBACxB,IAAI,CAAC,aAAa,EAAE;gBACrB,oBAAC,YAAY,IACT,KAAK,EAAE,EAAC,MAAM,EAAE,eAAe,mBAAmB,KAAK,EAAC,EACxD,YAAY,EAAE,QAAQ,CAAC,EAAE;wBACrB,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;wBAC9B,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;wBAC5B,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;4BACnB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;4BACzC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC;4BAC5D,IAAI,CAAC,QAAQ,CAAC,EAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAC,EAAE,GAAG,EAAE;gCACjE,IAAI,CAAC,iBAAiB,EAAE,UAAU,EAAE,CAAC;4BACzC,CAAC,CAAC,CAAC;wBACP,CAAC,CAAC,CAAC;wBACH,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC5C,CAAC,EACD,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,cAAc,GACnE;gBACF,oBAAC,iBAAiB,IACd,KAAK,EAAE,EAAC,MAAM,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAC,EACrE,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,GAAG,SAAS,EACpD,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EACjC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EACnC,cAAc,EAAE,IAAI,CAAC,cAAc,GACrC,CACA,CACT,CAAA;QACL,CAAC;IACL,CAAC;;AAhZc,0BAAa,GAAG,QAAQ,AAAX,CAAY;eADvB,YAAY","sourcesContent":["import React from \"react\";\r\nimport ReactEcharts, {EChartsInstance, EChartsOption} from \"echarts-for-react\";\r\nimport {compactChartOptions, d2ChartOptions} from \"./d2ChartOptions\";\r\nimport {at} from \"lodash\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\nimport {Empty} from \"antd\";\r\nimport {UnixTime} from \"d2jsapi\";\r\nimport isEqual from \"lodash/isEqual\";\r\nimport D2ChartTablePanel, {D2ChartTableItem} from \"./d2ChartTablePanel\";\r\nimport {ModalDialog, ModalDialogMode} from \"d2coreui/components/modal/modalDialog\";\r\nimport D2ChartToolboxPanel from \"./d2ChartToolboxPanel\";\r\nimport {LoadingOutlined} from \"@ant-design/icons\";\r\nimport {D2ChartRecord, D2ChartSeriesItem, LineStyleEnum, MarkArea, MarkAreaData} from \"../../../api/types/d2ChartTypes\";\r\nimport D2ChartUtils from \"../../../api/util/d2ChartUtils\";\r\n\r\ninterface SeriesItem {\r\n name: string,\r\n type: string,\r\n sampling: string,\r\n symbol?: string,\r\n step?: string,\r\n color?: string,\r\n encode?: { x: string, y: string },\r\n markArea?: MarkArea\r\n}\r\n\r\nexport interface D2ChartPanelProps {\r\n d2ChartSeries: D2ChartSeriesItem[]\r\n d2ChartRecords: D2ChartRecord[]\r\n d2ChartCalendarRecords?: D2ChartRecord[]\r\n loading?: boolean\r\n\r\n markArea?: MarkArea\r\n compact?: boolean\r\n yAxisLabel?: string\r\n\r\n tableHeight: number | \"auto\"\r\n tableWrapperStyle?: Omit<React.CSSProperties, \"height\">\r\n}\r\n\r\ninterface State {\r\n tableItems: D2ChartTableItem[]\r\n tooltipTime?: UnixTime\r\n missingData: MarkAreaData[][]\r\n\r\n modalVisible: boolean\r\n calendarDataVisible: boolean\r\n missingDataVisible: boolean\r\n}\r\n\r\nexport default class D2ChartPanel extends React.Component<D2ChartPanelProps, State> {\r\n private static SAMPLING_MODE = \"minmax\";\r\n private chartInstance: EChartsInstance | null = null;\r\n private d2ChartPanelInModal: D2ChartPanel | null = null;\r\n private d2ChartTablePanel: D2ChartTablePanel | null = null;\r\n\r\n constructor(props: Readonly<D2ChartPanelProps>) {\r\n super(props);\r\n\r\n this.state = {\r\n tableItems: [],\r\n missingData: [],\r\n modalVisible: false,\r\n calendarDataVisible: false,\r\n missingDataVisible: true,\r\n }\r\n\r\n this.onSwitchCalendarData = this.onSwitchCalendarData.bind(this);\r\n this.onSwitchLegend = this.onSwitchLegend.bind(this);\r\n }\r\n\r\n componentDidUpdate(prevProps: Readonly<D2ChartPanelProps>) {\r\n if (!isEqual(this.props.markArea, prevProps.markArea) && this.props.d2ChartRecords.length > 0) {\r\n this.onReload();\r\n }\r\n }\r\n\r\n private onSwitchLegend(name: string) {\r\n const tableData = this.state.tableItems;\r\n const d2ChartTableItem = tableData.find(value => value.id === name);\r\n\r\n if (d2ChartTableItem) {\r\n this.chartInstance.dispatchAction({\r\n type: d2ChartTableItem.visible ? \"legendUnSelect\" : \"legendSelect\",\r\n name: name,\r\n });\r\n\r\n d2ChartTableItem.visible = !d2ChartTableItem.visible\r\n this.setState({tableItems: tableData}, () => this.d2ChartTablePanel?.updateGrid());\r\n }\r\n }\r\n\r\n private onSwitchCalendarData() {\r\n const calendarDataVisible = this.state.calendarDataVisible;\r\n const option = this.chartInstance.getOption();\r\n\r\n if (calendarDataVisible) {\r\n this.prepareCalendarMarkarea(option.series, option.dataset[0]);\r\n this.chartInstance.setOption(option);\r\n }\r\n const calendarSeries = option.series.filter((value: SeriesItem) => value.name.startsWith(\"__markArea-calendar-\")) as SeriesItem[];\r\n calendarSeries.forEach(value => {\r\n this.chartInstance.dispatchAction({\r\n type: calendarDataVisible ? \"legendSelect\" : \"legendUnSelect\",\r\n name: value.name,\r\n });\r\n });\r\n }\r\n\r\n private prepareCalendarMarkarea(series: SeriesItem[], dataset: any) {\r\n if (this.props.d2ChartCalendarRecords) {\r\n const markAreas = D2ChartUtils.calendarRecordsToMarkAreas(this.props.d2ChartCalendarRecords);\r\n Object.keys(markAreas).forEach(key => {\r\n const markAreaName = `__markArea-calendar-${key}`;\r\n const markArea = {\r\n name: markAreaName,\r\n type: \"line\",\r\n sampling: D2ChartPanel.SAMPLING_MODE,\r\n markArea: markAreas[key],\r\n encode: {\r\n x: \"timestamp\",\r\n y: markAreaName,\r\n },\r\n }\r\n\r\n const seriesIndex = series.findIndex(value => value.name === markAreaName);\r\n if (seriesIndex >= 0) {\r\n series[seriesIndex] = markArea;\r\n } else {\r\n series.push(markArea);\r\n }\r\n\r\n const dimensionsIndex = dataset.dimensions.findIndex((value: string) => value === markAreaName);\r\n if (dimensionsIndex >= 0) {\r\n dataset.dimensions[dimensionsIndex] = markAreaName;\r\n } else {\r\n dataset.dimensions.push(markAreaName);\r\n }\r\n });\r\n }\r\n }\r\n\r\n private onSwitchMissingData() {\r\n this.chartInstance.dispatchAction({\r\n type: this.state.missingDataVisible ? \"legendSelect\" : \"legendUnSelect\",\r\n name: \"__markArea-missing-data\",\r\n });\r\n }\r\n\r\n private setTooltip(option: EChartsOption) {\r\n option.tooltip = {\r\n trigger: \"axis\",\r\n position: (_pos: any, params: any[]) => {\r\n const param = params[0];\r\n if (param && param.data) {\r\n const data = this.state.tableItems;\r\n data.forEach((value, index) => {\r\n if (value.visible) {\r\n value.tooltipValue = param.data[index + 1]; //index 0 is timestamp\r\n } else {\r\n value.tooltipValue = undefined;\r\n }\r\n });\r\n\r\n this.setState({tableItems: data, tooltipTime: param.data[0]}, () => {\r\n this.d2ChartTablePanel?.updateGrid();\r\n });\r\n }\r\n },\r\n formatter: (params: Object | Array<any>) => {\r\n if (Array.isArray(params)) {\r\n const seriesToCompare = params.filter(value => !value.seriesName.startsWith(\"__\"));\r\n if (seriesToCompare.length === 2) {\r\n const data = seriesToCompare[0].data;\r\n const seriesName1 = seriesToCompare[0].seriesName;\r\n const seriesName2 = seriesToCompare[1].seriesName;\r\n const dimensions = seriesToCompare[0].dimensionNames as string[];\r\n\r\n const value1 = data[dimensions.findIndex(value => value === seriesName1)]\r\n const value2 = data[dimensions.findIndex(value => value === seriesName2)]\r\n if (value1 !== undefined && value2 !== undefined) {\r\n const gap = value1 - value2;\r\n return `Gap: ${gap.toFixed(4)}`;\r\n }\r\n }\r\n }\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n private getUniqueId(code: string, index: number): string {\r\n return `${code}@${index}`;\r\n }\r\n\r\n private getDiemnsions(currentSeries: D2ChartSeriesItem[]): string[] {\r\n return currentSeries.map((value, index) => this.getUniqueId(value.code!, index));\r\n }\r\n\r\n private getSeriesFields(currentSeries: D2ChartSeriesItem[]): string[] {\r\n return currentSeries.map((_, index) => `col${index}`);\r\n }\r\n\r\n private getSeries(currentSeries: D2ChartSeriesItem[], optionColors: string[]): SeriesItem[] {\r\n return currentSeries.map((value, index) => {\r\n return {\r\n name: this.getUniqueId(value.code!, index),\r\n type: \"line\",\r\n sampling: D2ChartPanel.SAMPLING_MODE,\r\n symbol: \"none\",\r\n step: \"end\",\r\n color: optionColors[value.colorIndex !== undefined ? value.colorIndex : index % optionColors.length],\r\n encode: {\r\n x: \"timestamp\",\r\n y: this.getUniqueId(value.code!, index)\r\n },\r\n areaStyle: value.fillColor ? {} : undefined,\r\n lineStyle: {type: value.lineStyle ?? LineStyleEnum.SOLID}\r\n }\r\n })\r\n }\r\n\r\n private getTableItems(currentSeries: D2ChartSeriesItem[], seriesFields: string[], optionColors: string[]): D2ChartTableItem[] {\r\n return currentSeries.map((series, index) => {\r\n const recordValues = this.props.d2ChartRecords.map(value => at(value, seriesFields[index])[0]).filter(value => value !== undefined) as number[];\r\n const uniqueId = this.getUniqueId(series.code!, index);\r\n const [min, max, sum] = recordValues.reduce(([min, max, sum], val) =>\r\n [Math.min(min, val), Math.max(max, val), sum + val],\r\n [Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY, 0]\r\n );\r\n\r\n return {\r\n id: uniqueId,\r\n displayName: series.name!,\r\n color: optionColors[series.colorIndex !== undefined ? series.colorIndex % optionColors.length : index % optionColors.length],\r\n visible: this.state.tableItems.find(value => value.id === uniqueId)?.visible ?? true,\r\n min: recordValues.length === 0 ? undefined : min,\r\n max: recordValues.length === 0 ? undefined : max,\r\n avg: recordValues.length === 0 ? undefined : sum / recordValues.length,\r\n sum: sum,\r\n }\r\n });\r\n }\r\n\r\n private getDatasetSource(seriesFields: string[]): (number | undefined)[][] {\r\n return this.props.d2ChartRecords.map(record => {\r\n const seriesValuesInTime: (number | undefined | null)[] = at(record, seriesFields);\r\n const roundedSeriesValues = seriesValuesInTime.map(value => value !== undefined && value !== null ? +value.toFixed(4) : undefined) as (number | undefined)[];\r\n roundedSeriesValues.unshift(record.date.getTime());\r\n\r\n return roundedSeriesValues;\r\n })\r\n }\r\n\r\n onReload() {\r\n const tableItems: D2ChartTableItem[] = [];\r\n let missingData: MarkAreaData[][] = [];\r\n\r\n const option = this.chartInstance?.getOption() as EChartsOption | undefined | null;\r\n if (option) {\r\n const currentSeries = this.props.d2ChartSeries;\r\n const seriesFields = this.getSeriesFields(currentSeries);\r\n const series = this.getSeries(currentSeries, option.color);\r\n const dataset: { dimensions: string[], source: (number | undefined)[][] } = {\r\n dimensions: [\"timestamp\", ...this.getDiemnsions(currentSeries)],\r\n source: this.getDatasetSource(seriesFields),\r\n }\r\n tableItems.push(...this.getTableItems(currentSeries, seriesFields, option.color));\r\n\r\n this.setTooltip(option);\r\n\r\n // chart markArea\r\n if (this.props.markArea) {\r\n series.push({\r\n name: \"__markArea\",\r\n type: \"line\",\r\n sampling: D2ChartPanel.SAMPLING_MODE,\r\n markArea: this.props.markArea,\r\n encode: {\r\n x: \"timestamp\",\r\n y: \"__markArea\",\r\n },\r\n });\r\n\r\n dataset.dimensions.push(\"__markArea\");\r\n }\r\n\r\n //calendar markArea\r\n if (this.state.calendarDataVisible) {\r\n this.prepareCalendarMarkarea(series, dataset);\r\n }\r\n\r\n // missing data markArea\r\n const missingDataMarkArea = D2ChartUtils.getMissingDataMarkArea(this.props.d2ChartRecords, seriesFields);\r\n missingData = missingDataMarkArea.data;\r\n series.push({\r\n name: \"__markArea-missing-data\",\r\n type: \"line\",\r\n sampling: D2ChartPanel.SAMPLING_MODE,\r\n markArea: missingDataMarkArea,\r\n encode: {\r\n x: \"timestamp\",\r\n y: \"__markArea-missing-data\",\r\n },\r\n });\r\n\r\n dataset.dimensions.push(\"__markArea-missing-data\");\r\n\r\n option.dataset = dataset;\r\n option.series = series;\r\n option.markArea = undefined;\r\n option.legend[0].selected = Object.fromEntries(tableItems.map(value => [value.id, value.visible]));\r\n\r\n if (this.props.yAxisLabel) {\r\n option.yAxis[0].name = this.props.yAxisLabel;\r\n }\r\n\r\n this.chartInstance.setOption(option, true);\r\n }\r\n\r\n this.setState({\r\n tableItems: tableItems,\r\n missingData: missingData,\r\n });\r\n }\r\n\r\n private renderToolbox() {\r\n return (\r\n <D2ChartToolboxPanel\r\n missingData={this.state.missingData}\r\n calendarDataVisible={this.state.calendarDataVisible}\r\n missingDataVisible={this.state.missingDataVisible}\r\n showCalendarIcon={!!this.props.d2ChartCalendarRecords}\r\n onSwitchCalendarData={() => {\r\n this.setState({calendarDataVisible: !this.state.calendarDataVisible}, () => {\r\n this.onSwitchCalendarData();\r\n })\r\n }}\r\n onSwitchMissingData={() => {\r\n this.setState({missingDataVisible: !this.state.missingDataVisible}, () => {\r\n this.onSwitchMissingData();\r\n })\r\n }}\r\n onZoomControlSwitch={zoomEnabled => {\r\n this.chartInstance.dispatchAction({\r\n type: \"takeGlobalCursor\",\r\n key: \"dataZoomSelect\",\r\n dataZoomSelectActive: zoomEnabled\r\n });\r\n }}\r\n onZoomReset={() => {\r\n this.chartInstance.dispatchAction({\r\n type: \"dataZoom\",\r\n start: 0,\r\n end: 100,\r\n });\r\n }}\r\n compact={this.props.compact}\r\n onFullScreen={() => {\r\n this.setState({modalVisible: true}, () => {\r\n setTimeout(() => this.d2ChartPanelInModal?.onReload());\r\n })\r\n }}\r\n />\r\n )\r\n }\r\n\r\n private renderModalDialog() {\r\n return (\r\n <ModalDialog\r\n mode={ModalDialogMode.NO_BUTTONS}\r\n open={this.state.modalVisible}\r\n onCancel={() => this.setState({modalVisible: false})}\r\n title={i18n(\"Chart\")}\r\n initialWidth={window.innerWidth * 0.8}\r\n initialHeight={window.innerHeight * 0.98}\r\n >\r\n <D2ChartPanel\r\n ref={component => {\r\n this.d2ChartPanelInModal = component;\r\n }}\r\n d2ChartSeries={this.props.d2ChartSeries}\r\n d2ChartRecords={this.props.d2ChartRecords}\r\n d2ChartCalendarRecords={this.props.d2ChartCalendarRecords}\r\n loading={this.props.loading}\r\n tableHeight={180}\r\n tableWrapperStyle={{padding: \"0px 12px 8px\"}}\r\n markArea={this.props.markArea}\r\n />\r\n </ModalDialog>\r\n )\r\n }\r\n\r\n render() {\r\n const style: React.CSSProperties = {\r\n height: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n }\r\n\r\n if (this.props.loading) {\r\n return (\r\n <div style={{alignItems: \"center\", ...style}}>\r\n <LoadingOutlined/>\r\n </div>\r\n );\r\n } else if (this.props.d2ChartRecords.length === 0) {\r\n return (\r\n <Empty\r\n style={style}\r\n description={i18n(\"No records found.\")}\r\n imageStyle={{height: \"8vh\"}}\r\n />\r\n );\r\n } else {\r\n let computedTableHeight = this.props.tableHeight;\r\n if (computedTableHeight === \"auto\") {\r\n computedTableHeight = 62 + this.props.d2ChartSeries.length * 28;\r\n }\r\n\r\n return (\r\n <div style={{position: \"relative\", ...style}}>\r\n {this.renderModalDialog()}\r\n {this.renderToolbox()}\r\n <ReactEcharts\r\n style={{height: `calc(100% - ${computedTableHeight}px)`}}\r\n onChartReady={instance => {\r\n this.chartInstance = instance;\r\n const zr = instance.getZr();\r\n zr.on(\"mouseout\", () => {\r\n const tableItems = this.state.tableItems;\r\n tableItems.forEach(value => value.tooltipValue = undefined);\r\n this.setState({tableItems: tableItems, tooltipTime: undefined}, () => {\r\n this.d2ChartTablePanel?.updateGrid();\r\n });\r\n });\r\n setTimeout(() => instance.resize(), 50);\r\n }}\r\n option={this.props.compact ? compactChartOptions : d2ChartOptions}\r\n />\r\n <D2ChartTablePanel\r\n style={{height: computedTableHeight, ...this.props.tableWrapperStyle}}\r\n ref={component => this.d2ChartTablePanel = component}\r\n tableItems={this.state.tableItems}\r\n tooltipTime={this.state.tooltipTime}\r\n onSwitchLegend={this.onSwitchLegend}\r\n />\r\n </div>\r\n )\r\n }\r\n }\r\n}"]}
|
|
1
|
+
{"version":3,"file":"d2ChartPanel.js","sourceRoot":"","sources":["../../../../../coreui/components/d2Chart/d2ChartPanel.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\r\nimport ReactEcharts, {EChartsInstance, EChartsOption} from \"echarts-for-react\";\r\nimport {compactChartOptions, d2ChartOptions} from \"./d2ChartOptions\";\r\nimport {at} from \"lodash\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\nimport {Empty} from \"antd\";\r\nimport {UnixTime} from \"d2jsapi\";\r\nimport isEqual from \"lodash/isEqual\";\r\nimport D2ChartTablePanel, {D2ChartTableItem} from \"./d2ChartTablePanel\";\r\nimport {ModalDialog, ModalDialogMode} from \"d2coreui/components/modal/modalDialog\";\r\nimport D2ChartToolboxPanel from \"./d2ChartToolboxPanel\";\r\nimport {LoadingOutlined} from \"@ant-design/icons\";\r\nimport {D2ChartRecord, D2ChartSeriesItem, LineStyleEnum, MarkArea, MarkAreaData} from \"../../../api/types/d2ChartTypes\";\r\nimport D2ChartUtils from \"../../../api/util/d2ChartUtils\";\r\nimport D2ChartAdvancedZoom from \"./d2ChartAdvancedZoom\";\r\n\r\ninterface SeriesItem {\r\n name: string,\r\n type: string,\r\n sampling: string,\r\n symbol?: string,\r\n step?: string,\r\n color?: string,\r\n encode?: { x: string, y: string },\r\n markArea?: MarkArea\r\n}\r\n\r\nexport interface D2ChartPanelProps {\r\n d2ChartSeries: D2ChartSeriesItem[]\r\n d2ChartRecords: D2ChartRecord[]\r\n d2ChartCalendarRecords?: D2ChartRecord[]\r\n loading?: boolean\r\n\r\n markArea?: MarkArea\r\n compact?: boolean\r\n yAxisLabel?: string\r\n advancedMouseZoom?: boolean // enabled by default, pass false to disable\r\n\r\n tableHeight: number | \"auto\"\r\n tableWrapperStyle?: Omit<React.CSSProperties, \"height\">\r\n}\r\n\r\ninterface State {\r\n tableItems: D2ChartTableItem[]\r\n tooltipTime?: UnixTime\r\n missingData: MarkAreaData[][]\r\n\r\n modalVisible: boolean\r\n calendarDataVisible: boolean\r\n missingDataVisible: boolean\r\n}\r\n\r\nexport default class D2ChartPanel extends React.Component<D2ChartPanelProps, State> {\r\n private static SAMPLING_MODE = \"minmax\";\r\n private chartInstance: EChartsInstance | null = null;\r\n private d2ChartPanelInModal: D2ChartPanel | null = null;\r\n private d2ChartTablePanel: D2ChartTablePanel | null = null;\r\n\r\n constructor(props: Readonly<D2ChartPanelProps>) {\r\n super(props);\r\n\r\n this.state = {\r\n tableItems: [],\r\n missingData: [],\r\n modalVisible: false,\r\n calendarDataVisible: false,\r\n missingDataVisible: true,\r\n }\r\n\r\n this.onSwitchCalendarData = this.onSwitchCalendarData.bind(this);\r\n this.onSwitchLegend = this.onSwitchLegend.bind(this);\r\n }\r\n\r\n private get advancedMouseZoomEnabled(): boolean {\r\n return this.props.advancedMouseZoom !== false;\r\n }\r\n\r\n componentDidUpdate(prevProps: Readonly<D2ChartPanelProps>) {\r\n if (!isEqual(this.props.markArea, prevProps.markArea) && this.props.d2ChartRecords.length > 0) {\r\n this.onReload();\r\n }\r\n }\r\n\r\n private onSwitchLegend(name: string) {\r\n const tableData = this.state.tableItems;\r\n const d2ChartTableItem = tableData.find(value => value.id === name);\r\n\r\n if (d2ChartTableItem) {\r\n this.chartInstance.dispatchAction({\r\n type: d2ChartTableItem.visible ? \"legendUnSelect\" : \"legendSelect\",\r\n name: name,\r\n });\r\n\r\n d2ChartTableItem.visible = !d2ChartTableItem.visible\r\n this.setState({tableItems: tableData}, () => this.d2ChartTablePanel?.updateGrid());\r\n }\r\n }\r\n\r\n private onSwitchCalendarData() {\r\n const calendarDataVisible = this.state.calendarDataVisible;\r\n const option = this.chartInstance.getOption();\r\n\r\n if (calendarDataVisible) {\r\n this.prepareCalendarMarkarea(option.series, option.dataset[0]);\r\n this.chartInstance.setOption(option);\r\n }\r\n const calendarSeries = option.series.filter((value: SeriesItem) => value.name.startsWith(\"__markArea-calendar-\")) as SeriesItem[];\r\n calendarSeries.forEach(value => {\r\n this.chartInstance.dispatchAction({\r\n type: calendarDataVisible ? \"legendSelect\" : \"legendUnSelect\",\r\n name: value.name,\r\n });\r\n });\r\n }\r\n\r\n private prepareCalendarMarkarea(series: SeriesItem[], dataset: any) {\r\n if (this.props.d2ChartCalendarRecords) {\r\n const markAreas = D2ChartUtils.calendarRecordsToMarkAreas(this.props.d2ChartCalendarRecords);\r\n Object.keys(markAreas).forEach(key => {\r\n const markAreaName = `__markArea-calendar-${key}`;\r\n const markArea = {\r\n name: markAreaName,\r\n type: \"line\",\r\n sampling: D2ChartPanel.SAMPLING_MODE,\r\n markArea: markAreas[key],\r\n encode: {\r\n x: \"timestamp\",\r\n y: markAreaName,\r\n },\r\n }\r\n\r\n const seriesIndex = series.findIndex(value => value.name === markAreaName);\r\n if (seriesIndex >= 0) {\r\n series[seriesIndex] = markArea;\r\n } else {\r\n series.push(markArea);\r\n }\r\n\r\n const dimensionsIndex = dataset.dimensions.findIndex((value: string) => value === markAreaName);\r\n if (dimensionsIndex >= 0) {\r\n dataset.dimensions[dimensionsIndex] = markAreaName;\r\n } else {\r\n dataset.dimensions.push(markAreaName);\r\n }\r\n });\r\n }\r\n }\r\n\r\n private onSwitchMissingData() {\r\n this.chartInstance.dispatchAction({\r\n type: this.state.missingDataVisible ? \"legendSelect\" : \"legendUnSelect\",\r\n name: \"__markArea-missing-data\",\r\n });\r\n }\r\n\r\n private setTooltip(option: EChartsOption) {\r\n option.tooltip = {\r\n trigger: \"axis\",\r\n position: (_pos: any, params: any[]) => {\r\n const param = params[0];\r\n if (param && param.data) {\r\n const data = this.state.tableItems;\r\n data.forEach((value, index) => {\r\n if (value.visible) {\r\n value.tooltipValue = param.data[index + 1]; //index 0 is timestamp\r\n } else {\r\n value.tooltipValue = undefined;\r\n }\r\n });\r\n\r\n this.setState({tableItems: data, tooltipTime: param.data[0]}, () => {\r\n this.d2ChartTablePanel?.updateGrid();\r\n });\r\n }\r\n },\r\n formatter: (params: Object | Array<any>) => {\r\n if (Array.isArray(params)) {\r\n const seriesToCompare = params.filter(value => !value.seriesName.startsWith(\"__\"));\r\n if (seriesToCompare.length === 2) {\r\n const data = seriesToCompare[0].data;\r\n const seriesName1 = seriesToCompare[0].seriesName;\r\n const seriesName2 = seriesToCompare[1].seriesName;\r\n const dimensions = seriesToCompare[0].dimensionNames as string[];\r\n\r\n const value1 = data[dimensions.findIndex(value => value === seriesName1)]\r\n const value2 = data[dimensions.findIndex(value => value === seriesName2)]\r\n if (value1 !== undefined && value2 !== undefined) {\r\n const gap = value1 - value2;\r\n return `Gap: ${gap.toFixed(4)}`;\r\n }\r\n }\r\n }\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n private getUniqueId(code: string, index: number): string {\r\n return `${code}@${index}`;\r\n }\r\n\r\n private getDiemnsions(currentSeries: D2ChartSeriesItem[]): string[] {\r\n return currentSeries.map((value, index) => this.getUniqueId(value.code!, index));\r\n }\r\n\r\n private getSeriesFields(currentSeries: D2ChartSeriesItem[]): string[] {\r\n return currentSeries.map((_, index) => `col${index}`);\r\n }\r\n\r\n private getSeries(currentSeries: D2ChartSeriesItem[], optionColors: string[]): SeriesItem[] {\r\n return currentSeries.map((value, index) => {\r\n return {\r\n name: this.getUniqueId(value.code!, index),\r\n type: \"line\",\r\n sampling: D2ChartPanel.SAMPLING_MODE,\r\n symbol: \"none\",\r\n step: \"end\",\r\n color: optionColors[value.colorIndex !== undefined ? value.colorIndex : index % optionColors.length],\r\n encode: {\r\n x: \"timestamp\",\r\n y: this.getUniqueId(value.code!, index)\r\n },\r\n areaStyle: value.fillColor ? {} : undefined,\r\n lineStyle: {type: value.lineStyle ?? LineStyleEnum.SOLID}\r\n }\r\n })\r\n }\r\n\r\n private getTableItems(currentSeries: D2ChartSeriesItem[], seriesFields: string[], optionColors: string[]): D2ChartTableItem[] {\r\n return currentSeries.map((series, index) => {\r\n const recordValues = this.props.d2ChartRecords.map(value => at(value, seriesFields[index])[0]).filter(value => value !== undefined) as number[];\r\n const uniqueId = this.getUniqueId(series.code!, index);\r\n const [min, max, sum] = recordValues.reduce(([min, max, sum], val) =>\r\n [Math.min(min, val), Math.max(max, val), sum + val],\r\n [Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY, 0]\r\n );\r\n\r\n return {\r\n id: uniqueId,\r\n displayName: series.name!,\r\n color: optionColors[series.colorIndex !== undefined ? series.colorIndex % optionColors.length : index % optionColors.length],\r\n visible: this.state.tableItems.find(value => value.id === uniqueId)?.visible ?? true,\r\n min: recordValues.length === 0 ? undefined : min,\r\n max: recordValues.length === 0 ? undefined : max,\r\n avg: recordValues.length === 0 ? undefined : sum / recordValues.length,\r\n sum: sum,\r\n }\r\n });\r\n }\r\n\r\n private getDatasetSource(seriesFields: string[]): (number | undefined)[][] {\r\n return this.props.d2ChartRecords.map(record => {\r\n const seriesValuesInTime: (number | undefined | null)[] = at(record, seriesFields);\r\n const roundedSeriesValues = seriesValuesInTime.map(value => value !== undefined && value !== null ? +value.toFixed(4) : undefined) as (number | undefined)[];\r\n roundedSeriesValues.unshift(record.date.getTime());\r\n\r\n return roundedSeriesValues;\r\n })\r\n }\r\n\r\n onReload() {\r\n const tableItems: D2ChartTableItem[] = [];\r\n let missingData: MarkAreaData[][] = [];\r\n\r\n const option = this.chartInstance?.getOption() as EChartsOption | undefined | null;\r\n if (option) {\r\n const currentSeries = this.props.d2ChartSeries;\r\n const seriesFields = this.getSeriesFields(currentSeries);\r\n const series = this.getSeries(currentSeries, option.color);\r\n const dataset: { dimensions: string[], source: (number | undefined)[][] } = {\r\n dimensions: [\"timestamp\", ...this.getDiemnsions(currentSeries)],\r\n source: this.getDatasetSource(seriesFields),\r\n }\r\n tableItems.push(...this.getTableItems(currentSeries, seriesFields, option.color));\r\n\r\n this.setTooltip(option);\r\n\r\n // chart markArea\r\n if (this.props.markArea) {\r\n series.push({\r\n name: \"__markArea\",\r\n type: \"line\",\r\n sampling: D2ChartPanel.SAMPLING_MODE,\r\n markArea: this.props.markArea,\r\n encode: {\r\n x: \"timestamp\",\r\n y: \"__markArea\",\r\n },\r\n });\r\n\r\n dataset.dimensions.push(\"__markArea\");\r\n }\r\n\r\n //calendar markArea\r\n if (this.state.calendarDataVisible) {\r\n this.prepareCalendarMarkarea(series, dataset);\r\n }\r\n\r\n // missing data markArea\r\n const missingDataMarkArea = D2ChartUtils.getMissingDataMarkArea(this.props.d2ChartRecords, seriesFields);\r\n missingData = missingDataMarkArea.data;\r\n series.push({\r\n name: \"__markArea-missing-data\",\r\n type: \"line\",\r\n sampling: D2ChartPanel.SAMPLING_MODE,\r\n markArea: missingDataMarkArea,\r\n encode: {\r\n x: \"timestamp\",\r\n y: \"__markArea-missing-data\",\r\n },\r\n });\r\n\r\n dataset.dimensions.push(\"__markArea-missing-data\");\r\n\r\n option.dataset = dataset;\r\n option.series = series;\r\n option.markArea = undefined;\r\n option.legend[0].selected = Object.fromEntries(tableItems.map(value => [value.id, value.visible]));\r\n\r\n if (this.props.yAxisLabel) {\r\n option.yAxis[0].name = this.props.yAxisLabel;\r\n }\r\n\r\n this.chartInstance.setOption(option, true);\r\n }\r\n\r\n this.setState({\r\n tableItems: tableItems,\r\n missingData: missingData,\r\n });\r\n }\r\n\r\n private renderToolbox() {\r\n return (\r\n <D2ChartToolboxPanel\r\n missingData={this.state.missingData}\r\n calendarDataVisible={this.state.calendarDataVisible}\r\n missingDataVisible={this.state.missingDataVisible}\r\n showCalendarIcon={!!this.props.d2ChartCalendarRecords}\r\n showZoomIcons={!this.advancedMouseZoomEnabled}\r\n onSwitchCalendarData={() => {\r\n this.setState({calendarDataVisible: !this.state.calendarDataVisible}, () => {\r\n this.onSwitchCalendarData();\r\n })\r\n }}\r\n onSwitchMissingData={() => {\r\n this.setState({missingDataVisible: !this.state.missingDataVisible}, () => {\r\n this.onSwitchMissingData();\r\n })\r\n }}\r\n onZoomControlSwitch={zoomEnabled => {\r\n this.chartInstance.dispatchAction({\r\n type: \"takeGlobalCursor\",\r\n key: \"dataZoomSelect\",\r\n dataZoomSelectActive: zoomEnabled\r\n });\r\n }}\r\n onZoomReset={() => {\r\n this.chartInstance.dispatchAction({\r\n type: \"dataZoom\",\r\n start: 0,\r\n end: 100,\r\n });\r\n }}\r\n compact={this.props.compact}\r\n onFullScreen={() => {\r\n this.setState({modalVisible: true}, () => {\r\n setTimeout(() => this.d2ChartPanelInModal?.onReload());\r\n })\r\n }}\r\n />\r\n )\r\n }\r\n\r\n private renderModalDialog() {\r\n return (\r\n <ModalDialog\r\n mode={ModalDialogMode.NO_BUTTONS}\r\n open={this.state.modalVisible}\r\n onCancel={() => this.setState({modalVisible: false})}\r\n title={i18n(\"Chart\")}\r\n initialWidth={window.innerWidth * 0.8}\r\n initialHeight={window.innerHeight * 0.98}\r\n >\r\n <D2ChartPanel\r\n ref={component => {\r\n this.d2ChartPanelInModal = component;\r\n }}\r\n d2ChartSeries={this.props.d2ChartSeries}\r\n d2ChartRecords={this.props.d2ChartRecords}\r\n d2ChartCalendarRecords={this.props.d2ChartCalendarRecords}\r\n loading={this.props.loading}\r\n tableHeight={180}\r\n tableWrapperStyle={{padding: \"0px 12px 8px\"}}\r\n markArea={this.props.markArea}\r\n advancedMouseZoom={this.props.advancedMouseZoom}\r\n />\r\n </ModalDialog>\r\n )\r\n }\r\n\r\n render() {\r\n const style: React.CSSProperties = {\r\n height: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n }\r\n\r\n if (this.props.loading) {\r\n return (\r\n <div style={{alignItems: \"center\", ...style}}>\r\n <LoadingOutlined/>\r\n </div>\r\n );\r\n } else if (this.props.d2ChartRecords.length === 0) {\r\n return (\r\n <Empty\r\n style={style}\r\n description={i18n(\"No records found.\")}\r\n imageStyle={{height: \"8vh\"}}\r\n />\r\n );\r\n } else {\r\n let computedTableHeight = this.props.tableHeight;\r\n if (computedTableHeight === \"auto\") {\r\n computedTableHeight = 62 + this.props.d2ChartSeries.length * 28;\r\n }\r\n\r\n return (\r\n <div style={{position: \"relative\", ...style}}>\r\n {this.renderModalDialog()}\r\n {this.renderToolbox()}\r\n <ReactEcharts\r\n style={{height: `calc(100% - ${computedTableHeight}px)`}}\r\n onChartReady={instance => {\r\n this.chartInstance = instance;\r\n const zr = instance.getZr();\r\n zr.on(\"mouseout\", () => {\r\n const tableItems = this.state.tableItems;\r\n tableItems.forEach(value => value.tooltipValue = undefined);\r\n this.setState({tableItems: tableItems, tooltipTime: undefined}, () => {\r\n this.d2ChartTablePanel?.updateGrid();\r\n });\r\n });\r\n if (this.advancedMouseZoomEnabled) {\r\n new D2ChartAdvancedZoom(instance).register();\r\n }\r\n setTimeout(() => instance.resize(), 50);\r\n }}\r\n option={this.props.compact ? compactChartOptions : d2ChartOptions}\r\n />\r\n <D2ChartTablePanel\r\n style={{height: computedTableHeight, ...this.props.tableWrapperStyle}}\r\n ref={component => this.d2ChartTablePanel = component}\r\n tableItems={this.state.tableItems}\r\n tooltipTime={this.state.tooltipTime}\r\n onSwitchLegend={this.onSwitchLegend}\r\n />\r\n </div>\r\n )\r\n }\r\n }\r\n}"]}
|
|
@@ -97,8 +97,8 @@ export default class D2ChartToolboxPanel extends React.Component {
|
|
|
97
97
|
margin: this.props.compact ? "4px 4px 0px" : "0px 32px",
|
|
98
98
|
zIndex: 1,
|
|
99
99
|
} },
|
|
100
|
-
this.renderZoomInIcon(iconMargin, token.colorPrimary),
|
|
101
|
-
this.renderZoomOutIcon(iconMargin),
|
|
100
|
+
this.props.showZoomIcons !== false && this.renderZoomInIcon(iconMargin, token.colorPrimary),
|
|
101
|
+
this.props.showZoomIcons !== false && this.renderZoomOutIcon(iconMargin),
|
|
102
102
|
this.props.showCalendarIcon && this.renderCalendarIcon(iconMargin, token.colorPrimary),
|
|
103
103
|
this.renderMissingDataIcon(iconMargin, token.colorWarning, token.colorPrimary),
|
|
104
104
|
this.props.compact && this.renderFullScreenIcon(iconMargin)))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"d2ChartToolboxPanel.js","sourceRoot":"","sources":["../../../../../coreui/components/d2Chart/d2ChartToolboxPanel.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\r\nimport {\r\n CalendarOutlined,\r\n FullscreenOutlined,\r\n IssuesCloseOutlined,\r\n ZoomInOutlined,\r\n ZoomOutOutlined\r\n} from \"@ant-design/icons\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\nimport {Popover, Space} from \"antd\";\r\nimport {\r\n CHART_CALENDAR_HOLIDAY_COLOR,\r\n CHART_CALENDAR_SATURDAY_COLOR,\r\n CHART_CALENDAR_SUNDAY_COLOR\r\n} from \"../../../api/constants/d2ChartConstants\";\r\nimport dayjs from \"d2core/dayjs\";\r\nimport {LocaleHolder} from \"d2core/i18n/localeHolder\";\r\nimport {MarkAreaData} from \"../../../api/types/d2ChartTypes\";\r\nimport WithToken from \"../../style/withToken\";\r\n\r\ninterface ChartToolboxPanelProps {\r\n missingData: MarkAreaData[][]\r\n calendarDataVisible?: boolean\r\n missingDataVisible?: boolean\r\n showCalendarIcon?: boolean\r\n compact?: boolean\r\n\r\n onZoomControlSwitch(zoomEnabled: boolean): void\r\n\r\n onZoomReset(): void\r\n\r\n onFullScreen?(): void\r\n\r\n onSwitchCalendarData?(): void\r\n\r\n onSwitchMissingData?(): void\r\n}\r\n\r\ninterface ChartToolboxPanelState {\r\n zoomEnabled: boolean\r\n}\r\n\r\nexport default class D2ChartToolboxPanel extends React.Component<ChartToolboxPanelProps, ChartToolboxPanelState> {\r\n constructor(props: Readonly<ChartToolboxPanelProps>) {\r\n super(props);\r\n\r\n this.state = {\r\n zoomEnabled: false,\r\n }\r\n }\r\n\r\n private renderZoomInIcon(iconMargin: number, activeColor: string) {\r\n return (\r\n <ZoomInOutlined\r\n style={{\r\n cursor: \"pointer\",\r\n margin: `0px ${iconMargin}px`,\r\n color: this.state.zoomEnabled ? activeColor : undefined,\r\n }}\r\n title={i18n(`${this.state.zoomEnabled ? \"Deactivate\" : \"Activate\"} Zoom`)}\r\n onClick={() => {\r\n const zoomEnabled = !this.state.zoomEnabled\r\n this.setState({zoomEnabled: zoomEnabled});\r\n this.props.onZoomControlSwitch?.(zoomEnabled);\r\n }}\r\n />\r\n );\r\n }\r\n\r\n private renderZoomOutIcon(iconMargin: number) {\r\n return (\r\n <ZoomOutOutlined\r\n style={{\r\n cursor: \"pointer\",\r\n margin: `0px ${iconMargin}px`,\r\n }}\r\n title={i18n(\"Zoom Reset\")}\r\n onClick={() => {\r\n this.props.onZoomReset?.();\r\n }}\r\n />\r\n );\r\n }\r\n\r\n private renderMissingDataIcon(iconMargin: number, missingDataColor: string, activeColor: string) {\r\n const missingData = this.props.missingData;\r\n\r\n const icon =\r\n <IssuesCloseOutlined\r\n style={{\r\n cursor: \"pointer\",\r\n margin: `0px ${iconMargin}px`,\r\n color: this.props.missingDataVisible ? (missingData.length > 0 ? missingDataColor : activeColor) : undefined,\r\n }}\r\n title={i18n(`${this.props.missingDataVisible ? \"Hide\" : \"Show\"} Missing Data`)}\r\n onClick={() => {\r\n this.props.onSwitchMissingData?.();\r\n }}\r\n />\r\n\r\n if (this.props.missingDataVisible) {\r\n return (\r\n <Popover\r\n mouseEnterDelay={0.8}\r\n placement=\"topRight\"\r\n title={<span><CalendarOutlined/> {i18n(\"Missing Data Periods\")}</span>}\r\n content={\r\n <div style={{width: 220, maxHeight: 400, overflow: \"auto\", fontSize: 13}}>\r\n {missingData.length === 0 && <span>{i18n(\"No missing data\")}</span>}\r\n {\r\n missingData.map((value, index) => {\r\n const from = dayjs(value[0].xAxis).format(LocaleHolder.getDateTimeFormat(true, false, false));\r\n const to = dayjs(value[1].xAxis).format(LocaleHolder.getDateTimeFormat(true, false, false));\r\n\r\n return <div key={index}>{from} - {to}</div>\r\n })\r\n }\r\n </div>\r\n }\r\n >\r\n {icon}\r\n </Popover>\r\n );\r\n } else {\r\n return icon;\r\n }\r\n }\r\n\r\n private renderFullScreenIcon(iconMargin: number) {\r\n return (\r\n <FullscreenOutlined\r\n style={{\r\n cursor: \"pointer\",\r\n margin: `0px ${iconMargin}px`,\r\n }}\r\n title={i18n(\"Fullscreen\")}\r\n onClick={() => {\r\n this.props.onFullScreen?.();\r\n }}\r\n />\r\n );\r\n }\r\n\r\n private renderCalendarIcon(iconMargin: number, activeColor: string) {\r\n return (\r\n <Popover\r\n mouseEnterDelay={0.8}\r\n content={\r\n <Space\r\n style={{width: 92, textAlign: \"center\"}}\r\n direction=\"vertical\"\r\n size={4}\r\n >\r\n <div style={{backgroundColor: CHART_CALENDAR_SATURDAY_COLOR}}>\r\n <span>{i18n(\"Saturday\")}</span>\r\n </div>\r\n <div style={{backgroundColor: CHART_CALENDAR_SUNDAY_COLOR}}>\r\n <span>{i18n(\"Sunday\")}</span>\r\n </div>\r\n <div style={{backgroundColor: CHART_CALENDAR_HOLIDAY_COLOR}}>\r\n <span>{i18n(\"Holiday\")}</span>\r\n </div>\r\n </Space>\r\n }\r\n >\r\n <CalendarOutlined\r\n style={{\r\n cursor: \"pointer\",\r\n margin: `0px ${iconMargin}px`,\r\n color: this.props.calendarDataVisible ? activeColor : undefined,\r\n }}\r\n title={i18n(`${this.props.calendarDataVisible ? \"Hide\" : \"Show\"} Calendar Data`)}\r\n onClick={() => {\r\n this.props.onSwitchCalendarData?.();\r\n }}\r\n />\r\n </Popover>\r\n );\r\n }\r\n\r\n render() {\r\n const iconMargin = 2;\r\n\r\n return (\r\n <WithToken>\r\n {token => (\r\n <div\r\n style={{\r\n position: \"absolute\",\r\n top: 1,\r\n right: 0,\r\n fontSize: this.props.compact ? 18 : 28,\r\n color: token.colorTextTertiary,\r\n display: \"flex\",\r\n justifyContent: \"end\",\r\n margin: this.props.compact ? \"4px 4px 0px\" : \"0px 32px\",\r\n zIndex: 1,\r\n }}\r\n >\r\n {this.renderZoomInIcon(iconMargin, token.colorPrimary)}\r\n {this.renderZoomOutIcon(iconMargin)}\r\n {this.props.showCalendarIcon && this.renderCalendarIcon(iconMargin, token.colorPrimary)}\r\n {this.renderMissingDataIcon(iconMargin, token.colorWarning, token.colorPrimary)}\r\n {this.props.compact && this.renderFullScreenIcon(iconMargin)}\r\n </div>\r\n )}\r\n </WithToken>\r\n );\r\n }\r\n\r\n}"]}
|
|
1
|
+
{"version":3,"file":"d2ChartToolboxPanel.js","sourceRoot":"","sources":["../../../../../coreui/components/d2Chart/d2ChartToolboxPanel.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\r\nimport {\r\n CalendarOutlined,\r\n FullscreenOutlined,\r\n IssuesCloseOutlined,\r\n ZoomInOutlined,\r\n ZoomOutOutlined\r\n} from \"@ant-design/icons\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\nimport {Popover, Space} from \"antd\";\r\nimport {\r\n CHART_CALENDAR_HOLIDAY_COLOR,\r\n CHART_CALENDAR_SATURDAY_COLOR,\r\n CHART_CALENDAR_SUNDAY_COLOR\r\n} from \"../../../api/constants/d2ChartConstants\";\r\nimport dayjs from \"d2core/dayjs\";\r\nimport {LocaleHolder} from \"d2core/i18n/localeHolder\";\r\nimport {MarkAreaData} from \"../../../api/types/d2ChartTypes\";\r\nimport WithToken from \"../../style/withToken\";\r\n\r\ninterface ChartToolboxPanelProps {\r\n missingData: MarkAreaData[][]\r\n calendarDataVisible?: boolean\r\n missingDataVisible?: boolean\r\n showCalendarIcon?: boolean\r\n showZoomIcons?: boolean // visible by default, the chart hides them when the advanced mouse zoom is active\r\n compact?: boolean\r\n\r\n onZoomControlSwitch(zoomEnabled: boolean): void\r\n\r\n onZoomReset(): void\r\n\r\n onFullScreen?(): void\r\n\r\n onSwitchCalendarData?(): void\r\n\r\n onSwitchMissingData?(): void\r\n}\r\n\r\ninterface ChartToolboxPanelState {\r\n zoomEnabled: boolean\r\n}\r\n\r\nexport default class D2ChartToolboxPanel extends React.Component<ChartToolboxPanelProps, ChartToolboxPanelState> {\r\n constructor(props: Readonly<ChartToolboxPanelProps>) {\r\n super(props);\r\n\r\n this.state = {\r\n zoomEnabled: false,\r\n }\r\n }\r\n\r\n private renderZoomInIcon(iconMargin: number, activeColor: string) {\r\n return (\r\n <ZoomInOutlined\r\n style={{\r\n cursor: \"pointer\",\r\n margin: `0px ${iconMargin}px`,\r\n color: this.state.zoomEnabled ? activeColor : undefined,\r\n }}\r\n title={i18n(`${this.state.zoomEnabled ? \"Deactivate\" : \"Activate\"} Zoom`)}\r\n onClick={() => {\r\n const zoomEnabled = !this.state.zoomEnabled\r\n this.setState({zoomEnabled: zoomEnabled});\r\n this.props.onZoomControlSwitch?.(zoomEnabled);\r\n }}\r\n />\r\n );\r\n }\r\n\r\n private renderZoomOutIcon(iconMargin: number) {\r\n return (\r\n <ZoomOutOutlined\r\n style={{\r\n cursor: \"pointer\",\r\n margin: `0px ${iconMargin}px`,\r\n }}\r\n title={i18n(\"Zoom Reset\")}\r\n onClick={() => {\r\n this.props.onZoomReset?.();\r\n }}\r\n />\r\n );\r\n }\r\n\r\n private renderMissingDataIcon(iconMargin: number, missingDataColor: string, activeColor: string) {\r\n const missingData = this.props.missingData;\r\n\r\n const icon =\r\n <IssuesCloseOutlined\r\n style={{\r\n cursor: \"pointer\",\r\n margin: `0px ${iconMargin}px`,\r\n color: this.props.missingDataVisible ? (missingData.length > 0 ? missingDataColor : activeColor) : undefined,\r\n }}\r\n title={i18n(`${this.props.missingDataVisible ? \"Hide\" : \"Show\"} Missing Data`)}\r\n onClick={() => {\r\n this.props.onSwitchMissingData?.();\r\n }}\r\n />\r\n\r\n if (this.props.missingDataVisible) {\r\n return (\r\n <Popover\r\n mouseEnterDelay={0.8}\r\n placement=\"topRight\"\r\n title={<span><CalendarOutlined/> {i18n(\"Missing Data Periods\")}</span>}\r\n content={\r\n <div style={{width: 220, maxHeight: 400, overflow: \"auto\", fontSize: 13}}>\r\n {missingData.length === 0 && <span>{i18n(\"No missing data\")}</span>}\r\n {\r\n missingData.map((value, index) => {\r\n const from = dayjs(value[0].xAxis).format(LocaleHolder.getDateTimeFormat(true, false, false));\r\n const to = dayjs(value[1].xAxis).format(LocaleHolder.getDateTimeFormat(true, false, false));\r\n\r\n return <div key={index}>{from} - {to}</div>\r\n })\r\n }\r\n </div>\r\n }\r\n >\r\n {icon}\r\n </Popover>\r\n );\r\n } else {\r\n return icon;\r\n }\r\n }\r\n\r\n private renderFullScreenIcon(iconMargin: number) {\r\n return (\r\n <FullscreenOutlined\r\n style={{\r\n cursor: \"pointer\",\r\n margin: `0px ${iconMargin}px`,\r\n }}\r\n title={i18n(\"Fullscreen\")}\r\n onClick={() => {\r\n this.props.onFullScreen?.();\r\n }}\r\n />\r\n );\r\n }\r\n\r\n private renderCalendarIcon(iconMargin: number, activeColor: string) {\r\n return (\r\n <Popover\r\n mouseEnterDelay={0.8}\r\n content={\r\n <Space\r\n style={{width: 92, textAlign: \"center\"}}\r\n direction=\"vertical\"\r\n size={4}\r\n >\r\n <div style={{backgroundColor: CHART_CALENDAR_SATURDAY_COLOR}}>\r\n <span>{i18n(\"Saturday\")}</span>\r\n </div>\r\n <div style={{backgroundColor: CHART_CALENDAR_SUNDAY_COLOR}}>\r\n <span>{i18n(\"Sunday\")}</span>\r\n </div>\r\n <div style={{backgroundColor: CHART_CALENDAR_HOLIDAY_COLOR}}>\r\n <span>{i18n(\"Holiday\")}</span>\r\n </div>\r\n </Space>\r\n }\r\n >\r\n <CalendarOutlined\r\n style={{\r\n cursor: \"pointer\",\r\n margin: `0px ${iconMargin}px`,\r\n color: this.props.calendarDataVisible ? activeColor : undefined,\r\n }}\r\n title={i18n(`${this.props.calendarDataVisible ? \"Hide\" : \"Show\"} Calendar Data`)}\r\n onClick={() => {\r\n this.props.onSwitchCalendarData?.();\r\n }}\r\n />\r\n </Popover>\r\n );\r\n }\r\n\r\n render() {\r\n const iconMargin = 2;\r\n\r\n return (\r\n <WithToken>\r\n {token => (\r\n <div\r\n style={{\r\n position: \"absolute\",\r\n top: 1,\r\n right: 0,\r\n fontSize: this.props.compact ? 18 : 28,\r\n color: token.colorTextTertiary,\r\n display: \"flex\",\r\n justifyContent: \"end\",\r\n margin: this.props.compact ? \"4px 4px 0px\" : \"0px 32px\",\r\n zIndex: 1,\r\n }}\r\n >\r\n {this.props.showZoomIcons !== false && this.renderZoomInIcon(iconMargin, token.colorPrimary)}\r\n {this.props.showZoomIcons !== false && this.renderZoomOutIcon(iconMargin)}\r\n {this.props.showCalendarIcon && this.renderCalendarIcon(iconMargin, token.colorPrimary)}\r\n {this.renderMissingDataIcon(iconMargin, token.colorWarning, token.colorPrimary)}\r\n {this.props.compact && this.renderFullScreenIcon(iconMargin)}\r\n </div>\r\n )}\r\n </WithToken>\r\n );\r\n }\r\n\r\n}"]}
|
|
@@ -175,7 +175,7 @@ export default class EdaManagerAbstractPanel extends React.Component {
|
|
|
175
175
|
}) ?? [];
|
|
176
176
|
return (React.createElement("div", { style: Object.assign({ display: "flex", flexDirection: "column", height: "100%" }, this.tabWrapperStyle) },
|
|
177
177
|
this.renderTimePanel(),
|
|
178
|
-
React.createElement(D2ChartPanel, { ref: component => this.edaManagerChartPanel = component, d2ChartSeries: d2ChartSeries, d2ChartRecords: this.state.loadedVectors, d2ChartCalendarRecords: this.state.loadedCalendarVector, loading: this.state.loading, compact: this.edaManagerChartPanelCompact, markArea: this.props.markArea, tableHeight: this.props.tableHeight, tableWrapperStyle: this.props.tableWrapperStyle })));
|
|
178
|
+
React.createElement(D2ChartPanel, { ref: component => this.edaManagerChartPanel = component, d2ChartSeries: d2ChartSeries, d2ChartRecords: this.state.loadedVectors, d2ChartCalendarRecords: this.state.loadedCalendarVector, loading: this.state.loading, compact: this.edaManagerChartPanelCompact, markArea: this.props.markArea, tableHeight: this.props.tableHeight, tableWrapperStyle: this.props.tableWrapperStyle, advancedMouseZoom: this.props.advancedMouseZoom })));
|
|
179
179
|
}
|
|
180
180
|
return React.createElement("span", null, component);
|
|
181
181
|
}
|