Skip to content

Commit 182a865

Browse files
Implement autoExpandLevel for EntryModel trees
Add support for the autoExpandLevel flag to automatically collapse tree nodes beyond the specified depth level. When autoExpandLevel is set, nodes at depths greater than the specified level are automatically collapsed in the tree view. Related to eclipse-cdt-cloud/tsp-typescript-client#130 Signed-off-by: Will Yang <[email protected]>
1 parent 6c8ea91 commit 182a865

File tree

7 files changed

+51
-8
lines changed

7 files changed

+51
-8
lines changed

packages/base/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"src"
1717
],
1818
"dependencies": {
19-
"tsp-typescript-client": "^0.6.0"
19+
"tsp-typescript-client": "^0.7.0"
2020
},
2121
"devDependencies": {
2222
"@typescript-eslint/eslint-plugin": "^3.4.0",

packages/react-components/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
"react-virtualized": "^9.21.0",
3737
"timeline-chart": "^0.4.1",
3838
"traceviewer-base": "0.8.0",
39-
"tsp-typescript-client": "^0.6.0"
39+
"tsp-typescript-client": "^0.7.0"
4040
},
4141
"devDependencies": {
4242
"@testing-library/react": "^15.0.6",

packages/react-components/src/components/abstract-xy-output-component.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import { ChartOptions } from 'chart.js';
2424
import { Line, Scatter } from 'react-chartjs-2';
2525
import { debounce } from 'lodash';
2626
import { isEqual } from 'lodash';
27+
import { getCollapsedNodesFromAutoExpandLevel, listToTree } from './utils/filter-tree/utils';
2728

2829
export const ZOOM_IN_RATE = 0.8;
2930
export const ZOOM_OUT_RATE = 1.25;
@@ -303,11 +304,16 @@ export abstract class AbstractXYOutputComponent<
303304
columns.push({ title: 'Name', sortable: true });
304305
}
305306
const checkedSeries = this.getAllCheckedIds(treeResponse.model.entries);
307+
const autoCollapsedNodes = getCollapsedNodesFromAutoExpandLevel(
308+
listToTree(treeResponse.model.entries, columns),
309+
treeResponse.model.autoExpandLevel
310+
);
306311
this.setState(
307312
{
308313
outputStatus: treeResponse.status,
309314
xyTree: treeResponse.model.entries,
310315
defaultOrderedIds: treeResponse.model.entries.map(entry => entry.id),
316+
collapsedNodes: autoCollapsedNodes,
311317
checkedSeries,
312318
columns
313319
},

packages/react-components/src/components/datatree-output-component.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { Entry } from 'tsp-typescript-client/lib/models/entry';
77
import { DataType } from 'tsp-typescript-client/lib/models/data-type';
88
import { ResponseStatus } from 'tsp-typescript-client/lib/models/response/responses';
99
import { EntryTree } from './utils/filter-tree/entry-tree';
10-
import { getAllExpandedNodeIds } from './utils/filter-tree/utils';
10+
import { getAllExpandedNodeIds, getCollapsedNodesFromAutoExpandLevel, listToTree } from './utils/filter-tree/utils';
1111
import { TreeNode } from './utils/filter-tree/tree-node';
1212
import ColumnHeader from './utils/filter-tree/column-header';
1313
import debounce from 'lodash.debounce';
@@ -73,10 +73,15 @@ export class DataTreeOutputComponent extends AbstractOutputComponent<AbstractOut
7373
} else {
7474
columns.push({ title: 'Name', sortable: true });
7575
}
76+
const autoCollapsedNodes = getCollapsedNodesFromAutoExpandLevel(
77+
listToTree(treeResponse.model.entries, columns),
78+
treeResponse.model.autoExpandLevel
79+
);
7680
this.setState({
7781
outputStatus: treeResponse.status,
7882
xyTree: treeResponse.model.entries,
7983
defaultOrderedIds: treeResponse.model.entries.map(entry => entry.id),
84+
collapsedNodes: autoCollapsedNodes,
8085
columns
8186
});
8287
} else {

packages/react-components/src/components/timegraph-output-component.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,13 @@ import { TspDataProvider } from './data-providers/tsp-data-provider';
2323
import { ReactTimeGraphContainer } from './utils/timegraph-container-component';
2424
import { OutputElementStyle } from 'tsp-typescript-client/lib/models/styles';
2525
import { EntryTree } from './utils/filter-tree/entry-tree';
26-
import { listToTree, getAllExpandedNodeIds, getIndexOfNode, validateNumArray } from './utils/filter-tree/utils';
26+
import {
27+
listToTree,
28+
getAllExpandedNodeIds,
29+
getIndexOfNode,
30+
validateNumArray,
31+
getCollapsedNodesFromAutoExpandLevel
32+
} from './utils/filter-tree/utils';
2733
import hash from 'traceviewer-base/lib/utils/value-hash';
2834
import ColumnHeader from './utils/filter-tree/column-header';
2935
import { TimeGraphAnnotationComponent } from 'timeline-chart/lib/components/time-graph-annotation';
@@ -316,11 +322,16 @@ export class TimegraphOutputComponent extends AbstractTreeOutputComponent<Timegr
316322
} else {
317323
columns.push({ title: '', sortable: true, resizable: true });
318324
}
325+
const autoCollapsedNodes = getCollapsedNodesFromAutoExpandLevel(
326+
listToTree(treeResponse.model.entries, columns),
327+
treeResponse.model.autoExpandLevel
328+
);
319329
this.setState(
320330
{
321331
outputStatus: treeResponse.status,
322332
timegraphTree: treeResponse.model.entries,
323333
defaultOrderedIds: treeResponse.model.entries.map(entry => entry.id),
334+
collapsedNodes: autoCollapsedNodes,
324335
columns
325336
},
326337
this.updateTotalHeight

packages/react-components/src/components/utils/filter-tree/utils.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,27 @@ export const listToTree = (list: Entry[], headers: ColumnHeader[]): TreeNode[] =
4747
return rootNodes;
4848
};
4949

