ngssm-tree 15.2.9 → 15.2.10

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.
@@ -4,7 +4,7 @@ import { ScrollingModule } from '@angular/cdk/scrolling';
4
4
  import { MatCardModule } from '@angular/material/card';
5
5
  import { MatIconModule } from '@angular/material/icon';
6
6
  import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
7
- import { BehaviorSubject, combineLatest, takeUntil } from 'rxjs';
7
+ import { BehaviorSubject } from 'rxjs';
8
8
  import { NgSsmComponent } from 'ngssm-store';
9
9
  import { DataStatus } from 'ngssm-remote-data';
10
10
  import { selectNgssmTreeState } from '../../state';
@@ -23,38 +23,57 @@ export class NgssmTreeComponent extends NgSsmComponent {
23
23
  this._displayedItems$ = new BehaviorSubject([]);
24
24
  this._selectedNodeId$ = new BehaviorSubject(undefined);
25
25
  this.dataStatus = DataStatus;
26
- // TODO - start watching when treeConfig is set
27
- combineLatest([this._treeConfig$, this.watch((s) => selectNgssmTreeState(s).trees)])
28
- .pipe(takeUntil(this.unsubscribeAll$))
29
- .subscribe((values) => {
30
- if (!values[0]) {
31
- this._displayedItems$.next([]);
32
- return;
33
- }
34
- const alwaysTrue = (_) => true;
35
- const filter = values[0].filter ?? alwaysTrue;
36
- const items = [];
37
- let hiddenLevel = -1;
38
- (values[1][values[0].treeId]?.nodes ?? []).forEach((t) => {
39
- if (t.node.isExpandable && t.isExpanded === false && hiddenLevel === -1) {
40
- hiddenLevel = t.level;
26
+ }
27
+ set treeConfig(value) {
28
+ if (value) {
29
+ this._treeConfig$.next({ ...value });
30
+ this.treeSubscription?.unsubscribe();
31
+ this.treeSubscription = this.watch((s) => selectNgssmTreeState(s).trees[value.treeId]).subscribe((tree) => {
32
+ const config = this._treeConfig$.getValue();
33
+ if (!tree || !config) {
34
+ this._displayedItems$.next([]);
35
+ return;
41
36
  }
42
- if (hiddenLevel === -1 || t.level <= hiddenLevel) {
43
- if (filter(t.node)) {
44
- items.push(t);
37
+ const alwaysTrue = (_) => true;
38
+ const filter = config.filter ?? alwaysTrue;
39
+ const items = [];
40
+ let hiddenLevel = -1;
41
+ const nodesToFindSelected = new Map();
42
+ (tree.nodes ?? []).forEach((t) => {
43
+ if (t.node.isExpandable && t.isExpanded === false && hiddenLevel === -1) {
44
+ hiddenLevel = t.level;
45
+ }
46
+ if (hiddenLevel === -1 || t.level <= hiddenLevel) {
47
+ if (filter(t.node)) {
48
+ items.push(t);
49
+ nodesToFindSelected.set(t.node.nodeId, { isDisplayed: true, node: t });
50
+ }
51
+ }
52
+ if (t.node.isExpandable && t.level <= hiddenLevel) {
53
+ hiddenLevel = t.isExpanded === true ? -1 : t.level;
45
54
  }
55
+ if (!nodesToFindSelected.has(t.node.nodeId)) {
56
+ nodesToFindSelected.set(t.node.nodeId, { isDisplayed: false, node: t });
57
+ }
58
+ });
59
+ this._displayedItems$.next(items);
60
+ let selectedNode = tree.selectedNode;
61
+ if (!selectedNode) {
62
+ this._selectedNodeId$.next(undefined);
46
63
  }
47
- if (t.node.isExpandable && t.level <= hiddenLevel) {
48
- hiddenLevel = t.isExpanded === true ? -1 : t.level;
64
+ else {
65
+ while (selectedNode) {
66
+ const item = nodesToFindSelected.get(selectedNode);
67
+ if (item?.isDisplayed !== true) {
68
+ selectedNode = item?.node.node.parentNodeId;
69
+ }
70
+ else {
71
+ break;
72
+ }
73
+ }
74
+ this._selectedNodeId$.next(selectedNode);
49
75
  }
50
76
  });
51
- this._displayedItems$.next(items);
52
- this._selectedNodeId$.next(values[1][values[0].treeId]?.selectedNode);
53
- });
54
- }
55
- set treeConfig(value) {
56
- if (value) {
57
- this._treeConfig$.next(value);
58
77
  }
59
78
  }
60
79
  get treeConfig$() {
@@ -96,4 +115,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImpor
96
115
  }], ctorParameters: function () { return [{ type: i1.Store }]; }, propDecorators: { treeConfig: [{
97
116
  type: Input
98
117
  }] } });
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdzc20tdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS10cmVlL3NyYy9saWIvY29tcG9uZW50cy9uZ3NzbS10cmVlL25nc3NtLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdzc20tdHJlZS9zcmMvbGliL2NvbXBvbmVudHMvbmdzc20tdHJlZS9uZ3NzbS10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFN0UsT0FBTyxFQUFFLGNBQWMsRUFBUyxNQUFNLGFBQWEsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFVdkYsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGNBQWM7SUFPcEQsWUFBWSxLQUFZO1FBQ3RCLEtBQUssQ0FBQyxLQUFLLENB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RSxhQUFhLG1MQUFFLHdCQUF3QjsyRkFLcEYsa0JBQWtCO2tCQVI5QixTQUFTOytCQUNFLFlBQVksY0FDVixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsd0JBQXdCLENBQUMsbUJBRy9FLHVCQUF1QixDQUFDLE1BQU07NEZBZ0RsQyxVQUFVO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTY3JvbGxpbmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IE1hdENhcmRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTmdTc21Db21wb25lbnQsIFN0b3JlIH0gZnJvbSAnbmdzc20tc3RvcmUnO1xuaW1wb3J0IHsgRGF0YVN0YXR1cyB9IGZyb20gJ25nc3NtLXJlbW90ZS1kYXRhJztcblxuaW1wb3J0IHsgTmdzc21UcmVlQ29uZmlnLCBOZ3NzbVRyZWVOb2RlLCBOb2RlRGF0YSB9IGZyb20gJy4uLy4uL21vZGVsJztcbmltcG9ydCB7IHNlbGVjdE5nc3NtVHJlZVN0YXRlIH0gZnJvbSAnLi4vLi4vc3RhdGUnO1xuaW1wb3J0IHsgQ29sbGFwc2VOb2RlQWN0aW9uLCBFeHBhbmROb2RlQWN0aW9uLCBTZWxlY3ROb2RlQWN0aW9uIH0gZnJvbSAnLi4vLi4vYWN0aW9ucyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nc3NtLXRyZWUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBTY3JvbGxpbmdNb2R1bGUsIE1hdENhcmRNb2R1bGUsIE1hdEljb25Nb2R1bGUsIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9uZ3NzbS10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbmdzc20tdHJlZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBOZ3NzbVRyZWVDb21wb25lbnQgZXh0ZW5kcyBOZ1NzbUNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RyZWVDb25maWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOZ3NzbVRyZWVDb25maWcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3BsYXllZEl0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Tmdzc21UcmVlTm9kZVtdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdGVkTm9kZUlkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHB1YmxpYyByZWFkb25seSBkYXRhU3RhdHVzID0gRGF0YVN0YXR1cztcblxuICBjb25zdHJ1Y3RvcihzdG9yZTogU3RvcmUpIHtcbiAgICBzdXBlcihzdG9yZSk7XG5cbiAgICAvLyBUT0RPIC0gc3RhcnQgd2F0Y2hpbmcgd2hlbiB0cmVlQ29uZmlnIGlzIHNldFxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuX3RyZWVDb25maWckLCB0aGlzLndhdGNoKChzKSA9PiBzZWxlY3ROZ3NzbVRyZWVTdGF0ZShzKS50cmVlcyldKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVBbGwkKSlcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlcykgPT4ge1xuICAgICAgICBpZiAoIXZhbHVlc1swXSkge1xuICAgICAgICAgIHRoaXMuX2Rpc3BsYXllZEl0ZW1zJC5uZXh0KFtdKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhbHdheXNUcnVlID0gKF86IE5vZGVEYXRhKSA9PiB0cnVlO1xuICAgICAgICBjb25zdCBmaWx0ZXI6IChub2RlOiBOb2RlRGF0YSkgPT4gYm9vbGVhbiA9IHZhbHVlc1swXS5maWx0ZXIgPz8gYWx3YXlzVHJ1ZTtcblxuICAgICAgICBjb25zdCBpdGVtczogTmdzc21UcmVlTm9kZVtdID0gW107XG4gICAgICAgIGxldCBoaWRkZW5MZXZlbCA9IC0xO1xuICAgICAgICAodmFsdWVzWzFdW3ZhbHVlc1swXS50cmVlSWRdPy5ub2RlcyA/PyBbXSkuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgICAgIGlmICh0Lm5vZGUuaXNFeHBhbmRhYmxlICYmIHQuaXNFeHBhbmRlZCA9PT0gZmFsc2UgJiYgaGlkZGVuTGV2ZWwgPT09IC0xKSB7XG4gICAgICAgICAgICBoaWRkZW5MZXZlbCA9IHQubGV2ZWw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGhpZGRlbkxldmVsID09PSAtMSB8fCB0LmxldmVsIDw9IGhpZGRlbkxldmVsKSB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyKHQubm9kZSkpIHtcbiAgICAgICAgICAgICAgaXRlbXMucHVzaCh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodC5ub2RlLmlzRXhwYW5kYWJsZSAmJiB0LmxldmVsIDw9IGhpZGRlbkxldmVsKSB7XG4gICAgICAgICAgICBoaWRkZW5MZXZlbCA9IHQuaXNFeHBhbmRlZCA9PT0gdHJ1ZSA/IC0xIDogdC5sZXZlbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2Rpc3BsYXllZEl0ZW1zJC5uZXh0KGl0ZW1zKTtcblxuICAgICAgICB0aGlzLl9zZWxlY3RlZE5vZGVJZCQubmV4dCh2YWx1ZXNbMV1bdmFsdWVzWzBdLnRyZWVJZF0/LnNlbGVjdGVkTm9kZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCB0cmVlQ29uZmlnKHZhbHVlOiBOZ3NzbVRyZWVDb25maWcgfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl90cmVlQ29uZmlnJC5uZXh0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRyZWVDb25maWckKCk6IE9ic2VydmFibGU8Tmdzc21UcmVlQ29uZmlnIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyZWVDb25maWckLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBkaXNwbGF5ZWRJdGVtcyQoKTogT2JzZXJ2YWJsZTxOZ3NzbVRyZWVOb2RlW10+IHtcbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheWVkSXRlbXMkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBzZWxlY3RlZE5vZGVJZCQoKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWROb2RlSWQkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldEl0ZW1JZChfOiBudW1iZXIsIG5vZGU6IE5nc3NtVHJlZU5vZGUpOiBzdHJpbmcge1xuICAgIHJldHVybiBub2RlLm5vZGUubm9kZUlkO1xuICB9XG5cbiAgcHVibGljIGV4cGFuZChub2RlOiBOZ3NzbVRyZWVOb2RlKTogdm9pZCB7XG4gICAgY29uc3QgdHJlZUlkID0gdGhpcy5fdHJlZUNvbmZpZyQuZ2V0VmFsdWUoKT8udHJlZUlkO1xuICAgIGlmICh0cmVlSWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24obmV3IEV4cGFuZE5vZGVBY3Rpb24odHJlZUlkLCBub2RlLm5vZGUubm9kZUlkKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNvbGxhcHNlKG5vZGU6IE5nc3NtVHJlZU5vZGUpOiB2b2lkIHtcbiAgICBjb25zdCB0cmVlSWQgPSB0aGlzLl90cmVlQ29uZmlnJC5nZXRWYWx1ZSgpPy50cmVlSWQ7XG4gICAgaWYgKHRyZWVJZCkge1xuICAgICAgdGhpcy5kaXNwYXRjaEFjdGlvbihuZXcgQ29sbGFwc2VOb2RlQWN0aW9uKHRyZWVJZCwgbm9kZS5ub2RlLm5vZGVJZCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3ROb2RlKG5vZGU6IE5nc3NtVHJlZU5vZGUpOiB2b2lkIHtcbiAgICBjb25zdCB0cmVlSWQgPSB0aGlzLl90cmVlQ29uZmlnJC5nZXRWYWx1ZSgpPy50cmVlSWQ7XG4gICAgaWYgKHRyZWVJZCkge1xuICAgICAgdGhpcy5kaXNwYXRjaEFjdGlvbihuZXcgU2VsZWN0Tm9kZUFjdGlvbih0cmVlSWQsIG5vZGUubm9kZS5ub2RlSWQpKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxtYXQtY2FyZCBjbGFzcz1cImZsZXgtY29sdW1uLXN0cmV0Y2ggZnhGbGV4XCI+XG4gICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJmbGV4LWNvbHVtbi1zdHJldGNoIGZ4RmxleFwiICpuZ0lmPVwiKHRyZWVDb25maWckIHwgYXN5bmMpIGFzIHRyZWVDb25maWdcIj5cbiAgICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBpdGVtU2l6ZT1cIjMwXCIgY2xhc3M9XCJmeEZsZXhcIj5cbiAgICAgICAgICAgIDxkaXYgKmNka1ZpcnR1YWxGb3I9XCJsZXQgaXRlbSBvZiBkaXNwbGF5ZWRJdGVtcyQgfCBhc3luYzsgdHJhY2tCeTogZ2V0SXRlbUlkXCIgY2xhc3M9XCJuZ3NzbS10cmVlLW5vZGVcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5wYWRkaW5nLWxlZnQucHhdPVwiaXRlbS5sZXZlbCAqIDIwXCIgKGNsaWNrKT1cInNlbGVjdE5vZGUoaXRlbSlcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWQnIDogKHNlbGVjdGVkTm9kZUlkJCB8IGFzeW5jKSA9PT0gaXRlbS5ub2RlLm5vZGVJZH1cIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJmYS1zb2xpZCBmYS1jaGV2cm9uLXJpZ2h0XCIgKm5nSWY9XCJpdGVtLm5vZGUuaXNFeHBhbmRhYmxlICYmIGl0ZW0uaXNFeHBhbmRlZCA9PT0gZmFsc2UgJiYgaXRlbS5zdGF0dXMgIT09IGRhdGFTdGF0dXMubG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7ZXhwYW5kKGl0ZW0pO1wiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtY2hldnJvbi1kb3duXCIgKm5nSWY9XCJpdGVtLm5vZGUuaXNFeHBhbmRhYmxlICYmIGl0ZW0uaXNFeHBhbmRlZCAmJiBpdGVtLnN0YXR1cyAhPT0gZGF0YVN0YXR1cy5sb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtjb2xsYXBzZShpdGVtKVwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiMjBcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0ubm9kZS5pc0V4cGFuZGFibGUgJiYgaXRlbS5zdGF0dXMgPT09IGRhdGFTdGF0dXMubG9hZGluZ1wiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXRlbS5ub2RlLmlzRXhwYW5kYWJsZVwiIGNsYXNzPVwibm90LWV4cGFuZGFibGUtcGFkZGluZ1wiPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInt7dHJlZUNvbmZpZy5pY29uQ2xhc3Nlc1tpdGVtLm5vZGUudHlwZV19fVwiIGNvbG9yPVwicHJpbWFyeVwiPjwvbWF0LWljb24+XG5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5nc3NtLXRyZWUtbm9kZS1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICB7e2l0ZW0ubm9kZS5sYWJlbH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cbjwvbWF0LWNhcmQ+Il19
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdzc20tdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS10cmVlL3NyYy9saWIvY29tcG9uZW50cy9uZ3NzbS10cmVlL25nc3NtLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdzc20tdHJlZS9zcmMvbGliL2NvbXBvbmVudHMvbmdzc20tdHJlZS9uZ3NzbS10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUVqRSxPQUFPLEVBQUUsY0FBYyxFQUFTLE1BQU0sYUFBYSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUcvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVV2RixNQUFNLE9BQU8sa0JBQW1CLFNBQVEsY0FBYztJQVNwRCxZQUFZLEtBQVk7UUFDdEIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBVEUsaUJBQVks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LElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3JFO0lBQ0gsQ0FBQztJQUVNLFFBQVEsQ0FBQyxJQUFtQjtRQUNqQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUNwRCxJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3ZFO0lBQ0gsQ0FBQztJQUVNLFVBQVUsQ0FBQyxJQUFtQjtRQUNuQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUNwRCxJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3JFO0lBQ0gsQ0FBQzs7K0dBNUdVLGtCQUFrQjttR0FBbEIsa0JBQWtCLG1JQ3ZCL0IsZ2tEQXNCVyw4ZkRKQyxZQUFZLHFSQUFFLGVBQWUsMmpCQUFFLGFBQWEsME5BQUUsYUFBYSxtTEFBRSx3QkFBd0I7MkZBS3BGLGtCQUFrQjtrQkFSOUIsU0FBUzsrQkFDRSxZQUFZLGNBQ1YsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLHdCQUF3QixDQUFDLG1CQUcvRSx1QkFBdUIsQ0FBQyxNQUFNOzRGQWVsQyxVQUFVO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTY3JvbGxpbmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IE1hdENhcmRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTmdTc21Db21wb25lbnQsIFN0b3JlIH0gZnJvbSAnbmdzc20tc3RvcmUnO1xuaW1wb3J0IHsgRGF0YVN0YXR1cyB9IGZyb20gJ25nc3NtLXJlbW90ZS1kYXRhJztcblxuaW1wb3J0IHsgTmdzc21UcmVlLCBOZ3NzbVRyZWVDb25maWcsIE5nc3NtVHJlZU5vZGUsIE5vZGVEYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWwnO1xuaW1wb3J0IHsgc2VsZWN0Tmdzc21UcmVlU3RhdGUgfSBmcm9tICcuLi8uLi9zdGF0ZSc7XG5pbXBvcnQgeyBDb2xsYXBzZU5vZGVBY3Rpb24sIEV4cGFuZE5vZGVBY3Rpb24sIFNlbGVjdE5vZGVBY3Rpb24gfSBmcm9tICcuLi8uLi9hY3Rpb25zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdzc20tdHJlZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFNjcm9sbGluZ01vZHVsZSwgTWF0Q2FyZE1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL25nc3NtLXRyZWUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9uZ3NzbS10cmVlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE5nc3NtVHJlZUNvbXBvbmVudCBleHRlbmRzIE5nU3NtQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdHJlZUNvbmZpZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE5nc3NtVHJlZUNvbmZpZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcGxheWVkSXRlbXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOZ3NzbVRyZWVOb2RlW10+KFtdKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2VsZWN0ZWROb2RlSWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgcHJpdmF0ZSB0cmVlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRhdGFTdGF0dXMgPSBEYXRhU3RhdHVzO1xuXG4gIGNvbnN0cnVjdG9yKHN0b3JlOiBTdG9yZSkge1xuICAgIHN1cGVyKHN0b3JlKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCB0cmVlQ29uZmlnKHZhbHVlOiBOZ3NzbVRyZWVDb25maWcgfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl90cmVlQ29uZmlnJC5uZXh0KHsgLi4udmFsdWUgfSk7XG5cbiAgICAgIHRoaXMudHJlZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMudHJlZVN1YnNjcmlwdGlvbiA9IHRoaXMud2F0Y2goKHMpID0+IHNlbGVjdE5nc3NtVHJlZVN0YXRlKHMpLnRyZWVzW3ZhbHVlLnRyZWVJZF0pLnN1YnNjcmliZSgodHJlZTogTmdzc21UcmVlIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuX3RyZWVDb25maWckLmdldFZhbHVlKCk7XG4gICAgICAgIGlmICghdHJlZSB8fCAhY29uZmlnKSB7XG4gICAgICAgICAgdGhpcy5fZGlzcGxheWVkSXRlbXMkLm5leHQoW10pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFsd2F5c1RydWUgPSAoXzogTm9kZURhdGEpID0+IHRydWU7XG4gICAgICAgIGNvbnN0IGZpbHRlcjogKG5vZGU6IE5vZGVEYXRhKSA9PiBib29sZWFuID0gY29uZmlnLmZpbHRlciA/PyBhbHdheXNUcnVlO1xuXG4gICAgICAgIGNvbnN0IGl0ZW1zOiBOZ3NzbVRyZWVOb2RlW10gPSBbXTtcbiAgICAgICAgbGV0IGhpZGRlbkxldmVsID0gLTE7XG4gICAgICAgIGNvbnN0IG5vZGVzVG9GaW5kU2VsZWN0ZWQgPSBuZXcgTWFwPHN0cmluZywgeyBpc0Rpc3BsYXllZDogYm9vbGVhbjsgbm9kZTogTmdzc21UcmVlTm9kZSB9PigpO1xuICAgICAgICAodHJlZS5ub2RlcyA/PyBbXSkuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgICAgIGlmICh0Lm5vZGUuaXNFeHBhbmRhYmxlICYmIHQuaXNFeHBhbmRlZCA9PT0gZmFsc2UgJiYgaGlkZGVuTGV2ZWwgPT09IC0xKSB7XG4gICAgICAgICAgICBoaWRkZW5MZXZlbCA9IHQubGV2ZWw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGhpZGRlbkxldmVsID09PSAtMSB8fCB0LmxldmVsIDw9IGhpZGRlbkxldmVsKSB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyKHQubm9kZSkpIHtcbiAgICAgICAgICAgICAgaXRlbXMucHVzaCh0KTtcbiAgICAgICAgICAgICAgbm9kZXNUb0ZpbmRTZWxlY3RlZC5zZXQodC5ub2RlLm5vZGVJZCwgeyBpc0Rpc3BsYXllZDogdHJ1ZSwgbm9kZTogdCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodC5ub2RlLmlzRXhwYW5kYWJsZSAmJiB0LmxldmVsIDw9IGhpZGRlbkxldmVsKSB7XG4gICAgICAgICAgICBoaWRkZW5MZXZlbCA9IHQuaXNFeHBhbmRlZCA9PT0gdHJ1ZSA/IC0xIDogdC5sZXZlbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIW5vZGVzVG9GaW5kU2VsZWN0ZWQuaGFzKHQubm9kZS5ub2RlSWQpKSB7XG4gICAgICAgICAgICBub2Rlc1RvRmluZFNlbGVjdGVkLnNldCh0Lm5vZGUubm9kZUlkLCB7IGlzRGlzcGxheWVkOiBmYWxzZSwgbm9kZTogdCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2Rpc3BsYXllZEl0ZW1zJC5uZXh0KGl0ZW1zKTtcblxuICAgICAgICBsZXQgc2VsZWN0ZWROb2RlID0gdHJlZS5zZWxlY3RlZE5vZGU7XG4gICAgICAgIGlmICghc2VsZWN0ZWROb2RlKSB7XG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWROb2RlSWQkLm5leHQodW5kZWZpbmVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aGlsZSAoc2VsZWN0ZWROb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gbm9kZXNUb0ZpbmRTZWxlY3RlZC5nZXQoc2VsZWN0ZWROb2RlKTtcbiAgICAgICAgICAgIGlmIChpdGVtPy5pc0Rpc3BsYXllZCAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBzZWxlY3RlZE5vZGUgPSBpdGVtPy5ub2RlLm5vZGUucGFyZW50Tm9kZUlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWROb2RlSWQkLm5leHQoc2VsZWN0ZWROb2RlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCB0cmVlQ29uZmlnJCgpOiBPYnNlcnZhYmxlPE5nc3NtVHJlZUNvbmZpZyB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLl90cmVlQ29uZmlnJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzcGxheWVkSXRlbXMkKCk6IE9ic2VydmFibGU8Tmdzc21UcmVlTm9kZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXllZEl0ZW1zJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWROb2RlSWQkKCk6IE9ic2VydmFibGU8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkTm9kZUlkJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJdGVtSWQoXzogbnVtYmVyLCBub2RlOiBOZ3NzbVRyZWVOb2RlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbm9kZS5ub2RlLm5vZGVJZDtcbiAgfVxuXG4gIHB1YmxpYyBleHBhbmQobm9kZTogTmdzc21UcmVlTm9kZSk6IHZvaWQge1xuICAgIGNvbnN0IHRyZWVJZCA9IHRoaXMuX3RyZWVDb25maWckLmdldFZhbHVlKCk/LnRyZWVJZDtcbiAgICBpZiAodHJlZUlkKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKG5ldyBFeHBhbmROb2RlQWN0aW9uKHRyZWVJZCwgbm9kZS5ub2RlLm5vZGVJZCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjb2xsYXBzZShub2RlOiBOZ3NzbVRyZWVOb2RlKTogdm9pZCB7XG4gICAgY29uc3QgdHJlZUlkID0gdGhpcy5fdHJlZUNvbmZpZyQuZ2V0VmFsdWUoKT8udHJlZUlkO1xuICAgIGlmICh0cmVlSWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24obmV3IENvbGxhcHNlTm9kZUFjdGlvbih0cmVlSWQsIG5vZGUubm9kZS5ub2RlSWQpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0Tm9kZShub2RlOiBOZ3NzbVRyZWVOb2RlKTogdm9pZCB7XG4gICAgY29uc3QgdHJlZUlkID0gdGhpcy5fdHJlZUNvbmZpZyQuZ2V0VmFsdWUoKT8udHJlZUlkO1xuICAgIGlmICh0cmVlSWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24obmV3IFNlbGVjdE5vZGVBY3Rpb24odHJlZUlkLCBub2RlLm5vZGUubm9kZUlkKSk7XG4gICAgfVxuICB9XG59XG4iLCI8bWF0LWNhcmQgY2xhc3M9XCJmbGV4LWNvbHVtbi1zdHJldGNoIGZ4RmxleFwiPlxuICAgIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwiZmxleC1jb2x1bW4tc3RyZXRjaCBmeEZsZXhcIiAqbmdJZj1cIih0cmVlQ29uZmlnJCB8IGFzeW5jKSBhcyB0cmVlQ29uZmlnXCI+XG4gICAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgaXRlbVNpemU9XCIzMFwiIGNsYXNzPVwiZnhGbGV4XCI+XG4gICAgICAgICAgICA8ZGl2ICpjZGtWaXJ0dWFsRm9yPVwibGV0IGl0ZW0gb2YgZGlzcGxheWVkSXRlbXMkIHwgYXN5bmM7IHRyYWNrQnk6IGdldEl0ZW1JZFwiIGNsYXNzPVwibmdzc20tdHJlZS1ub2RlXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUucGFkZGluZy1sZWZ0LnB4XT1cIml0ZW0ubGV2ZWwgKiAyMFwiIChjbGljayk9XCJzZWxlY3ROb2RlKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkJyA6IChzZWxlY3RlZE5vZGVJZCQgfCBhc3luYykgPT09IGl0ZW0ubm9kZS5ub2RlSWR9XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtY2hldnJvbi1yaWdodFwiICpuZ0lmPVwiaXRlbS5ub2RlLmlzRXhwYW5kYWJsZSAmJiBpdGVtLmlzRXhwYW5kZWQgPT09IGZhbHNlICYmIGl0ZW0uc3RhdHVzICE9PSBkYXRhU3RhdHVzLmxvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO2V4cGFuZChpdGVtKTtcIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImZhLXNvbGlkIGZhLWNoZXZyb24tZG93blwiICpuZ0lmPVwiaXRlbS5ub2RlLmlzRXhwYW5kYWJsZSAmJiBpdGVtLmlzRXhwYW5kZWQgJiYgaXRlbS5zdGF0dXMgIT09IGRhdGFTdGF0dXMubG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Y29sbGFwc2UoaXRlbSlcIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjIwXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLm5vZGUuaXNFeHBhbmRhYmxlICYmIGl0ZW0uc3RhdHVzID09PSBkYXRhU3RhdHVzLmxvYWRpbmdcIj48L21hdC1zcGlubmVyPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWl0ZW0ubm9kZS5pc0V4cGFuZGFibGVcIiBjbGFzcz1cIm5vdC1leHBhbmRhYmxlLXBhZGRpbmdcIj48L3NwYW4+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJ7e3RyZWVDb25maWcuaWNvbkNsYXNzZXNbaXRlbS5ub2RlLnR5cGVdfX1cIiBjb2xvcj1cInByaW1hcnlcIj48L21hdC1pY29uPlxuXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuZ3NzbS10cmVlLW5vZGUtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAge3tpdGVtLm5vZGUubGFiZWx9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG48L21hdC1jYXJkPiJdfQ==
@@ -15,7 +15,7 @@ import * as i5 from '@angular/material/icon';
15
15
  import { MatIconModule } from '@angular/material/icon';
16
16
  import * as i6 from '@angular/material/progress-spinner';
17
17
  import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
18
- import { BehaviorSubject, combineLatest, takeUntil } from 'rxjs';
18
+ import { BehaviorSubject, combineLatest } from 'rxjs';
19
19
  import * as i4$1 from '@angular/material/button';
20
20
  import { MatButtonModule } from '@angular/material/button';
21
21
 
@@ -399,39 +399,59 @@ class NgssmTreeComponent extends NgSsmComponent {
399
399
  this._displayedItems$ = new BehaviorSubject([]);
400
400
  this._selectedNodeId$ = new BehaviorSubject(undefined);
401
401
  this.dataStatus = DataStatus;
402
- // TODO - start watching when treeConfig is set
403
- combineLatest([this._treeConfig$, this.watch((s) => selectNgssmTreeState(s).trees)])
404
- .pipe(takeUntil(this.unsubscribeAll$))
405
- .subscribe((values) => {
406
- var _a, _b, _c, _d;
407
- if (!values[0]) {
408
- this._displayedItems$.next([]);
409
- return;
410
- }
411
- const alwaysTrue = (_) => true;
412
- const filter = (_a = values[0].filter) !== null && _a !== void 0 ? _a : alwaysTrue;
413
- const items = [];
414
- let hiddenLevel = -1;
415
- ((_c = (_b = values[1][values[0].treeId]) === null || _b === void 0 ? void 0 : _b.nodes) !== null && _c !== void 0 ? _c : []).forEach((t) => {
416
- if (t.node.isExpandable && t.isExpanded === false && hiddenLevel === -1) {
417
- hiddenLevel = t.level;
402
+ }
403
+ set treeConfig(value) {
404
+ var _a;
405
+ if (value) {
406
+ this._treeConfig$.next(Object.assign({}, value));
407
+ (_a = this.treeSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
408
+ this.treeSubscription = this.watch((s) => selectNgssmTreeState(s).trees[value.treeId]).subscribe((tree) => {
409
+ var _a, _b;
410
+ const config = this._treeConfig$.getValue();
411
+ if (!tree || !config) {
412
+ this._displayedItems$.next([]);
413
+ return;
418
414
  }
419
- if (hiddenLevel === -1 || t.level <= hiddenLevel) {
420
- if (filter(t.node)) {
421
- items.push(t);
415
+ const alwaysTrue = (_) => true;
416
+ const filter = (_a = config.filter) !== null && _a !== void 0 ? _a : alwaysTrue;
417
+ const items = [];
418
+ let hiddenLevel = -1;
419
+ const nodesToFindSelected = new Map();
420
+ ((_b = tree.nodes) !== null && _b !== void 0 ? _b : []).forEach((t) => {
421
+ if (t.node.isExpandable && t.isExpanded === false && hiddenLevel === -1) {
422
+ hiddenLevel = t.level;
423
+ }
424
+ if (hiddenLevel === -1 || t.level <= hiddenLevel) {
425
+ if (filter(t.node)) {
426
+ items.push(t);
427
+ nodesToFindSelected.set(t.node.nodeId, { isDisplayed: true, node: t });
428
+ }
429
+ }
430
+ if (t.node.isExpandable && t.level <= hiddenLevel) {
431
+ hiddenLevel = t.isExpanded === true ? -1 : t.level;
422
432
  }
433
+ if (!nodesToFindSelected.has(t.node.nodeId)) {
434
+ nodesToFindSelected.set(t.node.nodeId, { isDisplayed: false, node: t });
435
+ }
436
+ });
437
+ this._displayedItems$.next(items);
438
+ let selectedNode = tree.selectedNode;
439
+ if (!selectedNode) {
440
+ this._selectedNodeId$.next(undefined);
423
441
  }
424
- if (t.node.isExpandable && t.level <= hiddenLevel) {
425
- hiddenLevel = t.isExpanded === true ? -1 : t.level;
442
+ else {
443
+ while (selectedNode) {
444
+ const item = nodesToFindSelected.get(selectedNode);
445
+ if ((item === null || item === void 0 ? void 0 : item.isDisplayed) !== true) {
446
+ selectedNode = item === null || item === void 0 ? void 0 : item.node.node.parentNodeId;
447
+ }
448
+ else {
449
+ break;
450
+ }
451
+ }
452
+ this._selectedNodeId$.next(selectedNode);
426
453
  }
427
454
  });
428
- this._displayedItems$.next(items);
429
- this._selectedNodeId$.next((_d = values[1][values[0].treeId]) === null || _d === void 0 ? void 0 : _d.selectedNode);
430
- });
431
- }
432
- set treeConfig(value) {
433
- if (value) {
434
- this._treeConfig$.next(value);
435
455
  }
436
456
  }
437
457
  get treeConfig$() {
@@ -1 +1 @@
1
- {"version":3,"file":"ngssm-tree.mjs","sources":["../../../projects/ngssm-tree/src/lib/actions/ngssm-tree-action-type.ts","../../../projects/ngssm-tree/src/lib/actions/tree-action.ts","../../../projects/ngssm-tree/src/lib/actions/init-ngssm-tree.action.ts","../../../projects/ngssm-tree/src/lib/actions/expand-node.action.ts","../../../projects/ngssm-tree/src/lib/actions/register-nodes.action.ts","../../../projects/ngssm-tree/src/lib/actions/collapse-node.action.ts","../../../projects/ngssm-tree/src/lib/actions/select-node.action.ts","../../../projects/ngssm-tree/src/lib/actions/delete-ngssm-tree.action.ts","../../../projects/ngssm-tree/src/lib/model/ngssm-tree-data-service.ts","../../../projects/ngssm-tree/src/lib/state/ngssm-tree.state.ts","../../../projects/ngssm-tree/src/lib/effects/tree-node-loading.effect.ts","../../../projects/ngssm-tree/src/lib/reducers/tree-node-expand.reducer.ts","../../../projects/ngssm-tree/src/lib/reducers/tree-node-selection.reducer.ts","../../../projects/ngssm-tree/src/lib/reducers/tree-nodes.reducer.ts","../../../projects/ngssm-tree/src/lib/reducers/trees.reducer.ts","../../../projects/ngssm-tree/src/lib/provide-ngssm-tree.ts","../../../projects/ngssm-tree/src/lib/components/ngssm-tree/ngssm-tree.component.ts","../../../projects/ngssm-tree/src/lib/components/ngssm-tree/ngssm-tree.component.html","../../../projects/ngssm-tree/src/lib/components/ngssm-breadcrumb/ngssm-breadcrumb.component.ts","../../../projects/ngssm-tree/src/lib/components/ngssm-breadcrumb/ngssm-breadcrumb.component.html","../../../projects/ngssm-tree/src/public-api.ts","../../../projects/ngssm-tree/src/ngssm-tree.ts"],"sourcesContent":["export enum NgssmTreeActionType {\n initNgssmTree = '[NgssmTreeActionType] initNgssmTree',\n deleteNgssmTree = '[NgssmTreeActionType] deleteNgssmTree',\n expandNode = '[NgssmTreeActionType] expandNode',\n collapseNode = '[NgssmTreeActionType] collapseNode',\n registerNodes = '[NgssmTreeActionType] registerNodes',\n selectNode = '[NgssmTreeActionType] selectNode'\n}\n","import { Action } from 'ngssm-store';\n\nexport class TreeAction implements Action {\n constructor(public readonly type: string, public readonly treeId: string) {}\n}\n","import { NodeData } from '../model';\nimport { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class InitNgssmTreeAction extends TreeAction {\n constructor(treeId: string, public readonly treeType: string, public readonly root: NodeData) {\n super(NgssmTreeActionType.initNgssmTree, treeId);\n }\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class ExpandNodeAction extends TreeAction {\n constructor(treeId: string, public readonly nodeId: string) {\n super(NgssmTreeActionType.expandNode, treeId);\n }\n}\n","import { DataStatus } from 'ngssm-remote-data';\nimport { Action } from 'ngssm-store';\n\nimport { NodeData } from '../model';\nimport { NgssmTreeActionType } from './ngssm-tree-action-type';\n\nexport class RegisterNodesAction implements Action {\n public readonly type: string = NgssmTreeActionType.registerNodes;\n\n constructor(\n public readonly dataStatus: DataStatus,\n public readonly treeId: string,\n public readonly parentNodeId: string,\n public readonly nodes: NodeData[] = []\n ) {}\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class CollapseNodeAction extends TreeAction {\n constructor(treeId: string, public readonly nodeId: string) {\n super(NgssmTreeActionType.collapseNode, treeId);\n }\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class SelectNodeAction extends TreeAction {\n constructor(treeId: string, public readonly nodeId: string) {\n super(NgssmTreeActionType.selectNode, treeId);\n }\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class DeleteNgssmTreeAction extends TreeAction {\n constructor(treeId: string) {\n super(NgssmTreeActionType.deleteNgssmTree, treeId);\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { NodeData } from './node-data';\n\nexport interface NgssmTreeDataService {\n readonly treeType: string;\n load(treeId: string, nodeId: string): Observable<NodeData[]>;\n}\n\nexport const NGSSM_TREE_DATA_SERVICE = new InjectionToken<NgssmTreeDataService>('NGSSM_TREE_DATA_SERVICE');\n","import update, { Spec } from 'immutability-helper';\n\nimport { NgSsmFeatureState, State } from 'ngssm-store';\nimport { NgssmTree } from '../model';\n\nexport const selectNgssmTreeState = (state: State): NgssmTreeState => state[NgssmTreeStateSpecification.featureStateKey] as NgssmTreeState;\n\nexport const updateNgssmTreeState = (state: State, command: Spec<NgssmTreeState, never>): State =>\n update(state, {\n [NgssmTreeStateSpecification.featureStateKey]: command\n });\n\nexport interface NgssmTreeState {\n trees: { [key: string]: NgssmTree };\n}\n\n@NgSsmFeatureState({\n featureStateKey: NgssmTreeStateSpecification.featureStateKey,\n initialState: NgssmTreeStateSpecification.initialState\n})\nexport class NgssmTreeStateSpecification {\n public static readonly featureStateKey = 'ngssm-tree-state';\n public static readonly initialState: NgssmTreeState = {\n trees: {}\n };\n}\n","import { Inject, Injectable, Optional, Provider } from '@angular/core';\n\nimport { DataStatus } from 'ngssm-remote-data';\nimport { Effect, Store, State, Action, NGSSM_EFFECT, Logger } from 'ngssm-store';\n\nimport { ExpandNodeAction, NgssmTreeActionType, RegisterNodesAction } from '../actions';\nimport { NgssmTreeDataService, NGSSM_TREE_DATA_SERVICE } from '../model';\nimport { selectNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodeLoadingEffect implements Effect {\n public readonly processedActions: string[] = [NgssmTreeActionType.expandNode, NgssmTreeActionType.selectNode];\n\n constructor(@Inject(NGSSM_TREE_DATA_SERVICE) @Optional() private dataServices: NgssmTreeDataService[], private logger: Logger) {}\n\n public processAction(store: Store, state: State, action: Action): void {\n const expandNodeAction = action as ExpandNodeAction;\n if (!selectNgssmTreeState(state).trees[expandNodeAction.treeId]) {\n this.logger.error(`Trying to process action for tree not initialized: ${expandNodeAction.treeId}.`);\n return;\n }\n\n const treeType = selectNgssmTreeState(state).trees[expandNodeAction.treeId].type;\n const dataService = (this.dataServices ?? []).find((d) => d.treeType === treeType);\n if (!dataService) {\n this.logger.error(`Trying to process action for tree with no data service: ${expandNodeAction.treeId} / ${treeType}.`);\n return;\n }\n\n const node = selectNgssmTreeState(state).trees[expandNodeAction.treeId].nodes.find((n) => n.node.nodeId === expandNodeAction.nodeId);\n if (node?.status !== DataStatus.loading) {\n return;\n }\n\n dataService.load(expandNodeAction.treeId, expandNodeAction.nodeId).subscribe({\n next: (value) =>\n store.dispatchAction(new RegisterNodesAction(DataStatus.loaded, expandNodeAction.treeId, expandNodeAction.nodeId, value)),\n error: (error) => {\n this.logger.error(\n `Unable to load children nodes for tree '${expandNodeAction.treeId}' and node '${expandNodeAction.nodeId}'`,\n error\n );\n store.dispatchAction(new RegisterNodesAction(DataStatus.error, expandNodeAction.treeId, expandNodeAction.nodeId));\n }\n });\n }\n}\n\nexport const treeNodeLoadingEffectProvider: Provider = {\n provide: NGSSM_EFFECT,\n useClass: TreeNodeLoadingEffect,\n multi: true\n};\n","import { Injectable, Provider } from '@angular/core';\n\nimport update from 'immutability-helper';\n\nimport { DataStatus } from 'ngssm-remote-data';\nimport { Reducer, State, Action, NGSSM_REDUCER } from 'ngssm-store';\n\nimport { CollapseNodeAction, ExpandNodeAction, NgssmTreeActionType, SelectNodeAction } from '../actions';\nimport { NgssmTreeNode } from '../model';\nimport { selectNgssmTreeState, updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodeExpandReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmTreeActionType.expandNode,\n NgssmTreeActionType.collapseNode,\n NgssmTreeActionType.selectNode\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.expandNode: {\n const expandNodeAction = action as ExpandNodeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [expandNodeAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const result = [...nodes];\n const index = result.findIndex((n) => n.node.nodeId === expandNodeAction.nodeId);\n if (index !== -1) {\n let item = result[index];\n if (item.status === DataStatus.loaded) {\n item = update(result[index], {\n isExpanded: { $set: true }\n });\n } else {\n item = update(result[index], {\n isExpanded: { $set: true },\n status: { $set: DataStatus.loading }\n });\n }\n\n result.splice(index, 1, item);\n }\n\n return result;\n }\n }\n }\n }\n });\n }\n\n case NgssmTreeActionType.collapseNode: {\n const collapseNodeAction = action as CollapseNodeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [collapseNodeAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const result = [...nodes];\n const index = result.findIndex((n) => n.node.nodeId === collapseNodeAction.nodeId);\n if (index !== -1) {\n const item = update(result[index], {\n isExpanded: { $set: false }\n });\n\n result.splice(index, 1, item);\n }\n\n return result;\n }\n }\n }\n }\n });\n }\n\n case NgssmTreeActionType.selectNode: {\n const selectNodeAction = action as SelectNodeAction;\n if (\n selectNgssmTreeState(state).trees[selectNodeAction.treeId].nodes.find((n) => n.node.nodeId === selectNodeAction.nodeId)\n ?.status === DataStatus.loaded\n ) {\n break;\n }\n\n return updateNgssmTreeState(state, {\n trees: {\n [selectNodeAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const result = [...nodes];\n const index = result.findIndex((n) => n.node.nodeId === selectNodeAction.nodeId);\n if (index !== -1) {\n const item = update(result[index], {\n status: { $set: DataStatus.loading }\n });\n\n result.splice(index, 1, item);\n }\n\n return result;\n }\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n\nexport const treeNodeExpandReducerProvider: Provider = {\n provide: NGSSM_REDUCER,\n useClass: TreeNodeExpandReducer,\n multi: true\n};\n","import { Injectable, Provider } from '@angular/core';\n\nimport { Reducer, State, Action, NGSSM_REDUCER } from 'ngssm-store';\n\nimport { NgssmTreeActionType, SelectNodeAction } from '../actions';\nimport { updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodeSelectionReducer implements Reducer {\n public readonly processedActions: string[] = [NgssmTreeActionType.selectNode];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.selectNode: {\n const selectNodeAction = action as SelectNodeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [selectNodeAction.treeId]: {\n selectedNode: { $set: selectNodeAction.nodeId }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n\nexport const treeNodeSelectionReducerProvider: Provider = {\n provide: NGSSM_REDUCER,\n useClass: TreeNodeSelectionReducer,\n multi: true\n};\n","import { Injectable, Provider } from '@angular/core';\n\nimport update from 'immutability-helper';\nimport { DataStatus } from 'ngssm-remote-data';\n\nimport { Reducer, State, Action, NGSSM_REDUCER } from 'ngssm-store';\n\nimport { NgssmTreeActionType, RegisterNodesAction } from '../actions';\nimport { NgssmTreeNode } from '../model';\nimport { updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodesReducer implements Reducer {\n public readonly processedActions: string[] = [NgssmTreeActionType.registerNodes];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.registerNodes: {\n const registerNodesAction = action as RegisterNodesAction;\n return updateNgssmTreeState(state, {\n trees: {\n [registerNodesAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const index = nodes.findIndex((n) => n.node.nodeId === registerNodesAction.parentNodeId);\n if (index === -1) {\n return nodes;\n }\n\n return [\n ...nodes.slice(0, index),\n update(nodes[index], { status: { $set: registerNodesAction.dataStatus } }),\n ...registerNodesAction.nodes.map((i) => ({\n status: DataStatus.none,\n isExpanded: false,\n level: nodes[index].level + 1,\n node: i\n })),\n ...nodes.slice(index + 1)\n ];\n }\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n\nexport const treeNodesReducerProvider: Provider = {\n provide: NGSSM_REDUCER,\n useClass: TreeNodesReducer,\n multi: true\n};\n","import { Injectable, Provider } from '@angular/core';\nimport { DataStatus } from 'ngssm-remote-data';\n\nimport { Reducer, State, Action, NGSSM_REDUCER } from 'ngssm-store';\n\nimport { DeleteNgssmTreeAction, InitNgssmTreeAction, NgssmTreeActionType } from '../actions';\nimport { updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreesReducer implements Reducer {\n public readonly processedActions: string[] = [NgssmTreeActionType.initNgssmTree, NgssmTreeActionType.deleteNgssmTree];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.initNgssmTree: {\n const initNgssmTreeAction = action as InitNgssmTreeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [initNgssmTreeAction.treeId]: {\n $set: {\n nodes: [\n {\n status: DataStatus.none,\n isExpanded: false,\n level: 0,\n node: initNgssmTreeAction.root\n }\n ],\n type: initNgssmTreeAction.treeType\n }\n }\n }\n });\n }\n\n case NgssmTreeActionType.deleteNgssmTree: {\n const deleteNgssmTreeAction = action as DeleteNgssmTreeAction;\n return updateNgssmTreeState(state, {\n trees: { $unset: [deleteNgssmTreeAction.treeId] }\n });\n }\n }\n\n return state;\n }\n}\n\nexport const treesReducerProvider: Provider = {\n provide: NGSSM_REDUCER,\n useClass: TreesReducer,\n multi: true\n};\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { treeNodeLoadingEffectProvider } from './effects/tree-node-loading.effect';\nimport { treeNodeExpandReducerProvider } from './reducers/tree-node-expand.reducer';\nimport { treeNodeSelectionReducerProvider } from './reducers/tree-node-selection.reducer';\nimport { treeNodesReducerProvider } from './reducers/tree-nodes.reducer';\nimport { treesReducerProvider } from './reducers/trees.reducer';\n\nexport const provideNgssmTree = (): EnvironmentProviders => {\n return makeEnvironmentProviders([\n treesReducerProvider,\n treeNodeExpandReducerProvider,\n treeNodeLoadingEffectProvider,\n treeNodesReducerProvider,\n treeNodeSelectionReducerProvider\n ]);\n};\n","import { Component, ChangeDetectionStrategy, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { BehaviorSubject, combineLatest, Observable, takeUntil } from 'rxjs';\n\nimport { NgSsmComponent, Store } from 'ngssm-store';\nimport { DataStatus } from 'ngssm-remote-data';\n\nimport { NgssmTreeConfig, NgssmTreeNode, NodeData } from '../../model';\nimport { selectNgssmTreeState } from '../../state';\nimport { CollapseNodeAction, ExpandNodeAction, SelectNodeAction } from '../../actions';\n\n@Component({\n selector: 'ngssm-tree',\n standalone: true,\n imports: [CommonModule, ScrollingModule, MatCardModule, MatIconModule, MatProgressSpinnerModule],\n templateUrl: './ngssm-tree.component.html',\n styleUrls: ['./ngssm-tree.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmTreeComponent extends NgSsmComponent {\n private readonly _treeConfig$ = new BehaviorSubject<NgssmTreeConfig | undefined>(undefined);\n private readonly _displayedItems$ = new BehaviorSubject<NgssmTreeNode[]>([]);\n private readonly _selectedNodeId$ = new BehaviorSubject<string | undefined>(undefined);\n\n public readonly dataStatus = DataStatus;\n\n constructor(store: Store) {\n super(store);\n\n // TODO - start watching when treeConfig is set\n combineLatest([this._treeConfig$, this.watch((s) => selectNgssmTreeState(s).trees)])\n .pipe(takeUntil(this.unsubscribeAll$))\n .subscribe((values) => {\n if (!values[0]) {\n this._displayedItems$.next([]);\n return;\n }\n\n const alwaysTrue = (_: NodeData) => true;\n const filter: (node: NodeData) => boolean = values[0].filter ?? alwaysTrue;\n\n const items: NgssmTreeNode[] = [];\n let hiddenLevel = -1;\n (values[1][values[0].treeId]?.nodes ?? []).forEach((t) => {\n if (t.node.isExpandable && t.isExpanded === false && hiddenLevel === -1) {\n hiddenLevel = t.level;\n }\n\n if (hiddenLevel === -1 || t.level <= hiddenLevel) {\n if (filter(t.node)) {\n items.push(t);\n }\n }\n\n if (t.node.isExpandable && t.level <= hiddenLevel) {\n hiddenLevel = t.isExpanded === true ? -1 : t.level;\n }\n });\n\n this._displayedItems$.next(items);\n\n this._selectedNodeId$.next(values[1][values[0].treeId]?.selectedNode);\n });\n }\n\n @Input() set treeConfig(value: NgssmTreeConfig | undefined | null) {\n if (value) {\n this._treeConfig$.next(value);\n }\n }\n\n public get treeConfig$(): Observable<NgssmTreeConfig | undefined> {\n return this._treeConfig$.asObservable();\n }\n\n public get displayedItems$(): Observable<NgssmTreeNode[]> {\n return this._displayedItems$.asObservable();\n }\n\n public get selectedNodeId$(): Observable<string | undefined> {\n return this._selectedNodeId$.asObservable();\n }\n\n public getItemId(_: number, node: NgssmTreeNode): string {\n return node.node.nodeId;\n }\n\n public expand(node: NgssmTreeNode): void {\n const treeId = this._treeConfig$.getValue()?.treeId;\n if (treeId) {\n this.dispatchAction(new ExpandNodeAction(treeId, node.node.nodeId));\n }\n }\n\n public collapse(node: NgssmTreeNode): void {\n const treeId = this._treeConfig$.getValue()?.treeId;\n if (treeId) {\n this.dispatchAction(new CollapseNodeAction(treeId, node.node.nodeId));\n }\n }\n\n public selectNode(node: NgssmTreeNode): void {\n const treeId = this._treeConfig$.getValue()?.treeId;\n if (treeId) {\n this.dispatchAction(new SelectNodeAction(treeId, node.node.nodeId));\n }\n }\n}\n","<mat-card class=\"flex-column-stretch fxFlex\">\n <mat-card-content class=\"flex-column-stretch fxFlex\" *ngIf=\"(treeConfig$ | async) as treeConfig\">\n <cdk-virtual-scroll-viewport itemSize=\"30\" class=\"fxFlex\">\n <div *cdkVirtualFor=\"let item of displayedItems$ | async; trackBy: getItemId\" class=\"ngssm-tree-node\"\n [style.padding-left.px]=\"item.level * 20\" (click)=\"selectNode(item)\"\n [ngClass]=\"{'selected' : (selectedNodeId$ | async) === item.node.nodeId}\">\n <mat-icon class=\"fa-solid fa-chevron-right\" *ngIf=\"item.node.isExpandable && item.isExpanded === false && item.status !== dataStatus.loading\"\n (click)=\"$event.stopPropagation();expand(item);\"></mat-icon>\n <mat-icon class=\"fa-solid fa-chevron-down\" *ngIf=\"item.node.isExpandable && item.isExpanded && item.status !== dataStatus.loading\"\n (click)=\"$event.stopPropagation();collapse(item)\"></mat-icon>\n <mat-spinner diameter=\"20\"\n *ngIf=\"item.node.isExpandable && item.status === dataStatus.loading\"></mat-spinner>\n <span *ngIf=\"!item.node.isExpandable\" class=\"not-expandable-padding\"></span>\n\n <mat-icon class=\"{{treeConfig.iconClasses[item.node.type]}}\" color=\"primary\"></mat-icon>\n\n <span class=\"ngssm-tree-node-label\">\n {{item.node.label}}\n </span>\n </div>\n </cdk-virtual-scroll-viewport>\n </mat-card-content>\n</mat-card>","import { Component, ChangeDetectionStrategy, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\n\nimport { NgSsmComponent, Store } from 'ngssm-store';\n\nimport { NodeData } from '../../model';\nimport { selectNgssmTreeState } from '../../state';\nimport { SelectNodeAction } from '../../actions';\n\n@Component({\n selector: 'ngssm-breadcrumb',\n standalone: true,\n imports: [CommonModule, MatIconModule, MatButtonModule],\n templateUrl: './ngssm-breadcrumb.component.html',\n styleUrls: ['./ngssm-breadcrumb.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmBreadcrumbComponent extends NgSsmComponent {\n private readonly _treeId$ = new BehaviorSubject<string | undefined>(undefined);\n private readonly _nodes$ = new BehaviorSubject<NodeData[]>([]);\n\n constructor(store: Store) {\n super(store);\n\n combineLatest([this._treeId$, this.watch((s) => selectNgssmTreeState(s))]).subscribe((values) => {\n if (!values[0]) {\n this._nodes$.next([]);\n return;\n }\n\n const tree = values[1]?.trees[values[0]];\n if (!tree) {\n this._nodes$.next([]);\n return;\n }\n\n const nodesPerId = new Map<string, NodeData>(tree.nodes.map((n) => [n.node.nodeId, n.node]));\n const path: NodeData[] = [];\n let node = tree.selectedNode ? nodesPerId.get(tree.selectedNode) : undefined;\n while (node) {\n path.unshift(node);\n node = node.parentNodeId ? nodesPerId.get(node.parentNodeId) : undefined;\n }\n\n if (path.length === 0 && tree.nodes.length > 0) {\n path.push(tree.nodes[0]?.node);\n }\n\n this._nodes$.next(path);\n });\n }\n\n @Input() public set treeId(value: string) {\n this._treeId$.next(value);\n }\n\n public get nodes$(): Observable<NodeData[]> {\n return this._nodes$.asObservable();\n }\n\n public selectNode(node: NodeData): void {\n const treeId = this._treeId$.getValue();\n if (treeId) {\n this.dispatchAction(new SelectNodeAction(treeId, node.nodeId));\n }\n }\n}\n","<div class=\"flex-row-center\">\n <mat-icon class=\"fa-solid fa-folder-tree\" color=\"primary\"></mat-icon>\n <span *ngFor=\"let node of nodes$ | async; last as last\" class=\"flex-row-center\">\n\n <button mat-button [disabled]=\"last\" (click)=\"selectNode(node)\">\n {{node.label}}\n </button>\n\n <div class=\"ngssm-breadcrumb-separator\" *ngIf=\"!last\">/</div>\n </span>\n</div>","/*\n * Public API Surface of ngssm-tree\n */\n\nexport * from './lib/public-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAY,IAAA,oBAOX;AAPD,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,eAAA,CAAA,GAAA,qCAAqD,CAAA;AACrD,IAAA,mBAAA,CAAA,iBAAA,CAAA,GAAA,uCAAyD,CAAA;AACzD,IAAA,mBAAA,CAAA,YAAA,CAAA,GAAA,kCAA+C,CAAA;AAC/C,IAAA,mBAAA,CAAA,cAAA,CAAA,GAAA,oCAAmD,CAAA;AACnD,IAAA,mBAAA,CAAA,eAAA,CAAA,GAAA,qCAAqD,CAAA;AACrD,IAAA,mBAAA,CAAA,YAAA,CAAA,GAAA,kCAA+C,CAAA;AACjD,CAAC,EAPW,mBAAmB,KAAnB,mBAAmB,GAO9B,EAAA,CAAA,CAAA;;MCLY,UAAU,CAAA;IACrB,WAA4B,CAAA,IAAY,EAAkB,MAAc,EAAA;AAA5C,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;AAAkB,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;KAAI;AAC7E;;ACAK,MAAO,mBAAoB,SAAQ,UAAU,CAAA;AACjD,IAAA,WAAA,CAAY,MAAc,EAAkB,QAAgB,EAAkB,IAAc,EAAA;AAC1F,QAAA,KAAK,CAAC,mBAAmB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AADP,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAQ;AAAkB,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAU;KAE3F;AACF;;ACLK,MAAO,gBAAiB,SAAQ,UAAU,CAAA;IAC9C,WAAY,CAAA,MAAc,EAAkB,MAAc,EAAA;AACxD,QAAA,KAAK,CAAC,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AADJ,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;KAEzD;AACF;;MCDY,mBAAmB,CAAA;IAG9B,WACkB,CAAA,UAAsB,EACtB,MAAc,EACd,YAAoB,EACpB,QAAoB,EAAE,EAAA;AAHtB,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AACtB,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;AACd,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAQ;AACpB,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAiB;AANxB,QAAA,IAAA,CAAA,IAAI,GAAW,mBAAmB,CAAC,aAAa,CAAC;KAO7D;AACL;;ACZK,MAAO,kBAAmB,SAAQ,UAAU,CAAA;IAChD,WAAY,CAAA,MAAc,EAAkB,MAAc,EAAA;AACxD,QAAA,KAAK,CAAC,mBAAmB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AADN,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;KAEzD;AACF;;ACJK,MAAO,gBAAiB,SAAQ,UAAU,CAAA;IAC9C,WAAY,CAAA,MAAc,EAAkB,MAAc,EAAA;AACxD,QAAA,KAAK,CAAC,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AADJ,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;KAEzD;AACF;;ACJK,MAAO,qBAAsB,SAAQ,UAAU,CAAA;AACnD,IAAA,WAAA,CAAY,MAAc,EAAA;AACxB,QAAA,KAAK,CAAC,mBAAmB,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;KACpD;AACF;;MCEY,uBAAuB,GAAG,IAAI,cAAc,CAAuB,yBAAyB;;;ACJlG,MAAM,oBAAoB,GAAG,CAAC,KAAY,KAAqB,KAAK,CAAC,2BAA2B,CAAC,eAAe,EAAoB;AAEpI,MAAM,oBAAoB,GAAG,CAAC,KAAY,EAAE,OAAoC,KACrF,MAAM,CAAC,KAAK,EAAE;AACZ,IAAA,CAAC,2BAA2B,CAAC,eAAe,GAAG,OAAO;AACvD,CAAA,EAAE;AAUE,IAAM,2BAA2B,GAAjC,6BAAA,GAAA,MAAM,2BAA2B,CAAA;;AACf,2BAAe,CAAA,eAAA,GAAG,kBAAkB,CAAC;AACrC,2BAAA,CAAA,YAAY,GAAmB;AACpD,IAAA,KAAK,EAAE,EAAE;CACV,CAAC;AAJS,2BAA2B,GAAA,6BAAA,GAAA,UAAA,CAAA;AAJvC,IAAA,iBAAiB,CAAC;QACjB,eAAe,EAAE,6BAA2B,CAAC,eAAe;QAC5D,YAAY,EAAE,6BAA2B,CAAC,YAAY;KACvD,CAAC;CACW,EAAA,2BAA2B,CAKvC;;MCfY,qBAAqB,CAAA;IAGhC,WAAiE,CAAA,YAAoC,EAAU,MAAc,EAAA;AAA5D,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAwB;AAAU,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;AAF7G,QAAA,IAAgB,CAAA,gBAAA,GAAa,CAAC,mBAAmB,CAAC,UAAU,EAAE,mBAAmB,CAAC,UAAU,CAAC,CAAC;KAEmB;AAE1H,IAAA,aAAa,CAAC,KAAY,EAAE,KAAY,EAAE,MAAc,EAAA;;QAC7D,MAAM,gBAAgB,GAAG,MAA0B,CAAC;AACpD,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE;YAC/D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAsD,mDAAA,EAAA,gBAAgB,CAAC,MAAM,CAAG,CAAA,CAAA,CAAC,CAAC;YACpG,OAAO;AACR,SAAA;AAED,QAAA,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;QACjF,MAAM,WAAW,GAAG,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QACnF,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,wDAAA,EAA2D,gBAAgB,CAAC,MAAM,CAAA,GAAA,EAAM,QAAQ,CAAA,CAAA,CAAG,CAAC,CAAC;YACvH,OAAO;AACR,SAAA;AAED,QAAA,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACrI,QAAA,IAAI,CAAA,IAAI,KAAJ,IAAA,IAAA,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,CAAE,MAAM,MAAK,UAAU,CAAC,OAAO,EAAE;YACvC,OAAO;AACR,SAAA;AAED,QAAA,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;YAC3E,IAAI,EAAE,CAAC,KAAK,KACV,KAAK,CAAC,cAAc,CAAC,IAAI,mBAAmB,CAAC,UAAU,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC3H,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,2CAA2C,gBAAgB,CAAC,MAAM,CAAA,YAAA,EAAe,gBAAgB,CAAC,MAAM,GAAG,EAC3G,KAAK,CACN,CAAC;AACF,gBAAA,KAAK,CAAC,cAAc,CAAC,IAAI,mBAAmB,CAAC,UAAU,CAAC,KAAK,EAAE,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;aACnH;AACF,SAAA,CAAC,CAAC;KACJ;;AAnCU,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,kBAGZ,uBAAuB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;sHAHhC,qBAAqB,EAAA,CAAA,CAAA;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,UAAU;;;8BAII,MAAM;+BAAC,uBAAuB,CAAA;;8BAAG,QAAQ;;;AAmCjD,MAAM,6BAA6B,GAAa;AACrD,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,qBAAqB;AAC/B,IAAA,KAAK,EAAE,IAAI;CACZ;;MCxCY,qBAAqB,CAAA;AADlC,IAAA,WAAA,GAAA;QAEkB,IAAA,CAAA,gBAAgB,GAAa;AAC3C,YAAA,mBAAmB,CAAC,UAAU;AAC9B,YAAA,mBAAmB,CAAC,YAAY;AAChC,YAAA,mBAAmB,CAAC,UAAU;SAC/B,CAAC;KAiGH;IA/FQ,WAAW,CAAC,KAAY,EAAE,MAAc,EAAA;;QAC7C,QAAQ,MAAM,CAAC,IAAI;AACjB,YAAA,KAAK,mBAAmB,CAAC,UAAU,EAAE;gBACnC,MAAM,gBAAgB,GAAG,MAA0B,CAAC;gBACpD,OAAO,oBAAoB,CAAC,KAAK,EAAE;AACjC,oBAAA,KAAK,EAAE;AACL,wBAAA,CAAC,gBAAgB,CAAC,MAAM,GAAG;AACzB,4BAAA,KAAK,EAAE;AACL,gCAAA,MAAM,EAAE,CAAC,KAAsB,KAAI;AACjC,oCAAA,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;oCAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACjF,oCAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,wCAAA,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,wCAAA,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE;AACrC,4CAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAC3B,gDAAA,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;AAC3B,6CAAA,CAAC,CAAC;AACJ,yCAAA;AAAM,6CAAA;AACL,4CAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAC3B,gDAAA,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;AAC1B,gDAAA,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE;AACrC,6CAAA,CAAC,CAAC;AACJ,yCAAA;wCAED,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAC/B,qCAAA;AAED,oCAAA,OAAO,MAAM,CAAC;iCACf;AACF,6BAAA;AACF,yBAAA;AACF,qBAAA;AACF,iBAAA,CAAC,CAAC;AACJ,aAAA;AAED,YAAA,KAAK,mBAAmB,CAAC,YAAY,EAAE;gBACrC,MAAM,kBAAkB,GAAG,MAA4B,CAAC;gBACxD,OAAO,oBAAoB,CAAC,KAAK,EAAE;AACjC,oBAAA,KAAK,EAAE;AACL,wBAAA,CAAC,kBAAkB,CAAC,MAAM,GAAG;AAC3B,4BAAA,KAAK,EAAE;AACL,gCAAA,MAAM,EAAE,CAAC,KAAsB,KAAI;AACjC,oCAAA,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;oCAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACnF,oCAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;wCAChB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACjC,4CAAA,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;AAC5B,yCAAA,CAAC,CAAC;wCAEH,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAC/B,qCAAA;AAED,oCAAA,OAAO,MAAM,CAAC;iCACf;AACF,6BAAA;AACF,yBAAA;AACF,qBAAA;AACF,iBAAA,CAAC,CAAC;AACJ,aAAA;AAED,YAAA,KAAK,mBAAmB,CAAC,UAAU,EAAE;gBACnC,MAAM,gBAAgB,GAAG,MAA0B,CAAC;AACpD,gBAAA,IACE,CAAA,CAAA,EAAA,GAAA,oBAAoB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,gBAAgB,CAAC,MAAM,CAAC,MACnH,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,MAAK,UAAU,CAAC,MAAM,EAChC;oBACA,MAAM;AACP,iBAAA;gBAED,OAAO,oBAAoB,CAAC,KAAK,EAAE;AACjC,oBAAA,KAAK,EAAE;AACL,wBAAA,CAAC,gBAAgB,CAAC,MAAM,GAAG;AACzB,4BAAA,KAAK,EAAE;AACL,gCAAA,MAAM,EAAE,CAAC,KAAsB,KAAI;AACjC,oCAAA,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;oCAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACjF,oCAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;wCAChB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACjC,4CAAA,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE;AACrC,yCAAA,CAAC,CAAC;wCAEH,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAC/B,qCAAA;AAED,oCAAA,OAAO,MAAM,CAAC;iCACf;AACF,6BAAA;AACF,yBAAA;AACF,qBAAA;AACF,iBAAA,CAAC,CAAC;AACJ,aAAA;AACF,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KACd;;kHArGU,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;sHAArB,qBAAqB,EAAA,CAAA,CAAA;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,UAAU;;AAyGJ,MAAM,6BAA6B,GAAa;AACrD,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,QAAQ,EAAE,qBAAqB;AAC/B,IAAA,KAAK,EAAE,IAAI;CACZ;;MChHY,wBAAwB,CAAA;AADrC,IAAA,WAAA,GAAA;QAEkB,IAAA,CAAA,gBAAgB,GAAa,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;KAkB/E;IAhBQ,WAAW,CAAC,KAAY,EAAE,MAAc,EAAA;QAC7C,QAAQ,MAAM,CAAC,IAAI;AACjB,YAAA,KAAK,mBAAmB,CAAC,UAAU,EAAE;gBACnC,MAAM,gBAAgB,GAAG,MAA0B,CAAC;gBACpD,OAAO,oBAAoB,CAAC,KAAK,EAAE;AACjC,oBAAA,KAAK,EAAE;AACL,wBAAA,CAAC,gBAAgB,CAAC,MAAM,GAAG;AACzB,4BAAA,YAAY,EAAE,EAAE,IAAI,EAAE,gBAAgB,CAAC,MAAM,EAAE;AAChD,yBAAA;AACF,qBAAA;AACF,iBAAA,CAAC,CAAC;AACJ,aAAA;AACF,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KACd;;qHAlBU,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;yHAAxB,wBAAwB,EAAA,CAAA,CAAA;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC,UAAU;;AAsBJ,MAAM,gCAAgC,GAAa;AACxD,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,QAAQ,EAAE,wBAAwB;AAClC,IAAA,KAAK,EAAE,IAAI;CACZ;;MCrBY,gBAAgB,CAAA;AAD7B,IAAA,WAAA,GAAA;QAEkB,IAAA,CAAA,gBAAgB,GAAa,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;KAqClF;IAnCQ,WAAW,CAAC,KAAY,EAAE,MAAc,EAAA;QAC7C,QAAQ,MAAM,CAAC,IAAI;AACjB,YAAA,KAAK,mBAAmB,CAAC,aAAa,EAAE;gBACtC,MAAM,mBAAmB,GAAG,MAA6B,CAAC;gBAC1D,OAAO,oBAAoB,CAAC,KAAK,EAAE;AACjC,oBAAA,KAAK,EAAE;AACL,wBAAA,CAAC,mBAAmB,CAAC,MAAM,GAAG;AAC5B,4BAAA,KAAK,EAAE;AACL,gCAAA,MAAM,EAAE,CAAC,KAAsB,KAAI;oCACjC,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,mBAAmB,CAAC,YAAY,CAAC,CAAC;AACzF,oCAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,wCAAA,OAAO,KAAK,CAAC;AACd,qCAAA;oCAED,OAAO;AACL,wCAAA,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;AACxB,wCAAA,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,mBAAmB,CAAC,UAAU,EAAE,EAAE,CAAC;wCAC1E,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;4CACvC,MAAM,EAAE,UAAU,CAAC,IAAI;AACvB,4CAAA,UAAU,EAAE,KAAK;4CACjB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC;AAC7B,4CAAA,IAAI,EAAE,CAAC;AACR,yCAAA,CAAC,CAAC;AACH,wCAAA,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;qCAC1B,CAAC;iCACH;AACF,6BAAA;AACF,yBAAA;AACF,qBAAA;AACF,iBAAA,CAAC,CAAC;AACJ,aAAA;AACF,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KACd;;6GArCU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;iHAAhB,gBAAgB,EAAA,CAAA,CAAA;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;;AAyCJ,MAAM,wBAAwB,GAAa;AAChD,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,QAAQ,EAAE,gBAAgB;AAC1B,IAAA,KAAK,EAAE,IAAI;CACZ;;MC/CY,YAAY,CAAA;AADzB,IAAA,WAAA,GAAA;AAEkB,QAAA,IAAgB,CAAA,gBAAA,GAAa,CAAC,mBAAmB,CAAC,aAAa,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;KAmCvH;IAjCQ,WAAW,CAAC,KAAY,EAAE,MAAc,EAAA;QAC7C,QAAQ,MAAM,CAAC,IAAI;AACjB,YAAA,KAAK,mBAAmB,CAAC,aAAa,EAAE;gBACtC,MAAM,mBAAmB,GAAG,MAA6B,CAAC;gBAC1D,OAAO,oBAAoB,CAAC,KAAK,EAAE;AACjC,oBAAA,KAAK,EAAE;AACL,wBAAA,CAAC,mBAAmB,CAAC,MAAM,GAAG;AAC5B,4BAAA,IAAI,EAAE;AACJ,gCAAA,KAAK,EAAE;AACL,oCAAA;wCACE,MAAM,EAAE,UAAU,CAAC,IAAI;AACvB,wCAAA,UAAU,EAAE,KAAK;AACjB,wCAAA,KAAK,EAAE,CAAC;wCACR,IAAI,EAAE,mBAAmB,CAAC,IAAI;AAC/B,qCAAA;AACF,iCAAA;gCACD,IAAI,EAAE,mBAAmB,CAAC,QAAQ;AACnC,6BAAA;AACF,yBAAA;AACF,qBAAA;AACF,iBAAA,CAAC,CAAC;AACJ,aAAA;AAED,YAAA,KAAK,mBAAmB,CAAC,eAAe,EAAE;gBACxC,MAAM,qBAAqB,GAAG,MAA+B,CAAC;gBAC9D,OAAO,oBAAoB,CAAC,KAAK,EAAE;oBACjC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE;AAClD,iBAAA,CAAC,CAAC;AACJ,aAAA;AACF,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KACd;;yGAnCU,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;6GAAZ,YAAY,EAAA,CAAA,CAAA;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,UAAU;;AAuCJ,MAAM,oBAAoB,GAAa;AAC5C,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,KAAK,EAAE,IAAI;CACZ;;AC5CM,MAAM,gBAAgB,GAAG,MAA2B;AACzD,IAAA,OAAO,wBAAwB,CAAC;QAC9B,oBAAoB;QACpB,6BAA6B;QAC7B,6BAA6B;QAC7B,wBAAwB;QACxB,gCAAgC;AACjC,KAAA,CAAC,CAAC;AACL;;ACQM,MAAO,kBAAmB,SAAQ,cAAc,CAAA;AAOpD,IAAA,WAAA,CAAY,KAAY,EAAA;QACtB,KAAK,CAAC,KAAK,CAAC,CAAC;QAPE,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAA8B,SAAS,CAAC,CAAC;QAC3E,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAkB,EAAE,CAAC,CAAC;QAC5D,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAqB,SAAS,CAAC,CAAC;AAEvE,QAAA,IAAU,CAAA,UAAA,GAAG,UAAU,CAAC;;QAMtC,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,oBAAoB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACjF,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACrC,aAAA,SAAS,CAAC,CAAC,MAAM,KAAI;;AACpB,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;AACd,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC/B,OAAO;AACR,aAAA;YAED,MAAM,UAAU,GAAG,CAAC,CAAW,KAAK,IAAI,CAAC;YACzC,MAAM,MAAM,GAAgC,CAAA,EAAA,GAAA,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,UAAU,CAAC;YAE3E,MAAM,KAAK,GAAoB,EAAE,CAAC;AAClC,YAAA,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;YACrB,CAAC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,KAAI;AACvD,gBAAA,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,UAAU,KAAK,KAAK,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE;AACvE,oBAAA,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC;AACvB,iBAAA;gBAED,IAAI,WAAW,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,WAAW,EAAE;AAChD,oBAAA,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AAClB,wBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACf,qBAAA;AACF,iBAAA;gBAED,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,KAAK,IAAI,WAAW,EAAE;AACjD,oBAAA,WAAW,GAAG,CAAC,CAAC,UAAU,KAAK,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;AACpD,iBAAA;AACH,aAAC,CAAC,CAAC;AAEH,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAElC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA,EAAA,GAAA,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,YAAY,CAAC,CAAC;AACxE,SAAC,CAAC,CAAC;KACN;IAED,IAAa,UAAU,CAAC,KAAyC,EAAA;AAC/D,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,SAAA;KACF;AAED,IAAA,IAAW,WAAW,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;KACzC;AAED,IAAA,IAAW,eAAe,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;KAC7C;AAED,IAAA,IAAW,eAAe,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;KAC7C;IAEM,SAAS,CAAC,CAAS,EAAE,IAAmB,EAAA;AAC7C,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;KACzB;AAEM,IAAA,MAAM,CAAC,IAAmB,EAAA;;QAC/B,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAC;AACpD,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACrE,SAAA;KACF;AAEM,IAAA,QAAQ,CAAC,IAAmB,EAAA;;QACjC,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAC;AACpD,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACvE,SAAA;KACF;AAEM,IAAA,UAAU,CAAC,IAAmB,EAAA;;QACnC,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAC;AACpD,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACrE,SAAA;KACF;;+GAvFU,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,KAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvB/B,gkDAsBW,EAAA,MAAA,EAAA,CAAA,ucAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDJC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,gCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,wBAAwB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FAKpF,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAR9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,cACV,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,wBAAwB,CAAC,EAG/E,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,gkDAAA,EAAA,MAAA,EAAA,CAAA,ucAAA,CAAA,EAAA,CAAA;4FAgDlC,UAAU,EAAA,CAAA;sBAAtB,KAAK;;;AEjDF,MAAO,wBAAyB,SAAQ,cAAc,CAAA;AAI1D,IAAA,WAAA,CAAY,KAAY,EAAA;QACtB,KAAK,CAAC,KAAK,CAAC,CAAC;QAJE,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAAqB,SAAS,CAAC,CAAC;QAC9D,IAAA,CAAA,OAAO,GAAG,IAAI,eAAe,CAAa,EAAE,CAAC,CAAC;AAK7D,QAAA,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;;AAC9F,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;AACd,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACtB,OAAO;AACR,aAAA;AAED,YAAA,MAAM,IAAI,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,CAAC,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACtB,OAAO;AACR,aAAA;AAED,YAAA,MAAM,UAAU,GAAG,IAAI,GAAG,CAAmB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7F,MAAM,IAAI,GAAe,EAAE,CAAC;YAC5B,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;AAC7E,YAAA,OAAO,IAAI,EAAE;AACX,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACnB,gBAAA,IAAI,GAAG,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;AAC1E,aAAA;AAED,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9C,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,CAAC,CAAC;AAChC,aAAA;AAED,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,SAAC,CAAC,CAAC;KACJ;IAED,IAAoB,MAAM,CAAC,KAAa,EAAA;AACtC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;AAED,IAAA,IAAW,MAAM,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;KACpC;AAEM,IAAA,UAAU,CAAC,IAAc,EAAA;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACxC,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAChE,SAAA;KACF;;qHAhDU,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,KAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,iICpBrC,2aAUM,EAAA,MAAA,EAAA,CAAA,gDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDKM,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,mLAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FAK3C,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBARpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAChB,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,CAAC,EAGtC,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,2aAAA,EAAA,MAAA,EAAA,CAAA,gDAAA,CAAA,EAAA,CAAA;4FAqC3B,MAAM,EAAA,CAAA;sBAAzB,KAAK;;;AEvDR;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"ngssm-tree.mjs","sources":["../../../projects/ngssm-tree/src/lib/actions/ngssm-tree-action-type.ts","../../../projects/ngssm-tree/src/lib/actions/tree-action.ts","../../../projects/ngssm-tree/src/lib/actions/init-ngssm-tree.action.ts","../../../projects/ngssm-tree/src/lib/actions/expand-node.action.ts","../../../projects/ngssm-tree/src/lib/actions/register-nodes.action.ts","../../../projects/ngssm-tree/src/lib/actions/collapse-node.action.ts","../../../projects/ngssm-tree/src/lib/actions/select-node.action.ts","../../../projects/ngssm-tree/src/lib/actions/delete-ngssm-tree.action.ts","../../../projects/ngssm-tree/src/lib/model/ngssm-tree-data-service.ts","../../../projects/ngssm-tree/src/lib/state/ngssm-tree.state.ts","../../../projects/ngssm-tree/src/lib/effects/tree-node-loading.effect.ts","../../../projects/ngssm-tree/src/lib/reducers/tree-node-expand.reducer.ts","../../../projects/ngssm-tree/src/lib/reducers/tree-node-selection.reducer.ts","../../../projects/ngssm-tree/src/lib/reducers/tree-nodes.reducer.ts","../../../projects/ngssm-tree/src/lib/reducers/trees.reducer.ts","../../../projects/ngssm-tree/src/lib/provide-ngssm-tree.ts","../../../projects/ngssm-tree/src/lib/components/ngssm-tree/ngssm-tree.component.ts","../../../projects/ngssm-tree/src/lib/components/ngssm-tree/ngssm-tree.component.html","../../../projects/ngssm-tree/src/lib/components/ngssm-breadcrumb/ngssm-breadcrumb.component.ts","../../../projects/ngssm-tree/src/lib/components/ngssm-breadcrumb/ngssm-breadcrumb.component.html","../../../projects/ngssm-tree/src/public-api.ts","../../../projects/ngssm-tree/src/ngssm-tree.ts"],"sourcesContent":["export enum NgssmTreeActionType {\n initNgssmTree = '[NgssmTreeActionType] initNgssmTree',\n deleteNgssmTree = '[NgssmTreeActionType] deleteNgssmTree',\n expandNode = '[NgssmTreeActionType] expandNode',\n collapseNode = '[NgssmTreeActionType] collapseNode',\n registerNodes = '[NgssmTreeActionType] registerNodes',\n selectNode = '[NgssmTreeActionType] selectNode'\n}\n","import { Action } from 'ngssm-store';\n\nexport class TreeAction implements Action {\n constructor(public readonly type: string, public readonly treeId: string) {}\n}\n","import { NodeData } from '../model';\nimport { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class InitNgssmTreeAction extends TreeAction {\n constructor(treeId: string, public readonly treeType: string, public readonly root: NodeData) {\n super(NgssmTreeActionType.initNgssmTree, treeId);\n }\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class ExpandNodeAction extends TreeAction {\n constructor(treeId: string, public readonly nodeId: string) {\n super(NgssmTreeActionType.expandNode, treeId);\n }\n}\n","import { DataStatus } from 'ngssm-remote-data';\nimport { Action } from 'ngssm-store';\n\nimport { NodeData } from '../model';\nimport { NgssmTreeActionType } from './ngssm-tree-action-type';\n\nexport class RegisterNodesAction implements Action {\n public readonly type: string = NgssmTreeActionType.registerNodes;\n\n constructor(\n public readonly dataStatus: DataStatus,\n public readonly treeId: string,\n public readonly parentNodeId: string,\n public readonly nodes: NodeData[] = []\n ) {}\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class CollapseNodeAction extends TreeAction {\n constructor(treeId: string, public readonly nodeId: string) {\n super(NgssmTreeActionType.collapseNode, treeId);\n }\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class SelectNodeAction extends TreeAction {\n constructor(treeId: string, public readonly nodeId: string) {\n super(NgssmTreeActionType.selectNode, treeId);\n }\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class DeleteNgssmTreeAction extends TreeAction {\n constructor(treeId: string) {\n super(NgssmTreeActionType.deleteNgssmTree, treeId);\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { NodeData } from './node-data';\n\nexport interface NgssmTreeDataService {\n readonly treeType: string;\n load(treeId: string, nodeId: string): Observable<NodeData[]>;\n}\n\nexport const NGSSM_TREE_DATA_SERVICE = new InjectionToken<NgssmTreeDataService>('NGSSM_TREE_DATA_SERVICE');\n","import update, { Spec } from 'immutability-helper';\n\nimport { NgSsmFeatureState, State } from 'ngssm-store';\nimport { NgssmTree } from '../model';\n\nexport const selectNgssmTreeState = (state: State): NgssmTreeState => state[NgssmTreeStateSpecification.featureStateKey] as NgssmTreeState;\n\nexport const updateNgssmTreeState = (state: State, command: Spec<NgssmTreeState, never>): State =>\n update(state, {\n [NgssmTreeStateSpecification.featureStateKey]: command\n });\n\nexport interface NgssmTreeState {\n trees: { [key: string]: NgssmTree };\n}\n\n@NgSsmFeatureState({\n featureStateKey: NgssmTreeStateSpecification.featureStateKey,\n initialState: NgssmTreeStateSpecification.initialState\n})\nexport class NgssmTreeStateSpecification {\n public static readonly featureStateKey = 'ngssm-tree-state';\n public static readonly initialState: NgssmTreeState = {\n trees: {}\n };\n}\n","import { Inject, Injectable, Optional, Provider } from '@angular/core';\n\nimport { DataStatus } from 'ngssm-remote-data';\nimport { Effect, Store, State, Action, NGSSM_EFFECT, Logger } from 'ngssm-store';\n\nimport { ExpandNodeAction, NgssmTreeActionType, RegisterNodesAction } from '../actions';\nimport { NgssmTreeDataService, NGSSM_TREE_DATA_SERVICE } from '../model';\nimport { selectNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodeLoadingEffect implements Effect {\n public readonly processedActions: string[] = [NgssmTreeActionType.expandNode, NgssmTreeActionType.selectNode];\n\n constructor(@Inject(NGSSM_TREE_DATA_SERVICE) @Optional() private dataServices: NgssmTreeDataService[], private logger: Logger) {}\n\n public processAction(store: Store, state: State, action: Action): void {\n const expandNodeAction = action as ExpandNodeAction;\n if (!selectNgssmTreeState(state).trees[expandNodeAction.treeId]) {\n this.logger.error(`Trying to process action for tree not initialized: ${expandNodeAction.treeId}.`);\n return;\n }\n\n const treeType = selectNgssmTreeState(state).trees[expandNodeAction.treeId].type;\n const dataService = (this.dataServices ?? []).find((d) => d.treeType === treeType);\n if (!dataService) {\n this.logger.error(`Trying to process action for tree with no data service: ${expandNodeAction.treeId} / ${treeType}.`);\n return;\n }\n\n const node = selectNgssmTreeState(state).trees[expandNodeAction.treeId].nodes.find((n) => n.node.nodeId === expandNodeAction.nodeId);\n if (node?.status !== DataStatus.loading) {\n return;\n }\n\n dataService.load(expandNodeAction.treeId, expandNodeAction.nodeId).subscribe({\n next: (value) =>\n store.dispatchAction(new RegisterNodesAction(DataStatus.loaded, expandNodeAction.treeId, expandNodeAction.nodeId, value)),\n error: (error) => {\n this.logger.error(\n `Unable to load children nodes for tree '${expandNodeAction.treeId}' and node '${expandNodeAction.nodeId}'`,\n error\n );\n store.dispatchAction(new RegisterNodesAction(DataStatus.error, expandNodeAction.treeId, expandNodeAction.nodeId));\n }\n });\n }\n}\n\nexport const treeNodeLoadingEffectProvider: Provider = {\n provide: NGSSM_EFFECT,\n useClass: TreeNodeLoadingEffect,\n multi: true\n};\n","import { Injectable, Provider } from '@angular/core';\n\nimport update from 'immutability-helper';\n\nimport { DataStatus } from 'ngssm-remote-data';\nimport { Reducer, State, Action, NGSSM_REDUCER } from 'ngssm-store';\n\nimport { CollapseNodeAction, ExpandNodeAction, NgssmTreeActionType, SelectNodeAction } from '../actions';\nimport { NgssmTreeNode } from '../model';\nimport { selectNgssmTreeState, updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodeExpandReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmTreeActionType.expandNode,\n NgssmTreeActionType.collapseNode,\n NgssmTreeActionType.selectNode\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.expandNode: {\n const expandNodeAction = action as ExpandNodeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [expandNodeAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const result = [...nodes];\n const index = result.findIndex((n) => n.node.nodeId === expandNodeAction.nodeId);\n if (index !== -1) {\n let item = result[index];\n if (item.status === DataStatus.loaded) {\n item = update(result[index], {\n isExpanded: { $set: true }\n });\n } else {\n item = update(result[index], {\n isExpanded: { $set: true },\n status: { $set: DataStatus.loading }\n });\n }\n\n result.splice(index, 1, item);\n }\n\n return result;\n }\n }\n }\n }\n });\n }\n\n case NgssmTreeActionType.collapseNode: {\n const collapseNodeAction = action as CollapseNodeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [collapseNodeAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const result = [...nodes];\n const index = result.findIndex((n) => n.node.nodeId === collapseNodeAction.nodeId);\n if (index !== -1) {\n const item = update(result[index], {\n isExpanded: { $set: false }\n });\n\n result.splice(index, 1, item);\n }\n\n return result;\n }\n }\n }\n }\n });\n }\n\n case NgssmTreeActionType.selectNode: {\n const selectNodeAction = action as SelectNodeAction;\n if (\n selectNgssmTreeState(state).trees[selectNodeAction.treeId].nodes.find((n) => n.node.nodeId === selectNodeAction.nodeId)\n ?.status === DataStatus.loaded\n ) {\n break;\n }\n\n return updateNgssmTreeState(state, {\n trees: {\n [selectNodeAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const result = [...nodes];\n const index = result.findIndex((n) => n.node.nodeId === selectNodeAction.nodeId);\n if (index !== -1) {\n const item = update(result[index], {\n status: { $set: DataStatus.loading }\n });\n\n result.splice(index, 1, item);\n }\n\n return result;\n }\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n\nexport const treeNodeExpandReducerProvider: Provider = {\n provide: NGSSM_REDUCER,\n useClass: TreeNodeExpandReducer,\n multi: true\n};\n","import { Injectable, Provider } from '@angular/core';\n\nimport { Reducer, State, Action, NGSSM_REDUCER } from 'ngssm-store';\n\nimport { NgssmTreeActionType, SelectNodeAction } from '../actions';\nimport { updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodeSelectionReducer implements Reducer {\n public readonly processedActions: string[] = [NgssmTreeActionType.selectNode];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.selectNode: {\n const selectNodeAction = action as SelectNodeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [selectNodeAction.treeId]: {\n selectedNode: { $set: selectNodeAction.nodeId }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n\nexport const treeNodeSelectionReducerProvider: Provider = {\n provide: NGSSM_REDUCER,\n useClass: TreeNodeSelectionReducer,\n multi: true\n};\n","import { Injectable, Provider } from '@angular/core';\n\nimport update from 'immutability-helper';\nimport { DataStatus } from 'ngssm-remote-data';\n\nimport { Reducer, State, Action, NGSSM_REDUCER } from 'ngssm-store';\n\nimport { NgssmTreeActionType, RegisterNodesAction } from '../actions';\nimport { NgssmTreeNode } from '../model';\nimport { updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodesReducer implements Reducer {\n public readonly processedActions: string[] = [NgssmTreeActionType.registerNodes];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.registerNodes: {\n const registerNodesAction = action as RegisterNodesAction;\n return updateNgssmTreeState(state, {\n trees: {\n [registerNodesAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const index = nodes.findIndex((n) => n.node.nodeId === registerNodesAction.parentNodeId);\n if (index === -1) {\n return nodes;\n }\n\n return [\n ...nodes.slice(0, index),\n update(nodes[index], { status: { $set: registerNodesAction.dataStatus } }),\n ...registerNodesAction.nodes.map((i) => ({\n status: DataStatus.none,\n isExpanded: false,\n level: nodes[index].level + 1,\n node: i\n })),\n ...nodes.slice(index + 1)\n ];\n }\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n\nexport const treeNodesReducerProvider: Provider = {\n provide: NGSSM_REDUCER,\n useClass: TreeNodesReducer,\n multi: true\n};\n","import { Injectable, Provider } from '@angular/core';\nimport { DataStatus } from 'ngssm-remote-data';\n\nimport { Reducer, State, Action, NGSSM_REDUCER } from 'ngssm-store';\n\nimport { DeleteNgssmTreeAction, InitNgssmTreeAction, NgssmTreeActionType } from '../actions';\nimport { updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreesReducer implements Reducer {\n public readonly processedActions: string[] = [NgssmTreeActionType.initNgssmTree, NgssmTreeActionType.deleteNgssmTree];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.initNgssmTree: {\n const initNgssmTreeAction = action as InitNgssmTreeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [initNgssmTreeAction.treeId]: {\n $set: {\n nodes: [\n {\n status: DataStatus.none,\n isExpanded: false,\n level: 0,\n node: initNgssmTreeAction.root\n }\n ],\n type: initNgssmTreeAction.treeType\n }\n }\n }\n });\n }\n\n case NgssmTreeActionType.deleteNgssmTree: {\n const deleteNgssmTreeAction = action as DeleteNgssmTreeAction;\n return updateNgssmTreeState(state, {\n trees: { $unset: [deleteNgssmTreeAction.treeId] }\n });\n }\n }\n\n return state;\n }\n}\n\nexport const treesReducerProvider: Provider = {\n provide: NGSSM_REDUCER,\n useClass: TreesReducer,\n multi: true\n};\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { treeNodeLoadingEffectProvider } from './effects/tree-node-loading.effect';\nimport { treeNodeExpandReducerProvider } from './reducers/tree-node-expand.reducer';\nimport { treeNodeSelectionReducerProvider } from './reducers/tree-node-selection.reducer';\nimport { treeNodesReducerProvider } from './reducers/tree-nodes.reducer';\nimport { treesReducerProvider } from './reducers/trees.reducer';\n\nexport const provideNgssmTree = (): EnvironmentProviders => {\n return makeEnvironmentProviders([\n treesReducerProvider,\n treeNodeExpandReducerProvider,\n treeNodeLoadingEffectProvider,\n treeNodesReducerProvider,\n treeNodeSelectionReducerProvider\n ]);\n};\n","import { Component, ChangeDetectionStrategy, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\n\nimport { NgSsmComponent, Store } from 'ngssm-store';\nimport { DataStatus } from 'ngssm-remote-data';\n\nimport { NgssmTree, NgssmTreeConfig, NgssmTreeNode, NodeData } from '../../model';\nimport { selectNgssmTreeState } from '../../state';\nimport { CollapseNodeAction, ExpandNodeAction, SelectNodeAction } from '../../actions';\n\n@Component({\n selector: 'ngssm-tree',\n standalone: true,\n imports: [CommonModule, ScrollingModule, MatCardModule, MatIconModule, MatProgressSpinnerModule],\n templateUrl: './ngssm-tree.component.html',\n styleUrls: ['./ngssm-tree.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmTreeComponent extends NgSsmComponent {\n private readonly _treeConfig$ = new BehaviorSubject<NgssmTreeConfig | undefined>(undefined);\n private readonly _displayedItems$ = new BehaviorSubject<NgssmTreeNode[]>([]);\n private readonly _selectedNodeId$ = new BehaviorSubject<string | undefined>(undefined);\n\n private treeSubscription: Subscription | undefined;\n\n public readonly dataStatus = DataStatus;\n\n constructor(store: Store) {\n super(store);\n }\n\n @Input() set treeConfig(value: NgssmTreeConfig | undefined | null) {\n if (value) {\n this._treeConfig$.next({ ...value });\n\n this.treeSubscription?.unsubscribe();\n this.treeSubscription = this.watch((s) => selectNgssmTreeState(s).trees[value.treeId]).subscribe((tree: NgssmTree | undefined) => {\n const config = this._treeConfig$.getValue();\n if (!tree || !config) {\n this._displayedItems$.next([]);\n return;\n }\n\n const alwaysTrue = (_: NodeData) => true;\n const filter: (node: NodeData) => boolean = config.filter ?? alwaysTrue;\n\n const items: NgssmTreeNode[] = [];\n let hiddenLevel = -1;\n const nodesToFindSelected = new Map<string, { isDisplayed: boolean; node: NgssmTreeNode }>();\n (tree.nodes ?? []).forEach((t) => {\n if (t.node.isExpandable && t.isExpanded === false && hiddenLevel === -1) {\n hiddenLevel = t.level;\n }\n\n if (hiddenLevel === -1 || t.level <= hiddenLevel) {\n if (filter(t.node)) {\n items.push(t);\n nodesToFindSelected.set(t.node.nodeId, { isDisplayed: true, node: t });\n }\n }\n\n if (t.node.isExpandable && t.level <= hiddenLevel) {\n hiddenLevel = t.isExpanded === true ? -1 : t.level;\n }\n\n if (!nodesToFindSelected.has(t.node.nodeId)) {\n nodesToFindSelected.set(t.node.nodeId, { isDisplayed: false, node: t });\n }\n });\n\n this._displayedItems$.next(items);\n\n let selectedNode = tree.selectedNode;\n if (!selectedNode) {\n this._selectedNodeId$.next(undefined);\n } else {\n while (selectedNode) {\n const item = nodesToFindSelected.get(selectedNode);\n if (item?.isDisplayed !== true) {\n selectedNode = item?.node.node.parentNodeId;\n } else {\n break;\n }\n }\n\n this._selectedNodeId$.next(selectedNode);\n }\n });\n }\n }\n\n public get treeConfig$(): Observable<NgssmTreeConfig | undefined> {\n return this._treeConfig$.asObservable();\n }\n\n public get displayedItems$(): Observable<NgssmTreeNode[]> {\n return this._displayedItems$.asObservable();\n }\n\n public get selectedNodeId$(): Observable<string | undefined> {\n return this._selectedNodeId$.asObservable();\n }\n\n public getItemId(_: number, node: NgssmTreeNode): string {\n return node.node.nodeId;\n }\n\n public expand(node: NgssmTreeNode): void {\n const treeId = this._treeConfig$.getValue()?.treeId;\n if (treeId) {\n this.dispatchAction(new ExpandNodeAction(treeId, node.node.nodeId));\n }\n }\n\n public collapse(node: NgssmTreeNode): void {\n const treeId = this._treeConfig$.getValue()?.treeId;\n if (treeId) {\n this.dispatchAction(new CollapseNodeAction(treeId, node.node.nodeId));\n }\n }\n\n public selectNode(node: NgssmTreeNode): void {\n const treeId = this._treeConfig$.getValue()?.treeId;\n if (treeId) {\n this.dispatchAction(new SelectNodeAction(treeId, node.node.nodeId));\n }\n }\n}\n","<mat-card class=\"flex-column-stretch fxFlex\">\n <mat-card-content class=\"flex-column-stretch fxFlex\" *ngIf=\"(treeConfig$ | async) as treeConfig\">\n <cdk-virtual-scroll-viewport itemSize=\"30\" class=\"fxFlex\">\n <div *cdkVirtualFor=\"let item of displayedItems$ | async; trackBy: getItemId\" class=\"ngssm-tree-node\"\n [style.padding-left.px]=\"item.level * 20\" (click)=\"selectNode(item)\"\n [ngClass]=\"{'selected' : (selectedNodeId$ | async) === item.node.nodeId}\">\n <mat-icon class=\"fa-solid fa-chevron-right\" *ngIf=\"item.node.isExpandable && item.isExpanded === false && item.status !== dataStatus.loading\"\n (click)=\"$event.stopPropagation();expand(item);\"></mat-icon>\n <mat-icon class=\"fa-solid fa-chevron-down\" *ngIf=\"item.node.isExpandable && item.isExpanded && item.status !== dataStatus.loading\"\n (click)=\"$event.stopPropagation();collapse(item)\"></mat-icon>\n <mat-spinner diameter=\"20\"\n *ngIf=\"item.node.isExpandable && item.status === dataStatus.loading\"></mat-spinner>\n <span *ngIf=\"!item.node.isExpandable\" class=\"not-expandable-padding\"></span>\n\n <mat-icon class=\"{{treeConfig.iconClasses[item.node.type]}}\" color=\"primary\"></mat-icon>\n\n <span class=\"ngssm-tree-node-label\">\n {{item.node.label}}\n </span>\n </div>\n </cdk-virtual-scroll-viewport>\n </mat-card-content>\n</mat-card>","import { Component, ChangeDetectionStrategy, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\n\nimport { NgSsmComponent, Store } from 'ngssm-store';\n\nimport { NodeData } from '../../model';\nimport { selectNgssmTreeState } from '../../state';\nimport { SelectNodeAction } from '../../actions';\n\n@Component({\n selector: 'ngssm-breadcrumb',\n standalone: true,\n imports: [CommonModule, MatIconModule, MatButtonModule],\n templateUrl: './ngssm-breadcrumb.component.html',\n styleUrls: ['./ngssm-breadcrumb.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmBreadcrumbComponent extends NgSsmComponent {\n private readonly _treeId$ = new BehaviorSubject<string | undefined>(undefined);\n private readonly _nodes$ = new BehaviorSubject<NodeData[]>([]);\n\n constructor(store: Store) {\n super(store);\n\n combineLatest([this._treeId$, this.watch((s) => selectNgssmTreeState(s))]).subscribe((values) => {\n if (!values[0]) {\n this._nodes$.next([]);\n return;\n }\n\n const tree = values[1]?.trees[values[0]];\n if (!tree) {\n this._nodes$.next([]);\n return;\n }\n\n const nodesPerId = new Map<string, NodeData>(tree.nodes.map((n) => [n.node.nodeId, n.node]));\n const path: NodeData[] = [];\n let node = tree.selectedNode ? nodesPerId.get(tree.selectedNode) : undefined;\n while (node) {\n path.unshift(node);\n node = node.parentNodeId ? nodesPerId.get(node.parentNodeId) : undefined;\n }\n\n if (path.length === 0 && tree.nodes.length > 0) {\n path.push(tree.nodes[0]?.node);\n }\n\n this._nodes$.next(path);\n });\n }\n\n @Input() public set treeId(value: string) {\n this._treeId$.next(value);\n }\n\n public get nodes$(): Observable<NodeData[]> {\n return this._nodes$.asObservable();\n }\n\n public selectNode(node: NodeData): void {\n const treeId = this._treeId$.getValue();\n if (treeId) {\n this.dispatchAction(new SelectNodeAction(treeId, node.nodeId));\n }\n }\n}\n","<div class=\"flex-row-center\">\n <mat-icon class=\"fa-solid fa-folder-tree\" color=\"primary\"></mat-icon>\n <span *ngFor=\"let node of nodes$ | async; last as last\" class=\"flex-row-center\">\n\n <button mat-button [disabled]=\"last\" (click)=\"selectNode(node)\">\n {{node.label}}\n </button>\n\n <div class=\"ngssm-breadcrumb-separator\" *ngIf=\"!last\">/</div>\n </span>\n</div>","/*\n * Public API Surface of ngssm-tree\n */\n\nexport * from './lib/public-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4"],"mappings":"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"}
@@ -15,7 +15,7 @@ import * as i5 from '@angular/material/icon';
15
15
  import { MatIconModule } from '@angular/material/icon';
16
16
  import * as i6 from '@angular/material/progress-spinner';
17
17
  import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
18
- import { BehaviorSubject, combineLatest, takeUntil } from 'rxjs';
18
+ import { BehaviorSubject, combineLatest } from 'rxjs';
19
19
  import * as i4$1 from '@angular/material/button';
20
20
  import { MatButtonModule } from '@angular/material/button';
21
21
 
@@ -396,38 +396,57 @@ class NgssmTreeComponent extends NgSsmComponent {
396
396
  this._displayedItems$ = new BehaviorSubject([]);
397
397
  this._selectedNodeId$ = new BehaviorSubject(undefined);
398
398
  this.dataStatus = DataStatus;
399
- // TODO - start watching when treeConfig is set
400
- combineLatest([this._treeConfig$, this.watch((s) => selectNgssmTreeState(s).trees)])
401
- .pipe(takeUntil(this.unsubscribeAll$))
402
- .subscribe((values) => {
403
- if (!values[0]) {
404
- this._displayedItems$.next([]);
405
- return;
406
- }
407
- const alwaysTrue = (_) => true;
408
- const filter = values[0].filter ?? alwaysTrue;
409
- const items = [];
410
- let hiddenLevel = -1;
411
- (values[1][values[0].treeId]?.nodes ?? []).forEach((t) => {
412
- if (t.node.isExpandable && t.isExpanded === false && hiddenLevel === -1) {
413
- hiddenLevel = t.level;
399
+ }
400
+ set treeConfig(value) {
401
+ if (value) {
402
+ this._treeConfig$.next({ ...value });
403
+ this.treeSubscription?.unsubscribe();
404
+ this.treeSubscription = this.watch((s) => selectNgssmTreeState(s).trees[value.treeId]).subscribe((tree) => {
405
+ const config = this._treeConfig$.getValue();
406
+ if (!tree || !config) {
407
+ this._displayedItems$.next([]);
408
+ return;
414
409
  }
415
- if (hiddenLevel === -1 || t.level <= hiddenLevel) {
416
- if (filter(t.node)) {
417
- items.push(t);
410
+ const alwaysTrue = (_) => true;
411
+ const filter = config.filter ?? alwaysTrue;
412
+ const items = [];
413
+ let hiddenLevel = -1;
414
+ const nodesToFindSelected = new Map();
415
+ (tree.nodes ?? []).forEach((t) => {
416
+ if (t.node.isExpandable && t.isExpanded === false && hiddenLevel === -1) {
417
+ hiddenLevel = t.level;
418
+ }
419
+ if (hiddenLevel === -1 || t.level <= hiddenLevel) {
420
+ if (filter(t.node)) {
421
+ items.push(t);
422
+ nodesToFindSelected.set(t.node.nodeId, { isDisplayed: true, node: t });
423
+ }
424
+ }
425
+ if (t.node.isExpandable && t.level <= hiddenLevel) {
426
+ hiddenLevel = t.isExpanded === true ? -1 : t.level;
418
427
  }
428
+ if (!nodesToFindSelected.has(t.node.nodeId)) {
429
+ nodesToFindSelected.set(t.node.nodeId, { isDisplayed: false, node: t });
430
+ }
431
+ });
432
+ this._displayedItems$.next(items);
433
+ let selectedNode = tree.selectedNode;
434
+ if (!selectedNode) {
435
+ this._selectedNodeId$.next(undefined);
419
436
  }
420
- if (t.node.isExpandable && t.level <= hiddenLevel) {
421
- hiddenLevel = t.isExpanded === true ? -1 : t.level;
437
+ else {
438
+ while (selectedNode) {
439
+ const item = nodesToFindSelected.get(selectedNode);
440
+ if (item?.isDisplayed !== true) {
441
+ selectedNode = item?.node.node.parentNodeId;
442
+ }
443
+ else {
444
+ break;
445
+ }
446
+ }
447
+ this._selectedNodeId$.next(selectedNode);
422
448
  }
423
449
  });
424
- this._displayedItems$.next(items);
425
- this._selectedNodeId$.next(values[1][values[0].treeId]?.selectedNode);
426
- });
427
- }
428
- set treeConfig(value) {
429
- if (value) {
430
- this._treeConfig$.next(value);
431
450
  }
432
451
  }
433
452
  get treeConfig$() {
@@ -1 +1 @@
1
- {"version":3,"file":"ngssm-tree.mjs","sources":["../../../projects/ngssm-tree/src/lib/actions/ngssm-tree-action-type.ts","../../../projects/ngssm-tree/src/lib/actions/tree-action.ts","../../../projects/ngssm-tree/src/lib/actions/init-ngssm-tree.action.ts","../../../projects/ngssm-tree/src/lib/actions/expand-node.action.ts","../../../projects/ngssm-tree/src/lib/actions/register-nodes.action.ts","../../../projects/ngssm-tree/src/lib/actions/collapse-node.action.ts","../../../projects/ngssm-tree/src/lib/actions/select-node.action.ts","../../../projects/ngssm-tree/src/lib/actions/delete-ngssm-tree.action.ts","../../../projects/ngssm-tree/src/lib/model/ngssm-tree-data-service.ts","../../../projects/ngssm-tree/src/lib/state/ngssm-tree.state.ts","../../../projects/ngssm-tree/src/lib/effects/tree-node-loading.effect.ts","../../../projects/ngssm-tree/src/lib/reducers/tree-node-expand.reducer.ts","../../../projects/ngssm-tree/src/lib/reducers/tree-node-selection.reducer.ts","../../../projects/ngssm-tree/src/lib/reducers/tree-nodes.reducer.ts","../../../projects/ngssm-tree/src/lib/reducers/trees.reducer.ts","../../../projects/ngssm-tree/src/lib/provide-ngssm-tree.ts","../../../projects/ngssm-tree/src/lib/components/ngssm-tree/ngssm-tree.component.ts","../../../projects/ngssm-tree/src/lib/components/ngssm-tree/ngssm-tree.component.html","../../../projects/ngssm-tree/src/lib/components/ngssm-breadcrumb/ngssm-breadcrumb.component.ts","../../../projects/ngssm-tree/src/lib/components/ngssm-breadcrumb/ngssm-breadcrumb.component.html","../../../projects/ngssm-tree/src/public-api.ts","../../../projects/ngssm-tree/src/ngssm-tree.ts"],"sourcesContent":["export enum NgssmTreeActionType {\n initNgssmTree = '[NgssmTreeActionType] initNgssmTree',\n deleteNgssmTree = '[NgssmTreeActionType] deleteNgssmTree',\n expandNode = '[NgssmTreeActionType] expandNode',\n collapseNode = '[NgssmTreeActionType] collapseNode',\n registerNodes = '[NgssmTreeActionType] registerNodes',\n selectNode = '[NgssmTreeActionType] selectNode'\n}\n","import { Action } from 'ngssm-store';\n\nexport class TreeAction implements Action {\n constructor(public readonly type: string, public readonly treeId: string) {}\n}\n","import { NodeData } from '../model';\nimport { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class InitNgssmTreeAction extends TreeAction {\n constructor(treeId: string, public readonly treeType: string, public readonly root: NodeData) {\n super(NgssmTreeActionType.initNgssmTree, treeId);\n }\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class ExpandNodeAction extends TreeAction {\n constructor(treeId: string, public readonly nodeId: string) {\n super(NgssmTreeActionType.expandNode, treeId);\n }\n}\n","import { DataStatus } from 'ngssm-remote-data';\nimport { Action } from 'ngssm-store';\n\nimport { NodeData } from '../model';\nimport { NgssmTreeActionType } from './ngssm-tree-action-type';\n\nexport class RegisterNodesAction implements Action {\n public readonly type: string = NgssmTreeActionType.registerNodes;\n\n constructor(\n public readonly dataStatus: DataStatus,\n public readonly treeId: string,\n public readonly parentNodeId: string,\n public readonly nodes: NodeData[] = []\n ) {}\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class CollapseNodeAction extends TreeAction {\n constructor(treeId: string, public readonly nodeId: string) {\n super(NgssmTreeActionType.collapseNode, treeId);\n }\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class SelectNodeAction extends TreeAction {\n constructor(treeId: string, public readonly nodeId: string) {\n super(NgssmTreeActionType.selectNode, treeId);\n }\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class DeleteNgssmTreeAction extends TreeAction {\n constructor(treeId: string) {\n super(NgssmTreeActionType.deleteNgssmTree, treeId);\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { NodeData } from './node-data';\n\nexport interface NgssmTreeDataService {\n readonly treeType: string;\n load(treeId: string, nodeId: string): Observable<NodeData[]>;\n}\n\nexport const NGSSM_TREE_DATA_SERVICE = new InjectionToken<NgssmTreeDataService>('NGSSM_TREE_DATA_SERVICE');\n","import update, { Spec } from 'immutability-helper';\n\nimport { NgSsmFeatureState, State } from 'ngssm-store';\nimport { NgssmTree } from '../model';\n\nexport const selectNgssmTreeState = (state: State): NgssmTreeState => state[NgssmTreeStateSpecification.featureStateKey] as NgssmTreeState;\n\nexport const updateNgssmTreeState = (state: State, command: Spec<NgssmTreeState, never>): State =>\n update(state, {\n [NgssmTreeStateSpecification.featureStateKey]: command\n });\n\nexport interface NgssmTreeState {\n trees: { [key: string]: NgssmTree };\n}\n\n@NgSsmFeatureState({\n featureStateKey: NgssmTreeStateSpecification.featureStateKey,\n initialState: NgssmTreeStateSpecification.initialState\n})\nexport class NgssmTreeStateSpecification {\n public static readonly featureStateKey = 'ngssm-tree-state';\n public static readonly initialState: NgssmTreeState = {\n trees: {}\n };\n}\n","import { Inject, Injectable, Optional, Provider } from '@angular/core';\n\nimport { DataStatus } from 'ngssm-remote-data';\nimport { Effect, Store, State, Action, NGSSM_EFFECT, Logger } from 'ngssm-store';\n\nimport { ExpandNodeAction, NgssmTreeActionType, RegisterNodesAction } from '../actions';\nimport { NgssmTreeDataService, NGSSM_TREE_DATA_SERVICE } from '../model';\nimport { selectNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodeLoadingEffect implements Effect {\n public readonly processedActions: string[] = [NgssmTreeActionType.expandNode, NgssmTreeActionType.selectNode];\n\n constructor(@Inject(NGSSM_TREE_DATA_SERVICE) @Optional() private dataServices: NgssmTreeDataService[], private logger: Logger) {}\n\n public processAction(store: Store, state: State, action: Action): void {\n const expandNodeAction = action as ExpandNodeAction;\n if (!selectNgssmTreeState(state).trees[expandNodeAction.treeId]) {\n this.logger.error(`Trying to process action for tree not initialized: ${expandNodeAction.treeId}.`);\n return;\n }\n\n const treeType = selectNgssmTreeState(state).trees[expandNodeAction.treeId].type;\n const dataService = (this.dataServices ?? []).find((d) => d.treeType === treeType);\n if (!dataService) {\n this.logger.error(`Trying to process action for tree with no data service: ${expandNodeAction.treeId} / ${treeType}.`);\n return;\n }\n\n const node = selectNgssmTreeState(state).trees[expandNodeAction.treeId].nodes.find((n) => n.node.nodeId === expandNodeAction.nodeId);\n if (node?.status !== DataStatus.loading) {\n return;\n }\n\n dataService.load(expandNodeAction.treeId, expandNodeAction.nodeId).subscribe({\n next: (value) =>\n store.dispatchAction(new RegisterNodesAction(DataStatus.loaded, expandNodeAction.treeId, expandNodeAction.nodeId, value)),\n error: (error) => {\n this.logger.error(\n `Unable to load children nodes for tree '${expandNodeAction.treeId}' and node '${expandNodeAction.nodeId}'`,\n error\n );\n store.dispatchAction(new RegisterNodesAction(DataStatus.error, expandNodeAction.treeId, expandNodeAction.nodeId));\n }\n });\n }\n}\n\nexport const treeNodeLoadingEffectProvider: Provider = {\n provide: NGSSM_EFFECT,\n useClass: TreeNodeLoadingEffect,\n multi: true\n};\n","import { Injectable, Provider } from '@angular/core';\n\nimport update from 'immutability-helper';\n\nimport { DataStatus } from 'ngssm-remote-data';\nimport { Reducer, State, Action, NGSSM_REDUCER } from 'ngssm-store';\n\nimport { CollapseNodeAction, ExpandNodeAction, NgssmTreeActionType, SelectNodeAction } from '../actions';\nimport { NgssmTreeNode } from '../model';\nimport { selectNgssmTreeState, updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodeExpandReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmTreeActionType.expandNode,\n NgssmTreeActionType.collapseNode,\n NgssmTreeActionType.selectNode\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.expandNode: {\n const expandNodeAction = action as ExpandNodeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [expandNodeAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const result = [...nodes];\n const index = result.findIndex((n) => n.node.nodeId === expandNodeAction.nodeId);\n if (index !== -1) {\n let item = result[index];\n if (item.status === DataStatus.loaded) {\n item = update(result[index], {\n isExpanded: { $set: true }\n });\n } else {\n item = update(result[index], {\n isExpanded: { $set: true },\n status: { $set: DataStatus.loading }\n });\n }\n\n result.splice(index, 1, item);\n }\n\n return result;\n }\n }\n }\n }\n });\n }\n\n case NgssmTreeActionType.collapseNode: {\n const collapseNodeAction = action as CollapseNodeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [collapseNodeAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const result = [...nodes];\n const index = result.findIndex((n) => n.node.nodeId === collapseNodeAction.nodeId);\n if (index !== -1) {\n const item = update(result[index], {\n isExpanded: { $set: false }\n });\n\n result.splice(index, 1, item);\n }\n\n return result;\n }\n }\n }\n }\n });\n }\n\n case NgssmTreeActionType.selectNode: {\n const selectNodeAction = action as SelectNodeAction;\n if (\n selectNgssmTreeState(state).trees[selectNodeAction.treeId].nodes.find((n) => n.node.nodeId === selectNodeAction.nodeId)\n ?.status === DataStatus.loaded\n ) {\n break;\n }\n\n return updateNgssmTreeState(state, {\n trees: {\n [selectNodeAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const result = [...nodes];\n const index = result.findIndex((n) => n.node.nodeId === selectNodeAction.nodeId);\n if (index !== -1) {\n const item = update(result[index], {\n status: { $set: DataStatus.loading }\n });\n\n result.splice(index, 1, item);\n }\n\n return result;\n }\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n\nexport const treeNodeExpandReducerProvider: Provider = {\n provide: NGSSM_REDUCER,\n useClass: TreeNodeExpandReducer,\n multi: true\n};\n","import { Injectable, Provider } from '@angular/core';\n\nimport { Reducer, State, Action, NGSSM_REDUCER } from 'ngssm-store';\n\nimport { NgssmTreeActionType, SelectNodeAction } from '../actions';\nimport { updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodeSelectionReducer implements Reducer {\n public readonly processedActions: string[] = [NgssmTreeActionType.selectNode];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.selectNode: {\n const selectNodeAction = action as SelectNodeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [selectNodeAction.treeId]: {\n selectedNode: { $set: selectNodeAction.nodeId }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n\nexport const treeNodeSelectionReducerProvider: Provider = {\n provide: NGSSM_REDUCER,\n useClass: TreeNodeSelectionReducer,\n multi: true\n};\n","import { Injectable, Provider } from '@angular/core';\n\nimport update from 'immutability-helper';\nimport { DataStatus } from 'ngssm-remote-data';\n\nimport { Reducer, State, Action, NGSSM_REDUCER } from 'ngssm-store';\n\nimport { NgssmTreeActionType, RegisterNodesAction } from '../actions';\nimport { NgssmTreeNode } from '../model';\nimport { updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodesReducer implements Reducer {\n public readonly processedActions: string[] = [NgssmTreeActionType.registerNodes];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.registerNodes: {\n const registerNodesAction = action as RegisterNodesAction;\n return updateNgssmTreeState(state, {\n trees: {\n [registerNodesAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const index = nodes.findIndex((n) => n.node.nodeId === registerNodesAction.parentNodeId);\n if (index === -1) {\n return nodes;\n }\n\n return [\n ...nodes.slice(0, index),\n update(nodes[index], { status: { $set: registerNodesAction.dataStatus } }),\n ...registerNodesAction.nodes.map((i) => ({\n status: DataStatus.none,\n isExpanded: false,\n level: nodes[index].level + 1,\n node: i\n })),\n ...nodes.slice(index + 1)\n ];\n }\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n\nexport const treeNodesReducerProvider: Provider = {\n provide: NGSSM_REDUCER,\n useClass: TreeNodesReducer,\n multi: true\n};\n","import { Injectable, Provider } from '@angular/core';\nimport { DataStatus } from 'ngssm-remote-data';\n\nimport { Reducer, State, Action, NGSSM_REDUCER } from 'ngssm-store';\n\nimport { DeleteNgssmTreeAction, InitNgssmTreeAction, NgssmTreeActionType } from '../actions';\nimport { updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreesReducer implements Reducer {\n public readonly processedActions: string[] = [NgssmTreeActionType.initNgssmTree, NgssmTreeActionType.deleteNgssmTree];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.initNgssmTree: {\n const initNgssmTreeAction = action as InitNgssmTreeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [initNgssmTreeAction.treeId]: {\n $set: {\n nodes: [\n {\n status: DataStatus.none,\n isExpanded: false,\n level: 0,\n node: initNgssmTreeAction.root\n }\n ],\n type: initNgssmTreeAction.treeType\n }\n }\n }\n });\n }\n\n case NgssmTreeActionType.deleteNgssmTree: {\n const deleteNgssmTreeAction = action as DeleteNgssmTreeAction;\n return updateNgssmTreeState(state, {\n trees: { $unset: [deleteNgssmTreeAction.treeId] }\n });\n }\n }\n\n return state;\n }\n}\n\nexport const treesReducerProvider: Provider = {\n provide: NGSSM_REDUCER,\n useClass: TreesReducer,\n multi: true\n};\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { treeNodeLoadingEffectProvider } from './effects/tree-node-loading.effect';\nimport { treeNodeExpandReducerProvider } from './reducers/tree-node-expand.reducer';\nimport { treeNodeSelectionReducerProvider } from './reducers/tree-node-selection.reducer';\nimport { treeNodesReducerProvider } from './reducers/tree-nodes.reducer';\nimport { treesReducerProvider } from './reducers/trees.reducer';\n\nexport const provideNgssmTree = (): EnvironmentProviders => {\n return makeEnvironmentProviders([\n treesReducerProvider,\n treeNodeExpandReducerProvider,\n treeNodeLoadingEffectProvider,\n treeNodesReducerProvider,\n treeNodeSelectionReducerProvider\n ]);\n};\n","import { Component, ChangeDetectionStrategy, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { BehaviorSubject, combineLatest, Observable, takeUntil } from 'rxjs';\n\nimport { NgSsmComponent, Store } from 'ngssm-store';\nimport { DataStatus } from 'ngssm-remote-data';\n\nimport { NgssmTreeConfig, NgssmTreeNode, NodeData } from '../../model';\nimport { selectNgssmTreeState } from '../../state';\nimport { CollapseNodeAction, ExpandNodeAction, SelectNodeAction } from '../../actions';\n\n@Component({\n selector: 'ngssm-tree',\n standalone: true,\n imports: [CommonModule, ScrollingModule, MatCardModule, MatIconModule, MatProgressSpinnerModule],\n templateUrl: './ngssm-tree.component.html',\n styleUrls: ['./ngssm-tree.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmTreeComponent extends NgSsmComponent {\n private readonly _treeConfig$ = new BehaviorSubject<NgssmTreeConfig | undefined>(undefined);\n private readonly _displayedItems$ = new BehaviorSubject<NgssmTreeNode[]>([]);\n private readonly _selectedNodeId$ = new BehaviorSubject<string | undefined>(undefined);\n\n public readonly dataStatus = DataStatus;\n\n constructor(store: Store) {\n super(store);\n\n // TODO - start watching when treeConfig is set\n combineLatest([this._treeConfig$, this.watch((s) => selectNgssmTreeState(s).trees)])\n .pipe(takeUntil(this.unsubscribeAll$))\n .subscribe((values) => {\n if (!values[0]) {\n this._displayedItems$.next([]);\n return;\n }\n\n const alwaysTrue = (_: NodeData) => true;\n const filter: (node: NodeData) => boolean = values[0].filter ?? alwaysTrue;\n\n const items: NgssmTreeNode[] = [];\n let hiddenLevel = -1;\n (values[1][values[0].treeId]?.nodes ?? []).forEach((t) => {\n if (t.node.isExpandable && t.isExpanded === false && hiddenLevel === -1) {\n hiddenLevel = t.level;\n }\n\n if (hiddenLevel === -1 || t.level <= hiddenLevel) {\n if (filter(t.node)) {\n items.push(t);\n }\n }\n\n if (t.node.isExpandable && t.level <= hiddenLevel) {\n hiddenLevel = t.isExpanded === true ? -1 : t.level;\n }\n });\n\n this._displayedItems$.next(items);\n\n this._selectedNodeId$.next(values[1][values[0].treeId]?.selectedNode);\n });\n }\n\n @Input() set treeConfig(value: NgssmTreeConfig | undefined | null) {\n if (value) {\n this._treeConfig$.next(value);\n }\n }\n\n public get treeConfig$(): Observable<NgssmTreeConfig | undefined> {\n return this._treeConfig$.asObservable();\n }\n\n public get displayedItems$(): Observable<NgssmTreeNode[]> {\n return this._displayedItems$.asObservable();\n }\n\n public get selectedNodeId$(): Observable<string | undefined> {\n return this._selectedNodeId$.asObservable();\n }\n\n public getItemId(_: number, node: NgssmTreeNode): string {\n return node.node.nodeId;\n }\n\n public expand(node: NgssmTreeNode): void {\n const treeId = this._treeConfig$.getValue()?.treeId;\n if (treeId) {\n this.dispatchAction(new ExpandNodeAction(treeId, node.node.nodeId));\n }\n }\n\n public collapse(node: NgssmTreeNode): void {\n const treeId = this._treeConfig$.getValue()?.treeId;\n if (treeId) {\n this.dispatchAction(new CollapseNodeAction(treeId, node.node.nodeId));\n }\n }\n\n public selectNode(node: NgssmTreeNode): void {\n const treeId = this._treeConfig$.getValue()?.treeId;\n if (treeId) {\n this.dispatchAction(new SelectNodeAction(treeId, node.node.nodeId));\n }\n }\n}\n","<mat-card class=\"flex-column-stretch fxFlex\">\n <mat-card-content class=\"flex-column-stretch fxFlex\" *ngIf=\"(treeConfig$ | async) as treeConfig\">\n <cdk-virtual-scroll-viewport itemSize=\"30\" class=\"fxFlex\">\n <div *cdkVirtualFor=\"let item of displayedItems$ | async; trackBy: getItemId\" class=\"ngssm-tree-node\"\n [style.padding-left.px]=\"item.level * 20\" (click)=\"selectNode(item)\"\n [ngClass]=\"{'selected' : (selectedNodeId$ | async) === item.node.nodeId}\">\n <mat-icon class=\"fa-solid fa-chevron-right\" *ngIf=\"item.node.isExpandable && item.isExpanded === false && item.status !== dataStatus.loading\"\n (click)=\"$event.stopPropagation();expand(item);\"></mat-icon>\n <mat-icon class=\"fa-solid fa-chevron-down\" *ngIf=\"item.node.isExpandable && item.isExpanded && item.status !== dataStatus.loading\"\n (click)=\"$event.stopPropagation();collapse(item)\"></mat-icon>\n <mat-spinner diameter=\"20\"\n *ngIf=\"item.node.isExpandable && item.status === dataStatus.loading\"></mat-spinner>\n <span *ngIf=\"!item.node.isExpandable\" class=\"not-expandable-padding\"></span>\n\n <mat-icon class=\"{{treeConfig.iconClasses[item.node.type]}}\" color=\"primary\"></mat-icon>\n\n <span class=\"ngssm-tree-node-label\">\n {{item.node.label}}\n </span>\n </div>\n </cdk-virtual-scroll-viewport>\n </mat-card-content>\n</mat-card>","import { Component, ChangeDetectionStrategy, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\n\nimport { NgSsmComponent, Store } from 'ngssm-store';\n\nimport { NodeData } from '../../model';\nimport { selectNgssmTreeState } from '../../state';\nimport { SelectNodeAction } from '../../actions';\n\n@Component({\n selector: 'ngssm-breadcrumb',\n standalone: true,\n imports: [CommonModule, MatIconModule, MatButtonModule],\n templateUrl: './ngssm-breadcrumb.component.html',\n styleUrls: ['./ngssm-breadcrumb.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmBreadcrumbComponent extends NgSsmComponent {\n private readonly _treeId$ = new BehaviorSubject<string | undefined>(undefined);\n private readonly _nodes$ = new BehaviorSubject<NodeData[]>([]);\n\n constructor(store: Store) {\n super(store);\n\n combineLatest([this._treeId$, this.watch((s) => selectNgssmTreeState(s))]).subscribe((values) => {\n if (!values[0]) {\n this._nodes$.next([]);\n return;\n }\n\n const tree = values[1]?.trees[values[0]];\n if (!tree) {\n this._nodes$.next([]);\n return;\n }\n\n const nodesPerId = new Map<string, NodeData>(tree.nodes.map((n) => [n.node.nodeId, n.node]));\n const path: NodeData[] = [];\n let node = tree.selectedNode ? nodesPerId.get(tree.selectedNode) : undefined;\n while (node) {\n path.unshift(node);\n node = node.parentNodeId ? nodesPerId.get(node.parentNodeId) : undefined;\n }\n\n if (path.length === 0 && tree.nodes.length > 0) {\n path.push(tree.nodes[0]?.node);\n }\n\n this._nodes$.next(path);\n });\n }\n\n @Input() public set treeId(value: string) {\n this._treeId$.next(value);\n }\n\n public get nodes$(): Observable<NodeData[]> {\n return this._nodes$.asObservable();\n }\n\n public selectNode(node: NodeData): void {\n const treeId = this._treeId$.getValue();\n if (treeId) {\n this.dispatchAction(new SelectNodeAction(treeId, node.nodeId));\n }\n }\n}\n","<div class=\"flex-row-center\">\n <mat-icon class=\"fa-solid fa-folder-tree\" color=\"primary\"></mat-icon>\n <span *ngFor=\"let node of nodes$ | async; last as last\" class=\"flex-row-center\">\n\n <button mat-button [disabled]=\"last\" (click)=\"selectNode(node)\">\n {{node.label}}\n </button>\n\n <div class=\"ngssm-breadcrumb-separator\" *ngIf=\"!last\">/</div>\n </span>\n</div>","/*\n * Public API Surface of ngssm-tree\n */\n\nexport * from './lib/public-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4"],"mappings":"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"}
1
+ {"version":3,"file":"ngssm-tree.mjs","sources":["../../../projects/ngssm-tree/src/lib/actions/ngssm-tree-action-type.ts","../../../projects/ngssm-tree/src/lib/actions/tree-action.ts","../../../projects/ngssm-tree/src/lib/actions/init-ngssm-tree.action.ts","../../../projects/ngssm-tree/src/lib/actions/expand-node.action.ts","../../../projects/ngssm-tree/src/lib/actions/register-nodes.action.ts","../../../projects/ngssm-tree/src/lib/actions/collapse-node.action.ts","../../../projects/ngssm-tree/src/lib/actions/select-node.action.ts","../../../projects/ngssm-tree/src/lib/actions/delete-ngssm-tree.action.ts","../../../projects/ngssm-tree/src/lib/model/ngssm-tree-data-service.ts","../../../projects/ngssm-tree/src/lib/state/ngssm-tree.state.ts","../../../projects/ngssm-tree/src/lib/effects/tree-node-loading.effect.ts","../../../projects/ngssm-tree/src/lib/reducers/tree-node-expand.reducer.ts","../../../projects/ngssm-tree/src/lib/reducers/tree-node-selection.reducer.ts","../../../projects/ngssm-tree/src/lib/reducers/tree-nodes.reducer.ts","../../../projects/ngssm-tree/src/lib/reducers/trees.reducer.ts","../../../projects/ngssm-tree/src/lib/provide-ngssm-tree.ts","../../../projects/ngssm-tree/src/lib/components/ngssm-tree/ngssm-tree.component.ts","../../../projects/ngssm-tree/src/lib/components/ngssm-tree/ngssm-tree.component.html","../../../projects/ngssm-tree/src/lib/components/ngssm-breadcrumb/ngssm-breadcrumb.component.ts","../../../projects/ngssm-tree/src/lib/components/ngssm-breadcrumb/ngssm-breadcrumb.component.html","../../../projects/ngssm-tree/src/public-api.ts","../../../projects/ngssm-tree/src/ngssm-tree.ts"],"sourcesContent":["export enum NgssmTreeActionType {\n initNgssmTree = '[NgssmTreeActionType] initNgssmTree',\n deleteNgssmTree = '[NgssmTreeActionType] deleteNgssmTree',\n expandNode = '[NgssmTreeActionType] expandNode',\n collapseNode = '[NgssmTreeActionType] collapseNode',\n registerNodes = '[NgssmTreeActionType] registerNodes',\n selectNode = '[NgssmTreeActionType] selectNode'\n}\n","import { Action } from 'ngssm-store';\n\nexport class TreeAction implements Action {\n constructor(public readonly type: string, public readonly treeId: string) {}\n}\n","import { NodeData } from '../model';\nimport { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class InitNgssmTreeAction extends TreeAction {\n constructor(treeId: string, public readonly treeType: string, public readonly root: NodeData) {\n super(NgssmTreeActionType.initNgssmTree, treeId);\n }\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class ExpandNodeAction extends TreeAction {\n constructor(treeId: string, public readonly nodeId: string) {\n super(NgssmTreeActionType.expandNode, treeId);\n }\n}\n","import { DataStatus } from 'ngssm-remote-data';\nimport { Action } from 'ngssm-store';\n\nimport { NodeData } from '../model';\nimport { NgssmTreeActionType } from './ngssm-tree-action-type';\n\nexport class RegisterNodesAction implements Action {\n public readonly type: string = NgssmTreeActionType.registerNodes;\n\n constructor(\n public readonly dataStatus: DataStatus,\n public readonly treeId: string,\n public readonly parentNodeId: string,\n public readonly nodes: NodeData[] = []\n ) {}\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class CollapseNodeAction extends TreeAction {\n constructor(treeId: string, public readonly nodeId: string) {\n super(NgssmTreeActionType.collapseNode, treeId);\n }\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class SelectNodeAction extends TreeAction {\n constructor(treeId: string, public readonly nodeId: string) {\n super(NgssmTreeActionType.selectNode, treeId);\n }\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class DeleteNgssmTreeAction extends TreeAction {\n constructor(treeId: string) {\n super(NgssmTreeActionType.deleteNgssmTree, treeId);\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { NodeData } from './node-data';\n\nexport interface NgssmTreeDataService {\n readonly treeType: string;\n load(treeId: string, nodeId: string): Observable<NodeData[]>;\n}\n\nexport const NGSSM_TREE_DATA_SERVICE = new InjectionToken<NgssmTreeDataService>('NGSSM_TREE_DATA_SERVICE');\n","import update, { Spec } from 'immutability-helper';\n\nimport { NgSsmFeatureState, State } from 'ngssm-store';\nimport { NgssmTree } from '../model';\n\nexport const selectNgssmTreeState = (state: State): NgssmTreeState => state[NgssmTreeStateSpecification.featureStateKey] as NgssmTreeState;\n\nexport const updateNgssmTreeState = (state: State, command: Spec<NgssmTreeState, never>): State =>\n update(state, {\n [NgssmTreeStateSpecification.featureStateKey]: command\n });\n\nexport interface NgssmTreeState {\n trees: { [key: string]: NgssmTree };\n}\n\n@NgSsmFeatureState({\n featureStateKey: NgssmTreeStateSpecification.featureStateKey,\n initialState: NgssmTreeStateSpecification.initialState\n})\nexport class NgssmTreeStateSpecification {\n public static readonly featureStateKey = 'ngssm-tree-state';\n public static readonly initialState: NgssmTreeState = {\n trees: {}\n };\n}\n","import { Inject, Injectable, Optional, Provider } from '@angular/core';\n\nimport { DataStatus } from 'ngssm-remote-data';\nimport { Effect, Store, State, Action, NGSSM_EFFECT, Logger } from 'ngssm-store';\n\nimport { ExpandNodeAction, NgssmTreeActionType, RegisterNodesAction } from '../actions';\nimport { NgssmTreeDataService, NGSSM_TREE_DATA_SERVICE } from '../model';\nimport { selectNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodeLoadingEffect implements Effect {\n public readonly processedActions: string[] = [NgssmTreeActionType.expandNode, NgssmTreeActionType.selectNode];\n\n constructor(@Inject(NGSSM_TREE_DATA_SERVICE) @Optional() private dataServices: NgssmTreeDataService[], private logger: Logger) {}\n\n public processAction(store: Store, state: State, action: Action): void {\n const expandNodeAction = action as ExpandNodeAction;\n if (!selectNgssmTreeState(state).trees[expandNodeAction.treeId]) {\n this.logger.error(`Trying to process action for tree not initialized: ${expandNodeAction.treeId}.`);\n return;\n }\n\n const treeType = selectNgssmTreeState(state).trees[expandNodeAction.treeId].type;\n const dataService = (this.dataServices ?? []).find((d) => d.treeType === treeType);\n if (!dataService) {\n this.logger.error(`Trying to process action for tree with no data service: ${expandNodeAction.treeId} / ${treeType}.`);\n return;\n }\n\n const node = selectNgssmTreeState(state).trees[expandNodeAction.treeId].nodes.find((n) => n.node.nodeId === expandNodeAction.nodeId);\n if (node?.status !== DataStatus.loading) {\n return;\n }\n\n dataService.load(expandNodeAction.treeId, expandNodeAction.nodeId).subscribe({\n next: (value) =>\n store.dispatchAction(new RegisterNodesAction(DataStatus.loaded, expandNodeAction.treeId, expandNodeAction.nodeId, value)),\n error: (error) => {\n this.logger.error(\n `Unable to load children nodes for tree '${expandNodeAction.treeId}' and node '${expandNodeAction.nodeId}'`,\n error\n );\n store.dispatchAction(new RegisterNodesAction(DataStatus.error, expandNodeAction.treeId, expandNodeAction.nodeId));\n }\n });\n }\n}\n\nexport const treeNodeLoadingEffectProvider: Provider = {\n provide: NGSSM_EFFECT,\n useClass: TreeNodeLoadingEffect,\n multi: true\n};\n","import { Injectable, Provider } from '@angular/core';\n\nimport update from 'immutability-helper';\n\nimport { DataStatus } from 'ngssm-remote-data';\nimport { Reducer, State, Action, NGSSM_REDUCER } from 'ngssm-store';\n\nimport { CollapseNodeAction, ExpandNodeAction, NgssmTreeActionType, SelectNodeAction } from '../actions';\nimport { NgssmTreeNode } from '../model';\nimport { selectNgssmTreeState, updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodeExpandReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmTreeActionType.expandNode,\n NgssmTreeActionType.collapseNode,\n NgssmTreeActionType.selectNode\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.expandNode: {\n const expandNodeAction = action as ExpandNodeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [expandNodeAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const result = [...nodes];\n const index = result.findIndex((n) => n.node.nodeId === expandNodeAction.nodeId);\n if (index !== -1) {\n let item = result[index];\n if (item.status === DataStatus.loaded) {\n item = update(result[index], {\n isExpanded: { $set: true }\n });\n } else {\n item = update(result[index], {\n isExpanded: { $set: true },\n status: { $set: DataStatus.loading }\n });\n }\n\n result.splice(index, 1, item);\n }\n\n return result;\n }\n }\n }\n }\n });\n }\n\n case NgssmTreeActionType.collapseNode: {\n const collapseNodeAction = action as CollapseNodeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [collapseNodeAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const result = [...nodes];\n const index = result.findIndex((n) => n.node.nodeId === collapseNodeAction.nodeId);\n if (index !== -1) {\n const item = update(result[index], {\n isExpanded: { $set: false }\n });\n\n result.splice(index, 1, item);\n }\n\n return result;\n }\n }\n }\n }\n });\n }\n\n case NgssmTreeActionType.selectNode: {\n const selectNodeAction = action as SelectNodeAction;\n if (\n selectNgssmTreeState(state).trees[selectNodeAction.treeId].nodes.find((n) => n.node.nodeId === selectNodeAction.nodeId)\n ?.status === DataStatus.loaded\n ) {\n break;\n }\n\n return updateNgssmTreeState(state, {\n trees: {\n [selectNodeAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const result = [...nodes];\n const index = result.findIndex((n) => n.node.nodeId === selectNodeAction.nodeId);\n if (index !== -1) {\n const item = update(result[index], {\n status: { $set: DataStatus.loading }\n });\n\n result.splice(index, 1, item);\n }\n\n return result;\n }\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n\nexport const treeNodeExpandReducerProvider: Provider = {\n provide: NGSSM_REDUCER,\n useClass: TreeNodeExpandReducer,\n multi: true\n};\n","import { Injectable, Provider } from '@angular/core';\n\nimport { Reducer, State, Action, NGSSM_REDUCER } from 'ngssm-store';\n\nimport { NgssmTreeActionType, SelectNodeAction } from '../actions';\nimport { updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodeSelectionReducer implements Reducer {\n public readonly processedActions: string[] = [NgssmTreeActionType.selectNode];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.selectNode: {\n const selectNodeAction = action as SelectNodeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [selectNodeAction.treeId]: {\n selectedNode: { $set: selectNodeAction.nodeId }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n\nexport const treeNodeSelectionReducerProvider: Provider = {\n provide: NGSSM_REDUCER,\n useClass: TreeNodeSelectionReducer,\n multi: true\n};\n","import { Injectable, Provider } from '@angular/core';\n\nimport update from 'immutability-helper';\nimport { DataStatus } from 'ngssm-remote-data';\n\nimport { Reducer, State, Action, NGSSM_REDUCER } from 'ngssm-store';\n\nimport { NgssmTreeActionType, RegisterNodesAction } from '../actions';\nimport { NgssmTreeNode } from '../model';\nimport { updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodesReducer implements Reducer {\n public readonly processedActions: string[] = [NgssmTreeActionType.registerNodes];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.registerNodes: {\n const registerNodesAction = action as RegisterNodesAction;\n return updateNgssmTreeState(state, {\n trees: {\n [registerNodesAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const index = nodes.findIndex((n) => n.node.nodeId === registerNodesAction.parentNodeId);\n if (index === -1) {\n return nodes;\n }\n\n return [\n ...nodes.slice(0, index),\n update(nodes[index], { status: { $set: registerNodesAction.dataStatus } }),\n ...registerNodesAction.nodes.map((i) => ({\n status: DataStatus.none,\n isExpanded: false,\n level: nodes[index].level + 1,\n node: i\n })),\n ...nodes.slice(index + 1)\n ];\n }\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n\nexport const treeNodesReducerProvider: Provider = {\n provide: NGSSM_REDUCER,\n useClass: TreeNodesReducer,\n multi: true\n};\n","import { Injectable, Provider } from '@angular/core';\nimport { DataStatus } from 'ngssm-remote-data';\n\nimport { Reducer, State, Action, NGSSM_REDUCER } from 'ngssm-store';\n\nimport { DeleteNgssmTreeAction, InitNgssmTreeAction, NgssmTreeActionType } from '../actions';\nimport { updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreesReducer implements Reducer {\n public readonly processedActions: string[] = [NgssmTreeActionType.initNgssmTree, NgssmTreeActionType.deleteNgssmTree];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.initNgssmTree: {\n const initNgssmTreeAction = action as InitNgssmTreeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [initNgssmTreeAction.treeId]: {\n $set: {\n nodes: [\n {\n status: DataStatus.none,\n isExpanded: false,\n level: 0,\n node: initNgssmTreeAction.root\n }\n ],\n type: initNgssmTreeAction.treeType\n }\n }\n }\n });\n }\n\n case NgssmTreeActionType.deleteNgssmTree: {\n const deleteNgssmTreeAction = action as DeleteNgssmTreeAction;\n return updateNgssmTreeState(state, {\n trees: { $unset: [deleteNgssmTreeAction.treeId] }\n });\n }\n }\n\n return state;\n }\n}\n\nexport const treesReducerProvider: Provider = {\n provide: NGSSM_REDUCER,\n useClass: TreesReducer,\n multi: true\n};\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { treeNodeLoadingEffectProvider } from './effects/tree-node-loading.effect';\nimport { treeNodeExpandReducerProvider } from './reducers/tree-node-expand.reducer';\nimport { treeNodeSelectionReducerProvider } from './reducers/tree-node-selection.reducer';\nimport { treeNodesReducerProvider } from './reducers/tree-nodes.reducer';\nimport { treesReducerProvider } from './reducers/trees.reducer';\n\nexport const provideNgssmTree = (): EnvironmentProviders => {\n return makeEnvironmentProviders([\n treesReducerProvider,\n treeNodeExpandReducerProvider,\n treeNodeLoadingEffectProvider,\n treeNodesReducerProvider,\n treeNodeSelectionReducerProvider\n ]);\n};\n","import { Component, ChangeDetectionStrategy, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\n\nimport { NgSsmComponent, Store } from 'ngssm-store';\nimport { DataStatus } from 'ngssm-remote-data';\n\nimport { NgssmTree, NgssmTreeConfig, NgssmTreeNode, NodeData } from '../../model';\nimport { selectNgssmTreeState } from '../../state';\nimport { CollapseNodeAction, ExpandNodeAction, SelectNodeAction } from '../../actions';\n\n@Component({\n selector: 'ngssm-tree',\n standalone: true,\n imports: [CommonModule, ScrollingModule, MatCardModule, MatIconModule, MatProgressSpinnerModule],\n templateUrl: './ngssm-tree.component.html',\n styleUrls: ['./ngssm-tree.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmTreeComponent extends NgSsmComponent {\n private readonly _treeConfig$ = new BehaviorSubject<NgssmTreeConfig | undefined>(undefined);\n private readonly _displayedItems$ = new BehaviorSubject<NgssmTreeNode[]>([]);\n private readonly _selectedNodeId$ = new BehaviorSubject<string | undefined>(undefined);\n\n private treeSubscription: Subscription | undefined;\n\n public readonly dataStatus = DataStatus;\n\n constructor(store: Store) {\n super(store);\n }\n\n @Input() set treeConfig(value: NgssmTreeConfig | undefined | null) {\n if (value) {\n this._treeConfig$.next({ ...value });\n\n this.treeSubscription?.unsubscribe();\n this.treeSubscription = this.watch((s) => selectNgssmTreeState(s).trees[value.treeId]).subscribe((tree: NgssmTree | undefined) => {\n const config = this._treeConfig$.getValue();\n if (!tree || !config) {\n this._displayedItems$.next([]);\n return;\n }\n\n const alwaysTrue = (_: NodeData) => true;\n const filter: (node: NodeData) => boolean = config.filter ?? alwaysTrue;\n\n const items: NgssmTreeNode[] = [];\n let hiddenLevel = -1;\n const nodesToFindSelected = new Map<string, { isDisplayed: boolean; node: NgssmTreeNode }>();\n (tree.nodes ?? []).forEach((t) => {\n if (t.node.isExpandable && t.isExpanded === false && hiddenLevel === -1) {\n hiddenLevel = t.level;\n }\n\n if (hiddenLevel === -1 || t.level <= hiddenLevel) {\n if (filter(t.node)) {\n items.push(t);\n nodesToFindSelected.set(t.node.nodeId, { isDisplayed: true, node: t });\n }\n }\n\n if (t.node.isExpandable && t.level <= hiddenLevel) {\n hiddenLevel = t.isExpanded === true ? -1 : t.level;\n }\n\n if (!nodesToFindSelected.has(t.node.nodeId)) {\n nodesToFindSelected.set(t.node.nodeId, { isDisplayed: false, node: t });\n }\n });\n\n this._displayedItems$.next(items);\n\n let selectedNode = tree.selectedNode;\n if (!selectedNode) {\n this._selectedNodeId$.next(undefined);\n } else {\n while (selectedNode) {\n const item = nodesToFindSelected.get(selectedNode);\n if (item?.isDisplayed !== true) {\n selectedNode = item?.node.node.parentNodeId;\n } else {\n break;\n }\n }\n\n this._selectedNodeId$.next(selectedNode);\n }\n });\n }\n }\n\n public get treeConfig$(): Observable<NgssmTreeConfig | undefined> {\n return this._treeConfig$.asObservable();\n }\n\n public get displayedItems$(): Observable<NgssmTreeNode[]> {\n return this._displayedItems$.asObservable();\n }\n\n public get selectedNodeId$(): Observable<string | undefined> {\n return this._selectedNodeId$.asObservable();\n }\n\n public getItemId(_: number, node: NgssmTreeNode): string {\n return node.node.nodeId;\n }\n\n public expand(node: NgssmTreeNode): void {\n const treeId = this._treeConfig$.getValue()?.treeId;\n if (treeId) {\n this.dispatchAction(new ExpandNodeAction(treeId, node.node.nodeId));\n }\n }\n\n public collapse(node: NgssmTreeNode): void {\n const treeId = this._treeConfig$.getValue()?.treeId;\n if (treeId) {\n this.dispatchAction(new CollapseNodeAction(treeId, node.node.nodeId));\n }\n }\n\n public selectNode(node: NgssmTreeNode): void {\n const treeId = this._treeConfig$.getValue()?.treeId;\n if (treeId) {\n this.dispatchAction(new SelectNodeAction(treeId, node.node.nodeId));\n }\n }\n}\n","<mat-card class=\"flex-column-stretch fxFlex\">\n <mat-card-content class=\"flex-column-stretch fxFlex\" *ngIf=\"(treeConfig$ | async) as treeConfig\">\n <cdk-virtual-scroll-viewport itemSize=\"30\" class=\"fxFlex\">\n <div *cdkVirtualFor=\"let item of displayedItems$ | async; trackBy: getItemId\" class=\"ngssm-tree-node\"\n [style.padding-left.px]=\"item.level * 20\" (click)=\"selectNode(item)\"\n [ngClass]=\"{'selected' : (selectedNodeId$ | async) === item.node.nodeId}\">\n <mat-icon class=\"fa-solid fa-chevron-right\" *ngIf=\"item.node.isExpandable && item.isExpanded === false && item.status !== dataStatus.loading\"\n (click)=\"$event.stopPropagation();expand(item);\"></mat-icon>\n <mat-icon class=\"fa-solid fa-chevron-down\" *ngIf=\"item.node.isExpandable && item.isExpanded && item.status !== dataStatus.loading\"\n (click)=\"$event.stopPropagation();collapse(item)\"></mat-icon>\n <mat-spinner diameter=\"20\"\n *ngIf=\"item.node.isExpandable && item.status === dataStatus.loading\"></mat-spinner>\n <span *ngIf=\"!item.node.isExpandable\" class=\"not-expandable-padding\"></span>\n\n <mat-icon class=\"{{treeConfig.iconClasses[item.node.type]}}\" color=\"primary\"></mat-icon>\n\n <span class=\"ngssm-tree-node-label\">\n {{item.node.label}}\n </span>\n </div>\n </cdk-virtual-scroll-viewport>\n </mat-card-content>\n</mat-card>","import { Component, ChangeDetectionStrategy, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\n\nimport { NgSsmComponent, Store } from 'ngssm-store';\n\nimport { NodeData } from '../../model';\nimport { selectNgssmTreeState } from '../../state';\nimport { SelectNodeAction } from '../../actions';\n\n@Component({\n selector: 'ngssm-breadcrumb',\n standalone: true,\n imports: [CommonModule, MatIconModule, MatButtonModule],\n templateUrl: './ngssm-breadcrumb.component.html',\n styleUrls: ['./ngssm-breadcrumb.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmBreadcrumbComponent extends NgSsmComponent {\n private readonly _treeId$ = new BehaviorSubject<string | undefined>(undefined);\n private readonly _nodes$ = new BehaviorSubject<NodeData[]>([]);\n\n constructor(store: Store) {\n super(store);\n\n combineLatest([this._treeId$, this.watch((s) => selectNgssmTreeState(s))]).subscribe((values) => {\n if (!values[0]) {\n this._nodes$.next([]);\n return;\n }\n\n const tree = values[1]?.trees[values[0]];\n if (!tree) {\n this._nodes$.next([]);\n return;\n }\n\n const nodesPerId = new Map<string, NodeData>(tree.nodes.map((n) => [n.node.nodeId, n.node]));\n const path: NodeData[] = [];\n let node = tree.selectedNode ? nodesPerId.get(tree.selectedNode) : undefined;\n while (node) {\n path.unshift(node);\n node = node.parentNodeId ? nodesPerId.get(node.parentNodeId) : undefined;\n }\n\n if (path.length === 0 && tree.nodes.length > 0) {\n path.push(tree.nodes[0]?.node);\n }\n\n this._nodes$.next(path);\n });\n }\n\n @Input() public set treeId(value: string) {\n this._treeId$.next(value);\n }\n\n public get nodes$(): Observable<NodeData[]> {\n return this._nodes$.asObservable();\n }\n\n public selectNode(node: NodeData): void {\n const treeId = this._treeId$.getValue();\n if (treeId) {\n this.dispatchAction(new SelectNodeAction(treeId, node.nodeId));\n }\n }\n}\n","<div class=\"flex-row-center\">\n <mat-icon class=\"fa-solid fa-folder-tree\" color=\"primary\"></mat-icon>\n <span *ngFor=\"let node of nodes$ | async; last as last\" class=\"flex-row-center\">\n\n <button mat-button [disabled]=\"last\" (click)=\"selectNode(node)\">\n {{node.label}}\n </button>\n\n <div class=\"ngssm-breadcrumb-separator\" *ngIf=\"!last\">/</div>\n </span>\n</div>","/*\n * Public API Surface of ngssm-tree\n */\n\nexport * from './lib/public-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4"],"mappings":"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"}
@@ -7,6 +7,7 @@ export declare class NgssmTreeComponent extends NgSsmComponent {
7
7
  private readonly _treeConfig$;
8
8
  private readonly _displayedItems$;
9
9
  private readonly _selectedNodeId$;
10
+ private treeSubscription;
10
11
  readonly dataStatus: typeof DataStatus;
11
12
  constructor(store: Store);
12
13
  set treeConfig(value: NgssmTreeConfig | undefined | null);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngssm-tree",
3
- "version": "15.2.9",
3
+ "version": "15.2.10",
4
4
  "description": "NgSsm - Tree implementation.",
5
5
  "author": "Lion Marc",
6
6
  "license": "MIT",