d2aura 26.0.18 → 26.0.19
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/abstractApi.d.ts +1 -1
- package/api/abstractApi.js +2 -2
- package/api/abstractApi.js.map +1 -1
- package/api/eda/edaManagerApi.d.ts +13 -10
- package/api/eda/edaManagerApi.js +45 -12
- package/api/eda/edaManagerApi.js.map +1 -1
- package/api/eda/generated/events.d.ts +47 -14
- package/api/eda/generated/events.js +74 -14
- package/api/eda/generated/events.js.map +1 -1
- package/api/eda/generated/structures.d.ts +121 -121
- package/api/eda/generated/structures.js.map +1 -1
- package/core/i18n/d2aura.sk.json +2 -0
- package/coreui/components/edaManagerComponent/components/edaChartViewer.js +11 -11
- package/coreui/components/edaManagerComponent/components/edaChartViewer.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaDataBasePanel.js +2 -2
- package/coreui/components/edaManagerComponent/components/edaDataBasePanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaDetailPanel.js +1 -1
- package/coreui/components/edaManagerComponent/components/edaDetailPanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaGraphPanel.js +1 -1
- package/coreui/components/edaManagerComponent/components/edaGraphPanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaSampleRangePickerPanel.js +3 -2
- package/coreui/components/edaManagerComponent/components/edaSampleRangePickerPanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaTablePanel.js +5 -5
- package/coreui/components/edaManagerComponent/components/edaTablePanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaTimeWindowPickerPanel.js +3 -0
- package/coreui/components/edaManagerComponent/components/edaTimeWindowPickerPanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/components/edaTreeView.d.ts +1 -0
- package/coreui/components/edaManagerComponent/components/edaTreeView.js +82 -33
- package/coreui/components/edaManagerComponent/components/edaTreeView.js.map +1 -1
- package/coreui/components/edaManagerComponent/constants/edaTypes.d.ts +11 -2
- package/coreui/components/edaManagerComponent/constants/edaTypes.js +6 -0
- package/coreui/components/edaManagerComponent/constants/edaTypes.js.map +1 -1
- package/coreui/components/edaManagerComponent/context/edaConfigContext.d.ts +5 -4
- package/coreui/components/edaManagerComponent/context/edaConfigContext.js +4 -1
- package/coreui/components/edaManagerComponent/context/edaConfigContext.js.map +1 -1
- package/coreui/components/edaManagerComponent/context/edaVectorDataProvider.js +36 -23
- package/coreui/components/edaManagerComponent/context/edaVectorDataProvider.js.map +1 -1
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/graphPanel.js +1 -1
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/graphPanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/tablePanel.js +5 -5
- package/coreui/components/edaManagerComponent/dialogs/descriptiveVectorDialog/tablePanel.js.map +1 -1
- package/coreui/components/edaManagerComponent/dialogs/edaTableEditorDialog.js +4 -2
- package/coreui/components/edaManagerComponent/dialogs/edaTableEditorDialog.js.map +1 -1
- package/coreui/components/edaManagerComponent/dialogs/importDialog.js +56 -8
- package/coreui/components/edaManagerComponent/dialogs/importDialog.js.map +1 -1
- package/coreui/components/edaManagerComponent/dialogs/importExport/export.js +48 -28
- package/coreui/components/edaManagerComponent/dialogs/importExport/export.js.map +1 -1
- package/coreui/components/edaManagerComponent/dialogs/importExport/import.d.ts +4 -2
- package/coreui/components/edaManagerComponent/dialogs/importExport/import.js +26 -2
- package/coreui/components/edaManagerComponent/dialogs/importExport/import.js.map +1 -1
- package/coreui/components/edaManagerComponent/dialogs/importExport/vectorTypeSelection.js +0 -1
- package/coreui/components/edaManagerComponent/dialogs/importExport/vectorTypeSelection.js.map +1 -1
- package/coreui/components/edaManagerComponent/dialogs/vectorSelectionDialog.js +4 -5
- package/coreui/components/edaManagerComponent/dialogs/vectorSelectionDialog.js.map +1 -1
- package/coreui/components/edaManagerComponent/edaDetail.js +3 -1
- package/coreui/components/edaManagerComponent/edaDetail.js.map +1 -1
- package/coreui/components/edaManagerComponent/edaManager.d.ts +1 -1
- package/coreui/components/edaManagerComponent/edaManager.js +1 -1
- package/coreui/components/edaManagerComponent/edaManager.js.map +1 -1
- package/coreui/components/edaManagerComponent/edaNavigator.d.ts +1 -0
- package/coreui/components/edaManagerComponent/edaNavigator.js +4 -4
- package/coreui/components/edaManagerComponent/edaNavigator.js.map +1 -1
- package/coreui/components/edaManagerComponent/utils/utils.d.ts +1 -1
- package/coreui/components/edaManagerComponent/utils/utils.js +4 -5
- package/coreui/components/edaManagerComponent/utils/utils.js.map +1 -1
- package/d2configuration/edaManager/E.EM_DETAIL_IMPL.xml +18 -0
- package/d2configuration/edaManager/E.EM_NAVIGATOR_IMPL.xml +8 -8
- package/d2configuration/edaManager/E.EM_NAVIGATOR_SQL.xml +4 -38
- package/d2configuration/edaManager/E.EM_NAVIGATOR_UNIT.xml +224 -79
- package/d2configuration/edaManager/E.EM_VECTOR_IMPL.xml +12 -12
- package/d2configuration/edaManager/E.EM_VECTOR_UNIT.xml +116 -116
- package/d2configuration/edaManager/SD.EM_EDA_CalcFunction_Params_V2.xml +245 -0
- package/d2configuration/edaManager/SD.EM_EDA_ReadValuesFromVector_Params_V2.xml +159 -0
- package/package.json +3 -3
|
@@ -22,11 +22,17 @@ const useStyles = createStyles(({ css }) => {
|
|
|
22
22
|
-webkit-user-select: none;
|
|
23
23
|
-moz-user-select: none;
|
|
24
24
|
-ms-user-select: none;
|
|
25
|
+
min-width: 0;
|
|
25
26
|
white-space: nowrap;
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
display: flex;
|
|
28
|
+
|
|
29
|
+
.ant-tree-iconEle {
|
|
30
|
+
flex-shrink: 0;
|
|
31
|
+
}
|
|
28
32
|
|
|
29
33
|
.ant-tree-title {
|
|
34
|
+
overflow: hidden;
|
|
35
|
+
text-overflow: ellipsis;
|
|
30
36
|
white-space: nowrap;
|
|
31
37
|
}
|
|
32
38
|
}
|
|
@@ -54,7 +60,7 @@ var ScenarioType;
|
|
|
54
60
|
ScenarioType[ScenarioType["SCENARIOS"] = -1] = "SCENARIOS";
|
|
55
61
|
ScenarioType[ScenarioType["OMITTED_SCENARIOS"] = -2] = "OMITTED_SCENARIOS";
|
|
56
62
|
})(ScenarioType || (ScenarioType = {}));
|
|
57
|
-
export const EdaTreeView = ({ api, type, disableVectorSelection, disableBranchSelection, showOmitted, hideVectors, hideContextMenu, onItemDoubleClick }) => {
|
|
63
|
+
export const EdaTreeView = ({ api, type, disableVectorSelection, disableBranchSelection, showOmitted, hideVectors, hideContextMenu, allowDrag, onItemDoubleClick }) => {
|
|
58
64
|
const { styles } = useStyles();
|
|
59
65
|
const { triggerExportToXML, triggerImportToXML, triggerIncludeToScenario, triggerIncludeToGroup, renderActionDialogs } = useEdaActions(api);
|
|
60
66
|
const childParentMap = useRef(new Map());
|
|
@@ -281,11 +287,11 @@ export const EdaTreeView = ({ api, type, disableVectorSelection, disableBranchSe
|
|
|
281
287
|
}
|
|
282
288
|
else {
|
|
283
289
|
if (type === TreeViewType.GROUP) {
|
|
284
|
-
const res = await api.getGroupChildren(
|
|
290
|
+
const res = await api.getGroupChildren();
|
|
285
291
|
initialData = convertGroups(res.items, undefined);
|
|
286
292
|
}
|
|
287
293
|
else {
|
|
288
|
-
const res = await api.getScenarioChildren(
|
|
294
|
+
const res = await api.getScenarioChildren();
|
|
289
295
|
initialData = convertScenarios(res.items, undefined);
|
|
290
296
|
}
|
|
291
297
|
}
|
|
@@ -309,6 +315,17 @@ export const EdaTreeView = ({ api, type, disableVectorSelection, disableBranchSe
|
|
|
309
315
|
}
|
|
310
316
|
return node.title;
|
|
311
317
|
}, [loadingKey]);
|
|
318
|
+
const allowDrop = useCallback(({ dropNode, dropPosition }) => {
|
|
319
|
+
if (dropPosition === 0) {
|
|
320
|
+
if (dropNode.isLeaf || dropNode.vector) {
|
|
321
|
+
return false;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
return true;
|
|
325
|
+
}, []);
|
|
326
|
+
const onDrop = useCallback((e) => {
|
|
327
|
+
console.log(e);
|
|
328
|
+
}, []);
|
|
312
329
|
const onDoubleClick = useCallback((_e, node) => {
|
|
313
330
|
const type = getType(node);
|
|
314
331
|
if (type === undefined || type.id < 0) {
|
|
@@ -348,6 +365,7 @@ export const EdaTreeView = ({ api, type, disableVectorSelection, disableBranchSe
|
|
|
348
365
|
}
|
|
349
366
|
if (node.scenario) {
|
|
350
367
|
result.push(...[
|
|
368
|
+
{ key: "IMPORT_FROM_XML", label: i18n("Import from XML") },
|
|
351
369
|
{ key: "INCLUDE_TO_SCENARIO", label: i18n("Include vector to scenario") },
|
|
352
370
|
]);
|
|
353
371
|
}
|
|
@@ -396,12 +414,23 @@ export const EdaTreeView = ({ api, type, disableVectorSelection, disableBranchSe
|
|
|
396
414
|
return;
|
|
397
415
|
}
|
|
398
416
|
case "IMPORT_FROM_XML": {
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
417
|
+
switch (type.type) {
|
|
418
|
+
case 1: {
|
|
419
|
+
const result = await api.loadGroupData(type.id);
|
|
420
|
+
if (!result) {
|
|
421
|
+
return;
|
|
422
|
+
}
|
|
423
|
+
triggerImportToXML({ type: type.type, data: result });
|
|
424
|
+
break;
|
|
425
|
+
}
|
|
426
|
+
case 2: {
|
|
427
|
+
const result = await api.loadScenarioData(type.id);
|
|
428
|
+
if (!result) {
|
|
429
|
+
return;
|
|
430
|
+
}
|
|
431
|
+
triggerImportToXML({ type: type.type, data: result });
|
|
432
|
+
break;
|
|
403
433
|
}
|
|
404
|
-
triggerImportToXML({ type: type.type, data: result });
|
|
405
434
|
}
|
|
406
435
|
return;
|
|
407
436
|
}
|
|
@@ -419,7 +448,7 @@ export const EdaTreeView = ({ api, type, disableVectorSelection, disableBranchSe
|
|
|
419
448
|
}, trigger: ['contextMenu'] },
|
|
420
449
|
React.createElement("div", { ref: divRef, className: styles.baseLayout },
|
|
421
450
|
React.createElement("div", { className: styles.absoluteLayout },
|
|
422
|
-
React.createElement(Tree, { blockNode: true, showLine: true, showIcon: true, switcherIcon: React.createElement(DownOutlined, null), height: height, loadData: onLoadData, onRightClick: onRightClick, onExpand: setExpandedKeys, onDoubleClick: onDoubleClick, expandedKeys: expandedKeys, selectedKeys: selectedKeys, titleRender: titleRenderer, treeData: treeData }),
|
|
451
|
+
React.createElement(Tree, { blockNode: true, showLine: true, showIcon: true, draggable: allowDrag, switcherIcon: React.createElement(DownOutlined, null), height: height, loadData: onLoadData, onRightClick: onRightClick, onExpand: setExpandedKeys, onDoubleClick: onDoubleClick, onDrop: onDrop, expandedKeys: expandedKeys, selectedKeys: selectedKeys, titleRender: titleRenderer, treeData: treeData, allowDrop: allowDrop }),
|
|
423
452
|
renderActionDialogs()))));
|
|
424
453
|
};
|
|
425
454
|
const getType = (node) => {
|
|
@@ -448,18 +477,24 @@ const renderShowMoreTitle = (amount, total, onClick) => (React.createElement(Typ
|
|
|
448
477
|
onClick();
|
|
449
478
|
} }, i18n("Show %{n} more (of %{o})", { n: String(amount), o: String(total) })));
|
|
450
479
|
async function loadVectors(api, data, id, nodes, vectors, convertVectors, onClick) {
|
|
451
|
-
const
|
|
480
|
+
const nextPage = data.vectorOffset ? data.vectorOffset.page + 1 : 1;
|
|
481
|
+
const currentTotal = vectors.totalCount ?? 0;
|
|
482
|
+
const loadedSoFar = (nextPage - 1) * api.pageSize + vectors.items.length;
|
|
483
|
+
const hasMore = loadedSoFar < currentTotal;
|
|
484
|
+
const leftCount = currentTotal - loadedSoFar;
|
|
485
|
+
const amount = leftCount > api.pageSize ? api.pageSize : leftCount;
|
|
452
486
|
nodes.push(...convertVectors(vectors.items, id));
|
|
453
487
|
if (data.vectorOffset === undefined) {
|
|
454
488
|
data.vectorOffset = {
|
|
455
|
-
done:
|
|
456
|
-
|
|
457
|
-
total:
|
|
489
|
+
done: !hasMore,
|
|
490
|
+
page: 1,
|
|
491
|
+
total: currentTotal,
|
|
458
492
|
};
|
|
459
493
|
}
|
|
460
494
|
else {
|
|
461
|
-
data.vectorOffset.done =
|
|
462
|
-
data.vectorOffset.
|
|
495
|
+
data.vectorOffset.done = !hasMore;
|
|
496
|
+
data.vectorOffset.page = nextPage;
|
|
497
|
+
data.vectorOffset.total = currentTotal;
|
|
463
498
|
}
|
|
464
499
|
if (!data.vectorOffset.done) {
|
|
465
500
|
const key = `${id}_show_more`;
|
|
@@ -476,19 +511,25 @@ async function loadGroups(api, hideVectors, data, id, nodes, convertGroups, conv
|
|
|
476
511
|
const showOmittedGroups = isSpecialId && id === -2;
|
|
477
512
|
const showOmittedVectors = isSpecialId && id === -3;
|
|
478
513
|
if (!data.groupOffset?.done && !showOmittedVectors) {
|
|
479
|
-
const
|
|
480
|
-
const
|
|
514
|
+
const nextPage = data.groupOffset ? data.groupOffset.page + 1 : 1;
|
|
515
|
+
const groups = await api.getGroupChildren(requestedId, nextPage, showOmittedGroups);
|
|
516
|
+
const currentTotal = groups.totalCount ?? 0;
|
|
517
|
+
const loadedSoFar = (nextPage - 1) * api.pageSize + groups.items.length;
|
|
518
|
+
const hasMore = loadedSoFar < currentTotal;
|
|
519
|
+
const leftCount = currentTotal - loadedSoFar;
|
|
520
|
+
const amount = leftCount > api.pageSize ? api.pageSize : leftCount;
|
|
481
521
|
nodes.push(...convertGroups(groups.items, id));
|
|
482
522
|
if (data.groupOffset === undefined) {
|
|
483
523
|
data.groupOffset = {
|
|
484
|
-
done:
|
|
485
|
-
|
|
486
|
-
total:
|
|
524
|
+
done: !hasMore,
|
|
525
|
+
page: 1,
|
|
526
|
+
total: currentTotal,
|
|
487
527
|
};
|
|
488
528
|
}
|
|
489
529
|
else {
|
|
490
|
-
data.groupOffset.done =
|
|
491
|
-
data.groupOffset.
|
|
530
|
+
data.groupOffset.done = !hasMore;
|
|
531
|
+
data.groupOffset.page = nextPage;
|
|
532
|
+
data.groupOffset.total = currentTotal;
|
|
492
533
|
}
|
|
493
534
|
if (!data.groupOffset.done) {
|
|
494
535
|
const key = `${id}_show_more`;
|
|
@@ -500,7 +541,8 @@ async function loadGroups(api, hideVectors, data, id, nodes, convertGroups, conv
|
|
|
500
541
|
}
|
|
501
542
|
}
|
|
502
543
|
if (!hideVectors && (data.groupOffset?.done || showOmittedVectors) && !data.vectorOffset?.done && (!isSpecialId || showOmittedVectors)) {
|
|
503
|
-
const
|
|
544
|
+
const currentPage = data.vectorOffset ? data.vectorOffset.page + 1 : 1;
|
|
545
|
+
const vectors = await api.getGroupVectors(id, currentPage, showOmittedVectors);
|
|
504
546
|
await loadVectors(api, data, id, nodes, vectors, convertVectors, onClick);
|
|
505
547
|
}
|
|
506
548
|
}
|
|
@@ -509,19 +551,25 @@ async function loadScenarios(api, hideVectors, data, id, nodes, convertScenarios
|
|
|
509
551
|
const requestedId = isSpecialId ? undefined : id;
|
|
510
552
|
const showOmittedGroups = isSpecialId && id === -2;
|
|
511
553
|
if (!data.scenarioOffset?.done) {
|
|
512
|
-
const
|
|
513
|
-
const
|
|
554
|
+
const nextPage = data.scenarioOffset ? data.scenarioOffset.page + 1 : 1;
|
|
555
|
+
const scenarios = await api.getScenarioChildren(requestedId, nextPage, showOmittedGroups);
|
|
556
|
+
const currentTotal = scenarios.totalCount ?? 0;
|
|
557
|
+
const loadedSoFar = (nextPage - 1) * api.pageSize + scenarios.items.length;
|
|
558
|
+
const hasMore = loadedSoFar < currentTotal;
|
|
559
|
+
const leftCount = currentTotal - loadedSoFar;
|
|
560
|
+
const amount = leftCount > api.pageSize ? api.pageSize : leftCount;
|
|
514
561
|
nodes.push(...convertScenarios(scenarios.items, id));
|
|
515
562
|
if (data.scenarioOffset === undefined) {
|
|
516
563
|
data.scenarioOffset = {
|
|
517
|
-
done:
|
|
518
|
-
|
|
519
|
-
total:
|
|
564
|
+
done: !hasMore,
|
|
565
|
+
page: 1,
|
|
566
|
+
total: currentTotal,
|
|
520
567
|
};
|
|
521
568
|
}
|
|
522
569
|
else {
|
|
523
|
-
data.scenarioOffset.done =
|
|
524
|
-
data.scenarioOffset.
|
|
570
|
+
data.scenarioOffset.done = !hasMore;
|
|
571
|
+
data.scenarioOffset.page = nextPage;
|
|
572
|
+
data.scenarioOffset.total = currentTotal;
|
|
525
573
|
}
|
|
526
574
|
if (!data.scenarioOffset.done) {
|
|
527
575
|
const key = `${id}_show_more`;
|
|
@@ -533,7 +581,8 @@ async function loadScenarios(api, hideVectors, data, id, nodes, convertScenarios
|
|
|
533
581
|
}
|
|
534
582
|
}
|
|
535
583
|
if (!hideVectors && data.scenarioOffset.done && !data.vectorOffset?.done && !isSpecialId) {
|
|
536
|
-
const
|
|
584
|
+
const currentPage = data.vectorOffset ? data.vectorOffset.page + 1 : 1;
|
|
585
|
+
const vectors = await api.getScenarioVectors(id, currentPage, undefined, true);
|
|
537
586
|
await loadVectors(api, data, id, nodes, vectors, convertVectors, onClick);
|
|
538
587
|
}
|
|
539
588
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edaTreeView.js","sourceRoot":"","sources":["../../../../../../coreui/components/edaManagerComponent/components/edaTreeView.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {FC, Key, useCallback, useEffect, useRef, useState} from \"react\";\r\nimport EdaManagerApi, {TreeItem, TreeItemsResult} from \"../../../../api/eda/edaManagerApi\";\r\nimport {IdType, TypedData, TypedIndex} from \"../constants/edaTypes\";\r\nimport {createStyles} from \"antd-style\";\r\nimport {Dropdown, MenuProps, Tree, TreeDataNode, Typography} from \"antd\";\r\nimport {CheckCircleOutlined, CloseCircleOutlined, DownOutlined, FolderOpenOutlined, LoadingOutlined, StopOutlined} from \"@ant-design/icons\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\nimport {useEdaActions} from \"../context/useEdaActions\";\r\nimport {ActionTypes} from \"../constants/actionTypes\";\r\nimport {getVectorIcon} from \"../utils/utils\";\r\n\r\nconst useStyles = createStyles(({css}) => {\r\n return {\r\n baseLayout: css`\r\n position: relative;\r\n height: 100%;\r\n width: 100%;\r\n\r\n .ant-tree {\r\n height: 100%;\r\n background-color: transparent;\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 absoluteLayout: css`\r\n overflow: auto;\r\n position: absolute;\r\n inset: 0;\r\n `\r\n }\r\n});\r\n\r\nexport enum TreeViewType {\r\n GROUP = \"group\",\r\n SCENARIO = \"scenario\",\r\n}\r\n\r\nconst enum GroupType {\r\n GROUPS = -1,\r\n OMITTED_GROUPS = -2,\r\n OMITTED_VECTORS = -3,\r\n}\r\n\r\nconst enum ScenarioType {\r\n SCENARIOS = -1,\r\n OMITTED_SCENARIOS = -2,\r\n}\r\n\r\ninterface PageData {\r\n total: number\r\n offset: number\r\n done: boolean\r\n}\r\n\r\ninterface DataNode extends TreeDataNode {\r\n group?: TreeItem\r\n vector?: TreeItem\r\n scenario?: TreeItem\r\n\r\n vectorOffset?: PageData\r\n groupOffset?: PageData\r\n scenarioOffset?: PageData\r\n}\r\n\r\ninterface Props {\r\n api: EdaManagerApi\r\n type: TreeViewType\r\n disableVectorSelection?: boolean\r\n disableBranchSelection?: boolean\r\n showOmitted?: boolean\r\n hideVectors?: boolean\r\n hideContextMenu?: boolean\r\n\r\n onItemDoubleClick?: (id: TypedIndex, item: TreeItem) => void\r\n}\r\n\r\nexport const EdaTreeView: FC<Props> = ({api, type, disableVectorSelection, disableBranchSelection, showOmitted, hideVectors, hideContextMenu, onItemDoubleClick}) => {\r\n const {styles} = useStyles();\r\n const {triggerExportToXML, triggerImportToXML, triggerIncludeToScenario, triggerIncludeToGroup, renderActionDialogs} = useEdaActions(api);\r\n\r\n const childParentMap = useRef(new Map<number | string, number | undefined>());\r\n const nodeMap = useRef(new Map<number | string, DataNode>());\r\n\r\n const [treeData, setTreeData] = useState<DataNode[]>([]);\r\n const [expandedKeys, setExpandedKeys] = useState<Key[]>([]);\r\n const [selectedKeys, setSelectedKeys] = useState<Key[]>([]);\r\n const [height, setHeight] = useState<number>(0);\r\n const [loadingKey, setLoadingKey] = useState<string>();\r\n const [rightClickedNode, setRightClickedNode] = useState<DataNode>();\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 convertGroups = useCallback((groups: TreeItem[], parentId: number | undefined): DataNode[] => {\r\n return groups.map((group) => {\r\n const node: DataNode = {\r\n key: group.ID,\r\n title: group.DisplayName,\r\n isLeaf: false,\r\n icon: <FolderOpenOutlined />,\r\n group: group,\r\n };\r\n childParentMap.current.set(group.ID, parentId);\r\n nodeMap.current.set(group.ID, node);\r\n return node;\r\n });\r\n }, []);\r\n\r\n const convertScenarios = useCallback((scenarios: TreeItem[], parentId: number | undefined): DataNode[] => {\r\n return scenarios.map((scenario) => {\r\n const node: DataNode = {\r\n key: scenario.ID,\r\n title: scenario.DisplayName,\r\n isLeaf: false,\r\n icon: <FolderOpenOutlined />,\r\n scenario: scenario,\r\n };\r\n childParentMap.current.set(scenario.ID, parentId);\r\n nodeMap.current.set(scenario.ID, node);\r\n return node;\r\n });\r\n }, []);\r\n\r\n const convertVectors = useCallback((vectors: TreeItem[], parentId: number | undefined): DataNode[] => {\r\n return vectors.map((vector) => {\r\n const id = `${parentId}_${vector.ID}`;\r\n const node: DataNode = {\r\n key: id,\r\n title: vector.DisplayName,\r\n isLeaf: true,\r\n icon: getVectorIcon(vector.Type),\r\n vector: vector,\r\n };\r\n childParentMap.current.set(id, parentId);\r\n nodeMap.current.set(id, node);\r\n return node;\r\n });\r\n }, []);\r\n\r\n const updateTreeState = useCallback((data: DataNode, nodes: DataNode[], treeData: DataNode[], dataId: number, resolve: () => void, reject: () => void) => {\r\n const index: number = treeData.findIndex((t: DataNode) => (type === TreeViewType.GROUP ? t.group?.ID : t.scenario?.ID) === dataId);\r\n\r\n if (index < 0) {\r\n console.warn(\"Failed to find index\");\r\n reject();\r\n return;\r\n }\r\n\r\n treeData[index] = {...data, children: treeData[index].children};\r\n\r\n if (treeData[index].children) {\r\n treeData[index].children.pop();\r\n treeData[index].children.push(...nodes);\r\n } else {\r\n treeData[index].children = nodes;\r\n }\r\n\r\n nodeMap.current.set(dataId, treeData[index]);\r\n resolve();\r\n }, [type]);\r\n\r\n const onLoadData = useCallback(async (data: DataNode, id?: string): Promise<void> => {\r\n if (data.children) { // data already available\r\n return Promise.resolve();\r\n }\r\n\r\n setLoadingKey(id);\r\n\r\n try {\r\n let id: number;\r\n const nodes: DataNode[] = [];\r\n\r\n switch (type) {\r\n case TreeViewType.GROUP:\r\n if (!data.group) {\r\n console.warn(\"No group!\");\r\n setLoadingKey(undefined);\r\n return;\r\n }\r\n\r\n id = data.group.ID;\r\n // eslint-disable-next-line react-hooks/immutability\r\n await loadGroups(api, hideVectors, data, id, nodes, convertGroups, convertVectors, onLoadData);\r\n break;\r\n case TreeViewType.SCENARIO:\r\n if (!data.scenario) {\r\n console.warn(\"No scenario!\");\r\n setLoadingKey(undefined);\r\n return;\r\n }\r\n\r\n id = data.scenario.ID;\r\n await loadScenarios(api, hideVectors, data, id, nodes, convertScenarios, convertVectors, onLoadData);\r\n break;\r\n default:\r\n setLoadingKey(undefined);\r\n return;\r\n }\r\n\r\n await new Promise<void>((resolve, reject) => {\r\n setTreeData((treeData) => {\r\n const parentId = childParentMap.current.get(id);\r\n\r\n if (parentId !== undefined) {\r\n const parentNode = nodeMap.current.get(parentId);\r\n\r\n if (parentNode?.children) {\r\n updateTreeState(data, nodes, parentNode.children, id, resolve, reject);\r\n } else {\r\n console.warn(\"No parent for node\", id);\r\n reject();\r\n }\r\n } else {\r\n updateTreeState(data, nodes, treeData, id, resolve, reject);\r\n }\r\n\r\n return [...treeData];\r\n });\r\n });\r\n } catch (e) {\r\n console.warn(\"Failed to load tree data\", e);\r\n } finally {\r\n setLoadingKey(undefined);\r\n }\r\n }, [type, api, hideVectors, convertGroups, convertVectors, convertScenarios, updateTreeState]);\r\n\r\n useEffect(() => {\r\n const initLoad = async () => {\r\n setLoadingKey(\"\");\r\n\r\n try {\r\n let initialData: DataNode[];\r\n\r\n if (showOmitted) {\r\n if (type === TreeViewType.GROUP) {\r\n initialData = [\r\n {\r\n key: GroupType.GROUPS,\r\n title: i18n(\"Vector Groups\"),\r\n isLeaf: false,\r\n icon: <CheckCircleOutlined/>,\r\n group: {\r\n ID: GroupType.GROUPS,\r\n Name: \"\",\r\n DisplayName: \"\",\r\n Type: 0,\r\n RoundingPlaces: 0,\r\n RoundingType: 0,\r\n }\r\n },\r\n {\r\n key: GroupType.OMITTED_GROUPS,\r\n title: i18n(\"Omitted Vector Groups\"),\r\n isLeaf: false,\r\n icon: <StopOutlined/>,\r\n group: {\r\n ID: GroupType.OMITTED_GROUPS,\r\n Name: \"\",\r\n DisplayName: \"\",\r\n Type: 0,\r\n RoundingPlaces: 0,\r\n RoundingType: 0,\r\n }\r\n },\r\n ... !hideVectors ? [{\r\n key: GroupType.OMITTED_VECTORS,\r\n title: i18n(\"Omitted Vectors\"),\r\n isLeaf: false,\r\n icon: <CloseCircleOutlined/>,\r\n group: {\r\n ID: GroupType.OMITTED_VECTORS,\r\n Name: \"\",\r\n DisplayName: \"\",\r\n Type: 0,\r\n RoundingPlaces: 0,\r\n RoundingType: 0,\r\n }\r\n }] : []\r\n ];\r\n } else {\r\n initialData = [\r\n {\r\n key: ScenarioType.SCENARIOS,\r\n title: i18n(\"Scenarios\"),\r\n isLeaf: false,\r\n icon: <CheckCircleOutlined/>,\r\n scenario: {\r\n ID: ScenarioType.SCENARIOS,\r\n Name: \"\",\r\n DisplayName: \"\",\r\n Type: 0,\r\n RoundingPlaces: 0,\r\n RoundingType: 0,\r\n }\r\n },\r\n {\r\n key: ScenarioType.OMITTED_SCENARIOS,\r\n title: i18n(\"Omitted Scenarios\"),\r\n isLeaf: false,\r\n icon: <StopOutlined/>,\r\n scenario: {\r\n ID: ScenarioType.OMITTED_SCENARIOS,\r\n Name: \"\",\r\n DisplayName: \"\",\r\n Type: 0,\r\n RoundingPlaces: 0,\r\n RoundingType: 0,\r\n }\r\n },\r\n ]\r\n }\r\n } else {\r\n if (type === TreeViewType.GROUP) {\r\n const res = await api.getGroupChildren(undefined);\r\n\r\n initialData = convertGroups(res.items, undefined);\r\n } else {\r\n const res = await api.getScenarioChildren(undefined);\r\n\r\n initialData = convertScenarios(res.items, undefined);\r\n }\r\n }\r\n\r\n setTreeData(initialData);\r\n } catch (e) {\r\n console.warn(\"Failed to load tree data\", e);\r\n } finally {\r\n setLoadingKey(undefined);\r\n }\r\n }\r\n\r\n initLoad();\r\n }, [api, type, showOmitted, convertGroups, convertScenarios, hideVectors]);\r\n\r\n\r\n const titleRenderer = useCallback((node: DataNode) => {\r\n if (node.key === loadingKey) {\r\n return <Typography.Link><LoadingOutlined />{i18n(\"Loading\")}...</Typography.Link>\r\n }\r\n\r\n return node.title as React.ReactNode;\r\n }, [loadingKey]);\r\n\r\n const onDoubleClick = useCallback((_e: any, node: DataNode) => {\r\n const type = getType(node);\r\n\r\n if (type === undefined || type.id < 0) {\r\n return;\r\n }\r\n\r\n if (node.vector && type.type === IdType.VECTOR && !disableVectorSelection) {\r\n onItemDoubleClick?.(type, node.vector);\r\n setSelectedKeys([node.key]);\r\n } else if (node.group && type.type === IdType.GROUP && !disableBranchSelection) {\r\n onItemDoubleClick?.(type, node.group);\r\n setSelectedKeys([node.key]);\r\n } else if (node.scenario && type.type === IdType.SCENARIO && !disableBranchSelection) {\r\n onItemDoubleClick?.(type, node.scenario);\r\n setSelectedKeys([node.key]);\r\n }\r\n }, [disableBranchSelection, disableVectorSelection, onItemDoubleClick]);\r\n\r\n const getMenuItems = useCallback((node: DataNode): MenuProps['items'] => {\r\n if (typeof node.key === \"number\" && node.key < 0) {\r\n return [];\r\n }\r\n\r\n const result: MenuProps['items'] = [\r\n {key: ActionTypes.EXPORT_TO_XML, label: i18n(\"Export to XML\")},\r\n ];\r\n\r\n if (node.vector) {\r\n result.push(...[\r\n {key: ActionTypes.INCLUDE_TO_SCENARIO, label: i18n(\"Include vector to scenario\")},\r\n {key: ActionTypes.INCLUDE_TO_GROUP, label: i18n(\"Include vector to group\")},\r\n ]);\r\n }\r\n if (node.group) {\r\n result.push(...[\r\n {key: ActionTypes.IMPORT_FROM_XML, label: i18n(\"Import from XML\")},\r\n {key: ActionTypes.INCLUDE_TO_GROUP, label: i18n(\"Include vector to group\")},\r\n ]);\r\n }\r\n if (node.scenario) {\r\n result.push(...[\r\n {key: ActionTypes.INCLUDE_TO_SCENARIO, label: i18n(\"Include vector to scenario\")},\r\n ]);\r\n }\r\n\r\n return result;\r\n }, []);\r\n\r\n const onRightClick = useCallback(({node}: {node: DataNode}) => {\r\n setRightClickedNode(node);\r\n }, []);\r\n\r\n const handleContextMenuItemClicked = useCallback(async ({key}: {key: string}) => {\r\n const type = getType(rightClickedNode);\r\n\r\n if (type === undefined) {\r\n return;\r\n }\r\n\r\n switch (key) {\r\n case ActionTypes.EXPORT_TO_XML: {\r\n let data: TypedData | undefined = undefined;\r\n\r\n switch (type.type) {\r\n case IdType.VECTOR: {\r\n const result = await api.loadVectorData(type.id);\r\n if (!result) {\r\n return;\r\n }\r\n data = {type: type.type, data: result};\r\n break;\r\n }\r\n case IdType.GROUP: {\r\n const result = await api.loadGroupData(type.id);\r\n if (!result) {\r\n return;\r\n }\r\n data = {type: type.type, data: result};\r\n break;\r\n }\r\n case IdType.SCENARIO: {\r\n const result = await api.loadScenarioData(type.id);\r\n if (!result) {\r\n return;\r\n }\r\n data = {type: type.type, data: result};\r\n break;\r\n }\r\n case IdType.SET:\r\n return;\r\n }\r\n\r\n triggerExportToXML(data);\r\n return;\r\n }\r\n case ActionTypes.IMPORT_FROM_XML: {\r\n if (type.type === IdType.GROUP) {\r\n const result = await api.loadGroupData(type.id);\r\n if (!result) {\r\n return;\r\n }\r\n\r\n triggerImportToXML({type: type.type, data: result});\r\n }\r\n\r\n return;\r\n }\r\n case ActionTypes.INCLUDE_TO_SCENARIO:\r\n triggerIncludeToScenario(type);\r\n return;\r\n case ActionTypes.INCLUDE_TO_GROUP:\r\n triggerIncludeToGroup(type);\r\n return;\r\n }\r\n }, [api, rightClickedNode, triggerExportToXML, triggerImportToXML, triggerIncludeToGroup, triggerIncludeToScenario]);\r\n\r\n return (\r\n <Dropdown\r\n menu={{\r\n items: (rightClickedNode && !hideContextMenu) ? getMenuItems(rightClickedNode): [],\r\n onClick: handleContextMenuItemClicked,\r\n }}\r\n trigger={['contextMenu']}\r\n >\r\n <div ref={divRef} className={styles.baseLayout}>\r\n <div className={styles.absoluteLayout}>\r\n <Tree<DataNode>\r\n blockNode\r\n showLine\r\n showIcon\r\n switcherIcon={<DownOutlined/>}\r\n height={height}\r\n loadData={onLoadData}\r\n onRightClick={onRightClick}\r\n onExpand={setExpandedKeys}\r\n onDoubleClick={onDoubleClick}\r\n expandedKeys={expandedKeys}\r\n selectedKeys={selectedKeys}\r\n titleRender={titleRenderer}\r\n treeData={treeData}\r\n />\r\n {renderActionDialogs()}\r\n </div>\r\n </div>\r\n </Dropdown>\r\n )\r\n}\r\n\r\nconst getType = (node: DataNode | undefined): TypedIndex | undefined => {\r\n let type: IdType | undefined = undefined;\r\n let id: number | undefined = undefined;\r\n\r\n if (node?.vector) {\r\n type = IdType.VECTOR;\r\n id = node.vector.ID;\r\n }\r\n if (node?.group) {\r\n type = IdType.GROUP;\r\n id = node.group.ID;\r\n }\r\n if (node?.scenario) {\r\n type = IdType.SCENARIO;\r\n id = node.scenario.ID;\r\n }\r\n\r\n if (type === undefined || id === undefined) {\r\n return undefined;\r\n }\r\n\r\n return {type, id};\r\n}\r\n\r\nconst renderShowMoreTitle = (amount: number, total: number, onClick: () => void) => (\r\n <Typography.Link\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n onClick();\r\n }}\r\n >\r\n {i18n(\"Show %{n} more (of %{o})\", {n: String(amount), o: String(total)})}\r\n </Typography.Link>\r\n);\r\n\r\nasync function loadVectors(api: EdaManagerApi, data: DataNode, id: number, nodes: DataNode[], vectors: TreeItemsResult, convertVectors: (vectors: TreeItem[], parentId: number | undefined) => DataNode[],\r\n onClick: (data: DataNode, key: string) => void) {\r\n const amount = vectors.leftCount > api.pageSize ? api.pageSize : vectors.leftCount;\r\n\r\n nodes.push(...convertVectors(vectors.items, id));\r\n\r\n if (data.vectorOffset === undefined) {\r\n data.vectorOffset = {\r\n done: vectors.leftCount === 0,\r\n offset: vectors.items.length,\r\n total: vectors.items.length + vectors.leftCount,\r\n }\r\n } else {\r\n data.vectorOffset.done = vectors.leftCount === 0;\r\n data.vectorOffset.offset += vectors.items.length;\r\n }\r\n\r\n if (!data.vectorOffset.done) {\r\n const key = `${id}_show_more`;\r\n\r\n nodes.push({\r\n key: key,\r\n title: renderShowMoreTitle(amount, data.vectorOffset.total, () => onClick(data, key)),\r\n isLeaf: true,\r\n });\r\n }\r\n}\r\n\r\n\r\nasync function loadGroups(api: EdaManagerApi, hideVectors: boolean | undefined, data: DataNode, id: number, nodes: DataNode[], convertGroups: (groups: TreeItem[], parentId: number) => DataNode[],\r\n convertVectors: (vectors: TreeItem[], parentId: number | undefined) => DataNode[], onClick: (data: DataNode, key: string) => void) {\r\n const isSpecialId = id < 0;\r\n const requestedId = isSpecialId ? undefined : id;\r\n const showOmittedGroups = isSpecialId && id === GroupType.OMITTED_GROUPS;\r\n const showOmittedVectors = isSpecialId && id === GroupType.OMITTED_VECTORS;\r\n\r\n if (!data.groupOffset?.done && !showOmittedVectors) {\r\n const groups = await api.getGroupChildren(requestedId, data.groupOffset?.offset, showOmittedGroups);\r\n const amount = groups.leftCount > api.pageSize ? api.pageSize : groups.leftCount;\r\n\r\n nodes.push(...convertGroups(groups.items, id));\r\n\r\n if (data.groupOffset === undefined) {\r\n data.groupOffset = {\r\n done: groups.leftCount === 0,\r\n offset: groups.items.length,\r\n total: groups.items.length + groups.leftCount,\r\n }\r\n } else {\r\n data.groupOffset.done = groups.leftCount === 0;\r\n data.groupOffset.offset += groups.items.length;\r\n }\r\n\r\n if (!data.groupOffset.done) {\r\n const key = `${id}_show_more`;\r\n\r\n nodes.push({\r\n key: key,\r\n title: renderShowMoreTitle(amount, data.groupOffset.total, () => onClick(data, key)),\r\n isLeaf: true,\r\n });\r\n }\r\n }\r\n\r\n if (!hideVectors && (data.groupOffset?.done || showOmittedVectors) && !data.vectorOffset?.done && (!isSpecialId || showOmittedVectors)) {\r\n const vectors = await api.getGroupVectors(id, data.vectorOffset?.offset, showOmittedVectors);\r\n\r\n await loadVectors(api, data, id, nodes, vectors, convertVectors, onClick);\r\n }\r\n}\r\n\r\n\r\nasync function loadScenarios(api: EdaManagerApi, hideVectors: boolean | undefined, data: DataNode, id: number, nodes: DataNode[], convertScenarios: (groups: TreeItem[], parentId: number) => DataNode[],\r\n convertVectors: (vectors: TreeItem[], parentId: number | undefined) => DataNode[], onClick: (data: DataNode, key: string) => void) {\r\n const isSpecialId = id < 0;\r\n const requestedId = isSpecialId ? undefined : id;\r\n const showOmittedGroups = isSpecialId && id === ScenarioType.OMITTED_SCENARIOS;\r\n\r\n if (!data.scenarioOffset?.done) {\r\n const scenarios = await api.getScenarioChildren(requestedId, data.scenarioOffset?.offset, showOmittedGroups);\r\n const amount = scenarios.leftCount > api.pageSize ? api.pageSize : scenarios.leftCount;\r\n\r\n nodes.push(...convertScenarios(scenarios.items, id));\r\n\r\n if (data.scenarioOffset === undefined) {\r\n data.scenarioOffset = {\r\n done: scenarios.leftCount === 0,\r\n offset: scenarios.items.length,\r\n total: scenarios.items.length + scenarios.leftCount,\r\n }\r\n } else {\r\n data.scenarioOffset.done = scenarios.leftCount === 0;\r\n data.scenarioOffset.offset += scenarios.items.length;\r\n }\r\n\r\n if (!data.scenarioOffset.done) {\r\n const key = `${id}_show_more`;\r\n\r\n nodes.push({\r\n key: key,\r\n title: renderShowMoreTitle(amount, data.scenarioOffset.total, () => onClick(data, key)),\r\n isLeaf: true,\r\n });\r\n }\r\n }\r\n\r\n if (!hideVectors && data.scenarioOffset.done && !data.vectorOffset?.done && !isSpecialId) {\r\n const vectors = await api.getScenarioVectors(id, data.vectorOffset?.offset, undefined, true);\r\n\r\n await loadVectors(api, data, id, nodes, vectors, convertVectors, onClick);\r\n }\r\n}"]}
|
|
1
|
+
{"version":3,"file":"edaTreeView.js","sourceRoot":"","sources":["../../../../../../coreui/components/edaManagerComponent/components/edaTreeView.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {FC, Key, useCallback, useEffect, useRef, useState} from \"react\";\r\nimport EdaManagerApi, {TreeItem, TreeItemsResult} from \"../../../../api/eda/edaManagerApi\";\r\nimport {IdType, TypedData, TypedIndex} from \"../constants/edaTypes\";\r\nimport {createStyles} from \"antd-style\";\r\nimport type {TreeProps} from \"antd\";\r\nimport {Dropdown, MenuProps, Tree, TreeDataNode, Typography} from \"antd\";\r\nimport {CheckCircleOutlined, CloseCircleOutlined, DownOutlined, FolderOpenOutlined, LoadingOutlined, StopOutlined} from \"@ant-design/icons\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\nimport {useEdaActions} from \"../context/useEdaActions\";\r\nimport {ActionTypes} from \"../constants/actionTypes\";\r\nimport {getVectorIcon} from \"../utils/utils\";\r\n\r\ntype AllowDropType = NonNullable<TreeProps<DataNode>['allowDrop']>;\r\ntype DropEventType = NonNullable<TreeProps<DataNode>['onDrop']>;\r\ntype DoubleClickEventType = NonNullable<TreeProps<DataNode>['onDoubleClick']>;\r\ntype OnRightClickEventType = NonNullable<TreeProps<DataNode>['onRightClick']>;\r\n\r\nconst useStyles = createStyles(({css}) => {\r\n return {\r\n baseLayout: css`\r\n position: relative;\r\n height: 100%;\r\n width: 100%;\r\n\r\n .ant-tree {\r\n height: 100%;\r\n background-color: transparent;\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 min-width: 0;\r\n white-space: nowrap;\r\n display: flex;\r\n \r\n .ant-tree-iconEle {\r\n flex-shrink: 0;\r\n }\r\n\r\n .ant-tree-title {\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n }\r\n }\r\n `,\r\n absoluteLayout: css`\r\n overflow: auto;\r\n position: absolute;\r\n inset: 0;\r\n `\r\n }\r\n});\r\n\r\nexport enum TreeViewType {\r\n GROUP = \"group\",\r\n SCENARIO = \"scenario\",\r\n}\r\n\r\nconst enum GroupType {\r\n GROUPS = -1,\r\n OMITTED_GROUPS = -2,\r\n OMITTED_VECTORS = -3,\r\n}\r\n\r\nconst enum ScenarioType {\r\n SCENARIOS = -1,\r\n OMITTED_SCENARIOS = -2,\r\n}\r\n\r\ninterface PageData {\r\n total: number\r\n page: number\r\n done: boolean\r\n}\r\n\r\ninterface DataNode extends TreeDataNode {\r\n group?: TreeItem\r\n vector?: TreeItem\r\n scenario?: TreeItem\r\n\r\n vectorOffset?: PageData\r\n groupOffset?: PageData\r\n scenarioOffset?: PageData\r\n}\r\n\r\ninterface Props {\r\n api: EdaManagerApi\r\n type: TreeViewType\r\n disableVectorSelection?: boolean\r\n disableBranchSelection?: boolean\r\n showOmitted?: boolean\r\n hideVectors?: boolean\r\n hideContextMenu?: boolean\r\n allowDrag?: boolean\r\n\r\n onItemDoubleClick?: (id: TypedIndex, item: TreeItem) => void\r\n}\r\n\r\nexport const EdaTreeView: FC<Props> = ({api, type, disableVectorSelection, disableBranchSelection, showOmitted, hideVectors, hideContextMenu, allowDrag, onItemDoubleClick}) => {\r\n const {styles} = useStyles();\r\n const {triggerExportToXML, triggerImportToXML, triggerIncludeToScenario, triggerIncludeToGroup, renderActionDialogs} = useEdaActions(api);\r\n\r\n const childParentMap = useRef(new Map<number | string, number | undefined>());\r\n const nodeMap = useRef(new Map<number | string, DataNode>());\r\n\r\n const [treeData, setTreeData] = useState<DataNode[]>([]);\r\n const [expandedKeys, setExpandedKeys] = useState<Key[]>([]);\r\n const [selectedKeys, setSelectedKeys] = useState<Key[]>([]);\r\n const [height, setHeight] = useState<number>(0);\r\n const [loadingKey, setLoadingKey] = useState<string>();\r\n const [rightClickedNode, setRightClickedNode] = useState<DataNode>();\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 convertGroups = useCallback((groups: TreeItem[], parentId: number | undefined): DataNode[] => {\r\n return groups.map((group) => {\r\n const node: DataNode = {\r\n key: group.ID,\r\n title: group.DisplayName,\r\n isLeaf: false,\r\n icon: <FolderOpenOutlined />,\r\n group: group,\r\n };\r\n childParentMap.current.set(group.ID, parentId);\r\n nodeMap.current.set(group.ID, node);\r\n return node;\r\n });\r\n }, []);\r\n\r\n const convertScenarios = useCallback((scenarios: TreeItem[], parentId: number | undefined): DataNode[] => {\r\n return scenarios.map((scenario) => {\r\n const node: DataNode = {\r\n key: scenario.ID,\r\n title: scenario.DisplayName,\r\n isLeaf: false,\r\n icon: <FolderOpenOutlined />,\r\n scenario: scenario,\r\n };\r\n childParentMap.current.set(scenario.ID, parentId);\r\n nodeMap.current.set(scenario.ID, node);\r\n return node;\r\n });\r\n }, []);\r\n\r\n const convertVectors = useCallback((vectors: TreeItem[], parentId: number | undefined): DataNode[] => {\r\n return vectors.map((vector) => {\r\n const id = `${parentId}_${vector.ID}`;\r\n const node: DataNode = {\r\n key: id,\r\n title: vector.DisplayName,\r\n isLeaf: true,\r\n icon: getVectorIcon(vector.Type),\r\n vector: vector,\r\n };\r\n childParentMap.current.set(id, parentId);\r\n nodeMap.current.set(id, node);\r\n return node;\r\n });\r\n }, []);\r\n\r\n const updateTreeState = useCallback((data: DataNode, nodes: DataNode[], treeData: DataNode[], dataId: number, resolve: () => void, reject: () => void) => {\r\n const index: number = treeData.findIndex((t: DataNode) => (type === TreeViewType.GROUP ? t.group?.ID : t.scenario?.ID) === dataId);\r\n\r\n if (index < 0) {\r\n console.warn(\"Failed to find index\");\r\n reject();\r\n return;\r\n }\r\n\r\n treeData[index] = {...data, children: treeData[index].children};\r\n\r\n if (treeData[index].children) {\r\n treeData[index].children.pop();\r\n treeData[index].children.push(...nodes);\r\n } else {\r\n treeData[index].children = nodes;\r\n }\r\n\r\n nodeMap.current.set(dataId, treeData[index]);\r\n resolve();\r\n }, [type]);\r\n\r\n const onLoadData = useCallback(async (data: DataNode, id?: string): Promise<void> => {\r\n if (data.children) { // data already available\r\n return Promise.resolve();\r\n }\r\n\r\n setLoadingKey(id);\r\n\r\n try {\r\n let id: number;\r\n const nodes: DataNode[] = [];\r\n\r\n switch (type) {\r\n case TreeViewType.GROUP:\r\n if (!data.group) {\r\n console.warn(\"No group!\");\r\n setLoadingKey(undefined);\r\n return;\r\n }\r\n\r\n id = data.group.ID;\r\n // eslint-disable-next-line react-hooks/immutability\r\n await loadGroups(api, hideVectors, data, id, nodes, convertGroups, convertVectors, onLoadData);\r\n break;\r\n case TreeViewType.SCENARIO:\r\n if (!data.scenario) {\r\n console.warn(\"No scenario!\");\r\n setLoadingKey(undefined);\r\n return;\r\n }\r\n\r\n id = data.scenario.ID;\r\n await loadScenarios(api, hideVectors, data, id, nodes, convertScenarios, convertVectors, onLoadData);\r\n break;\r\n default:\r\n setLoadingKey(undefined);\r\n return;\r\n }\r\n\r\n await new Promise<void>((resolve, reject) => {\r\n setTreeData((treeData) => {\r\n const parentId = childParentMap.current.get(id);\r\n\r\n if (parentId !== undefined) {\r\n const parentNode = nodeMap.current.get(parentId);\r\n\r\n if (parentNode?.children) {\r\n updateTreeState(data, nodes, parentNode.children, id, resolve, reject);\r\n } else {\r\n console.warn(\"No parent for node\", id);\r\n reject();\r\n }\r\n } else {\r\n updateTreeState(data, nodes, treeData, id, resolve, reject);\r\n }\r\n\r\n return [...treeData];\r\n });\r\n });\r\n } catch (e) {\r\n console.warn(\"Failed to load tree data\", e);\r\n } finally {\r\n setLoadingKey(undefined);\r\n }\r\n }, [type, api, hideVectors, convertGroups, convertVectors, convertScenarios, updateTreeState]);\r\n\r\n useEffect(() => {\r\n const initLoad = async () => {\r\n setLoadingKey(\"\");\r\n\r\n try {\r\n let initialData: DataNode[];\r\n\r\n if (showOmitted) {\r\n if (type === TreeViewType.GROUP) {\r\n initialData = [\r\n {\r\n key: GroupType.GROUPS,\r\n title: i18n(\"Vector Groups\"),\r\n isLeaf: false,\r\n icon: <CheckCircleOutlined/>,\r\n group: {\r\n ID: GroupType.GROUPS,\r\n Name: \"\",\r\n DisplayName: \"\",\r\n Type: 0,\r\n RoundingPlaces: 0,\r\n RoundingType: 0,\r\n }\r\n },\r\n {\r\n key: GroupType.OMITTED_GROUPS,\r\n title: i18n(\"Omitted Vector Groups\"),\r\n isLeaf: false,\r\n icon: <StopOutlined/>,\r\n group: {\r\n ID: GroupType.OMITTED_GROUPS,\r\n Name: \"\",\r\n DisplayName: \"\",\r\n Type: 0,\r\n RoundingPlaces: 0,\r\n RoundingType: 0,\r\n }\r\n },\r\n ... !hideVectors ? [{\r\n key: GroupType.OMITTED_VECTORS,\r\n title: i18n(\"Omitted Vectors\"),\r\n isLeaf: false,\r\n icon: <CloseCircleOutlined/>,\r\n group: {\r\n ID: GroupType.OMITTED_VECTORS,\r\n Name: \"\",\r\n DisplayName: \"\",\r\n Type: 0,\r\n RoundingPlaces: 0,\r\n RoundingType: 0,\r\n }\r\n }] : []\r\n ];\r\n } else {\r\n initialData = [\r\n {\r\n key: ScenarioType.SCENARIOS,\r\n title: i18n(\"Scenarios\"),\r\n isLeaf: false,\r\n icon: <CheckCircleOutlined/>,\r\n scenario: {\r\n ID: ScenarioType.SCENARIOS,\r\n Name: \"\",\r\n DisplayName: \"\",\r\n Type: 0,\r\n RoundingPlaces: 0,\r\n RoundingType: 0,\r\n }\r\n },\r\n {\r\n key: ScenarioType.OMITTED_SCENARIOS,\r\n title: i18n(\"Omitted Scenarios\"),\r\n isLeaf: false,\r\n icon: <StopOutlined/>,\r\n scenario: {\r\n ID: ScenarioType.OMITTED_SCENARIOS,\r\n Name: \"\",\r\n DisplayName: \"\",\r\n Type: 0,\r\n RoundingPlaces: 0,\r\n RoundingType: 0,\r\n }\r\n },\r\n ]\r\n }\r\n } else {\r\n if (type === TreeViewType.GROUP) {\r\n const res = await api.getGroupChildren();\r\n\r\n initialData = convertGroups(res.items, undefined);\r\n } else {\r\n const res = await api.getScenarioChildren();\r\n\r\n initialData = convertScenarios(res.items, undefined);\r\n }\r\n }\r\n\r\n setTreeData(initialData);\r\n } catch (e) {\r\n console.warn(\"Failed to load tree data\", e);\r\n } finally {\r\n setLoadingKey(undefined);\r\n }\r\n }\r\n\r\n initLoad();\r\n }, [api, type, showOmitted, convertGroups, convertScenarios, hideVectors]);\r\n\r\n\r\n const titleRenderer = useCallback((node: DataNode) => {\r\n if (node.key === loadingKey) {\r\n return <Typography.Link><LoadingOutlined />{i18n(\"Loading\")}...</Typography.Link>\r\n }\r\n\r\n return node.title as React.ReactNode;\r\n }, [loadingKey]);\r\n\r\n const allowDrop: AllowDropType = useCallback(({dropNode, dropPosition}) => {\r\n if (dropPosition === 0) {\r\n if (dropNode.isLeaf || dropNode.vector) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }, []);\r\n\r\n const onDrop: DropEventType = useCallback((e) => {\r\n console.log(e);\r\n }, []);\r\n\r\n const onDoubleClick: DoubleClickEventType = useCallback((_e, node) => {\r\n const type = getType(node);\r\n\r\n if (type === undefined || type.id < 0) {\r\n return;\r\n }\r\n\r\n if (node.vector && type.type === IdType.VECTOR && !disableVectorSelection) {\r\n onItemDoubleClick?.(type, node.vector);\r\n setSelectedKeys([node.key]);\r\n } else if (node.group && type.type === IdType.GROUP && !disableBranchSelection) {\r\n onItemDoubleClick?.(type, node.group);\r\n setSelectedKeys([node.key]);\r\n } else if (node.scenario && type.type === IdType.SCENARIO && !disableBranchSelection) {\r\n onItemDoubleClick?.(type, node.scenario);\r\n setSelectedKeys([node.key]);\r\n }\r\n }, [disableBranchSelection, disableVectorSelection, onItemDoubleClick]);\r\n\r\n const getMenuItems = useCallback((node: DataNode): MenuProps['items'] => {\r\n if (typeof node.key === \"number\" && node.key < 0) {\r\n return [];\r\n }\r\n\r\n const result: MenuProps['items'] = [\r\n {key: ActionTypes.EXPORT_TO_XML, label: i18n(\"Export to XML\")},\r\n ];\r\n\r\n if (node.vector) {\r\n result.push(...[\r\n {key: ActionTypes.INCLUDE_TO_SCENARIO, label: i18n(\"Include vector to scenario\")},\r\n {key: ActionTypes.INCLUDE_TO_GROUP, label: i18n(\"Include vector to group\")},\r\n ]);\r\n }\r\n if (node.group) {\r\n result.push(...[\r\n {key: ActionTypes.IMPORT_FROM_XML, label: i18n(\"Import from XML\")},\r\n {key: ActionTypes.INCLUDE_TO_GROUP, label: i18n(\"Include vector to group\")},\r\n ]);\r\n }\r\n if (node.scenario) {\r\n result.push(...[\r\n {key: ActionTypes.IMPORT_FROM_XML, label: i18n(\"Import from XML\")},\r\n {key: ActionTypes.INCLUDE_TO_SCENARIO, label: i18n(\"Include vector to scenario\")},\r\n ]);\r\n }\r\n\r\n return result;\r\n }, []);\r\n\r\n const onRightClick: OnRightClickEventType = useCallback(({node}) => {\r\n setRightClickedNode(node);\r\n }, []);\r\n\r\n const handleContextMenuItemClicked = useCallback(async ({key}: {key: string}) => {\r\n const type = getType(rightClickedNode);\r\n\r\n if (type === undefined) {\r\n return;\r\n }\r\n\r\n switch (key) {\r\n case ActionTypes.EXPORT_TO_XML: {\r\n let data: TypedData | undefined = undefined;\r\n\r\n switch (type.type) {\r\n case IdType.VECTOR: {\r\n const result = await api.loadVectorData(type.id);\r\n if (!result) {\r\n return;\r\n }\r\n data = {type: type.type, data: result};\r\n break;\r\n }\r\n case IdType.GROUP: {\r\n const result = await api.loadGroupData(type.id);\r\n if (!result) {\r\n return;\r\n }\r\n data = {type: type.type, data: result};\r\n break;\r\n }\r\n case IdType.SCENARIO: {\r\n const result = await api.loadScenarioData(type.id);\r\n if (!result) {\r\n return;\r\n }\r\n data = {type: type.type, data: result};\r\n break;\r\n }\r\n case IdType.SET:\r\n return;\r\n }\r\n\r\n triggerExportToXML(data);\r\n return;\r\n }\r\n case ActionTypes.IMPORT_FROM_XML: {\r\n switch (type.type) {\r\n case IdType.GROUP: {\r\n const result = await api.loadGroupData(type.id);\r\n if (!result) {\r\n return;\r\n }\r\n\r\n triggerImportToXML({type: type.type, data: result});\r\n break;\r\n }\r\n case IdType.SCENARIO: {\r\n const result = await api.loadScenarioData(type.id);\r\n if (!result) {\r\n return;\r\n }\r\n\r\n triggerImportToXML({type: type.type, data: result});\r\n break;\r\n }\r\n }\r\n\r\n return;\r\n }\r\n case ActionTypes.INCLUDE_TO_SCENARIO:\r\n triggerIncludeToScenario(type);\r\n return;\r\n case ActionTypes.INCLUDE_TO_GROUP:\r\n triggerIncludeToGroup(type);\r\n return;\r\n }\r\n }, [api, rightClickedNode, triggerExportToXML, triggerImportToXML, triggerIncludeToGroup, triggerIncludeToScenario]);\r\n\r\n return (\r\n <Dropdown\r\n menu={{\r\n items: (rightClickedNode && !hideContextMenu) ? getMenuItems(rightClickedNode): [],\r\n onClick: handleContextMenuItemClicked,\r\n }}\r\n trigger={['contextMenu']}\r\n >\r\n <div ref={divRef} className={styles.baseLayout}>\r\n <div className={styles.absoluteLayout}>\r\n <Tree<DataNode>\r\n blockNode\r\n showLine\r\n showIcon\r\n draggable={allowDrag}\r\n switcherIcon={<DownOutlined/>}\r\n height={height}\r\n loadData={onLoadData}\r\n onRightClick={onRightClick}\r\n onExpand={setExpandedKeys}\r\n onDoubleClick={onDoubleClick}\r\n onDrop={onDrop}\r\n expandedKeys={expandedKeys}\r\n selectedKeys={selectedKeys}\r\n titleRender={titleRenderer}\r\n treeData={treeData}\r\n allowDrop={allowDrop}\r\n />\r\n {renderActionDialogs()}\r\n </div>\r\n </div>\r\n </Dropdown>\r\n )\r\n}\r\n\r\nconst getType = (node: DataNode | undefined): TypedIndex | undefined => {\r\n let type: IdType | undefined = undefined;\r\n let id: number | undefined = undefined;\r\n\r\n if (node?.vector) {\r\n type = IdType.VECTOR;\r\n id = node.vector.ID;\r\n }\r\n if (node?.group) {\r\n type = IdType.GROUP;\r\n id = node.group.ID;\r\n }\r\n if (node?.scenario) {\r\n type = IdType.SCENARIO;\r\n id = node.scenario.ID;\r\n }\r\n\r\n if (type === undefined || id === undefined) {\r\n return undefined;\r\n }\r\n\r\n return {type, id};\r\n}\r\n\r\nconst renderShowMoreTitle = (amount: number, total: number, onClick: () => void) => (\r\n <Typography.Link\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n onClick();\r\n }}\r\n >\r\n {i18n(\"Show %{n} more (of %{o})\", {n: String(amount), o: String(total)})}\r\n </Typography.Link>\r\n);\r\n\r\nasync function loadVectors(api: EdaManagerApi, data: DataNode, id: number, nodes: DataNode[], vectors: TreeItemsResult, convertVectors: (vectors: TreeItem[], parentId: number | undefined) => DataNode[],\r\n onClick: (data: DataNode, key: string) => void) {\r\n const nextPage = data.vectorOffset ? data.vectorOffset.page + 1 : 1;\r\n const currentTotal = vectors.totalCount ?? 0;\r\n const loadedSoFar = (nextPage - 1) * api.pageSize + vectors.items.length;\r\n const hasMore = loadedSoFar < currentTotal;\r\n const leftCount = currentTotal - loadedSoFar;\r\n const amount = leftCount > api.pageSize ? api.pageSize : leftCount;\r\n\r\n nodes.push(...convertVectors(vectors.items, id));\r\n\r\n if (data.vectorOffset === undefined) {\r\n data.vectorOffset = {\r\n done: !hasMore,\r\n page: 1,\r\n total: currentTotal,\r\n }\r\n } else {\r\n data.vectorOffset.done = !hasMore;\r\n data.vectorOffset.page = nextPage;\r\n data.vectorOffset.total = currentTotal;\r\n }\r\n\r\n if (!data.vectorOffset.done) {\r\n const key = `${id}_show_more`;\r\n\r\n nodes.push({\r\n key: key,\r\n title: renderShowMoreTitle(amount, data.vectorOffset.total, () => onClick(data, key)),\r\n isLeaf: true,\r\n });\r\n }\r\n}\r\n\r\n\r\nasync function loadGroups(api: EdaManagerApi, hideVectors: boolean | undefined, data: DataNode, id: number, nodes: DataNode[], convertGroups: (groups: TreeItem[], parentId: number) => DataNode[],\r\n convertVectors: (vectors: TreeItem[], parentId: number | undefined) => DataNode[], onClick: (data: DataNode, key: string) => void) {\r\n const isSpecialId = id < 0;\r\n const requestedId = isSpecialId ? undefined : id;\r\n const showOmittedGroups = isSpecialId && id === GroupType.OMITTED_GROUPS;\r\n const showOmittedVectors = isSpecialId && id === GroupType.OMITTED_VECTORS;\r\n\r\n if (!data.groupOffset?.done && !showOmittedVectors) {\r\n const nextPage = data.groupOffset ? data.groupOffset.page + 1 : 1;\r\n const groups = await api.getGroupChildren(requestedId, nextPage, showOmittedGroups);\r\n const currentTotal = groups.totalCount ?? 0;\r\n const loadedSoFar = (nextPage - 1) * api.pageSize + groups.items.length;\r\n const hasMore = loadedSoFar < currentTotal;\r\n const leftCount = currentTotal - loadedSoFar;\r\n const amount = leftCount > api.pageSize ? api.pageSize : leftCount;\r\n\r\n nodes.push(...convertGroups(groups.items, id));\r\n\r\n if (data.groupOffset === undefined) {\r\n data.groupOffset = {\r\n done: !hasMore,\r\n page: 1,\r\n total: currentTotal,\r\n }\r\n } else {\r\n data.groupOffset.done = !hasMore;\r\n data.groupOffset.page = nextPage;\r\n data.groupOffset.total = currentTotal;\r\n }\r\n\r\n if (!data.groupOffset.done) {\r\n const key = `${id}_show_more`;\r\n\r\n nodes.push({\r\n key: key,\r\n title: renderShowMoreTitle(amount, data.groupOffset.total, () => onClick(data, key)),\r\n isLeaf: true,\r\n });\r\n }\r\n }\r\n\r\n if (!hideVectors && (data.groupOffset?.done || showOmittedVectors) && !data.vectorOffset?.done && (!isSpecialId || showOmittedVectors)) {\r\n const currentPage = data.vectorOffset ? data.vectorOffset.page + 1 : 1;\r\n const vectors = await api.getGroupVectors(id, currentPage, showOmittedVectors);\r\n\r\n await loadVectors(api, data, id, nodes, vectors, convertVectors, onClick);\r\n }\r\n}\r\n\r\n\r\nasync function loadScenarios(api: EdaManagerApi, hideVectors: boolean | undefined, data: DataNode, id: number, nodes: DataNode[], convertScenarios: (groups: TreeItem[], parentId: number) => DataNode[],\r\n convertVectors: (vectors: TreeItem[], parentId: number | undefined) => DataNode[], onClick: (data: DataNode, key: string) => void) {\r\n const isSpecialId = id < 0;\r\n const requestedId = isSpecialId ? undefined : id;\r\n const showOmittedGroups = isSpecialId && id === ScenarioType.OMITTED_SCENARIOS;\r\n\r\n if (!data.scenarioOffset?.done) {\r\n const nextPage = data.scenarioOffset ? data.scenarioOffset.page + 1 : 1;\r\n const scenarios = await api.getScenarioChildren(requestedId, nextPage, showOmittedGroups);\r\n const currentTotal = scenarios.totalCount ?? 0;\r\n const loadedSoFar = (nextPage - 1) * api.pageSize + scenarios.items.length;\r\n const hasMore = loadedSoFar < currentTotal;\r\n const leftCount = currentTotal - loadedSoFar;\r\n const amount = leftCount > api.pageSize ? api.pageSize : leftCount;\r\n\r\n nodes.push(...convertScenarios(scenarios.items, id));\r\n\r\n if (data.scenarioOffset === undefined) {\r\n data.scenarioOffset = {\r\n done: !hasMore,\r\n page: 1,\r\n total: currentTotal,\r\n }\r\n } else {\r\n data.scenarioOffset.done = !hasMore;\r\n data.scenarioOffset.page = nextPage;\r\n data.scenarioOffset.total = currentTotal;\r\n }\r\n\r\n if (!data.scenarioOffset.done) {\r\n const key = `${id}_show_more`;\r\n\r\n nodes.push({\r\n key: key,\r\n title: renderShowMoreTitle(amount, data.scenarioOffset.total, () => onClick(data, key)),\r\n isLeaf: true,\r\n });\r\n }\r\n }\r\n\r\n if (!hideVectors && data.scenarioOffset.done && !data.vectorOffset?.done && !isSpecialId) {\r\n const currentPage = data.vectorOffset ? data.vectorOffset.page + 1 : 1;\r\n const vectors = await api.getScenarioVectors(id, currentPage, undefined, true);\r\n\r\n await loadVectors(api, data, id, nodes, vectors, convertVectors, onClick);\r\n }\r\n}"]}
|
|
@@ -75,7 +75,16 @@ export declare enum EdaPeriodValueType {
|
|
|
75
75
|
CoefficientMul = 3,
|
|
76
76
|
Interpolation = 4
|
|
77
77
|
}
|
|
78
|
-
export
|
|
78
|
+
export declare enum EdaValueType {
|
|
79
|
+
Boolean = 1,
|
|
80
|
+
Integer = 2,
|
|
81
|
+
Real = 3
|
|
82
|
+
}
|
|
83
|
+
export interface UnsavedTreeItem extends Omit<TreeItem, 'ID'> {
|
|
84
|
+
ValueType: EdaValueType;
|
|
85
|
+
UserName?: string;
|
|
86
|
+
}
|
|
87
|
+
export type ItemType = (UnsavedTreeItem | number)[] | TypedIndex;
|
|
79
88
|
export type TypedIndex = {
|
|
80
89
|
type: IdType;
|
|
81
90
|
id: number;
|
|
@@ -91,5 +100,5 @@ export type TypedData = {
|
|
|
91
100
|
data: ScenarioData;
|
|
92
101
|
} | {
|
|
93
102
|
type: IdType.SET;
|
|
94
|
-
data: (
|
|
103
|
+
data: (UnsavedTreeItem | number)[];
|
|
95
104
|
};
|
|
@@ -84,4 +84,10 @@ export var EdaPeriodValueType;
|
|
|
84
84
|
EdaPeriodValueType[EdaPeriodValueType["CoefficientMul"] = 3] = "CoefficientMul";
|
|
85
85
|
EdaPeriodValueType[EdaPeriodValueType["Interpolation"] = 4] = "Interpolation";
|
|
86
86
|
})(EdaPeriodValueType || (EdaPeriodValueType = {}));
|
|
87
|
+
export var EdaValueType;
|
|
88
|
+
(function (EdaValueType) {
|
|
89
|
+
EdaValueType[EdaValueType["Boolean"] = 1] = "Boolean";
|
|
90
|
+
EdaValueType[EdaValueType["Integer"] = 2] = "Integer";
|
|
91
|
+
EdaValueType[EdaValueType["Real"] = 3] = "Real";
|
|
92
|
+
})(EdaValueType || (EdaValueType = {}));
|
|
87
93
|
//# sourceMappingURL=edaTypes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edaTypes.js","sourceRoot":"","sources":["../../../../../../coreui/components/edaManagerComponent/constants/edaTypes.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,aAeX;AAfD,WAAY,aAAa;IACrB,qEAAkB,CAAA;IAClB,iDAAI,CAAA;IACJ,+CAAG,CAAA;IACH,+DAAW,CAAA;IACX,yDAAQ,CAAA;IACR,6EAAkB,CAAA;IAClB,yDAAQ,CAAA;IACR,uDAAO,CAAA;IACP,qDAAM,CAAA;IACN,8DAAU,CAAA;IACV,kDAAI,CAAA;IACJ,0DAAQ,CAAA;IACR,kEAAY,CAAA;IACZ,8DAAU,CAAA;AACd,CAAC,EAfW,aAAa,KAAb,aAAa,QAexB;AAED,MAAM,CAAN,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IACzB,2DAAS,CAAA;IACT,iEAAQ,CAAA;AACZ,CAAC,EAHW,iBAAiB,KAAjB,iBAAiB,QAG5B;AAED,MAAM,CAAN,IAAY,eAKX;AALD,WAAY,eAAe;IACvB,iEAAc,CAAA;IACd,yEAAc,CAAA;IACd,2DAAO,CAAA;IACP,uDAAK,CAAA;AACT,CAAC,EALW,eAAe,KAAf,eAAe,QAK1B;AAED,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACrB,qDAAU,CAAA;IACV,uDAAO,CAAA;AACX,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB;AAED,MAAM,CAAN,IAAY,oBAKX;AALD,WAAY,oBAAoB;IAC5B,iEAAS,CAAA;IACT,iEAAK,CAAA;IACL,iEAAK,CAAA;IACL,iEAAK,CAAA;AACT,CAAC,EALW,oBAAoB,KAApB,oBAAoB,QAK/B;AAED,MAAM,CAAN,IAAY,eAYX;AAZD,WAAY,eAAe;IACvB,4DAAY,CAAA;IACZ,2DAAW,CAAA;IACX,2EAAoB,CAAA;IACpB,wDAAW,CAAA;IACX,uDAAW,CAAA;IACX,0DAAgB,CAAA;IAChB,6DAAkB,CAAA;IAClB,iEAAwB,CAAA;IACxB,oEAAyB,CAAA;IACzB,4DAAyB,CAAA;IACzB,gEAA2B,CAAA;AAC/B,CAAC,EAZW,eAAe,KAAf,eAAe,QAY1B;AAED,MAAM,CAAN,IAAkB,MAKjB;AALD,WAAkB,MAAM;IACpB,uCAAM,CAAA;IACN,qCAAK,CAAA;IACL,2CAAQ,CAAA;IACR,iCAAG,CAAA;AACP,CAAC,EALiB,MAAM,KAAN,MAAM,QAKvB;AAED,MAAM,CAAN,IAAY,QAOX;AAPD,WAAY,QAAQ;IAChB,2CAAU,CAAA;IACV,yCAAK,CAAA;IACL,2CAAM,CAAA;IACN,6CAAO,CAAA;IACP,2CAAM,CAAA;IACN,yDAAa,CAAA;AACjB,CAAC,EAPW,QAAQ,KAAR,QAAQ,QAOnB;AAED,MAAM,CAAN,IAAY,aAMX;AAND,WAAY,aAAa;IACrB,iDAAQ,CAAA;IACR,iDAAI,CAAA;IACJ,iDAAI,CAAA;IACJ,+CAAG,CAAA;IACH,yDAAQ,CAAA;AACZ,CAAC,EANW,aAAa,KAAb,aAAa,QAMxB;AAED,MAAM,CAAN,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC1B,6DAAS,CAAA;IACT,iFAAe,CAAA;IACf,+EAAc,CAAA;IACd,6EAAa,CAAA;AACjB,CAAC,EALW,kBAAkB,KAAlB,kBAAkB,QAK7B","sourcesContent":["import {GroupData, ScenarioData, TreeItem, VectorData} from \"../../../../api/eda/edaManagerApi\";\r\n\r\nexport enum EdaVectorType {\r\n FifteenMinutes = 1,\r\n Hour,\r\n Day,\r\n Descriptive,\r\n Interval,\r\n FifteenMinutesCalc,\r\n HourCalc,\r\n DayCalc,\r\n Change,\r\n ChangeCalc,\r\n Pair,\r\n Periodic,\r\n PeriodicCalc,\r\n Functional,\r\n}\r\n\r\nexport enum EdaValueClassType {\r\n Value = 1,\r\n Integral,\r\n}\r\n\r\nexport enum EdaRoundingType {\r\n NoRounding = 1,\r\n RoundToNearest,\r\n Ceiling,\r\n Floor,\r\n}\r\n\r\nexport enum EdaAccessType {\r\n Public = 1,\r\n Private,\r\n}\r\n\r\nexport enum EdaUserInputFlagType {\r\n FlagA = 0,\r\n FlagB,\r\n FlagC,\r\n FlagD\r\n}\r\n\r\nexport enum EdaSamplingType {\r\n Changes = -1,\r\n Default = 0,\r\n FifteenMinutes = 900,\r\n Hour = 3600,\r\n Day = 86400,\r\n Week = 7 * 86400,\r\n Month = 30 * 86400,\r\n Quarter = 3 * 30 * 86400,\r\n HalfYear = 6 * 30 * 86400,\r\n Year = 4 * 3 * 30 * 86400,\r\n Season = 6 * 30 * 86400 + 1\r\n}\r\n\r\nexport const enum IdType {\r\n VECTOR,\r\n GROUP,\r\n SCENARIO,\r\n SET,\r\n}\r\n\r\nexport enum StepType {\r\n Hourly = 0,\r\n Daily,\r\n Weekly,\r\n Monthly,\r\n Yearly,\r\n WholeInterval,\r\n}\r\n\r\nexport enum EdaPeriodType {\r\n Base = 1,\r\n Year,\r\n Week,\r\n Day,\r\n Interval,\r\n}\r\n\r\nexport enum EdaPeriodValueType {\r\n Value = 1,\r\n CoefficientPlus,\r\n CoefficientMul,\r\n Interpolation\r\n}\r\n\r\nexport type ItemType = (
|
|
1
|
+
{"version":3,"file":"edaTypes.js","sourceRoot":"","sources":["../../../../../../coreui/components/edaManagerComponent/constants/edaTypes.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,aAeX;AAfD,WAAY,aAAa;IACrB,qEAAkB,CAAA;IAClB,iDAAI,CAAA;IACJ,+CAAG,CAAA;IACH,+DAAW,CAAA;IACX,yDAAQ,CAAA;IACR,6EAAkB,CAAA;IAClB,yDAAQ,CAAA;IACR,uDAAO,CAAA;IACP,qDAAM,CAAA;IACN,8DAAU,CAAA;IACV,kDAAI,CAAA;IACJ,0DAAQ,CAAA;IACR,kEAAY,CAAA;IACZ,8DAAU,CAAA;AACd,CAAC,EAfW,aAAa,KAAb,aAAa,QAexB;AAED,MAAM,CAAN,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IACzB,2DAAS,CAAA;IACT,iEAAQ,CAAA;AACZ,CAAC,EAHW,iBAAiB,KAAjB,iBAAiB,QAG5B;AAED,MAAM,CAAN,IAAY,eAKX;AALD,WAAY,eAAe;IACvB,iEAAc,CAAA;IACd,yEAAc,CAAA;IACd,2DAAO,CAAA;IACP,uDAAK,CAAA;AACT,CAAC,EALW,eAAe,KAAf,eAAe,QAK1B;AAED,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACrB,qDAAU,CAAA;IACV,uDAAO,CAAA;AACX,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB;AAED,MAAM,CAAN,IAAY,oBAKX;AALD,WAAY,oBAAoB;IAC5B,iEAAS,CAAA;IACT,iEAAK,CAAA;IACL,iEAAK,CAAA;IACL,iEAAK,CAAA;AACT,CAAC,EALW,oBAAoB,KAApB,oBAAoB,QAK/B;AAED,MAAM,CAAN,IAAY,eAYX;AAZD,WAAY,eAAe;IACvB,4DAAY,CAAA;IACZ,2DAAW,CAAA;IACX,2EAAoB,CAAA;IACpB,wDAAW,CAAA;IACX,uDAAW,CAAA;IACX,0DAAgB,CAAA;IAChB,6DAAkB,CAAA;IAClB,iEAAwB,CAAA;IACxB,oEAAyB,CAAA;IACzB,4DAAyB,CAAA;IACzB,gEAA2B,CAAA;AAC/B,CAAC,EAZW,eAAe,KAAf,eAAe,QAY1B;AAED,MAAM,CAAN,IAAkB,MAKjB;AALD,WAAkB,MAAM;IACpB,uCAAM,CAAA;IACN,qCAAK,CAAA;IACL,2CAAQ,CAAA;IACR,iCAAG,CAAA;AACP,CAAC,EALiB,MAAM,KAAN,MAAM,QAKvB;AAED,MAAM,CAAN,IAAY,QAOX;AAPD,WAAY,QAAQ;IAChB,2CAAU,CAAA;IACV,yCAAK,CAAA;IACL,2CAAM,CAAA;IACN,6CAAO,CAAA;IACP,2CAAM,CAAA;IACN,yDAAa,CAAA;AACjB,CAAC,EAPW,QAAQ,KAAR,QAAQ,QAOnB;AAED,MAAM,CAAN,IAAY,aAMX;AAND,WAAY,aAAa;IACrB,iDAAQ,CAAA;IACR,iDAAI,CAAA;IACJ,iDAAI,CAAA;IACJ,+CAAG,CAAA;IACH,yDAAQ,CAAA;AACZ,CAAC,EANW,aAAa,KAAb,aAAa,QAMxB;AAED,MAAM,CAAN,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC1B,6DAAS,CAAA;IACT,iFAAe,CAAA;IACf,+EAAc,CAAA;IACd,6EAAa,CAAA;AACjB,CAAC,EALW,kBAAkB,KAAlB,kBAAkB,QAK7B;AAED,MAAM,CAAN,IAAY,YAIX;AAJD,WAAY,YAAY;IACpB,qDAAW,CAAA;IACX,qDAAO,CAAA;IACP,+CAAI,CAAA;AACR,CAAC,EAJW,YAAY,KAAZ,YAAY,QAIvB","sourcesContent":["import {GroupData, ScenarioData, TreeItem, VectorData} from \"../../../../api/eda/edaManagerApi\";\r\n\r\nexport enum EdaVectorType {\r\n FifteenMinutes = 1,\r\n Hour,\r\n Day,\r\n Descriptive,\r\n Interval,\r\n FifteenMinutesCalc,\r\n HourCalc,\r\n DayCalc,\r\n Change,\r\n ChangeCalc,\r\n Pair,\r\n Periodic,\r\n PeriodicCalc,\r\n Functional,\r\n}\r\n\r\nexport enum EdaValueClassType {\r\n Value = 1,\r\n Integral,\r\n}\r\n\r\nexport enum EdaRoundingType {\r\n NoRounding = 1,\r\n RoundToNearest,\r\n Ceiling,\r\n Floor,\r\n}\r\n\r\nexport enum EdaAccessType {\r\n Public = 1,\r\n Private,\r\n}\r\n\r\nexport enum EdaUserInputFlagType {\r\n FlagA = 0,\r\n FlagB,\r\n FlagC,\r\n FlagD\r\n}\r\n\r\nexport enum EdaSamplingType {\r\n Changes = -1,\r\n Default = 0,\r\n FifteenMinutes = 900,\r\n Hour = 3600,\r\n Day = 86400,\r\n Week = 7 * 86400,\r\n Month = 30 * 86400,\r\n Quarter = 3 * 30 * 86400,\r\n HalfYear = 6 * 30 * 86400,\r\n Year = 4 * 3 * 30 * 86400,\r\n Season = 6 * 30 * 86400 + 1\r\n}\r\n\r\nexport const enum IdType {\r\n VECTOR,\r\n GROUP,\r\n SCENARIO,\r\n SET,\r\n}\r\n\r\nexport enum StepType {\r\n Hourly = 0,\r\n Daily,\r\n Weekly,\r\n Monthly,\r\n Yearly,\r\n WholeInterval,\r\n}\r\n\r\nexport enum EdaPeriodType {\r\n Base = 1,\r\n Year,\r\n Week,\r\n Day,\r\n Interval,\r\n}\r\n\r\nexport enum EdaPeriodValueType {\r\n Value = 1,\r\n CoefficientPlus,\r\n CoefficientMul,\r\n Interpolation\r\n}\r\n\r\nexport enum EdaValueType {\r\n Boolean = 1,\r\n Integer,\r\n Real,\r\n}\r\n\r\nexport interface UnsavedTreeItem extends Omit<TreeItem, 'ID'> {\r\n ValueType: EdaValueType\r\n UserName?: string\r\n}\r\n\r\nexport type ItemType = (UnsavedTreeItem | number)[] | TypedIndex\r\n\r\nexport type TypedIndex = { type: IdType, id: number }\r\n\r\nexport type TypedData =\r\n | {type: IdType.VECTOR; data: VectorData}\r\n | {type: IdType.GROUP; data: GroupData}\r\n | {type: IdType.SCENARIO; data: ScenarioData}\r\n | {type: IdType.SET, data: (UnsavedTreeItem | number)[]}"]}
|
|
@@ -15,12 +15,13 @@ export interface EdaDetailConfiguration {
|
|
|
15
15
|
showTimeWindow?: boolean;
|
|
16
16
|
}
|
|
17
17
|
export interface EdaConfiguration {
|
|
18
|
-
table
|
|
19
|
-
graph
|
|
20
|
-
detail
|
|
18
|
+
table: EdaTableConfiguration;
|
|
19
|
+
graph: EdaGraphConfiguration;
|
|
20
|
+
detail: EdaDetailConfiguration;
|
|
21
|
+
maxDecimalPlaces: number;
|
|
21
22
|
}
|
|
22
23
|
export declare const EdaConfigProvider: FC<{
|
|
23
|
-
config?: EdaConfiguration
|
|
24
|
+
config?: Partial<EdaConfiguration>;
|
|
24
25
|
children: ReactNode;
|
|
25
26
|
}>;
|
|
26
27
|
export declare const useEdaConfig: () => EdaConfiguration;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import React, { createContext, useContext, useMemo } from "react";
|
|
2
2
|
const defaultEdaConfig = {
|
|
3
|
+
table: {},
|
|
3
4
|
graph: {
|
|
4
5
|
showChartLegend: true,
|
|
5
6
|
},
|
|
6
7
|
detail: {
|
|
7
8
|
showTimeWindow: true,
|
|
8
|
-
}
|
|
9
|
+
},
|
|
10
|
+
maxDecimalPlaces: 7,
|
|
9
11
|
};
|
|
10
12
|
const EdaConfigContext = createContext(defaultEdaConfig);
|
|
11
13
|
export const EdaConfigProvider = ({ config, children }) => {
|
|
@@ -13,6 +15,7 @@ export const EdaConfigProvider = ({ config, children }) => {
|
|
|
13
15
|
table: { ...defaultEdaConfig.table, ...config?.table },
|
|
14
16
|
graph: { ...defaultEdaConfig.graph, ...config?.graph },
|
|
15
17
|
detail: { ...defaultEdaConfig.detail, ...config?.detail },
|
|
18
|
+
maxDecimalPlaces: config?.maxDecimalPlaces ?? defaultEdaConfig.maxDecimalPlaces,
|
|
16
19
|
}), [config]);
|
|
17
20
|
return React.createElement(EdaConfigContext.Provider, { value: value }, children);
|
|
18
21
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edaConfigContext.js","sourceRoot":"","sources":["../../../../../../coreui/components/edaManagerComponent/context/edaConfigContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAC,aAAa,EAAiB,UAAU,EAAE,OAAO,EAAC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"edaConfigContext.js","sourceRoot":"","sources":["../../../../../../coreui/components/edaManagerComponent/context/edaConfigContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAC,aAAa,EAAiB,UAAU,EAAE,OAAO,EAAC,MAAM,OAAO,CAAC;AAiC/E,MAAM,gBAAgB,GAAqB;IACvC,KAAK,EAAE,EAEN;IACD,KAAK,EAAE;QACH,eAAe,EAAE,IAAI;KACxB;IACD,MAAM,EAAE;QACJ,cAAc,EAAE,IAAI;KACvB;IACD,gBAAgB,EAAE,CAAC;CACtB,CAAA;AAED,MAAM,gBAAgB,GAAG,aAAa,CAAmB,gBAAgB,CAAC,CAAC;AAE3E,MAAM,CAAC,MAAM,iBAAiB,GAAmE,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;IACrH,MAAM,KAAK,GAAqB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3C,KAAK,EAAE,EAAC,GAAG,gBAAgB,CAAC,KAAK,EAAE,GAAG,MAAM,EAAE,KAAK,EAAC;QACpD,KAAK,EAAE,EAAC,GAAG,gBAAgB,CAAC,KAAK,EAAE,GAAG,MAAM,EAAE,KAAK,EAAC;QACpD,MAAM,EAAE,EAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,MAAM,EAAC;QACvD,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,IAAI,gBAAgB,CAAC,gBAAgB;KAClF,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACd,OAAO,oBAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,IAAG,QAAQ,CAA6B,CAAC;AAC3F,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC","sourcesContent":["import React, {createContext, FC, ReactNode, useContext, useMemo} from \"react\";\r\nimport {DataGridColDef} from \"d2coreui/components/grid/dataGrid\";\r\n\r\n\r\nexport interface EdaTableConfiguration {\r\n detailTable?: {\r\n modifyColumns?: (colDef: DataGridColDef[]) => DataGridColDef[]\r\n }\r\n}\r\n\r\nexport interface EdaGraphConfiguration {\r\n // Default displayed chart legend as table\r\n showChartLegend?: boolean\r\n graphTable?: {\r\n modifyColumns: (colDef: DataGridColDef[]) => DataGridColDef[]\r\n }\r\n}\r\n\r\nexport interface EdaDetailConfiguration {\r\n // Displaying of time window selector in Table and Graph panel\r\n showTimeWindow?: boolean\r\n}\r\n\r\nexport interface EdaConfiguration {\r\n // Table-specific configuration\r\n table: EdaTableConfiguration\r\n // Graph-specific configuration\r\n graph: EdaGraphConfiguration\r\n // Detail-specific configuration\r\n detail: EdaDetailConfiguration\r\n maxDecimalPlaces: number\r\n}\r\n\r\nconst defaultEdaConfig: EdaConfiguration = {\r\n table: {\r\n\r\n },\r\n graph: {\r\n showChartLegend: true,\r\n },\r\n detail: {\r\n showTimeWindow: true,\r\n },\r\n maxDecimalPlaces: 7,\r\n}\r\n\r\nconst EdaConfigContext = createContext<EdaConfiguration>(defaultEdaConfig);\r\n\r\nexport const EdaConfigProvider: FC<{ config?: Partial<EdaConfiguration>, children: ReactNode}> = ({config, children }) => {\r\n const value: EdaConfiguration = useMemo(() => ({\r\n table: {...defaultEdaConfig.table, ...config?.table},\r\n graph: {...defaultEdaConfig.graph, ...config?.graph},\r\n detail: {...defaultEdaConfig.detail, ...config?.detail},\r\n maxDecimalPlaces: config?.maxDecimalPlaces ?? defaultEdaConfig.maxDecimalPlaces,\r\n }), [config]);\r\n return <EdaConfigContext.Provider value={value}>{children}</EdaConfigContext.Provider>;\r\n}\r\n\r\nexport const useEdaConfig = () => useContext(EdaConfigContext);"]}
|