d2aura 26.0.11 → 26.0.13
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 +19 -2
- package/api/eda/edaManagerApi.js +36 -3
- package/api/eda/edaManagerApi.js.map +1 -1
- package/api/eda/generated/events.d.ts +86 -28
- package/api/eda/generated/events.js +154 -42
- package/api/eda/generated/events.js.map +1 -1
- package/api/eda/generated/structures.d.ts +21 -0
- package/api/eda/generated/structures.js.map +1 -1
- package/api/impl/utils/reportError.js +16 -0
- package/api/impl/utils/reportError.js.map +1 -1
- package/api/webPush/webPushApi.js.map +1 -1
- package/api/webPush/webPushUtils.js.map +1 -1
- package/core/i18n/d2aura.sk.json +8 -0
- package/core/i18n/jsapi.sk.json +4 -0
- package/core/i18n/jsapi.ua.json +4 -0
- package/coreui/components/edaManagerComponent/components/edaDataBasePanel.d.ts +13 -37
- package/coreui/components/edaManagerComponent/components/edaDataBasePanel.js +114 -211
- package/coreui/components/edaManagerComponent/components/edaDataBasePanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaDetailPanel.d.ts +2 -0
- package/coreui/components/edaManagerComponent/components/edaDetailPanel.js +2 -2
- package/coreui/components/edaManagerComponent/components/edaDetailPanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaGraphPanel.d.ts +14 -5
- package/coreui/components/edaManagerComponent/components/edaGraphPanel.js +338 -326
- package/coreui/components/edaManagerComponent/components/edaGraphPanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaTablePanel.d.ts +15 -4
- package/coreui/components/edaManagerComponent/components/edaTablePanel.js +139 -64
- package/coreui/components/edaManagerComponent/components/edaTablePanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaTimeWindowPickerPanel.d.ts +3 -8
- package/coreui/components/edaManagerComponent/components/edaTimeWindowPickerPanel.js +12 -38
- package/coreui/components/edaManagerComponent/components/edaTimeWindowPickerPanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaTreeView.d.ts +1 -1
- package/coreui/components/edaManagerComponent/components/edaTreeView.js +5 -5
- package/coreui/components/edaManagerComponent/components/edaTreeView.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaVectorDetailPanel.d.ts +8 -2
- package/coreui/components/edaManagerComponent/components/edaVectorDetailPanel.js +39 -11
- package/coreui/components/edaManagerComponent/components/edaVectorDetailPanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/context/edaVectorDataContext.d.ts +33 -0
- package/coreui/components/edaManagerComponent/context/edaVectorDataContext.js +3 -0
- package/coreui/components/edaManagerComponent/context/edaVectorDataContext.js.map +1 -0
- package/coreui/components/edaManagerComponent/context/edaVectorDataProvider.d.ts +9 -0
- package/coreui/components/edaManagerComponent/context/edaVectorDataProvider.js +267 -0
- package/coreui/components/edaManagerComponent/context/edaVectorDataProvider.js.map +1 -0
- package/coreui/components/edaManagerComponent/context/loadingContext.d.ts +7 -0
- package/coreui/components/edaManagerComponent/context/loadingContext.js +3 -0
- package/coreui/components/edaManagerComponent/context/loadingContext.js.map +1 -0
- package/coreui/components/edaManagerComponent/context/sharedSampleRange.d.ts +1 -2
- package/coreui/components/edaManagerComponent/context/sharedSampleRange.js +10 -0
- package/coreui/components/edaManagerComponent/context/sharedSampleRange.js.map +1 -1
- package/coreui/components/edaManagerComponent/edaDetail.d.ts +4 -12
- package/coreui/components/edaManagerComponent/edaDetail.js +53 -88
- package/coreui/components/edaManagerComponent/edaDetail.js.map +1 -1
- package/coreui/components/edaManagerComponent/edaNavigator.d.ts +2 -1
- package/coreui/components/edaManagerComponent/edaNavigator.js.map +1 -1
- package/coreui/components/edaManagerComponent/edaSelect.d.ts +13 -7
- package/coreui/components/edaManagerComponent/edaSelect.js +211 -7
- package/coreui/components/edaManagerComponent/edaSelect.js.map +1 -1
- package/coreui/components/edaManagerComponent/utils/utils.d.ts +17 -0
- package/coreui/components/edaManagerComponent/utils/utils.js +57 -0
- package/coreui/components/edaManagerComponent/utils/utils.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/E.EM_NAVIGATOR_IMPL.xml +64 -2
- package/d2configuration/edaManager/E.EM_NAVIGATOR_SQL.xml +51 -13
- package/d2configuration/edaManager/E.EM_NAVIGATOR_UNIT.xml +304 -4
- package/d2configuration/edaManager/E.EM_VECTOR_IMPL.xml +9 -3
- package/d2configuration/edaManager/E.EM_VECTOR_UNIT.xml +89 -3
- package/d2configuration/edaManager/EDA_StatVectorRec.xml +56 -0
- package/d2configuration/edaManager/SD.EM_EDA_StatVectorRec_V1.xml +125 -0
- package/d2configuration/edaManager/SD.EM_Filter_Condition.xml +156 -0
- package/d2configuration/edaManager/SD.EM_Tree_Item.xml +34 -1
- package/package.json +3 -3
- package/coreui/components/edaManagerComponent/context/sharedSampleRangeWrapper.d.ts +0 -6
- package/coreui/components/edaManagerComponent/context/sharedSampleRangeWrapper.js +0 -14
- package/coreui/components/edaManagerComponent/context/sharedSampleRangeWrapper.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edaVectorDataContext.js","sourceRoot":"","sources":["../../../../../../coreui/components/edaManagerComponent/context/edaVectorDataContext.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,aAAa,EAAC,MAAM,OAAO,CAAC;AAiCpC,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAwC,SAAS,CAAC,CAAC","sourcesContent":["import {VectorValuesData} from \"../../../../api/eda/edaManagerApi\";\r\nimport {SD_EM_Tree_Item} from \"../../../../api/eda/generated/structures\";\r\nimport {EdaSamplingType, GroupData, IdType, ScenarioData, VectorData} from \"../constants/edaTypes\";\r\nimport {createContext} from \"react\";\r\nimport dayjs from \"d2core/dayjs\";\r\nimport {SharedSampleRange} from \"./sharedSampleRange\";\r\n\r\nexport interface VectorDataState {\r\n data: VectorValuesData\r\n from: dayjs.Dayjs\r\n to: dayjs.Dayjs\r\n sampling: EdaSamplingType\r\n}\r\n\r\nexport interface EdaVectorDataState {\r\n data: {[id: number]: VectorDataState}\r\n vectors: SD_EM_Tree_Item[]\r\n visible: Set<number>\r\n initialized: boolean\r\n\r\n loadedType?: IdType\r\n loadedData?: VectorData | GroupData | ScenarioData\r\n loadedRange?: SharedSampleRange\r\n}\r\n\r\nexport interface EdaVectorDataContextValue extends EdaVectorDataState {\r\n loadAllData: (type: IdType, data: VectorData | GroupData | ScenarioData) => void\r\n loadSpecificVectors: (vectors: SD_EM_Tree_Item[]) => void\r\n cancelLoading: () => void\r\n toggleVectorVisibility: (id: number, visible: boolean) => void\r\n setAllVectorVisibility: (visible: boolean) => void\r\n isVectorVisible: (id: number) => boolean\r\n allVectorsVisible: () => boolean\r\n noVectorsVisible: () => boolean\r\n}\r\n\r\nexport const EdaVectorDataContext = createContext<EdaVectorDataContextValue | undefined>(undefined);"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React, { FC } from "react";
|
|
2
|
+
import EdaManagerApi from "../../../../api/eda/edaManagerApi";
|
|
3
|
+
interface Props {
|
|
4
|
+
api: EdaManagerApi;
|
|
5
|
+
showTimeWindow?: boolean;
|
|
6
|
+
children?: React.ReactNode;
|
|
7
|
+
}
|
|
8
|
+
export declare const EdaVectorDataProvider: FC<Props>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import React, { useCallback, useContext, useRef, useState } from "react";
|
|
2
|
+
import { EdaVectorDataContext } from "./edaVectorDataContext";
|
|
3
|
+
import { SharedSampleRangeContext } from "./sharedSampleRange";
|
|
4
|
+
import { LoadingContext } from "./loadingContext";
|
|
5
|
+
import { message } from "antd";
|
|
6
|
+
import i18n from "d2core/i18n/i18n";
|
|
7
|
+
export const EdaVectorDataProvider = ({ api, showTimeWindow, children }) => {
|
|
8
|
+
const [dataState, setDataState] = useState({
|
|
9
|
+
data: {},
|
|
10
|
+
vectors: [],
|
|
11
|
+
visible: new Set(),
|
|
12
|
+
initialized: false,
|
|
13
|
+
});
|
|
14
|
+
const [loadingState, setLoadingState] = useState({
|
|
15
|
+
loading: false,
|
|
16
|
+
loadingPercentage: 0,
|
|
17
|
+
loadingVector: "",
|
|
18
|
+
loadingCount: 0,
|
|
19
|
+
});
|
|
20
|
+
const range = useContext(SharedSampleRangeContext);
|
|
21
|
+
const lastRequestId = useRef(0);
|
|
22
|
+
const loadingRef = useRef(false);
|
|
23
|
+
const safeReadVectorValues = async (id, name, from, to, step) => {
|
|
24
|
+
try {
|
|
25
|
+
return await api.readVectorValues(id, from, to, step);
|
|
26
|
+
}
|
|
27
|
+
catch (e) {
|
|
28
|
+
message.warning({
|
|
29
|
+
type: "warning",
|
|
30
|
+
content: React.createElement("span", null, i18n("Failed to load vector %{n} with error: '%{e}'", { n: name, e: e?.value }))
|
|
31
|
+
});
|
|
32
|
+
console.error(e);
|
|
33
|
+
return {
|
|
34
|
+
data: []
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const loadAllData = useCallback(async (type, data) => {
|
|
39
|
+
if (!range) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const requestId = ++lastRequestId.current;
|
|
43
|
+
loadingRef.current = true;
|
|
44
|
+
setDataState((s) => ({ ...s, loadedType: type, loadedData: data, loadedRange: range }));
|
|
45
|
+
setLoadingState((s) => ({ ...s, loading: true, loadingPercentage: 0 }));
|
|
46
|
+
try {
|
|
47
|
+
const { btTotal, etTotal, sampling, vectorPage } = range;
|
|
48
|
+
const result = {};
|
|
49
|
+
const columns = [];
|
|
50
|
+
const visible = new Set();
|
|
51
|
+
let { btWindow, etWindow } = range;
|
|
52
|
+
if (!showTimeWindow) {
|
|
53
|
+
btWindow = btTotal;
|
|
54
|
+
etWindow = etTotal;
|
|
55
|
+
}
|
|
56
|
+
switch (type) {
|
|
57
|
+
case 1:
|
|
58
|
+
case 2: {
|
|
59
|
+
let vectors;
|
|
60
|
+
try {
|
|
61
|
+
if (type === 1) {
|
|
62
|
+
vectors = await api.getGroupVectors(data.data.ID_SKVEKTOR, (vectorPage - 1) * api.pageSize);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
vectors = await api.getScenarioVectors(data.data.ID_SCENAR, (vectorPage - 1) * api.pageSize, undefined, true);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
console.error(error);
|
|
70
|
+
vectors = { items: [], leftCount: 0 };
|
|
71
|
+
}
|
|
72
|
+
setLoadingState((s) => ({ ...s, loadingCount: vectors.items.length }));
|
|
73
|
+
if (requestId !== lastRequestId.current) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
for (const vector of vectors.items) {
|
|
77
|
+
columns.push(vector);
|
|
78
|
+
visible.add(vector.ID);
|
|
79
|
+
}
|
|
80
|
+
for (let i = 0; i < vectors.items.length; i++) {
|
|
81
|
+
const vector = vectors.items[i];
|
|
82
|
+
setLoadingState((s) => ({ ...s, loadingVector: vector.DisplayName ?? "" }));
|
|
83
|
+
result[vector.ID] = {
|
|
84
|
+
data: await safeReadVectorValues(vector.ID, vector.DisplayName, btWindow, etWindow, sampling),
|
|
85
|
+
from: btWindow,
|
|
86
|
+
to: etWindow,
|
|
87
|
+
sampling: sampling,
|
|
88
|
+
};
|
|
89
|
+
if (!loadingRef.current) {
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
setLoadingState((s) => ({ ...s, loadingPercentage: (i + 1) / vectors.items.length * 100 }));
|
|
93
|
+
}
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
case 0: {
|
|
97
|
+
const column = data.data;
|
|
98
|
+
const id = data.data.ID_VEKTOR;
|
|
99
|
+
setLoadingState((s) => ({ ...s, loadingCount: 1, loadingVector: column.ZOBRAZ_MENO }));
|
|
100
|
+
result[id] = {
|
|
101
|
+
data: await safeReadVectorValues(id, column.ZOBRAZ_MENO, btWindow, etWindow, sampling),
|
|
102
|
+
from: btWindow,
|
|
103
|
+
to: etWindow,
|
|
104
|
+
sampling: sampling,
|
|
105
|
+
};
|
|
106
|
+
if (requestId !== lastRequestId.current) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
visible.add(column.ID_VEKTOR);
|
|
110
|
+
columns.push({
|
|
111
|
+
ID: column.ID_VEKTOR,
|
|
112
|
+
DisplayName: column.ZOBRAZ_MENO,
|
|
113
|
+
Name: column.MENO,
|
|
114
|
+
ParentID: column.ID_SKVEKTOR,
|
|
115
|
+
Path: "",
|
|
116
|
+
Type: 0,
|
|
117
|
+
Units: column.TECH_JEDNOTKY,
|
|
118
|
+
RoundingType: column.VIEW_ROUND,
|
|
119
|
+
RoundingPlaces: column.VIEW_DEC_PL
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
setDataState((s) => ({ ...s, data: result, vectors: columns, visible: visible }));
|
|
124
|
+
setLoadingState((s) => ({ ...s, loadingPercentage: 100 }));
|
|
125
|
+
}
|
|
126
|
+
catch (e) {
|
|
127
|
+
console.error("Failed to load all data", e);
|
|
128
|
+
await api.cancelSession();
|
|
129
|
+
}
|
|
130
|
+
finally {
|
|
131
|
+
if (requestId === lastRequestId.current) {
|
|
132
|
+
setDataState((s) => ({ ...s, initialized: true }));
|
|
133
|
+
setLoadingState((s) => ({ ...s, loading: false }));
|
|
134
|
+
}
|
|
135
|
+
loadingRef.current = false;
|
|
136
|
+
}
|
|
137
|
+
}, [api, showTimeWindow, range]);
|
|
138
|
+
const loadSpecificVectors = useCallback(async (vectors) => {
|
|
139
|
+
if (!range) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
const { btTotal, etTotal, sampling } = range;
|
|
143
|
+
let { btWindow, etWindow } = range;
|
|
144
|
+
if (!showTimeWindow) {
|
|
145
|
+
btWindow = btTotal;
|
|
146
|
+
etWindow = etTotal;
|
|
147
|
+
}
|
|
148
|
+
vectors = vectors.filter((vector) => {
|
|
149
|
+
const loadedVector = dataState.data[vector.ID];
|
|
150
|
+
return !loadedVector.from.isSame(btWindow) || !loadedVector.to.isSame(etWindow) || loadedVector.sampling !== sampling;
|
|
151
|
+
});
|
|
152
|
+
if (vectors.length === 0) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
const requestId = ++lastRequestId.current;
|
|
156
|
+
loadingRef.current = true;
|
|
157
|
+
setDataState((s) => ({ ...s, loadedRange: range }));
|
|
158
|
+
setLoadingState((s) => ({ ...s, loading: true, loadingPercentage: 0 }));
|
|
159
|
+
try {
|
|
160
|
+
const result = { ...dataState.data };
|
|
161
|
+
const visible = new Set(dataState.visible);
|
|
162
|
+
setLoadingState((s) => ({ ...s, loading: true, loadingPercentage: 0 }));
|
|
163
|
+
setLoadingState((s) => ({ ...s, loadingCount: vectors.length }));
|
|
164
|
+
if (requestId !== lastRequestId.current) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
for (let i = 0; i < vectors.length; i++) {
|
|
168
|
+
const vector = vectors[i];
|
|
169
|
+
setLoadingState((s) => ({ ...s, loadingVector: vector.DisplayName ?? "" }));
|
|
170
|
+
result[vector.ID] = {
|
|
171
|
+
data: await safeReadVectorValues(vector.ID, vector.DisplayName, btWindow, etWindow, sampling),
|
|
172
|
+
from: btWindow,
|
|
173
|
+
to: etWindow,
|
|
174
|
+
sampling: sampling,
|
|
175
|
+
};
|
|
176
|
+
visible.add(vector.ID);
|
|
177
|
+
setLoadingState((s) => ({ ...s, loadingPercentage: (i + 1) / vectors.length * 100 }));
|
|
178
|
+
if (!loadingRef.current) {
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
setLoadingState((s) => ({ ...s, loadingPercentage: 100 }));
|
|
183
|
+
setDataState((s) => ({ ...s, data: result, visible }));
|
|
184
|
+
}
|
|
185
|
+
catch (e) {
|
|
186
|
+
console.log("Failed to load specific vectors", e);
|
|
187
|
+
await api.cancelSession();
|
|
188
|
+
}
|
|
189
|
+
finally {
|
|
190
|
+
loadingRef.current = false;
|
|
191
|
+
setLoadingState((s) => ({ ...s, loading: false }));
|
|
192
|
+
}
|
|
193
|
+
}, [api, showTimeWindow, range, dataState]);
|
|
194
|
+
const cancelLoading = async () => {
|
|
195
|
+
loadingRef.current = false;
|
|
196
|
+
await api.cancelSession();
|
|
197
|
+
};
|
|
198
|
+
const toggleVectorVisibility = async (id, visible) => {
|
|
199
|
+
if (!range) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
const state = dataState.data[id];
|
|
203
|
+
const visibleSet = new Set(dataState.visible);
|
|
204
|
+
const { btTotal, etTotal } = range;
|
|
205
|
+
let { btWindow, etWindow } = range;
|
|
206
|
+
if (!showTimeWindow) {
|
|
207
|
+
btWindow = btTotal;
|
|
208
|
+
etWindow = etTotal;
|
|
209
|
+
}
|
|
210
|
+
const needsLoadData = !state.from.isSame(btWindow) || !state.to.isSame(etWindow);
|
|
211
|
+
if (visible) {
|
|
212
|
+
if (needsLoadData) {
|
|
213
|
+
await loadSpecificVectors(dataState.vectors.filter((v) => v.ID === id));
|
|
214
|
+
}
|
|
215
|
+
visibleSet.add(id);
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
visibleSet.delete(id);
|
|
219
|
+
}
|
|
220
|
+
setDataState((s) => ({ ...s, visible: visibleSet }));
|
|
221
|
+
};
|
|
222
|
+
const setAllVectorVisibility = async (visible) => {
|
|
223
|
+
if (!range) {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
const { btTotal, etTotal } = range;
|
|
227
|
+
let { btWindow, etWindow } = range;
|
|
228
|
+
if (!showTimeWindow) {
|
|
229
|
+
btWindow = btTotal;
|
|
230
|
+
etWindow = etTotal;
|
|
231
|
+
}
|
|
232
|
+
if (visible) {
|
|
233
|
+
const toLoad = [];
|
|
234
|
+
const visibleSet = new Set(dataState.visible);
|
|
235
|
+
for (let vector of dataState.vectors) {
|
|
236
|
+
const id = vector.ID;
|
|
237
|
+
const state = dataState.data[id];
|
|
238
|
+
const needsLoadData = !state.from.isSame(btWindow) || !state.to.isSame(etWindow);
|
|
239
|
+
if (needsLoadData) {
|
|
240
|
+
toLoad.push(vector);
|
|
241
|
+
}
|
|
242
|
+
visibleSet.add(id);
|
|
243
|
+
}
|
|
244
|
+
setDataState((s) => ({ ...s, visible: visibleSet }));
|
|
245
|
+
await loadSpecificVectors(toLoad);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
setDataState((s) => ({ ...s, visible: new Set() }));
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
const isVectorVisible = (id) => dataState.visible.has(id);
|
|
252
|
+
const allVectorsVisible = () => dataState.visible.size === dataState.vectors.length;
|
|
253
|
+
const noVectorsVisible = () => dataState.visible.size === 0;
|
|
254
|
+
return (React.createElement(EdaVectorDataContext.Provider, { value: {
|
|
255
|
+
...dataState,
|
|
256
|
+
loadAllData,
|
|
257
|
+
loadSpecificVectors,
|
|
258
|
+
cancelLoading,
|
|
259
|
+
toggleVectorVisibility,
|
|
260
|
+
setAllVectorVisibility,
|
|
261
|
+
isVectorVisible,
|
|
262
|
+
allVectorsVisible,
|
|
263
|
+
noVectorsVisible,
|
|
264
|
+
} },
|
|
265
|
+
React.createElement(LoadingContext.Provider, { value: loadingState }, children)));
|
|
266
|
+
};
|
|
267
|
+
//# sourceMappingURL=edaVectorDataProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edaVectorDataProvider.js","sourceRoot":"","sources":["../../../../../../coreui/components/edaManagerComponent/context/edaVectorDataProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {FC, useCallback, useContext, useRef, useState} from \"react\";\r\nimport EdaManagerApi, {VectorValuesData} from \"../../../../api/eda/edaManagerApi\";\r\nimport {EdaVectorDataContext, EdaVectorDataState, VectorDataState} from \"./edaVectorDataContext\";\r\nimport {SharedSampleRangeContext} from \"./sharedSampleRange\";\r\nimport {GroupData, IdType, ScenarioData, VectorData} from \"../constants/edaTypes\";\r\nimport {SD_EM_Tree_Item} from \"../../../../api/eda/generated/structures\";\r\nimport {LoadingContext, LoadingContextValue} from \"./loadingContext\";\r\nimport dayjs from \"d2core/dayjs\";\r\nimport {message} from \"antd\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\n\r\ninterface Props {\r\n api: EdaManagerApi\r\n showTimeWindow?: boolean\r\n children?: React.ReactNode\r\n}\r\n\r\nexport const EdaVectorDataProvider: FC<Props> = ({api, showTimeWindow, children}) => {\r\n const [dataState, setDataState] = useState<EdaVectorDataState>({\r\n data: {},\r\n vectors: [],\r\n visible: new Set<number>(),\r\n initialized: false,\r\n });\r\n const [loadingState, setLoadingState] = useState<LoadingContextValue>({\r\n loading: false,\r\n loadingPercentage: 0,\r\n loadingVector: \"\",\r\n loadingCount: 0,\r\n })\r\n const range = useContext(SharedSampleRangeContext);\r\n const lastRequestId = useRef(0);\r\n const loadingRef = useRef(false);\r\n\r\n const safeReadVectorValues = async (id: number, name: string, from: dayjs.Dayjs, to: dayjs.Dayjs, step: number): Promise<VectorValuesData> => {\r\n try {\r\n return await api.readVectorValues(id, from, to, step);\r\n } catch (e: any) {\r\n message.warning({\r\n type: \"warning\",\r\n content: <span>{i18n(\"Failed to load vector %{n} with error: '%{e}'\", {n: name, e: e?.value})}</span>\r\n });\r\n console.error(e);\r\n return {\r\n data: []\r\n };\r\n }\r\n }\r\n\r\n const loadAllData = useCallback(async (type: IdType, data: VectorData | GroupData | ScenarioData) => {\r\n if (!range) {\r\n return;\r\n }\r\n\r\n const requestId = ++lastRequestId.current;\r\n\r\n loadingRef.current = true;\r\n setDataState((s): EdaVectorDataState => ({...s, loadedType: type, loadedData: data, loadedRange: range}));\r\n setLoadingState((s): LoadingContextValue => ({...s, loading: true, loadingPercentage: 0}));\r\n\r\n try {\r\n const {btTotal, etTotal, sampling, vectorPage} = range;\r\n const result: { [id: number]: VectorDataState } = {};\r\n const columns: SD_EM_Tree_Item[] = [];\r\n const visible: Set<number> = new Set<number>();\r\n let {btWindow, etWindow} = range;\r\n\r\n if (!showTimeWindow) {\r\n btWindow = btTotal;\r\n etWindow = etTotal;\r\n }\r\n\r\n switch (type) {\r\n case IdType.GROUP:\r\n case IdType.SCENARIO: {\r\n let vectors: { items: Partial<SD_EM_Tree_Item>[], leftCount: number };\r\n\r\n try {\r\n if (type === IdType.GROUP) {\r\n vectors = await api.getGroupVectors((data as GroupData).data.ID_SKVEKTOR, (vectorPage - 1) * api.pageSize);\r\n } else {\r\n vectors = await api.getScenarioVectors((data as ScenarioData).data.ID_SCENAR, (vectorPage - 1) * api.pageSize, undefined, true);\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n vectors = {items: [], leftCount: 0};\r\n }\r\n\r\n setLoadingState((s): LoadingContextValue => ({...s, loadingCount: vectors.items.length}));\r\n\r\n if (requestId !== lastRequestId.current) {\r\n return;\r\n }\r\n\r\n for (const vector of vectors.items) {\r\n columns.push(vector as SD_EM_Tree_Item);\r\n visible.add(vector.ID!);\r\n }\r\n\r\n for (let i = 0; i < vectors.items.length; i++) {\r\n const vector = vectors.items[i] as SD_EM_Tree_Item;\r\n\r\n setLoadingState((s): LoadingContextValue => ({...s, loadingVector: vector.DisplayName ?? \"\"}));\r\n result[vector.ID] = {\r\n data: await safeReadVectorValues(vector.ID, vector.DisplayName, btWindow, etWindow, sampling),\r\n from: btWindow,\r\n to: etWindow,\r\n sampling: sampling,\r\n }\r\n\r\n if (!loadingRef.current) {\r\n break;\r\n }\r\n\r\n setLoadingState((s): LoadingContextValue => ({...s, loadingPercentage: (i + 1) / vectors.items.length * 100}));\r\n }\r\n\r\n break;\r\n }\r\n case IdType.VECTOR: {\r\n const column = (data as VectorData).data;\r\n const id = (data as VectorData).data.ID_VEKTOR;\r\n\r\n setLoadingState((s): LoadingContextValue => ({...s, loadingCount: 1, loadingVector: column.ZOBRAZ_MENO}));\r\n result[id] = {\r\n data: await safeReadVectorValues(id, column.ZOBRAZ_MENO, btWindow, etWindow, sampling),\r\n from: btWindow,\r\n to: etWindow,\r\n sampling: sampling,\r\n };\r\n\r\n if (requestId !== lastRequestId.current) {\r\n return;\r\n }\r\n\r\n visible.add(column.ID_VEKTOR);\r\n columns.push({\r\n ID: column.ID_VEKTOR,\r\n DisplayName: column.ZOBRAZ_MENO,\r\n Name: column.MENO,\r\n ParentID: column.ID_SKVEKTOR,\r\n Path: \"\",\r\n Type: 0,\r\n Units: column.TECH_JEDNOTKY,\r\n RoundingType: column.VIEW_ROUND,\r\n RoundingPlaces: column.VIEW_DEC_PL\r\n });\r\n }\r\n }\r\n\r\n setDataState((s): EdaVectorDataState => ({...s, data: result, vectors: columns, visible: visible}));\r\n setLoadingState((s): LoadingContextValue => ({...s, loadingPercentage: 100}));\r\n } catch (e) {\r\n console.error(\"Failed to load all data\", e);\r\n await api.cancelSession();\r\n } finally {\r\n if (requestId === lastRequestId.current) {\r\n setDataState((s): EdaVectorDataState => ({...s, initialized: true}));\r\n setLoadingState((s): LoadingContextValue => ({...s, loading: false}));\r\n }\r\n\r\n loadingRef.current = false;\r\n }\r\n }, [api, showTimeWindow, range]);\r\n\r\n const loadSpecificVectors = useCallback(async (vectors: SD_EM_Tree_Item[]) => {\r\n if (!range) {\r\n return;\r\n }\r\n\r\n const {btTotal, etTotal, sampling} = range;\r\n let {btWindow, etWindow} = range;\r\n\r\n if (!showTimeWindow) {\r\n btWindow = btTotal;\r\n etWindow = etTotal;\r\n }\r\n\r\n vectors = vectors.filter((vector) => {\r\n const loadedVector = dataState.data[vector.ID];\r\n return !loadedVector.from.isSame(btWindow) || !loadedVector.to.isSame(etWindow) || loadedVector.sampling !== sampling;\r\n });\r\n\r\n if (vectors.length === 0) {\r\n return;\r\n }\r\n\r\n const requestId = ++lastRequestId.current;\r\n\r\n loadingRef.current = true;\r\n setDataState((s): EdaVectorDataState => ({...s, loadedRange: range}));\r\n setLoadingState((s): LoadingContextValue => ({...s, loading: true, loadingPercentage: 0}));\r\n\r\n try {\r\n const result: { [id: number]: VectorDataState } = {...dataState.data};\r\n const visible = new Set(dataState.visible);\r\n\r\n setLoadingState((s): LoadingContextValue => ({...s, loading: true, loadingPercentage: 0}));\r\n setLoadingState((s): LoadingContextValue => ({...s, loadingCount: vectors.length}));\r\n\r\n if (requestId !== lastRequestId.current) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < vectors.length; i++) {\r\n const vector = vectors[i] as SD_EM_Tree_Item;\r\n\r\n setLoadingState((s): LoadingContextValue => ({...s, loadingVector: vector.DisplayName ?? \"\"}));\r\n result[vector.ID] = {\r\n data: await safeReadVectorValues(vector.ID, vector.DisplayName, btWindow, etWindow, sampling),\r\n from: btWindow,\r\n to: etWindow,\r\n sampling: sampling,\r\n };\r\n visible.add(vector.ID);\r\n setLoadingState((s): LoadingContextValue => ({...s, loadingPercentage: (i + 1) / vectors.length * 100}));\r\n\r\n if (!loadingRef.current) {\r\n break;\r\n }\r\n }\r\n\r\n setLoadingState((s): LoadingContextValue => ({...s, loadingPercentage: 100}));\r\n setDataState((s): EdaVectorDataState => ({...s, data: result, visible}));\r\n } catch (e) {\r\n console.log(\"Failed to load specific vectors\", e);\r\n await api.cancelSession();\r\n } finally {\r\n loadingRef.current = false;\r\n setLoadingState((s): LoadingContextValue => ({...s, loading: false}));\r\n }\r\n }, [api, showTimeWindow, range, dataState]);\r\n\r\n const cancelLoading = async () => {\r\n loadingRef.current = false;\r\n await api.cancelSession();\r\n }\r\n\r\n const toggleVectorVisibility = async (id: number, visible: boolean) => {\r\n if (!range) {\r\n return;\r\n }\r\n\r\n const state = dataState.data[id];\r\n const visibleSet = new Set<number>(dataState.visible);\r\n const {btTotal, etTotal} = range;\r\n let {btWindow, etWindow} = range;\r\n\r\n if (!showTimeWindow) {\r\n btWindow = btTotal;\r\n etWindow = etTotal;\r\n }\r\n\r\n const needsLoadData = !state.from.isSame(btWindow) || !state.to.isSame(etWindow);\r\n\r\n if (visible) {\r\n if (needsLoadData) {\r\n await loadSpecificVectors(dataState.vectors.filter((v) => v.ID === id));\r\n }\r\n\r\n visibleSet.add(id);\r\n } else {\r\n visibleSet.delete(id);\r\n }\r\n\r\n setDataState((s): EdaVectorDataState => ({...s, visible: visibleSet}));\r\n };\r\n\r\n const setAllVectorVisibility = async (visible: boolean) => {\r\n if (!range) {\r\n return;\r\n }\r\n\r\n const {btTotal, etTotal} = range;\r\n let {btWindow, etWindow} = range;\r\n\r\n if (!showTimeWindow) {\r\n btWindow = btTotal;\r\n etWindow = etTotal;\r\n }\r\n\r\n if (visible) {\r\n const toLoad: SD_EM_Tree_Item[] = [];\r\n const visibleSet = new Set<number>(dataState.visible);\r\n\r\n for (let vector of dataState.vectors) {\r\n const id = vector.ID;\r\n const state = dataState.data[id];\r\n const needsLoadData = !state.from.isSame(btWindow) || !state.to.isSame(etWindow);\r\n\r\n if (needsLoadData) {\r\n toLoad.push(vector);\r\n }\r\n\r\n visibleSet.add(id);\r\n }\r\n\r\n setDataState((s): EdaVectorDataState => ({...s, visible: visibleSet}));\r\n await loadSpecificVectors(toLoad);\r\n } else {\r\n setDataState((s): EdaVectorDataState => ({...s, visible: new Set<number>()}));\r\n }\r\n }\r\n\r\n const isVectorVisible = (id: number) => dataState.visible.has(id);\r\n const allVectorsVisible = () => dataState.visible.size === dataState.vectors.length;\r\n const noVectorsVisible = () => dataState.visible.size === 0;\r\n\r\n return (\r\n <EdaVectorDataContext.Provider\r\n value={{\r\n ...dataState,\r\n loadAllData,\r\n loadSpecificVectors,\r\n cancelLoading,\r\n toggleVectorVisibility,\r\n setAllVectorVisibility,\r\n isVectorVisible,\r\n allVectorsVisible,\r\n noVectorsVisible,\r\n }}\r\n >\r\n <LoadingContext.Provider value={loadingState}>\r\n {children}\r\n </LoadingContext.Provider>\r\n </EdaVectorDataContext.Provider>\r\n )\r\n}\r\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadingContext.js","sourceRoot":"","sources":["../../../../../../coreui/components/edaManagerComponent/context/loadingContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,OAAO,CAAC;AASpC,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAkC,SAAS,CAAC,CAAC","sourcesContent":["import {createContext} from \"react\";\r\n\r\nexport interface LoadingContextValue {\r\n loading: boolean\r\n loadingPercentage: number\r\n loadingVector: string\r\n loadingCount: number\r\n}\r\n\r\nexport const LoadingContext = createContext<LoadingContextValue | undefined>(undefined);"]}
|
|
@@ -9,9 +9,8 @@ export interface SharedSampleRange {
|
|
|
9
9
|
sampling: EdaSamplingType;
|
|
10
10
|
step: StepType;
|
|
11
11
|
vectorPage: number;
|
|
12
|
-
totalCount: number;
|
|
13
12
|
updateValues: (bt: dayjs.Dayjs, et: dayjs.Dayjs, sampling: EdaSamplingType, vectorPage: number) => void;
|
|
14
13
|
updateTimeWindow: (bt: dayjs.Dayjs, et: dayjs.Dayjs, step: StepType) => void;
|
|
15
|
-
updateTotalCount: (totalCount: number) => void;
|
|
16
14
|
}
|
|
15
|
+
export declare function isSame(a?: SharedSampleRange, b?: SharedSampleRange): boolean;
|
|
17
16
|
export declare const SharedSampleRangeContext: React.Context<SharedSampleRange | undefined>;
|
|
@@ -1,3 +1,13 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
export function isSame(a, b) {
|
|
3
|
+
return !!a && !!b &&
|
|
4
|
+
a.btTotal.isSame(b.btTotal) &&
|
|
5
|
+
a.etTotal.isSame(b.etTotal) &&
|
|
6
|
+
a.btWindow.isSame(b.btWindow) &&
|
|
7
|
+
a.etWindow.isSame(b.etWindow) &&
|
|
8
|
+
a.sampling === b.sampling &&
|
|
9
|
+
a.step === b.step &&
|
|
10
|
+
a.vectorPage === b.vectorPage;
|
|
11
|
+
}
|
|
2
12
|
export const SharedSampleRangeContext = React.createContext(undefined);
|
|
3
13
|
//# sourceMappingURL=sharedSampleRange.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sharedSampleRange.js","sourceRoot":"","sources":["../../../../../../coreui/components/edaManagerComponent/context/sharedSampleRange.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"sharedSampleRange.js","sourceRoot":"","sources":["../../../../../../coreui/components/edaManagerComponent/context/sharedSampleRange.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAe1B,MAAM,UAAU,MAAM,CAAC,CAAqB,EAAE,CAAqB;IAC/D,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAC3B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAC3B,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC7B,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC7B,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ;QACzB,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;QACjB,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU,CAAA;AACrC,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC,aAAa,CAAgC,SAAS,CAAC,CAAC","sourcesContent":["import dayjs from \"d2core/dayjs\";\r\nimport {EdaSamplingType, StepType} from \"../constants/edaTypes\";\r\nimport React from \"react\";\r\n\r\nexport interface SharedSampleRange {\r\n btTotal: dayjs.Dayjs\r\n etTotal: dayjs.Dayjs\r\n btWindow: dayjs.Dayjs\r\n etWindow: dayjs.Dayjs\r\n sampling: EdaSamplingType\r\n step: StepType\r\n vectorPage: number\r\n\r\n updateValues: (bt: dayjs.Dayjs, et: dayjs.Dayjs, sampling: EdaSamplingType, vectorPage: number) => void\r\n updateTimeWindow: (bt: dayjs.Dayjs, et: dayjs.Dayjs, step: StepType) => void\r\n}\r\n\r\nexport function isSame(a?: SharedSampleRange, b?: SharedSampleRange): boolean {\r\n return !!a && !!b &&\r\n a.btTotal.isSame(b.btTotal) &&\r\n a.etTotal.isSame(b.etTotal) &&\r\n a.btWindow.isSame(b.btWindow) &&\r\n a.etWindow.isSame(b.etWindow) &&\r\n a.sampling === b.sampling &&\r\n a.step === b.step &&\r\n a.vectorPage === b.vectorPage\r\n}\r\n\r\nexport const SharedSampleRangeContext = React.createContext<SharedSampleRange | undefined>(undefined);"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import EdaManagerApi from "../../../api/eda/edaManagerApi";
|
|
2
2
|
import React from "react";
|
|
3
3
|
import { SD_EM_Tree_Item } from "../../../api/eda/generated/structures";
|
|
4
|
-
import {
|
|
4
|
+
import { GroupData, IdType, ScenarioData, TypedIndex, VectorData } from "./constants/edaTypes";
|
|
5
5
|
import { Tab } from "rc-tabs/lib/interface";
|
|
6
6
|
import { SizeType } from "antd/lib/config-provider/SizeContext";
|
|
7
|
-
import
|
|
7
|
+
import { SharedSampleRange } from "./context/sharedSampleRange";
|
|
8
8
|
import { Variant } from "antd/es/config-provider";
|
|
9
9
|
export type ItemType = SD_EM_Tree_Item[] | TypedIndex;
|
|
10
10
|
interface Props {
|
|
@@ -22,14 +22,7 @@ interface State {
|
|
|
22
22
|
data?: VectorData | GroupData | ScenarioData;
|
|
23
23
|
tabs: Tab[];
|
|
24
24
|
activeTabKey: string;
|
|
25
|
-
|
|
26
|
-
etTotal: dayjs.Dayjs;
|
|
27
|
-
btWindow: dayjs.Dayjs;
|
|
28
|
-
etWindow: dayjs.Dayjs;
|
|
29
|
-
sampling: EdaSamplingType;
|
|
30
|
-
vectorPage: number;
|
|
31
|
-
totalCount: number;
|
|
32
|
-
step: StepType;
|
|
25
|
+
context: SharedSampleRange;
|
|
33
26
|
}
|
|
34
27
|
export declare class EdaDetail extends React.Component<Props, State> {
|
|
35
28
|
constructor(props: Readonly<Props>);
|
|
@@ -37,9 +30,8 @@ export declare class EdaDetail extends React.Component<Props, State> {
|
|
|
37
30
|
componentDidUpdate(prevProps: Readonly<Props>, prevState: Readonly<State>): Promise<void>;
|
|
38
31
|
render(): React.JSX.Element;
|
|
39
32
|
private updateSampleRange;
|
|
40
|
-
private updateTotalCount;
|
|
41
33
|
private updateTimeWindow;
|
|
42
34
|
private getTabs;
|
|
43
|
-
private
|
|
35
|
+
private setContextState;
|
|
44
36
|
}
|
|
45
37
|
export {};
|
|
@@ -3,14 +3,15 @@ import { EdaSamplingType, StepType } from "./constants/edaTypes";
|
|
|
3
3
|
import i18n from "d2core/i18n/i18n";
|
|
4
4
|
import { Tabs } from "antd";
|
|
5
5
|
import { EdaDetailPanel } from "./components/edaDetailPanel";
|
|
6
|
-
import EdaTablePanel from "./components/edaTablePanel";
|
|
7
6
|
import { createStyles } from "antd-style";
|
|
8
7
|
import WithCss from "d2coreui/components/style/withCss";
|
|
9
|
-
import EdaGraphPanel from "./components/edaGraphPanel";
|
|
10
8
|
import { SharedSampleRangeContext } from "./context/sharedSampleRange";
|
|
11
9
|
import dayjs from "d2core/dayjs";
|
|
12
10
|
import { getRange } from "./components/edaTimeWindowPickerPanel";
|
|
13
|
-
import { loadPreference, savePreference } from "./utils/utils";
|
|
11
|
+
import { loadDetail, loadPreference, savePreference } from "./utils/utils";
|
|
12
|
+
import { EdaVectorDataProvider } from "./context/edaVectorDataProvider";
|
|
13
|
+
import { EdaTablePanel } from "./components/edaTablePanel";
|
|
14
|
+
import { EdaGraphPanel } from "./components/edaGraphPanel";
|
|
14
15
|
const useStyles = createStyles(({ css }) => {
|
|
15
16
|
return {
|
|
16
17
|
baseLayout: css `
|
|
@@ -30,32 +31,53 @@ export class EdaDetail extends React.Component {
|
|
|
30
31
|
const etTotal = dayjs(loadPreference("EDA_DETAIL_ET", dayjs().endOf('day').toISOString()));
|
|
31
32
|
const step = loadPreference("EDA_DETAIL_STEP", StepType.Daily);
|
|
32
33
|
const { bt, et } = getRange(btTotal, etTotal, step);
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
btTotal: btTotal,
|
|
37
|
-
etTotal: etTotal,
|
|
34
|
+
const context = {
|
|
35
|
+
btTotal,
|
|
36
|
+
etTotal,
|
|
38
37
|
btWindow: bt,
|
|
39
38
|
etWindow: et,
|
|
40
39
|
sampling: EdaSamplingType.Default,
|
|
40
|
+
step,
|
|
41
41
|
vectorPage: 1,
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
updateValues: (bt, et, step, vectorPage) => this.updateSampleRange(bt, et, step, vectorPage),
|
|
43
|
+
updateTimeWindow: (bt, et, step) => this.updateTimeWindow(bt, et, step),
|
|
44
|
+
};
|
|
45
|
+
this.state = {
|
|
46
|
+
tabs: [],
|
|
47
|
+
activeTabKey: "detail",
|
|
48
|
+
context: context,
|
|
44
49
|
};
|
|
45
50
|
this.updateSampleRange = this.updateSampleRange.bind(this);
|
|
46
51
|
this.updateTimeWindow = this.updateTimeWindow.bind(this);
|
|
47
|
-
this.
|
|
52
|
+
this.setContextState = this.setContextState.bind(this);
|
|
48
53
|
}
|
|
49
54
|
async componentDidMount() {
|
|
55
|
+
const { api, item } = this.props;
|
|
50
56
|
const { data, type } = this.state;
|
|
51
|
-
|
|
52
|
-
|
|
57
|
+
if (item && !Array.isArray(item)) {
|
|
58
|
+
const result = await loadDetail(api, item);
|
|
59
|
+
this.setState({
|
|
60
|
+
type: item.type,
|
|
61
|
+
data: result,
|
|
62
|
+
tabs: this.getTabs(result, item.type),
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
this.setState({ tabs: this.getTabs(data, type) });
|
|
67
|
+
}
|
|
53
68
|
}
|
|
54
69
|
async componentDidUpdate(prevProps, prevState) {
|
|
55
|
-
const { data, type, activeTabKey,
|
|
56
|
-
const { item, size, variant, showTimeWindow, showChartLegend } = this.props;
|
|
70
|
+
const { data, type, activeTabKey, context } = this.state;
|
|
71
|
+
const { api, item, size, variant, showTimeWindow, showChartLegend } = this.props;
|
|
57
72
|
if (prevProps.item !== item) {
|
|
58
|
-
|
|
73
|
+
if (item && !Array.isArray(item)) {
|
|
74
|
+
const result = await loadDetail(api, item);
|
|
75
|
+
this.setState({
|
|
76
|
+
type: item.type,
|
|
77
|
+
data: result,
|
|
78
|
+
tabs: this.getTabs(result, item.type),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
59
81
|
}
|
|
60
82
|
else if (prevProps.size !== size ||
|
|
61
83
|
prevProps.variant !== variant ||
|
|
@@ -64,44 +86,29 @@ export class EdaDetail extends React.Component {
|
|
|
64
86
|
prevProps.showChartLegend !== showChartLegend) {
|
|
65
87
|
this.setState({ tabs: this.getTabs(data, type) });
|
|
66
88
|
}
|
|
67
|
-
if (!prevState.btTotal.isSame(btTotal)) {
|
|
68
|
-
savePreference("EDA_DETAIL_BT", btTotal);
|
|
89
|
+
if (!prevState.context.btTotal.isSame(context.btTotal)) {
|
|
90
|
+
savePreference("EDA_DETAIL_BT", context.btTotal);
|
|
69
91
|
}
|
|
70
|
-
if (!prevState.etTotal.isSame(etTotal)) {
|
|
71
|
-
savePreference("EDA_DETAIL_ET", etTotal);
|
|
92
|
+
if (!prevState.context.etTotal.isSame(context.etTotal)) {
|
|
93
|
+
savePreference("EDA_DETAIL_ET", context.etTotal);
|
|
72
94
|
}
|
|
73
|
-
if (prevState.step !== step) {
|
|
74
|
-
savePreference("EDA_DETAIL_STEP", step);
|
|
95
|
+
if (prevState.context.step !== context.step) {
|
|
96
|
+
savePreference("EDA_DETAIL_STEP", context.step);
|
|
75
97
|
}
|
|
76
98
|
}
|
|
77
99
|
render() {
|
|
78
|
-
const { className, style, size } = this.props;
|
|
79
|
-
const {
|
|
80
|
-
const context = {
|
|
81
|
-
btTotal,
|
|
82
|
-
etTotal,
|
|
83
|
-
btWindow,
|
|
84
|
-
etWindow,
|
|
85
|
-
sampling,
|
|
86
|
-
step,
|
|
87
|
-
vectorPage,
|
|
88
|
-
totalCount,
|
|
89
|
-
updateValues: this.updateSampleRange,
|
|
90
|
-
updateTimeWindow: this.updateTimeWindow,
|
|
91
|
-
updateTotalCount: this.updateTotalCount,
|
|
92
|
-
};
|
|
100
|
+
const { api, className, style, size, showTimeWindow } = this.props;
|
|
101
|
+
const { context, activeTabKey } = this.state;
|
|
93
102
|
return (React.createElement("div", { className: className, style: style },
|
|
94
103
|
React.createElement(WithCss, { useStyles: useStyles }, (css) => React.createElement(SharedSampleRangeContext.Provider, { value: context },
|
|
95
|
-
React.createElement(
|
|
104
|
+
React.createElement(EdaVectorDataProvider, { api: api, showTimeWindow: showTimeWindow },
|
|
105
|
+
React.createElement(Tabs, { size: size, type: "card", className: css.styles.baseLayout, onChange: (key) => this.setState({ activeTabKey: key }), activeKey: activeTabKey, items: this.state.tabs }))))));
|
|
96
106
|
}
|
|
97
107
|
updateSampleRange(bt, et, step, vectorPage) {
|
|
98
|
-
this.
|
|
99
|
-
}
|
|
100
|
-
updateTotalCount(totalCount) {
|
|
101
|
-
this.setState({ totalCount: totalCount });
|
|
108
|
+
this.setContextState({ btTotal: bt, etTotal: et, sampling: step, vectorPage: vectorPage });
|
|
102
109
|
}
|
|
103
110
|
updateTimeWindow(bt, et, step) {
|
|
104
|
-
this.
|
|
111
|
+
this.setContextState({ btWindow: bt, etWindow: et, step: step });
|
|
105
112
|
}
|
|
106
113
|
getTabs(data, type) {
|
|
107
114
|
const { size, variant, api, showTimeWindow, showChartLegend } = this.props;
|
|
@@ -110,7 +117,7 @@ export class EdaDetail extends React.Component {
|
|
|
110
117
|
{
|
|
111
118
|
key: "detail",
|
|
112
119
|
label: i18n("Detail"),
|
|
113
|
-
children: (React.createElement(EdaDetailPanel, { data: data, type: type, size: size, variant: variant })),
|
|
120
|
+
children: (React.createElement(EdaDetailPanel, { api: api, data: data, type: type, size: size, variant: variant })),
|
|
114
121
|
},
|
|
115
122
|
{
|
|
116
123
|
key: "table",
|
|
@@ -124,50 +131,8 @@ export class EdaDetail extends React.Component {
|
|
|
124
131
|
},
|
|
125
132
|
];
|
|
126
133
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
if (item) {
|
|
130
|
-
if (Array.isArray(item)) {
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
let dataItem = null;
|
|
134
|
-
switch (item.type) {
|
|
135
|
-
case 0: {
|
|
136
|
-
const data = await api.loadVectorData(item.id);
|
|
137
|
-
if (data.data.length > 0) {
|
|
138
|
-
const item = data.data[0];
|
|
139
|
-
const itemEx = data.dataEx[0];
|
|
140
|
-
const dataFunction = data.dataFunction[0];
|
|
141
|
-
dataItem = { data: item, extData: itemEx, dataFunction: dataFunction };
|
|
142
|
-
}
|
|
143
|
-
break;
|
|
144
|
-
}
|
|
145
|
-
case 1: {
|
|
146
|
-
const data = await api.loadGroupData(item.id);
|
|
147
|
-
if (data.data.length > 0) {
|
|
148
|
-
const item = data.data[0];
|
|
149
|
-
dataItem = { data: item };
|
|
150
|
-
}
|
|
151
|
-
break;
|
|
152
|
-
}
|
|
153
|
-
case 2: {
|
|
154
|
-
const data = await api.loadScenarioData(item.id);
|
|
155
|
-
if (data.data.length > 0) {
|
|
156
|
-
const item = data.data[0];
|
|
157
|
-
dataItem = { data: item };
|
|
158
|
-
}
|
|
159
|
-
break;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
if (dataItem !== null) {
|
|
163
|
-
this.setState({
|
|
164
|
-
type: item.type,
|
|
165
|
-
data: dataItem,
|
|
166
|
-
tabs: this.getTabs(dataItem, item.type),
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
134
|
+
setContextState(partialContext) {
|
|
135
|
+
this.setState({ context: { ...this.state.context, ...partialContext } });
|
|
171
136
|
}
|
|
172
137
|
}
|
|
173
138
|
//# sourceMappingURL=edaDetail.js.map
|