d2aura 26.0.13 → 26.0.15
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 +54 -15
- package/api/eda/edaManagerApi.js +106 -29
- package/api/eda/edaManagerApi.js.map +1 -1
- package/api/eda/generated/events.d.ts +115 -35
- package/api/eda/generated/events.js +193 -41
- package/api/eda/generated/events.js.map +1 -1
- package/api/eda/generated/structures.d.ts +110 -33
- package/api/eda/generated/structures.js.map +1 -1
- package/core/i18n/d2aura.en.json +14 -0
- package/core/i18n/d2aura.sk.json +92 -2
- package/coreui/components/edaManager/components/detail/components/edaVectorMassChangeButton.d.ts +1 -1
- package/coreui/components/edaManager/components/detail/components/edaVectorMassChangeButton.js +2 -2
- package/coreui/components/edaManager/components/detail/components/edaVectorMassChangeButton.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaChartViewer.d.ts +14 -0
- package/coreui/components/edaManagerComponent/components/edaChartViewer.js +374 -0
- package/coreui/components/edaManagerComponent/components/edaChartViewer.js.map +1 -0
- package/coreui/components/edaManagerComponent/components/edaDataBasePanel.d.ts +4 -8
- package/coreui/components/edaManagerComponent/components/edaDataBasePanel.js +18 -75
- package/coreui/components/edaManagerComponent/components/edaDataBasePanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaDetailPanel.d.ts +5 -14
- package/coreui/components/edaManagerComponent/components/edaDetailPanel.js +80 -19
- package/coreui/components/edaManagerComponent/components/edaDetailPanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaGraphPanel.d.ts +2 -7
- package/coreui/components/edaManagerComponent/components/edaGraphPanel.js +22 -390
- package/coreui/components/edaManagerComponent/components/edaGraphPanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaGroupDetailPanel.d.ts +3 -14
- package/coreui/components/edaManagerComponent/components/edaGroupDetailPanel.js +54 -67
- package/coreui/components/edaManagerComponent/components/edaGroupDetailPanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaLoadingOverlay.d.ts +7 -0
- package/coreui/components/edaManagerComponent/components/edaLoadingOverlay.js +35 -0
- package/coreui/components/edaManagerComponent/components/edaLoadingOverlay.js.map +1 -0
- package/coreui/components/edaManagerComponent/components/edaSampleRangePickerPanel.d.ts +12 -18
- package/coreui/components/edaManagerComponent/components/edaSampleRangePickerPanel.js +55 -51
- package/coreui/components/edaManagerComponent/components/edaSampleRangePickerPanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaScenarioDetailPanel.d.ts +3 -14
- package/coreui/components/edaManagerComponent/components/edaScenarioDetailPanel.js +67 -81
- package/coreui/components/edaManagerComponent/components/edaScenarioDetailPanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaTablePanel.d.ts +2 -6
- package/coreui/components/edaManagerComponent/components/edaTablePanel.js +188 -110
- package/coreui/components/edaManagerComponent/components/edaTablePanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaTimeWindowPickerPanel.d.ts +2 -13
- package/coreui/components/edaManagerComponent/components/edaTimeWindowPickerPanel.js +57 -88
- package/coreui/components/edaManagerComponent/components/edaTimeWindowPickerPanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaTreeView.d.ts +9 -51
- package/coreui/components/edaManagerComponent/components/edaTreeView.js +431 -262
- package/coreui/components/edaManagerComponent/components/edaTreeView.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaVectorDetailPanel.d.ts +3 -21
- package/coreui/components/edaManagerComponent/components/edaVectorDetailPanel.js +160 -179
- 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 +23 -11
- package/coreui/components/edaManagerComponent/constants/edaTypes.js +15 -0
- package/coreui/components/edaManagerComponent/constants/edaTypes.js.map +1 -1
- package/coreui/components/edaManagerComponent/context/edaConfigContext.d.ts +26 -0
- package/coreui/components/edaManagerComponent/context/edaConfigContext.js +20 -0
- package/coreui/components/edaManagerComponent/context/edaConfigContext.js.map +1 -0
- package/coreui/components/edaManagerComponent/context/edaVectorDataContext.d.ts +10 -16
- 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.d.ts +0 -1
- package/coreui/components/edaManagerComponent/context/edaVectorDataProvider.js +90 -92
- package/coreui/components/edaManagerComponent/context/edaVectorDataProvider.js.map +1 -1
- package/coreui/components/edaManagerComponent/context/loadingContext.d.ts +1 -1
- package/coreui/components/edaManagerComponent/context/loadingContext.js.map +1 -1
- package/coreui/components/edaManagerComponent/context/{sharedSampleRange.d.ts → sharedSampleRangeContext.d.ts} +12 -4
- package/coreui/components/edaManagerComponent/context/sharedSampleRangeContext.js +10 -0
- package/coreui/components/edaManagerComponent/context/sharedSampleRangeContext.js.map +1 -0
- package/coreui/components/edaManagerComponent/context/useEdaActions.d.ts +9 -0
- package/coreui/components/edaManagerComponent/context/useEdaActions.js +36 -0
- package/coreui/components/edaManagerComponent/context/useEdaActions.js.map +1 -0
- 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/dialogs/edaTableEditorDialog.d.ts +12 -0
- package/coreui/components/edaManagerComponent/dialogs/edaTableEditorDialog.js +268 -0
- package/coreui/components/edaManagerComponent/dialogs/edaTableEditorDialog.js.map +1 -0
- package/coreui/components/edaManagerComponent/dialogs/exportDialog.d.ts +18 -0
- package/coreui/components/edaManagerComponent/dialogs/exportDialog.js +156 -0
- 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.d.ts +7 -26
- package/coreui/components/edaManagerComponent/edaDetail.js +138 -106
- package/coreui/components/edaManagerComponent/edaDetail.js.map +1 -1
- package/coreui/components/edaManagerComponent/edaManager.d.ts +4 -11
- package/coreui/components/edaManagerComponent/edaManager.js +29 -22
- package/coreui/components/edaManagerComponent/edaManager.js.map +1 -1
- package/coreui/components/edaManagerComponent/edaNavigator.d.ts +6 -12
- package/coreui/components/edaManagerComponent/edaNavigator.js +36 -41
- package/coreui/components/edaManagerComponent/edaNavigator.js.map +1 -1
- package/coreui/components/edaManagerComponent/edaSelect.d.ts +4 -3
- package/coreui/components/edaManagerComponent/edaSelect.js +32 -54
- 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 +9 -0
- package/coreui/components/edaManagerComponent/utils/export.js +570 -0
- package/coreui/components/edaManagerComponent/utils/export.js.map +1 -0
- package/coreui/components/edaManagerComponent/utils/utils.d.ts +6 -12
- package/coreui/components/edaManagerComponent/utils/utils.js +26 -15
- package/coreui/components/edaManagerComponent/utils/utils.js.map +1 -1
- package/d2configuration/edaManager/DB.EM_EDA_FunctionPrescription.xml +65 -0
- package/d2configuration/edaManager/DB.EM_EDA_VectorScenario.xml +65 -0
- package/d2configuration/edaManager/E.EM_DETAIL_IMPL.xml +67 -1
- package/d2configuration/edaManager/E.EM_DETAIL_SQL.xml +85 -0
- package/d2configuration/edaManager/E.EM_DETAIL_UNIT.xml +143 -2
- package/d2configuration/edaManager/E.EM_NAVIGATOR_IMPL.xml +14 -6
- package/d2configuration/edaManager/E.EM_NAVIGATOR_SQL.xml +12 -1
- package/d2configuration/edaManager/E.EM_NAVIGATOR_UNIT.xml +114 -6
- package/d2configuration/edaManager/E.EM_VECTOR_IMPL.xml +30 -6
- package/d2configuration/edaManager/E.EM_VECTOR_UNIT.xml +119 -17
- package/d2configuration/edaManager/SD.EM_EDA_FunctionPrescription.xml +91 -0
- package/d2configuration/edaManager/SD.EM_EDA_PairVector.xml +454 -0
- package/d2configuration/edaManager/{SD.EM_EDA_StatVectorRec_V1.xml → SD.EM_EDA_VectorScenario.xml} +13 -36
- package/d2configuration/edaManager/{SD.EM_EDA_VectorValues.xml → SD.EM_EDA_VectorStats.xml} +39 -6
- package/d2configuration/edaManager/SD.EM_Filter_Condition.xml +1 -1
- package/package.json +5 -3
- package/coreui/components/edaManagerComponent/components/edaBasePanel.d.ts +0 -16
- package/coreui/components/edaManagerComponent/components/edaBasePanel.js +0 -85
- package/coreui/components/edaManagerComponent/components/edaBasePanel.js.map +0 -1
- package/coreui/components/edaManagerComponent/context/sharedSampleRange.js +0 -13
- package/coreui/components/edaManagerComponent/context/sharedSampleRange.js.map +0 -1
- package/d2configuration/edaManager/EDA_CancelSession.xml +0 -54
- package/d2configuration/edaManager/EDA_GetSessionId.xml +0 -54
- package/d2configuration/edaManager/EDA_ReadValuesFromVektorRec.xml +0 -54
- package/d2configuration/edaManager/EDA_StatVectorRec.xml +0 -56
- package/d2configuration/edaManager/SD.EM_EDA_ReadValuesFromVector_V1.xml +0 -168
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
2
|
+
import { ModalDialog } from "d2coreui/components/modal/modalDialog";
|
|
3
|
+
import { Button, Space, Splitter, Tabs, Tree } from "antd";
|
|
4
|
+
import { DownOutlined, SaveOutlined } from "@ant-design/icons";
|
|
5
|
+
import i18n from "d2core/i18n/i18n";
|
|
6
|
+
import { UndoIcon } from "d2coreui/components/icons/undoIcon";
|
|
7
|
+
import { createStyles } from "antd-style";
|
|
8
|
+
import { EdaPeriodType, EdaPeriodValueType } from "../constants/edaTypes";
|
|
9
|
+
import { LocaleHolder } from "d2core/i18n/localeHolder";
|
|
10
|
+
import dayjs from "d2core/dayjs";
|
|
11
|
+
import ExtendedDataGrid from "d2coreui/components/grid/extendedDataGrid";
|
|
12
|
+
import { DescriptiveVectorDetailPanel } from "./descriptiveVectorDialog/descriptiveVectorDetailPanel";
|
|
13
|
+
import { FullPeriodType } from "./descriptiveVectorDialog/types";
|
|
14
|
+
import { addEntry, addSubEntry, buildTable, buildTree, getFormattedPeriodTime, getPeriodName, removeEntry, removeSubEntries, reorder, toFullPeriodType } from "./descriptiveVectorDialog/utils";
|
|
15
|
+
import { ControlButtons } from "./descriptiveVectorDialog/controlButtons";
|
|
16
|
+
import { GraphPanel } from "./descriptiveVectorDialog/graphPanel";
|
|
17
|
+
import { useSharedEdaData } from "./descriptiveVectorDialog/useSharedData";
|
|
18
|
+
import { TablePanel } from "./descriptiveVectorDialog/tablePanel";
|
|
19
|
+
const useStyles = createStyles(({ css, token }) => {
|
|
20
|
+
return {
|
|
21
|
+
baseLayout: css `
|
|
22
|
+
height: 100%;
|
|
23
|
+
width: 100%;
|
|
24
|
+
|
|
25
|
+
.ant-space-item:first-child {
|
|
26
|
+
height: 100%;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.ant-tree-node-content-wrapper {
|
|
30
|
+
user-select: none;
|
|
31
|
+
-webkit-user-select: none;
|
|
32
|
+
-moz-user-select: none;
|
|
33
|
+
-ms-user-select: none;
|
|
34
|
+
white-space: nowrap;
|
|
35
|
+
text-overflow: ellipsis;
|
|
36
|
+
overflow: hidden;
|
|
37
|
+
|
|
38
|
+
.ant-tree-title {
|
|
39
|
+
white-space: nowrap;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
`,
|
|
43
|
+
tabsLayout: css `
|
|
44
|
+
height: 100%;
|
|
45
|
+
width: 100%;
|
|
46
|
+
overflow: hidden;
|
|
47
|
+
|
|
48
|
+
.ant-tabs-content {
|
|
49
|
+
height: 100%;
|
|
50
|
+
background-color: ${token.colorBgContainer};
|
|
51
|
+
border-radius: ${token.borderRadius}px;
|
|
52
|
+
transition: background-color 0.3s;
|
|
53
|
+
}
|
|
54
|
+
`,
|
|
55
|
+
treeLayout: css `
|
|
56
|
+
.tree-splitter {
|
|
57
|
+
display: flex;
|
|
58
|
+
flex-direction: row;
|
|
59
|
+
gap: ${token.paddingXS}px;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.tree-view {
|
|
63
|
+
width: 100%;
|
|
64
|
+
height: 100%;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.tree-mover {
|
|
68
|
+
padding: ${token.paddingXS}px;
|
|
69
|
+
display: flex;
|
|
70
|
+
flex-direction: column;
|
|
71
|
+
}
|
|
72
|
+
`,
|
|
73
|
+
tableLayout: css `
|
|
74
|
+
width: 100%;
|
|
75
|
+
height: 100%;
|
|
76
|
+
display: flex;
|
|
77
|
+
flex-direction: row;
|
|
78
|
+
gap: ${token.paddingXS}px;
|
|
79
|
+
|
|
80
|
+
.tree-mover {
|
|
81
|
+
padding: ${token.paddingXS}px;
|
|
82
|
+
display: flex;
|
|
83
|
+
flex-direction: column;
|
|
84
|
+
}
|
|
85
|
+
`,
|
|
86
|
+
buttonsLayout: css `
|
|
87
|
+
width: 100%;
|
|
88
|
+
display: flex;
|
|
89
|
+
justify-content: center;
|
|
90
|
+
`
|
|
91
|
+
};
|
|
92
|
+
});
|
|
93
|
+
var TabType;
|
|
94
|
+
(function (TabType) {
|
|
95
|
+
TabType["TREE"] = "tree";
|
|
96
|
+
TabType["TABLE"] = "table";
|
|
97
|
+
TabType["GRAPH"] = "graph";
|
|
98
|
+
TabType["VALUES"] = "values";
|
|
99
|
+
})(TabType || (TabType = {}));
|
|
100
|
+
export const EdaDescriptiveVectorEditorDialog = ({ api, vector, onCancel, onSaved, ...modalProps }) => {
|
|
101
|
+
const { styles } = useStyles();
|
|
102
|
+
const [originalData, setOriginalData] = useState([]);
|
|
103
|
+
const [tableData, setTableData] = useState([]);
|
|
104
|
+
const [dataModified, setDataModified] = useState(false);
|
|
105
|
+
const [selectedRow, setSelectedRow] = useState();
|
|
106
|
+
const [height, setHeight] = useState(0);
|
|
107
|
+
const [activeTab, setActiveTab] = useState(TabType.TREE);
|
|
108
|
+
const gridRef = useRef(null);
|
|
109
|
+
const { displayData, isLoading, params, setParams } = useSharedEdaData(api, originalData, tableData, activeTab === TabType.GRAPH || activeTab === TabType.VALUES);
|
|
110
|
+
const fullMask = useMemo(() => LocaleHolder.getDateTimeFormat(true, false, false), []);
|
|
111
|
+
const dateMask = useMemo(() => LocaleHolder.getDateFormat(false), []);
|
|
112
|
+
const handleSave = useCallback(() => {
|
|
113
|
+
}, [api, vector]);
|
|
114
|
+
const divRef = useCallback((node) => {
|
|
115
|
+
if (!node) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
new ResizeObserver((entries) => {
|
|
119
|
+
if (entries[0]) {
|
|
120
|
+
setHeight(entries[0].contentRect.height);
|
|
121
|
+
}
|
|
122
|
+
}).observe(node);
|
|
123
|
+
}, []);
|
|
124
|
+
const loadData = useCallback(() => {
|
|
125
|
+
api.loadDescriptiveVectorData(vector.ID).then((result) => {
|
|
126
|
+
const descriptiveVector = result.map((r) => ({ ...r, timeFrom: dayjs(r.timeFrom), timeTo: dayjs(r.timeTo) }));
|
|
127
|
+
const data = buildTable(descriptiveVector);
|
|
128
|
+
gridRef.current?.showDetailPanel(false);
|
|
129
|
+
setOriginalData(data);
|
|
130
|
+
setTableData(data);
|
|
131
|
+
setDataModified(false);
|
|
132
|
+
setSelectedRow(undefined);
|
|
133
|
+
});
|
|
134
|
+
}, [api, vector]);
|
|
135
|
+
const handleRevert = useCallback(() => {
|
|
136
|
+
loadData();
|
|
137
|
+
}, [loadData]);
|
|
138
|
+
const handleDataChanged = useCallback((newData) => {
|
|
139
|
+
setTableData((prev) => {
|
|
140
|
+
return buildTable(prev.map((row) => row.idx === newData.idx ? { ...row, ...newData } : row));
|
|
141
|
+
});
|
|
142
|
+
setDataModified(true);
|
|
143
|
+
}, [fullMask, dateMask]);
|
|
144
|
+
const handleRowSelected = useCallback((row) => {
|
|
145
|
+
if (row.node.isSelected()) {
|
|
146
|
+
setSelectedRow(row.data);
|
|
147
|
+
}
|
|
148
|
+
}, []);
|
|
149
|
+
const handleRowDoubleClicked = useCallback(() => {
|
|
150
|
+
gridRef.current?.showDetailPanel(true);
|
|
151
|
+
}, []);
|
|
152
|
+
const handleMove = useCallback((direction) => {
|
|
153
|
+
if (!selectedRow) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
setTableData((prev) => {
|
|
157
|
+
const { data, selected } = reorder(prev, selectedRow, direction);
|
|
158
|
+
setSelectedRow(selected);
|
|
159
|
+
return buildTable(data);
|
|
160
|
+
});
|
|
161
|
+
setDataModified(true);
|
|
162
|
+
}, [selectedRow, fullMask, dateMask]);
|
|
163
|
+
const handleAddEntry = useCallback(() => {
|
|
164
|
+
setTableData((prev) => {
|
|
165
|
+
const { data, selected } = addEntry(prev, selectedRow);
|
|
166
|
+
setSelectedRow(selected);
|
|
167
|
+
return buildTable(data);
|
|
168
|
+
});
|
|
169
|
+
setDataModified(true);
|
|
170
|
+
}, [selectedRow]);
|
|
171
|
+
const handleAddSubEntry = useCallback(() => {
|
|
172
|
+
if (selectedRow) {
|
|
173
|
+
setTableData((prev) => {
|
|
174
|
+
const { data, selected } = addSubEntry(prev, selectedRow);
|
|
175
|
+
setSelectedRow(selected);
|
|
176
|
+
return buildTable(data);
|
|
177
|
+
});
|
|
178
|
+
setDataModified(true);
|
|
179
|
+
}
|
|
180
|
+
}, [selectedRow]);
|
|
181
|
+
const handleRemoveEntry = useCallback(() => {
|
|
182
|
+
if (selectedRow) {
|
|
183
|
+
setTableData((prev) => {
|
|
184
|
+
const { data, selected } = removeEntry(prev, selectedRow);
|
|
185
|
+
setSelectedRow(selected);
|
|
186
|
+
return buildTable(data);
|
|
187
|
+
});
|
|
188
|
+
setDataModified(true);
|
|
189
|
+
}
|
|
190
|
+
}, [selectedRow]);
|
|
191
|
+
const handleRemoveSubEntries = useCallback(() => {
|
|
192
|
+
if (selectedRow) {
|
|
193
|
+
setTableData((prev) => {
|
|
194
|
+
const { data, selected } = removeSubEntries(prev, selectedRow);
|
|
195
|
+
setSelectedRow(selected);
|
|
196
|
+
return buildTable(data);
|
|
197
|
+
});
|
|
198
|
+
setDataModified(true);
|
|
199
|
+
}
|
|
200
|
+
}, [selectedRow]);
|
|
201
|
+
const valueFormatter = useCallback((props) => {
|
|
202
|
+
if (props.data && props.value) {
|
|
203
|
+
const data = props.data;
|
|
204
|
+
const formatted = getFormattedPeriodTime(data.periodType, props.value, fullMask, dateMask);
|
|
205
|
+
if (props.data.periodType === EdaPeriodType.Year) {
|
|
206
|
+
const fullPeriodType = toFullPeriodType(data);
|
|
207
|
+
switch (fullPeriodType) {
|
|
208
|
+
case FullPeriodType.YearQuarter:
|
|
209
|
+
return `${formatted}. ${i18n("Quarter")}`;
|
|
210
|
+
case FullPeriodType.YearWeek:
|
|
211
|
+
return `${formatted}. ${i18n("Week")}`;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return formatted;
|
|
215
|
+
}
|
|
216
|
+
return "";
|
|
217
|
+
}, []);
|
|
218
|
+
const selectGridRow = useCallback(() => {
|
|
219
|
+
if (selectedRow && gridRef.current) {
|
|
220
|
+
gridRef.current.dataGrid?.gridApi?.forEachNode((node) => {
|
|
221
|
+
if (node.data?.idx === selectedRow.idx && !node.isSelected()) {
|
|
222
|
+
node.setSelected(true);
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
else if (!selectedRow) {
|
|
227
|
+
gridRef.current?.dataGrid?.gridApi?.deselectAll();
|
|
228
|
+
}
|
|
229
|
+
}, [selectedRow, tableData]);
|
|
230
|
+
const columnDefs = useMemo(() => [
|
|
231
|
+
{
|
|
232
|
+
field: "idx",
|
|
233
|
+
colId: "idx",
|
|
234
|
+
width: 100,
|
|
235
|
+
headerName: i18n("Index"),
|
|
236
|
+
group: i18n("Basic Columns")
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
field: "periodType",
|
|
240
|
+
colId: "periodType",
|
|
241
|
+
valueFormatter: (props) => getPeriodName(props.value),
|
|
242
|
+
headerName: i18n("Period Type"),
|
|
243
|
+
group: i18n("Basic Columns"),
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
field: "timeFrom",
|
|
247
|
+
colId: "timeFrom",
|
|
248
|
+
valueFormatter: valueFormatter,
|
|
249
|
+
headerName: i18n("Period From"),
|
|
250
|
+
group: i18n("Basic Columns")
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
field: "timeTo",
|
|
254
|
+
colId: "timeTo",
|
|
255
|
+
valueFormatter: valueFormatter,
|
|
256
|
+
headerName: i18n("Period To"),
|
|
257
|
+
group: i18n("Basic Columns")
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
field: "value",
|
|
261
|
+
colId: "value",
|
|
262
|
+
headerName: i18n("Value"),
|
|
263
|
+
group: i18n("Basic Columns"),
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
field: "valueType",
|
|
267
|
+
colId: "valueType",
|
|
268
|
+
valueFormatter: (props) => i18n("EdaPeriodValueType_" + EdaPeriodValueType[props.value]),
|
|
269
|
+
headerName: i18n("Value Type"),
|
|
270
|
+
group: i18n("Basic Columns"),
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
field: "parent",
|
|
274
|
+
colId: "parent",
|
|
275
|
+
valueFormatter: (props) => props.value > 0 ? props.value : "",
|
|
276
|
+
headerName: i18n("Parent"),
|
|
277
|
+
group: i18n("Basic Columns"),
|
|
278
|
+
},
|
|
279
|
+
], []);
|
|
280
|
+
const treeData = useMemo(() => {
|
|
281
|
+
return buildTree(tableData, fullMask, dateMask);
|
|
282
|
+
}, [tableData, fullMask, dateMask]);
|
|
283
|
+
const items = useMemo(() => [
|
|
284
|
+
{
|
|
285
|
+
key: TabType.TREE,
|
|
286
|
+
label: i18n("Tree"),
|
|
287
|
+
children: (React.createElement(Splitter, { className: styles.treeLayout },
|
|
288
|
+
React.createElement(Splitter.Panel, { className: "tree-splitter" },
|
|
289
|
+
React.createElement("div", { ref: divRef, className: "tree-view" },
|
|
290
|
+
React.createElement(Tree, { showIcon: true, showLine: true, treeData: treeData, virtual: true, blockNode: true, switcherIcon: React.createElement(DownOutlined, null), height: height, selectedKeys: selectedRow?.idx ? [selectedRow.idx] : [], onSelect: (_, info) => {
|
|
291
|
+
setSelectedRow(info.selected ? info.node.data : undefined);
|
|
292
|
+
} })),
|
|
293
|
+
React.createElement(ControlButtons, { tableData: tableData, onMove: handleMove, selectedRow: selectedRow, addEntry: handleAddEntry, addSubEntry: handleAddSubEntry, removeEntry: handleRemoveEntry, removeSubEntries: handleRemoveSubEntries })),
|
|
294
|
+
React.createElement(Splitter.Panel, { defaultSize: 350 }, selectedRow && (React.createElement(DescriptiveVectorDetailPanel, { data: selectedRow, onChange: handleDataChanged })))))
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
key: TabType.TABLE,
|
|
298
|
+
label: i18n("Table"),
|
|
299
|
+
children: (React.createElement("div", { className: styles.tableLayout },
|
|
300
|
+
React.createElement(ExtendedDataGrid, { ref: gridRef, defaultGridConfiguration: { pageSize: -1 }, columnDefs: columnDefs, onLoadData: (callback) => callback(1), detailPanel: {
|
|
301
|
+
defaultWidth: 350,
|
|
302
|
+
renderer: () => selectedRow ? (React.createElement(DescriptiveVectorDetailPanel, { data: selectedRow, onChange: handleDataChanged })) : React.createElement(React.Fragment, null),
|
|
303
|
+
}, onGridReady: selectGridRow, onRowDoubleClicked: handleRowDoubleClicked, onRowSelected: handleRowSelected, rowSelection: "single", rowData: tableData }),
|
|
304
|
+
React.createElement(ControlButtons, { tableData: tableData, onMove: handleMove, selectedRow: selectedRow, addEntry: handleAddEntry, addSubEntry: handleAddSubEntry, removeEntry: handleRemoveEntry, removeSubEntries: handleRemoveSubEntries })))
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
key: TabType.GRAPH,
|
|
308
|
+
label: i18n("Graph"),
|
|
309
|
+
children: (React.createElement(GraphPanel, { displayData: displayData, isLoading: isLoading, params: params, onParamsChange: setParams }))
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
key: TabType.VALUES,
|
|
313
|
+
label: i18n("Values"),
|
|
314
|
+
children: (React.createElement(TablePanel, { displayData: displayData, isLoading: isLoading, params: params, onParamsChange: setParams }))
|
|
315
|
+
}
|
|
316
|
+
], [treeData, columnDefs, originalData, tableData, selectedRow, height, handleRowSelected, handleDataChanged, displayData, isLoading, params, setParams, styles, activeTab]);
|
|
317
|
+
useEffect(() => {
|
|
318
|
+
loadData();
|
|
319
|
+
}, [loadData]);
|
|
320
|
+
useEffect(() => {
|
|
321
|
+
selectGridRow();
|
|
322
|
+
}, [selectGridRow]);
|
|
323
|
+
return (React.createElement(ModalDialog, { ...modalProps, mode: "NO_BUTTONS", footer: (React.createElement("div", { className: styles.buttonsLayout },
|
|
324
|
+
React.createElement(Space.Compact, null,
|
|
325
|
+
React.createElement(Button, { type: "primary", disabled: !dataModified, icon: React.createElement(SaveOutlined, null), onClick: handleSave }, i18n("Save")),
|
|
326
|
+
React.createElement(Button, { danger: true, disabled: !dataModified, icon: React.createElement(UndoIcon, null), onClick: handleRevert }, i18n("Revert"))))), onCancel: (event) => {
|
|
327
|
+
if (!dataModified) {
|
|
328
|
+
onCancel?.(event);
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
ModalDialog.confirm({
|
|
332
|
+
mode: "YES_NO",
|
|
333
|
+
title: i18n("Discard unsaved changes?"),
|
|
334
|
+
onOk: () => {
|
|
335
|
+
onCancel?.(event);
|
|
336
|
+
}
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
} },
|
|
340
|
+
React.createElement("div", { className: styles.tabsLayout },
|
|
341
|
+
React.createElement(Tabs, { type: "card", items: items, style: { height: "100%" }, destroyOnHidden: false, activeKey: activeTab, onChange: (key) => setActiveTab(key) }))));
|
|
342
|
+
};
|
|
343
|
+
//# sourceMappingURL=edaDescriptiveVectorEditorDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edaDescriptiveVectorEditorDialog.js","sourceRoot":"","sources":["../../../../../../coreui/components/edaManagerComponent/dialogs/edaDescriptiveVectorEditorDialog.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {FC, useCallback, useEffect, useMemo, useRef, useState} from \"react\";\r\nimport {ModalDialog, ModalDialogMode, ModalDialogProps} from \"d2coreui/components/modal/modalDialog\";\r\nimport EdaManagerApi, {TreeItem} from \"../../../../api/eda/edaManagerApi\";\r\nimport {Button, Space, Splitter, Tabs, TabsProps, Tree} from \"antd\";\r\nimport {DownOutlined, SaveOutlined} from \"@ant-design/icons\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\nimport {UndoIcon} from \"d2coreui/components/icons/undoIcon\";\r\nimport {createStyles} from \"antd-style\";\r\nimport {EdaPeriodType, EdaPeriodValueType} from \"../constants/edaTypes\";\r\nimport {LocaleHolder} from \"d2core/i18n/localeHolder\";\r\nimport dayjs from \"d2core/dayjs\";\r\nimport ExtendedDataGrid from \"d2coreui/components/grid/extendedDataGrid\";\r\nimport {RowSelectedEvent, ValueFormatterParams} from \"ag-grid-community\";\r\nimport {DataGridColDef} from \"d2coreui/components/grid/dataGrid\";\r\nimport {DescriptiveVectorDetailPanel} from \"./descriptiveVectorDialog/descriptiveVectorDetailPanel\";\r\nimport {DescriptiveVector, FullPeriodType, TableNode} from \"./descriptiveVectorDialog/types\";\r\nimport {addEntry, addSubEntry, buildTable, buildTree, getFormattedPeriodTime, getPeriodName, removeEntry, removeSubEntries, reorder, toFullPeriodType} from \"./descriptiveVectorDialog/utils\";\r\nimport {ControlButtons} from \"./descriptiveVectorDialog/controlButtons\";\r\nimport {GraphPanel} from \"./descriptiveVectorDialog/graphPanel\";\r\nimport {useSharedEdaData} from \"./descriptiveVectorDialog/useSharedData\";\r\nimport {TablePanel} from \"./descriptiveVectorDialog/tablePanel\";\r\n\r\nconst useStyles = createStyles(({css, token},) => {\r\n return {\r\n baseLayout: css`\r\n height: 100%;\r\n width: 100%;\r\n\r\n .ant-space-item:first-child {\r\n height: 100%;\r\n }\r\n\r\n .ant-tree-node-content-wrapper {\r\n user-select: none;\r\n -webkit-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n\r\n .ant-tree-title {\r\n white-space: nowrap;\r\n }\r\n }\r\n `,\r\n tabsLayout: css`\r\n height: 100%;\r\n width: 100%;\r\n overflow: hidden;\r\n\r\n .ant-tabs-content {\r\n height: 100%;\r\n background-color: ${token.colorBgContainer};\r\n border-radius: ${token.borderRadius}px;\r\n transition: background-color 0.3s;\r\n }\r\n `,\r\n treeLayout: css`\r\n .tree-splitter {\r\n display: flex;\r\n flex-direction: row;\r\n gap: ${token.paddingXS}px;\r\n }\r\n \r\n .tree-view {\r\n width: 100%;\r\n height: 100%;\r\n }\r\n \r\n .tree-mover {\r\n padding: ${token.paddingXS}px;\r\n display: flex;\r\n flex-direction: column;\r\n }\r\n `,\r\n tableLayout: css`\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n flex-direction: row;\r\n gap: ${token.paddingXS}px;\r\n\r\n .tree-mover {\r\n padding: ${token.paddingXS}px;\r\n display: flex;\r\n flex-direction: column;\r\n }\r\n `,\r\n buttonsLayout: css`\r\n width: 100%;\r\n display: flex;\r\n justify-content: center;\r\n `\r\n };\r\n});\r\n\r\nenum TabType {\r\n TREE = \"tree\",\r\n TABLE = \"table\",\r\n GRAPH = \"graph\",\r\n VALUES = \"values\",\r\n}\r\n\r\ninterface Props extends Omit<ModalDialogProps, \"mode\" | \"onOk\"> {\r\n api: EdaManagerApi\r\n vector: TreeItem\r\n onSaved: () => void\r\n}\r\n\r\nexport const EdaDescriptiveVectorEditorDialog: FC<Props> = ({api, vector, onCancel, onSaved, ...modalProps}) => {\r\n const {styles} = useStyles();\r\n\r\n const [originalData, setOriginalData] = useState<TableNode[]>([]);\r\n const [tableData, setTableData] = useState<TableNode[]>([]);\r\n const [dataModified, setDataModified] = useState<boolean>(false);\r\n const [selectedRow, setSelectedRow] = useState<DescriptiveVector>();\r\n const [height, setHeight] = useState<number>(0);\r\n const [activeTab, setActiveTab] = useState<TabType>(TabType.TREE);\r\n\r\n const gridRef = useRef<ExtendedDataGrid<TableNode>>(null);\r\n\r\n const {\r\n displayData,\r\n isLoading,\r\n params,\r\n setParams\r\n } = useSharedEdaData(api, originalData, tableData, activeTab === TabType.GRAPH || activeTab === TabType.VALUES);\r\n\r\n const fullMask = useMemo(() => LocaleHolder.getDateTimeFormat(true, false, false), []);\r\n const dateMask = useMemo(() => LocaleHolder.getDateFormat(false), []);\r\n\r\n const handleSave = useCallback(() => {\r\n //TODO handle save\r\n }, [api, vector]);\r\n\r\n const divRef = useCallback((node: HTMLDivElement | null) => {\r\n if (!node) {\r\n return;\r\n }\r\n\r\n new ResizeObserver((entries) => {\r\n if (entries[0]) {\r\n setHeight(entries[0].contentRect.height);\r\n }\r\n }).observe(node);\r\n }, []);\r\n\r\n const loadData = useCallback(() => {\r\n api.loadDescriptiveVectorData(vector.ID).then((result) => {\r\n const descriptiveVector = result.map((r): DescriptiveVector => ({...r, timeFrom: dayjs(r.timeFrom), timeTo: dayjs(r.timeTo)}));\r\n const data: TableNode[] = buildTable(descriptiveVector);\r\n\r\n gridRef.current?.showDetailPanel(false);\r\n setOriginalData(data);\r\n setTableData(data);\r\n setDataModified(false);\r\n setSelectedRow(undefined);\r\n });\r\n }, [api, vector]);\r\n\r\n const handleRevert = useCallback(() => {\r\n loadData();\r\n }, [loadData]);\r\n\r\n const handleDataChanged = useCallback((newData: DescriptiveVector) => {\r\n setTableData((prev) => {\r\n return buildTable(prev.map((row) => row.idx === newData.idx ? {...row, ...newData} : row));\r\n });\r\n\r\n setDataModified(true);\r\n }, [fullMask, dateMask]);\r\n\r\n const handleRowSelected = useCallback((row: RowSelectedEvent<TableNode>) => {\r\n if (row.node.isSelected()) {\r\n setSelectedRow(row.data);\r\n }\r\n }, []);\r\n\r\n const handleRowDoubleClicked = useCallback(() => {\r\n gridRef.current?.showDetailPanel(true);\r\n }, []);\r\n\r\n const handleMove = useCallback((direction: \"up\" | \"down\") => {\r\n if (!selectedRow) {\r\n return;\r\n }\r\n\r\n setTableData((prev) => {\r\n const {data, selected} = reorder(prev, selectedRow, direction);\r\n\r\n setSelectedRow(selected);\r\n return buildTable(data);\r\n });\r\n setDataModified(true);\r\n }, [selectedRow, fullMask, dateMask]);\r\n\r\n const handleAddEntry = useCallback(() => {\r\n setTableData((prev) => {\r\n const {data, selected} = addEntry(prev, selectedRow);\r\n\r\n setSelectedRow(selected);\r\n return buildTable(data);\r\n });\r\n setDataModified(true);\r\n }, [selectedRow]);\r\n\r\n const handleAddSubEntry = useCallback(() => {\r\n if (selectedRow) {\r\n setTableData((prev) => {\r\n const {data, selected} = addSubEntry(prev, selectedRow);\r\n\r\n setSelectedRow(selected);\r\n return buildTable(data);\r\n });\r\n setDataModified(true);\r\n }\r\n }, [selectedRow]);\r\n\r\n const handleRemoveEntry = useCallback(() => {\r\n if (selectedRow) {\r\n setTableData((prev) => {\r\n const {data, selected} = removeEntry(prev, selectedRow);\r\n setSelectedRow(selected);\r\n return buildTable(data);\r\n });\r\n setDataModified(true);\r\n }\r\n }, [selectedRow]);\r\n\r\n const handleRemoveSubEntries = useCallback(() => {\r\n if (selectedRow) {\r\n setTableData((prev) => {\r\n const {data, selected} = removeSubEntries(prev, selectedRow);\r\n setSelectedRow(selected);\r\n return buildTable(data);\r\n })\r\n setDataModified(true);\r\n }\r\n }, [selectedRow]);\r\n\r\n const valueFormatter = useCallback((props: ValueFormatterParams<TableNode, dayjs.Dayjs>): string => {\r\n if (props.data && props.value) {\r\n const data: TableNode = props.data;\r\n const formatted = getFormattedPeriodTime(data.periodType, props.value, fullMask, dateMask);\r\n\r\n if (props.data.periodType === EdaPeriodType.Year) {\r\n const fullPeriodType = toFullPeriodType(data);\r\n\r\n switch (fullPeriodType) {\r\n case FullPeriodType.YearQuarter:\r\n return `${formatted}. ${i18n(\"Quarter\")}`;\r\n case FullPeriodType.YearWeek:\r\n return `${formatted}. ${i18n(\"Week\")}`;\r\n }\r\n }\r\n\r\n return formatted\r\n }\r\n\r\n return \"\";\r\n }, []);\r\n\r\n const selectGridRow = useCallback(() => {\r\n if (selectedRow && gridRef.current) {\r\n gridRef.current.dataGrid?.gridApi?.forEachNode((node) => {\r\n if (node.data?.idx === selectedRow.idx && !node.isSelected()) {\r\n node.setSelected(true);\r\n }\r\n });\r\n } else if (!selectedRow) {\r\n gridRef.current?.dataGrid?.gridApi?.deselectAll();\r\n }\r\n }, [selectedRow, tableData]);\r\n\r\n const columnDefs = useMemo((): DataGridColDef[] => [\r\n {\r\n field: \"idx\",\r\n colId: \"idx\",\r\n width: 100,\r\n headerName: i18n(\"Index\"),\r\n group: i18n(\"Basic Columns\")\r\n },\r\n {\r\n field: \"periodType\",\r\n colId: \"periodType\",\r\n valueFormatter: (props) => getPeriodName(props.value),\r\n headerName: i18n(\"Period Type\"),\r\n group: i18n(\"Basic Columns\"),\r\n },\r\n {\r\n field: \"timeFrom\",\r\n colId: \"timeFrom\",\r\n valueFormatter: valueFormatter,\r\n headerName: i18n(\"Period From\"),\r\n group: i18n(\"Basic Columns\")\r\n },\r\n {\r\n field: \"timeTo\",\r\n colId: \"timeTo\",\r\n valueFormatter: valueFormatter,\r\n headerName: i18n(\"Period To\"),\r\n group: i18n(\"Basic Columns\")\r\n },\r\n {\r\n field: \"value\",\r\n colId: \"value\",\r\n headerName: i18n(\"Value\"),\r\n group: i18n(\"Basic Columns\"),\r\n },\r\n {\r\n field: \"valueType\",\r\n colId: \"valueType\",\r\n valueFormatter: (props) => i18n(\"EdaPeriodValueType_\" + EdaPeriodValueType[props.value]),\r\n headerName: i18n(\"Value Type\"),\r\n group: i18n(\"Basic Columns\"),\r\n },\r\n {\r\n field: \"parent\",\r\n colId: \"parent\",\r\n valueFormatter: (props) => props.value > 0 ? props.value : \"\",\r\n headerName: i18n(\"Parent\"),\r\n group: i18n(\"Basic Columns\"),\r\n },\r\n ], []);\r\n\r\n const treeData = useMemo(() => {\r\n return buildTree(tableData, fullMask, dateMask);\r\n }, [tableData, fullMask, dateMask]);\r\n\r\n const items = useMemo((): TabsProps[\"items\"] => [\r\n {\r\n key: TabType.TREE,\r\n label: i18n(\"Tree\"),\r\n children: (\r\n <Splitter className={styles.treeLayout}>\r\n <Splitter.Panel className={\"tree-splitter\"}>\r\n <div ref={divRef} className={\"tree-view\"}>\r\n <Tree\r\n showIcon\r\n showLine\r\n treeData={treeData}\r\n virtual\r\n blockNode\r\n switcherIcon={<DownOutlined/>}\r\n height={height}\r\n selectedKeys={selectedRow?.idx ? [selectedRow.idx] : []}\r\n onSelect={(_, info) => {\r\n setSelectedRow(info.selected ? info.node.data : undefined);\r\n }}\r\n />\r\n </div>\r\n <ControlButtons\r\n tableData={tableData}\r\n onMove={handleMove}\r\n selectedRow={selectedRow}\r\n addEntry={handleAddEntry}\r\n addSubEntry={handleAddSubEntry}\r\n removeEntry={handleRemoveEntry}\r\n removeSubEntries={handleRemoveSubEntries}\r\n />\r\n </Splitter.Panel>\r\n <Splitter.Panel defaultSize={350}>\r\n {selectedRow && (\r\n <DescriptiveVectorDetailPanel\r\n data={selectedRow}\r\n onChange={handleDataChanged}\r\n />\r\n )}\r\n </Splitter.Panel>\r\n </Splitter>\r\n )\r\n },\r\n {\r\n key: TabType.TABLE,\r\n label: i18n(\"Table\"),\r\n children: (\r\n <div className={styles.tableLayout}>\r\n <ExtendedDataGrid<TableNode>\r\n ref={gridRef}\r\n defaultGridConfiguration={{pageSize: -1}}\r\n columnDefs={columnDefs}\r\n onLoadData={(callback) => callback(1)}\r\n detailPanel={{\r\n defaultWidth: 350,\r\n renderer: () => selectedRow ? (\r\n <DescriptiveVectorDetailPanel\r\n data={selectedRow}\r\n onChange={handleDataChanged}\r\n />\r\n ) : <></>,\r\n }}\r\n onGridReady={selectGridRow}\r\n onRowDoubleClicked={handleRowDoubleClicked}\r\n onRowSelected={handleRowSelected}\r\n rowSelection={\"single\"}\r\n rowData={tableData}\r\n />\r\n <ControlButtons\r\n tableData={tableData}\r\n onMove={handleMove}\r\n selectedRow={selectedRow}\r\n addEntry={handleAddEntry}\r\n addSubEntry={handleAddSubEntry}\r\n removeEntry={handleRemoveEntry}\r\n removeSubEntries={handleRemoveSubEntries}\r\n />\r\n </div>\r\n )\r\n },\r\n {\r\n key: TabType.GRAPH,\r\n label: i18n(\"Graph\"),\r\n children: (\r\n <GraphPanel\r\n displayData={displayData}\r\n isLoading={isLoading}\r\n params={params}\r\n onParamsChange={setParams}\r\n />\r\n )\r\n },\r\n {\r\n key: TabType.VALUES,\r\n label: i18n(\"Values\"),\r\n children: (\r\n <TablePanel\r\n displayData={displayData}\r\n isLoading={isLoading}\r\n params={params}\r\n onParamsChange={setParams}\r\n />\r\n )\r\n }\r\n ], [treeData, columnDefs, originalData, tableData, selectedRow, height, handleRowSelected, handleDataChanged, displayData, isLoading, params, setParams, styles, activeTab]);\r\n\r\n useEffect(() => {\r\n loadData();\r\n }, [loadData]);\r\n\r\n useEffect(() => {\r\n selectGridRow();\r\n }, [selectGridRow]);\r\n\r\n return (\r\n <ModalDialog\r\n {...modalProps}\r\n mode={ModalDialogMode.NO_BUTTONS}\r\n footer={(\r\n <div className={styles.buttonsLayout}>\r\n <Space.Compact>\r\n <Button\r\n type={\"primary\"}\r\n disabled={!dataModified}\r\n icon={<SaveOutlined/>}\r\n onClick={handleSave}\r\n >\r\n {i18n(\"Save\")}\r\n </Button>\r\n <Button\r\n danger\r\n disabled={!dataModified}\r\n icon={<UndoIcon/>}\r\n onClick={handleRevert}\r\n >\r\n {i18n(\"Revert\")}\r\n </Button>\r\n </Space.Compact>\r\n </div>\r\n )}\r\n onCancel={(event) => {\r\n if (!dataModified) {\r\n onCancel?.(event);\r\n } else {\r\n ModalDialog.confirm({\r\n mode: ModalDialogMode.YES_NO,\r\n title: i18n(\"Discard unsaved changes?\"),\r\n onOk: () => {\r\n onCancel?.(event);\r\n }\r\n });\r\n }\r\n }}\r\n >\r\n <div className={styles.tabsLayout}>\r\n <Tabs\r\n type={\"card\"}\r\n items={items}\r\n style={{height: \"100%\"}}\r\n destroyOnHidden={false}\r\n activeKey={activeTab}\r\n onChange={(key) => setActiveTab(key as TabType)}\r\n />\r\n </div>\r\n </ModalDialog>\r\n )\r\n}"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { FC } from "react";
|
|
2
|
+
import EdaManagerApi, { TreeItem } from "../../../../api/eda/edaManagerApi";
|
|
3
|
+
import { ModalDialogProps } from "d2coreui/components/modal/modalDialog";
|
|
4
|
+
import { VectorDataState } from "../context/edaVectorDataContext";
|
|
5
|
+
interface Props extends Omit<ModalDialogProps, "mode" | "onOk"> {
|
|
6
|
+
api: EdaManagerApi;
|
|
7
|
+
data: VectorDataState;
|
|
8
|
+
vector: TreeItem;
|
|
9
|
+
onSaved: () => void;
|
|
10
|
+
}
|
|
11
|
+
export declare const EdaTableEditorDialog: FC<Props>;
|
|
12
|
+
export {};
|