50+
/**
51+
* Returns an array of node IDs that should be collapsed based on the auto-expand level.
52+
* Nodes at depths greater than or equal to the autoExpandLevel will be collapsed.
53+
* If autoExpandLevel is -1, no nodes are collapsed (all remain expanded).
54+
*/
55+
export const getCollapsedNodesFromAutoExpandLevel = (nodes: TreeNode[], autoExpandLevel = -1, depth = 0): number[] => {
56+
if (autoExpandLevel === -1) {
57+
return [];
58+
}
59+
const collapsedNodes: number[] = [];
60+
for (const node of nodes) {
61+
if (autoExpandLevel <= depth) {
62+
collapsedNodes.push(node.id);
63+
}
64+
if (node.children && node.children.length > 0) {
65+
collapsedNodes.push(...getCollapsedNodesFromAutoExpandLevel(node.children, autoExpandLevel, depth + 1));
66+
}
67+
}
68+
return collapsedNodes;
69+
};
70+
5071
export const getAllExpandedNodeIds = (nodes: TreeNode[], collapsedNodes: number[], emptyNodes?: number[]): number[] => {
5172
const visibleIds: number[] = [];
5273
nodes.forEach((node: TreeNode) => {

yarn.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13921,10 +13921,10 @@ tslib@^2.0.1, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.6
1392113921
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
1392213922
integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
1392313923

13924-
tsp-typescript-client@^0.6.0:
13925-
version "0.6.0"
13926-
resolved "https://registry.yarnpkg.com/tsp-typescript-client/-/tsp-typescript-client-0.6.0.tgz#59d53a76dcb7759f8f16eb9e798320a9a790b7b1"
13927-
integrity sha512-K6tl773Nq7lo2XAexHBtVDKiFGUlrwFbzKL6aZkf33iHRyAM80xBc0cAoXXTgsSLb3pBodLQRVzw8sBTGWGwOA==
13924+
tsp-typescript-client@^0.7.0:
13925+
version "0.7.0"
13926+
resolved "https://registry.yarnpkg.com/tsp-typescript-client/-/tsp-typescript-client-0.7.0.tgz#8565cffa802e0a92a83f1f212d94cc125ebc70b1"
13927+
integrity sha512-TsVv8gPiMBkx4bxowiZIkUirSPb2BmNLmXYKpvCdh/hImG0N1D1gioBo4YP9NN8A15lX9jW5iFl1xUk25YdXjw==
1392813928
dependencies:
1392913929
json-bigint sidorares/json-bigint#2c0a5f896d7888e68e5f4ae3c7ea5cd42fd54473
1393013930
node-fetch "^2.5.0"

0 commit comments

Comments
 (0)