Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | 1x 103x 103x 103x 103x 410x 377x 377x 10x 367x 33x 33x 410x 466x 466x 466x 4903x 4903x 1006x 4903x 89x | /**
* Copyright (c) Siemens 2016 - 2025
* SPDX-License-Identifier: MIT
*/
import { inject, Injectable } from '@angular/core';
import { TreeItem } from './si-tree-view.model';
import { SiTreeViewService } from './si-tree-view.service';
/**
* Provides the functionality to flatten the hierarchical tree structure into a flat one dimensional array; called flattenedTrees.
* The TreeViewComponent uses this flattened trees (the array) to bind the contained tree/list items to the GUI into a list.
* In addition the service provides the number of 'normal' list items and the number of group items.
* Important:
* The coupling to the TreeViewComponent is high, thus the service is provided only by the TreeViewComponent.
*/
@Injectable()
export class SiTreeViewConverterService {
/**
* The flattened tree array; filled upon calling the method 'fillFlattenedTree'
*
* @defaultValue []
*/
flattenedTrees: TreeItem[] = [];
/**
* The number of group items of the flattened tree.
*
* @defaultValue 0
*/
groupItemsCount = 0;
/**
* The total items count of the flattened tree.
*
* @defaultValue 0
*/
itemsTotal = 0;
private siTreeViewService = inject(SiTreeViewService);
/**
* Flattens the tree handed over as parameter.
* Takes the mode of the tree into consideration:
* In case of a flat tree: only the first level of the items parameter is copied into the flattenedTrees array.
* In case of a grouped tree: only the first two levels are copied into the flattenedTrees array
* In the other cases all tree nodes are copied into the flattenedTrees array.
*/
fillFlattenedTree(items: TreeItem[], isFlatTree: boolean): void {
if (isFlatTree === false) {
this.flattenedTrees = [];
if (this.siTreeViewService.groupedList) {
this.fillFlattenedTreeRecursive(items, 2, 0);
} else {
this.fillFlattenedTreeRecursive(items);
}
} else {
this.flattenedTrees = items;
this.groupItemsCount = 0;
}
this.itemsTotal = items.length;
}
private fillFlattenedTreeRecursive(
items: TreeItem[],
noOfLevels?: number,
stackLevel?: number
): void {
Iif (noOfLevels !== undefined && stackLevel !== undefined && noOfLevels <= stackLevel) {
return;
}
stackLevel = stackLevel ?? 0;
for (const current of items) {
this.flattenedTrees.push(current);
if (this.siTreeViewService.isGroupedItem(current)) {
this.groupItemsCount++;
}
if (current.state === 'expanded') {
this.fillFlattenedTreeRecursive(current.children ?? [], noOfLevels, stackLevel + 1);
}
}
}
}
|