ngssm-tree 15.3.13 → 16.0.0

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.
Files changed (102) hide show
  1. package/esm2022/lib/ngssm-expression-tree/components/ngssm-expression-tree/ngssm-expression-tree.component.mjs +122 -0
  2. package/esm2022/lib/ngssm-expression-tree/components/ngssm-expression-tree-node/ngssm-expression-tree-node.component.mjs +87 -0
  3. package/esm2022/lib/ngssm-expression-tree/components/ngssm-expression-tree-node-details/ngssm-expression-tree-node-details.component.mjs +68 -0
  4. package/esm2022/lib/ngssm-expression-tree/reducers/tree-node-edition.reducer.mjs +133 -0
  5. package/esm2022/lib/ngssm-expression-tree/reducers/tree-node-expand.reducer.mjs +97 -0
  6. package/esm2022/lib/ngssm-expression-tree/reducers/trees.reducer.mjs +49 -0
  7. package/esm2022/lib/ngssm-expression-tree/state/ngssm-expression-tree.state.mjs +22 -0
  8. package/esm2022/lib/ngssm-tree/components/ngssm-breadcrumb/ngssm-breadcrumb.component.mjs +64 -0
  9. package/esm2022/lib/ngssm-tree/components/ngssm-tree/ngssm-tree.component.mjs +129 -0
  10. package/esm2022/lib/ngssm-tree/components/ngssm-tree-search-dialog/ngssm-tree-search-dialog.component.mjs +125 -0
  11. package/esm2022/lib/ngssm-tree/effects/tree-node-loading.effect.mjs +60 -0
  12. package/esm2022/lib/ngssm-tree/effects/tree-nodes-searching.effect.mjs +90 -0
  13. package/esm2022/lib/ngssm-tree/reducers/tree-node-expand.reducer.mjs +138 -0
  14. package/esm2022/lib/ngssm-tree/reducers/tree-node-selection.reducer.mjs +37 -0
  15. package/esm2022/lib/ngssm-tree/reducers/tree-nodes-search.reducer.mjs +96 -0
  16. package/esm2022/lib/ngssm-tree/reducers/tree-nodes.reducer.mjs +60 -0
  17. package/esm2022/lib/ngssm-tree/reducers/trees.reducer.mjs +54 -0
  18. package/esm2022/lib/ngssm-tree/state/ngssm-tree.state.mjs +24 -0
  19. package/{fesm2020 → fesm2022}/ngssm-tree.mjs +57 -57
  20. package/{fesm2020 → fesm2022}/ngssm-tree.mjs.map +1 -1
  21. package/lib/ngssm-expression-tree/components/ngssm-expression-tree/ngssm-expression-tree.component.d.ts +1 -1
  22. package/lib/ngssm-expression-tree/components/ngssm-expression-tree-node/ngssm-expression-tree-node.component.d.ts +1 -1
  23. package/lib/ngssm-expression-tree/components/ngssm-expression-tree-node-details/ngssm-expression-tree-node-details.component.d.ts +1 -1
  24. package/lib/ngssm-tree/components/ngssm-breadcrumb/ngssm-breadcrumb.component.d.ts +1 -1
  25. package/lib/ngssm-tree/components/ngssm-tree/ngssm-tree.component.d.ts +1 -1
  26. package/package.json +5 -11
  27. package/esm2020/lib/ngssm-expression-tree/components/ngssm-expression-tree/ngssm-expression-tree.component.mjs +0 -121
  28. package/esm2020/lib/ngssm-expression-tree/components/ngssm-expression-tree-node/ngssm-expression-tree-node.component.mjs +0 -86
  29. package/esm2020/lib/ngssm-expression-tree/components/ngssm-expression-tree-node-details/ngssm-expression-tree-node-details.component.mjs +0 -67
  30. package/esm2020/lib/ngssm-expression-tree/reducers/tree-node-edition.reducer.mjs +0 -132
  31. package/esm2020/lib/ngssm-expression-tree/reducers/tree-node-expand.reducer.mjs +0 -96
  32. package/esm2020/lib/ngssm-expression-tree/reducers/trees.reducer.mjs +0 -48
  33. package/esm2020/lib/ngssm-expression-tree/state/ngssm-expression-tree.state.mjs +0 -22
  34. package/esm2020/lib/ngssm-tree/components/ngssm-breadcrumb/ngssm-breadcrumb.component.mjs +0 -63
  35. package/esm2020/lib/ngssm-tree/components/ngssm-tree/ngssm-tree.component.mjs +0 -128
  36. package/esm2020/lib/ngssm-tree/components/ngssm-tree-search-dialog/ngssm-tree-search-dialog.component.mjs +0 -124
  37. package/esm2020/lib/ngssm-tree/effects/tree-node-loading.effect.mjs +0 -59
  38. package/esm2020/lib/ngssm-tree/effects/tree-nodes-searching.effect.mjs +0 -89
  39. package/esm2020/lib/ngssm-tree/reducers/tree-node-expand.reducer.mjs +0 -137
  40. package/esm2020/lib/ngssm-tree/reducers/tree-node-selection.reducer.mjs +0 -36
  41. package/esm2020/lib/ngssm-tree/reducers/tree-nodes-search.reducer.mjs +0 -95
  42. package/esm2020/lib/ngssm-tree/reducers/tree-nodes.reducer.mjs +0 -59
  43. package/esm2020/lib/ngssm-tree/reducers/trees.reducer.mjs +0 -53
  44. package/esm2020/lib/ngssm-tree/state/ngssm-tree.state.mjs +0 -24
  45. package/fesm2015/ngssm-tree.mjs +0 -1609
  46. package/fesm2015/ngssm-tree.mjs.map +0 -1
  47. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/actions/index.mjs +0 -0
  48. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/actions/ngssm-add-expression-tree-node.action.mjs +0 -0
  49. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/actions/ngssm-add-expression-tree-nodes.action.mjs +0 -0
  50. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/actions/ngssm-clear-expression-tree.action.mjs +0 -0
  51. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/actions/ngssm-collapse-all-expression-tree-nodes.action.mjs +0 -0
  52. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/actions/ngssm-collapse-expression-tree-node.action.mjs +0 -0
  53. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/actions/ngssm-delete-expression-tree-node.action.mjs +0 -0
  54. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/actions/ngssm-expand-all-expression-tree-nodes.action.mjs +0 -0
  55. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/actions/ngssm-expand-expression-tree-node.action.mjs +0 -0
  56. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/actions/ngssm-expression-tree-action-type.mjs +0 -0
  57. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/actions/ngssm-expression-tree-node.action.mjs +0 -0
  58. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/actions/ngssm-expression-tree.action.mjs +0 -0
  59. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/actions/ngssm-init-expression-tree.action.mjs +0 -0
  60. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/actions/ngssm-update-expression-tree-node.action.mjs +0 -0
  61. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/components/index.mjs +0 -0
  62. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/model/index.mjs +0 -0
  63. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/model/ngssm-expression-tree-config.mjs +0 -0
  64. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/model/ngssm-expression-tree-custom-component.mjs +0 -0
  65. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/model/ngssm-expression-tree-data.mjs +0 -0
  66. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/model/ngssm-expression-tree-node.mjs +0 -0
  67. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/model/ngssm-expression-tree.mjs +0 -0
  68. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/model/ngssm-node.mjs +0 -0
  69. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/ngssm-expression-tree-routes.mjs +0 -0
  70. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/provide-ngssm-expression-tree.mjs +0 -0
  71. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/public-api.mjs +0 -0
  72. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/reducers/index.mjs +0 -0
  73. /package/{esm2020 → esm2022}/lib/ngssm-expression-tree/state/index.mjs +0 -0
  74. /package/{esm2020 → esm2022}/lib/ngssm-tree/actions/collapse-node.action.mjs +0 -0
  75. /package/{esm2020 → esm2022}/lib/ngssm-tree/actions/delete-ngssm-tree.action.mjs +0 -0
  76. /package/{esm2020 → esm2022}/lib/ngssm-tree/actions/display-search-dialog.action.mjs +0 -0
  77. /package/{esm2020 → esm2022}/lib/ngssm-tree/actions/expand-node.action.mjs +0 -0
  78. /package/{esm2020 → esm2022}/lib/ngssm-tree/actions/index.mjs +0 -0
  79. /package/{esm2020 → esm2022}/lib/ngssm-tree/actions/init-ngssm-tree.action.mjs +0 -0
  80. /package/{esm2020 → esm2022}/lib/ngssm-tree/actions/load-children-of-node.action.mjs +0 -0
  81. /package/{esm2020 → esm2022}/lib/ngssm-tree/actions/ngssm-tree-action-type.mjs +0 -0
  82. /package/{esm2020 → esm2022}/lib/ngssm-tree/actions/register-nodes.action.mjs +0 -0
  83. /package/{esm2020 → esm2022}/lib/ngssm-tree/actions/register-partial-search-results.action.mjs +0 -0
  84. /package/{esm2020 → esm2022}/lib/ngssm-tree/actions/search-tree-nodes.action.mjs +0 -0
  85. /package/{esm2020 → esm2022}/lib/ngssm-tree/actions/select-node.action.mjs +0 -0
  86. /package/{esm2020 → esm2022}/lib/ngssm-tree/actions/tree-action.mjs +0 -0
  87. /package/{esm2020 → esm2022}/lib/ngssm-tree/actions/tree-node-action.mjs +0 -0
  88. /package/{esm2020 → esm2022}/lib/ngssm-tree/components/index.mjs +0 -0
  89. /package/{esm2020 → esm2022}/lib/ngssm-tree/model/index.mjs +0 -0
  90. /package/{esm2020 → esm2022}/lib/ngssm-tree/model/ngssm-tree-config.mjs +0 -0
  91. /package/{esm2020 → esm2022}/lib/ngssm-tree/model/ngssm-tree-data-service.mjs +0 -0
  92. /package/{esm2020 → esm2022}/lib/ngssm-tree/model/ngssm-tree-node.mjs +0 -0
  93. /package/{esm2020 → esm2022}/lib/ngssm-tree/model/ngssm-tree.mjs +0 -0
  94. /package/{esm2020 → esm2022}/lib/ngssm-tree/model/node-data.mjs +0 -0
  95. /package/{esm2020 → esm2022}/lib/ngssm-tree/model/search-status.mjs +0 -0
  96. /package/{esm2020 → esm2022}/lib/ngssm-tree/provide-ngssm-tree.mjs +0 -0
  97. /package/{esm2020 → esm2022}/lib/ngssm-tree/public-api.mjs +0 -0
  98. /package/{esm2020 → esm2022}/lib/ngssm-tree/state/index.mjs +0 -0
  99. /package/{esm2020 → esm2022}/lib/ngssm-tree/state/selectors.mjs +0 -0
  100. /package/{esm2020 → esm2022}/lib/ngssm-tree/state/tree-nodes-search.mjs +0 -0
  101. /package/{esm2020 → esm2022}/ngssm-tree.mjs +0 -0
  102. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
@@ -0,0 +1,122 @@
1
+ import { Component, ChangeDetectionStrategy, Input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { ScrollingModule } from '@angular/cdk/scrolling';
4
+ import { MatCardModule } from '@angular/material/card';
5
+ import { MatDividerModule } from '@angular/material/divider';
6
+ import { MatIconModule } from '@angular/material/icon';
7
+ import { CdkMenuModule } from '@angular/cdk/menu';
8
+ import { BehaviorSubject, takeUntil } from 'rxjs';
9
+ import { NgSsmComponent } from 'ngssm-store';
10
+ import { selectNgssmExpressionTreeState } from '../../state';
11
+ import { NgssmCollapseAllExpressionTreeNodesAction, NgssmCollapseExpressionTreeNodeAction, NgssmExpandAllExpressionTreeNodesAction, NgssmExpandExpressionTreeNodeAction } from '../../actions';
12
+ import { NgssmExpressionTreeNodeComponent } from '../ngssm-expression-tree-node/ngssm-expression-tree-node.component';
13
+ import { NgssmExpressionTreeNodeDetailsComponent } from '../ngssm-expression-tree-node-details/ngssm-expression-tree-node-details.component';
14
+ import * as i0 from "@angular/core";
15
+ import * as i1 from "ngssm-store";
16
+ import * as i2 from "@angular/common";
17
+ import * as i3 from "@angular/cdk/scrolling";
18
+ import * as i4 from "@angular/material/card";
19
+ import * as i5 from "@angular/material/divider";
20
+ import * as i6 from "@angular/material/icon";
21
+ import * as i7 from "@angular/cdk/menu";
22
+ class NgssmExpressionTreeComponent extends NgSsmComponent {
23
+ constructor(store, changeDetectorRef) {
24
+ super(store);
25
+ this.changeDetectorRef = changeDetectorRef;
26
+ this._tree$ = new BehaviorSubject(undefined);
27
+ this._displayedNodes$ = new BehaviorSubject([]);
28
+ this._treeConfig$ = new BehaviorSubject(undefined);
29
+ this._tree$.pipe(takeUntil(this.unsubscribeAll$)).subscribe((tree) => {
30
+ const displayedNodes = [];
31
+ const collapsedNodes = new Set();
32
+ (tree?.nodes ?? []).forEach((node) => {
33
+ if (node.data.isExpandable === true && node.isExpanded === false) {
34
+ collapsedNodes.add(node.data.id);
35
+ }
36
+ if (!node.data.parentId || node.path.findIndex((p) => collapsedNodes.has(p)) === -1) {
37
+ displayedNodes.push(node);
38
+ }
39
+ });
40
+ this._displayedNodes$.next(displayedNodes);
41
+ });
42
+ }
43
+ set treeConfig(value) {
44
+ this._treeSubscription?.unsubscribe();
45
+ if (!value) {
46
+ this._treeConfig$.next(undefined);
47
+ return;
48
+ }
49
+ const config = {
50
+ ...value
51
+ };
52
+ if (!config.getNodeLabel) {
53
+ config.getNodeLabel = (node) => node.data.id;
54
+ }
55
+ if (!config.expandIconClass) {
56
+ config.expandIconClass = 'fa-solid fa-chevron-right';
57
+ }
58
+ if (!config.collapseIconClass) {
59
+ config.collapseIconClass = 'fa-solid fa-chevron-down';
60
+ }
61
+ this._treeConfig$.next(config);
62
+ this._treeSubscription = this.watch((s) => selectNgssmExpressionTreeState(s).trees[value.treeId]).subscribe((tree) => this._tree$.next(tree));
63
+ }
64
+ get treeConfig$() {
65
+ return this._treeConfig$.asObservable();
66
+ }
67
+ get displayedNodes$() {
68
+ return this._displayedNodes$.asObservable();
69
+ }
70
+ getItemId(_, node) {
71
+ return node.data.id;
72
+ }
73
+ getDefaultPadding() {
74
+ return this._treeConfig$.getValue()?.nodePadding ?? 20;
75
+ }
76
+ expand(node) {
77
+ const treeId = this._treeConfig$.getValue()?.treeId;
78
+ if (treeId) {
79
+ this.dispatchAction(new NgssmExpandExpressionTreeNodeAction(treeId, node.data.id));
80
+ }
81
+ }
82
+ collapse(node) {
83
+ const treeId = this._treeConfig$.getValue()?.treeId;
84
+ if (treeId) {
85
+ this.dispatchAction(new NgssmCollapseExpressionTreeNodeAction(treeId, node.data.id));
86
+ }
87
+ }
88
+ forceRefresh() {
89
+ this.changeDetectorRef.markForCheck();
90
+ }
91
+ expandAll() {
92
+ const treeId = this._treeConfig$.getValue()?.treeId;
93
+ if (treeId) {
94
+ this.dispatchAction(new NgssmExpandAllExpressionTreeNodesAction(treeId));
95
+ }
96
+ }
97
+ collapseAll() {
98
+ const treeId = this._treeConfig$.getValue()?.treeId;
99
+ if (treeId) {
100
+ this.dispatchAction(new NgssmCollapseAllExpressionTreeNodesAction(treeId));
101
+ }
102
+ }
103
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgssmExpressionTreeComponent, deps: [{ token: i1.Store }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
104
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgssmExpressionTreeComponent, isStandalone: true, selector: "ngssm-expression-tree", inputs: { treeConfig: "treeConfig" }, usesInheritance: true, ngImport: i0, template: "<mat-card class=\"flex-column-stretch fxFlex ngssm-expression-tree\" [cdkContextMenuTriggerFor]=\"contextMenu\">\n <mat-card-content class=\"flex-column-stretch fxFlex ngssm-expression-tree-content\"\n *ngIf=\"(treeConfig$ | async) as treeConfig\">\n <cdk-virtual-scroll-viewport [itemSize]=\"treeConfig.rowSize ?? 30\" class=\"fxFlex\"\n *ngIf=\"treeConfig.disableVirtualization !== true\">\n <div *cdkVirtualFor=\"let item of displayedNodes$ | async; trackBy: getItemId\"\n class=\"ngssm-expression-tree-node\" id=\"{{'node_' + item.data.id}}\">\n <ng-container *ngTemplateOutlet=\"nodeTemplate;context: {treeConfig, item}\"></ng-container>\n </div>\n </cdk-virtual-scroll-viewport>\n <div class=\"ngssm-expression-tree-nodes-container\" *ngIf=\"treeConfig.disableVirtualization === true\">\n <div *ngFor=\"let item of displayedNodes$ | async; trackBy: getItemId\" class=\"ngssm-expression-tree-node\"\n id=\"{{'node_' + item.data.id}}\">\n <ng-container *ngTemplateOutlet=\"nodeTemplate;context: {treeConfig, item}\"></ng-container>\n </div>\n </div>\n </mat-card-content>\n</mat-card>\n\n<ng-template #nodeTemplate let-treeConfig=\"treeConfig\" let-item=\"item\">\n <div class=\"flex-row-center fxFlex\" [style.height.px]=\"treeConfig.rowSize ?? 30\">\n <mat-divider [vertical]=\"true\" class=\"ngssm-expression-tree-node-divider\"\n [style.height.px]=\"treeConfig.rowSize ?? 30\" *ngFor=\"let part of item.path\"\n [style.margin-right.px]=\"getDefaultPadding()\">\n </mat-divider>\n <mat-icon class=\"{{treeConfig.expandIconClass}}\"\n *ngIf=\"(item.data.isExpandable || item.data.hasRowDetail) && item.isExpanded === false\"\n (click)=\"$event.stopPropagation();expand(item);\" id=\"expandIcon\">\n </mat-icon>\n <mat-icon class=\"{{treeConfig.collapseIconClass}}\"\n *ngIf=\"(item.data.isExpandable || item.data.hasRowDetail) && item.isExpanded === true\"\n (click)=\"$event.stopPropagation();collapse(item);\" id=\"collapseIcon\">\n </mat-icon>\n <ngssm-expression-tree-node [nodeId]=\"item.data.id\" [treeConfig]=\"treeConfig\">\n </ngssm-expression-tree-node>\n </div>\n <div *ngIf=\"item.data.hasRowDetail === true && item.isExpanded === true\" class=\"flex-row-center fxFlex\">\n <mat-divider [vertical]=\"true\" class=\"ngssm-expression-tree-node-divider\"\n [style.height.px]=\"detailContainer.getBoundingClientRect().height\" *ngFor=\" let part of item.path\"\n [style.margin-right.px]=\"getDefaultPadding()\">\n </mat-divider>\n\n <div #detailContainer class=\"ngssm-expression-tree-node-detail-component\">\n <ngssm-expression-tree-node-details [nodeId]=\"item.data.id\" [treeConfig]=\"treeConfig\"\n (heightChanged)=\"forceRefresh()\">\n </ngssm-expression-tree-node-details>\n </div>\n </div>\n</ng-template>\n\n<ng-template #contextMenu>\n <div class=\"ngssm-expression-tree-context-menu\" cdkMenu>\n <button class=\"ngssm-expression-tree-context-menu-item\" cdkMenuItem (click)=\"expandAll()\">Expand all</button>\n <button class=\"ngssm-expression-tree-context-menu-item\" cdkMenuItem (click)=\"collapseAll()\">\n Collapse all\n </button>\n </div>\n</ng-template>", styles: [":host{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i3.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: CdkMenuModule }, { kind: "directive", type: i7.CdkMenu, selector: "[cdkMenu]", outputs: ["closed"], exportAs: ["cdkMenu"] }, { kind: "directive", type: i7.CdkMenuItem, selector: "[cdkMenuItem]", inputs: ["cdkMenuItemDisabled", "cdkMenuitemTypeaheadLabel"], outputs: ["cdkMenuItemTriggered"], exportAs: ["cdkMenuItem"] }, { kind: "directive", type: i7.CdkContextMenuTrigger, selector: "[cdkContextMenuTriggerFor]", inputs: ["cdkContextMenuTriggerFor", "cdkContextMenuPosition", "cdkContextMenuTriggerData", "cdkContextMenuDisabled"], outputs: ["cdkContextMenuOpened", "cdkContextMenuClosed"], exportAs: ["cdkContextMenuTriggerFor"] }, { kind: "component", type: NgssmExpressionTreeNodeComponent, selector: "ngssm-expression-tree-node", inputs: ["nodeId", "treeConfig"] }, { kind: "component", type: NgssmExpressionTreeNodeDetailsComponent, selector: "ngssm-expression-tree-node-details", inputs: ["nodeId", "treeConfig"], outputs: ["heightChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
105
+ }
106
+ export { NgssmExpressionTreeComponent };
107
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgssmExpressionTreeComponent, decorators: [{
108
+ type: Component,
109
+ args: [{ selector: 'ngssm-expression-tree', standalone: true, imports: [
110
+ CommonModule,
111
+ ScrollingModule,
112
+ MatCardModule,
113
+ MatDividerModule,
114
+ MatIconModule,
115
+ CdkMenuModule,
116
+ NgssmExpressionTreeNodeComponent,
117
+ NgssmExpressionTreeNodeDetailsComponent
118
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-card class=\"flex-column-stretch fxFlex ngssm-expression-tree\" [cdkContextMenuTriggerFor]=\"contextMenu\">\n <mat-card-content class=\"flex-column-stretch fxFlex ngssm-expression-tree-content\"\n *ngIf=\"(treeConfig$ | async) as treeConfig\">\n <cdk-virtual-scroll-viewport [itemSize]=\"treeConfig.rowSize ?? 30\" class=\"fxFlex\"\n *ngIf=\"treeConfig.disableVirtualization !== true\">\n <div *cdkVirtualFor=\"let item of displayedNodes$ | async; trackBy: getItemId\"\n class=\"ngssm-expression-tree-node\" id=\"{{'node_' + item.data.id}}\">\n <ng-container *ngTemplateOutlet=\"nodeTemplate;context: {treeConfig, item}\"></ng-container>\n </div>\n </cdk-virtual-scroll-viewport>\n <div class=\"ngssm-expression-tree-nodes-container\" *ngIf=\"treeConfig.disableVirtualization === true\">\n <div *ngFor=\"let item of displayedNodes$ | async; trackBy: getItemId\" class=\"ngssm-expression-tree-node\"\n id=\"{{'node_' + item.data.id}}\">\n <ng-container *ngTemplateOutlet=\"nodeTemplate;context: {treeConfig, item}\"></ng-container>\n </div>\n </div>\n </mat-card-content>\n</mat-card>\n\n<ng-template #nodeTemplate let-treeConfig=\"treeConfig\" let-item=\"item\">\n <div class=\"flex-row-center fxFlex\" [style.height.px]=\"treeConfig.rowSize ?? 30\">\n <mat-divider [vertical]=\"true\" class=\"ngssm-expression-tree-node-divider\"\n [style.height.px]=\"treeConfig.rowSize ?? 30\" *ngFor=\"let part of item.path\"\n [style.margin-right.px]=\"getDefaultPadding()\">\n </mat-divider>\n <mat-icon class=\"{{treeConfig.expandIconClass}}\"\n *ngIf=\"(item.data.isExpandable || item.data.hasRowDetail) && item.isExpanded === false\"\n (click)=\"$event.stopPropagation();expand(item);\" id=\"expandIcon\">\n </mat-icon>\n <mat-icon class=\"{{treeConfig.collapseIconClass}}\"\n *ngIf=\"(item.data.isExpandable || item.data.hasRowDetail) && item.isExpanded === true\"\n (click)=\"$event.stopPropagation();collapse(item);\" id=\"collapseIcon\">\n </mat-icon>\n <ngssm-expression-tree-node [nodeId]=\"item.data.id\" [treeConfig]=\"treeConfig\">\n </ngssm-expression-tree-node>\n </div>\n <div *ngIf=\"item.data.hasRowDetail === true && item.isExpanded === true\" class=\"flex-row-center fxFlex\">\n <mat-divider [vertical]=\"true\" class=\"ngssm-expression-tree-node-divider\"\n [style.height.px]=\"detailContainer.getBoundingClientRect().height\" *ngFor=\" let part of item.path\"\n [style.margin-right.px]=\"getDefaultPadding()\">\n </mat-divider>\n\n <div #detailContainer class=\"ngssm-expression-tree-node-detail-component\">\n <ngssm-expression-tree-node-details [nodeId]=\"item.data.id\" [treeConfig]=\"treeConfig\"\n (heightChanged)=\"forceRefresh()\">\n </ngssm-expression-tree-node-details>\n </div>\n </div>\n</ng-template>\n\n<ng-template #contextMenu>\n <div class=\"ngssm-expression-tree-context-menu\" cdkMenu>\n <button class=\"ngssm-expression-tree-context-menu-item\" cdkMenuItem (click)=\"expandAll()\">Expand all</button>\n <button class=\"ngssm-expression-tree-context-menu-item\" cdkMenuItem (click)=\"collapseAll()\">\n Collapse all\n </button>\n </div>\n</ng-template>", styles: [":host{display:flex;flex-direction:column}\n"] }]
119
+ }], ctorParameters: function () { return [{ type: i1.Store }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { treeConfig: [{
120
+ type: Input
121
+ }] } });
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdzc20tZXhwcmVzc2lvbi10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nc3NtLXRyZWUvc3JjL2xpYi9uZ3NzbS1leHByZXNzaW9uLXRyZWUvY29tcG9uZW50cy9uZ3NzbS1leHByZXNzaW9uLXRyZWUvbmdzc20tZXhwcmVzc2lvbi10cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nc3NtLXRyZWUvc3JjL2xpYi9uZ3NzbS1leHByZXNzaW9uLXRyZWUvY29tcG9uZW50cy9uZ3NzbS1leHByZXNzaW9uLXRyZWUvbmdzc20tZXhwcmVzc2lvbi10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxlQUFlLEVBQTRCLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1RSxPQUFPLEVBQUUsY0FBYyxFQUFTLE1BQU0sYUFBYSxDQUFDO0FBR3BELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3RCxPQUFPLEVBQ0wseUNBQXlDLEVBQ3pDLHFDQUFxQyxFQUNyQyx1Q0FBdUMs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QUFDO0lBRU0sU0FBUztRQUNkLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDO1FBQ3BELElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLHVDQUF1QyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDMUU7SUFDSCxDQUFDO0lBRU0sV0FBVztRQUNoQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUNwRCxJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSx5Q0FBeUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQzVFO0lBQ0gsQ0FBQzs4R0FyR1UsNEJBQTRCO2tHQUE1Qiw0QkFBNEIsOElDdkN6Qyw4NkdBeURjLG9HRC9CVixZQUFZLDJkQUNaLGVBQWUsMmpCQUNmLGFBQWEsME5BQ2IsZ0JBQWdCLGtJQUNoQixhQUFhLG1MQUNiLGFBQWEsd29CQUNiLGdDQUFnQyx5R0FDaEMsdUNBQXVDOztTQU05Qiw0QkFBNEI7MkZBQTVCLDRCQUE0QjtrQkFqQnhDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixnQ0FBZ0M7d0JBQ2hDLHVDQUF1QztxQkFDeEMsbUJBR2dCLHVCQUF1QixDQUFDLE1BQU07NEhBNkIzQixVQUFVO3NCQUE3QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgSW5wdXQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU2Nyb2xsaW5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBNYXRDYXJkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2FyZCc7XG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBDZGtNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL21lbnUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBOZ1NzbUNvbXBvbmVudCwgU3RvcmUgfSBmcm9tICduZ3NzbS1zdG9yZSc7XG5cbmltcG9ydCB7IE5nc3NtRXhwcmVzc2lvblRyZWUsIE5nc3NtRXhwcmVzc2lvblRyZWVDb25maWcsIE5nc3NtRXhwcmVzc2lvblRyZWVOb2RlIH0gZnJvbSAnLi4vLi4vbW9kZWwnO1xuaW1wb3J0IHsgc2VsZWN0Tmdzc21FeHByZXNzaW9uVHJlZVN0YXRlIH0gZnJvbSAnLi4vLi4vc3RhdGUnO1xuaW1wb3J0IHtcbiAgTmdzc21Db2xsYXBzZUFsbEV4cHJlc3Npb25UcmVlTm9kZXNBY3Rpb24sXG4gIE5nc3NtQ29sbGFwc2VFeHByZXNzaW9uVHJlZU5vZGVBY3Rpb24sXG4gIE5nc3NtRXhwYW5kQWxsRXhwcmVzc2lvblRyZWVOb2Rlc0FjdGlvbixcbiAgTmdzc21FeHBhbmRFeHByZXNzaW9uVHJlZU5vZGVBY3Rpb25cbn0gZnJvbSAnLi4vLi4vYWN0aW9ucyc7XG5pbXBvcnQgeyBOZ3NzbUV4cHJlc3Npb25UcmVlTm9kZUNvbXBvbmVudCB9IGZyb20gJy4uL25nc3NtLWV4cHJlc3Npb24tdHJlZS1ub2RlL25nc3NtLWV4cHJlc3Npb24tdHJlZS1ub2RlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ3NzbUV4cHJlc3Npb25UcmVlTm9kZURldGFpbHNDb21wb25lbnQgfSBmcm9tICcuLi9uZ3NzbS1leHByZXNzaW9uLXRyZWUtbm9kZS1kZXRhaWxzL25nc3NtLWV4cHJlc3Npb24tdHJlZS1ub2RlLWRldGFpbHMuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdzc20tZXhwcmVzc2lvbi10cmVlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBTY3JvbGxpbmdNb2R1bGUsXG4gICAgTWF0Q2FyZE1vZHVsZSxcbiAgICBNYXREaXZpZGVyTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgQ2RrTWVudU1vZHVsZSxcbiAgICBOZ3NzbUV4cHJlc3Npb25UcmVlTm9kZUNvbXBvbmVudCxcbiAgICBOZ3NzbUV4cHJlc3Npb25UcmVlTm9kZURldGFpbHNDb21wb25lbnRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL25nc3NtLWV4cHJlc3Npb24tdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25nc3NtLWV4cHJlc3Npb24tdHJlZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBOZ3NzbUV4cHJlc3Npb25UcmVlQ29tcG9uZW50IGV4dGVuZHMgTmdTc21Db21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IF90cmVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Tmdzc21FeHByZXNzaW9uVHJlZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcGxheWVkTm9kZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOZ3NzbUV4cHJlc3Npb25UcmVlTm9kZVtdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RyZWVDb25maWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOZ3NzbUV4cHJlc3Npb25UcmVlQ29uZmlnIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgX3RyZWVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3Ioc3RvcmU6IFN0b3JlLCBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKHN0b3JlKTtcblxuICAgIHRoaXMuX3RyZWUkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVBbGwkKSkuc3Vic2NyaWJlKCh0cmVlKSA9PiB7XG4gICAgICBjb25zdCBkaXNwbGF5ZWROb2RlczogTmdzc21FeHByZXNzaW9uVHJlZU5vZGVbXSA9IFtdO1xuICAgICAgY29uc3QgY29sbGFwc2VkTm9kZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICh0cmVlPy5ub2RlcyA/PyBbXSkuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICBpZiAobm9kZS5kYXRhLmlzRXhwYW5kYWJsZSA9PT0gdHJ1ZSAmJiBub2RlLmlzRXhwYW5kZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgY29sbGFwc2VkTm9kZXMuYWRkKG5vZGUuZGF0YS5pZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW5vZGUuZGF0YS5wYXJlbnRJZCB8fCBub2RlLnBhdGguZmluZEluZGV4KChwKSA9PiBjb2xsYXBzZWROb2Rlcy5oYXMocCkpID09PSAtMSkge1xuICAgICAgICAgIGRpc3BsYXllZE5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9kaXNwbGF5ZWROb2RlcyQubmV4dChkaXNwbGF5ZWROb2Rlcyk7XG4gICAgfSk7XG4gIH1cblxuICBASW5wdXQoKSBwdWJsaWMgc2V0IHRyZWVDb25maWcodmFsdWU6IE5nc3NtRXhwcmVzc2lvblRyZWVDb25maWcgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fdHJlZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB0aGlzLl90cmVlQ29uZmlnJC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnOiBOZ3NzbUV4cHJlc3Npb25UcmVlQ29uZmlnID0ge1xuICAgICAgLi4udmFsdWVcbiAgICB9O1xuICAgIGlmICghY29uZmlnLmdldE5vZGVMYWJlbCkge1xuICAgICAgY29uZmlnLmdldE5vZGVMYWJlbCA9IChub2RlKSA9PiBub2RlLmRhdGEuaWQ7XG4gICAgfVxuXG4gICAgaWYgKCFjb25maWcuZXhwYW5kSWNvbkNsYXNzKSB7XG4gICAgICBjb25maWcuZXhwYW5kSWNvbkNsYXNzID0gJ2ZhLXNvbGlkIGZhLWNoZXZyb24tcmlnaHQnO1xuICAgIH1cblxuICAgIGlmICghY29uZmlnLmNvbGxhcHNlSWNvbkNsYXNzKSB7XG4gICAgICBjb25maWcuY29sbGFwc2VJY29uQ2xhc3MgPSAnZmEtc29saWQgZmEtY2hldnJvbi1kb3duJztcbiAgICB9XG5cbiAgICB0aGlzLl90cmVlQ29uZmlnJC5uZXh0KGNvbmZpZyk7XG4gICAgdGhpcy5fdHJlZVN1YnNjcmlwdGlvbiA9IHRoaXMud2F0Y2goKHMpID0+IHNlbGVjdE5nc3NtRXhwcmVzc2lvblRyZWVTdGF0ZShzKS50cmVlc1t2YWx1ZS50cmVlSWRdKS5zdWJzY3JpYmUoKHRyZWUpID0+XG4gICAgICB0aGlzLl90cmVlJC5uZXh0KHRyZWUpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdHJlZUNvbmZpZyQoKTogT2JzZXJ2YWJsZTxOZ3NzbUV4cHJlc3Npb25UcmVlQ29uZmlnIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyZWVDb25maWckLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBkaXNwbGF5ZWROb2RlcyQoKTogT2JzZXJ2YWJsZTxOZ3NzbUV4cHJlc3Npb25UcmVlTm9kZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXllZE5vZGVzJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJdGVtSWQoXzogbnVtYmVyLCBub2RlOiBOZ3NzbUV4cHJlc3Npb25UcmVlTm9kZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5vZGUuZGF0YS5pZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXREZWZhdWx0UGFkZGluZygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl90cmVlQ29uZmlnJC5nZXRWYWx1ZSgpPy5ub2RlUGFkZGluZyA/PyAyMDtcbiAgfVxuXG4gIHB1YmxpYyBleHBhbmQobm9kZTogTmdzc21FeHByZXNzaW9uVHJlZU5vZGUpOiB2b2lkIHtcbiAgICBjb25zdCB0cmVlSWQgPSB0aGlzLl90cmVlQ29uZmlnJC5nZXRWYWx1ZSgpPy50cmVlSWQ7XG4gICAgaWYgKHRyZWVJZCkge1xuICAgICAgdGhpcy5kaXNwYXRjaEFjdGlvbihuZXcgTmdzc21FeHBhbmRFeHByZXNzaW9uVHJlZU5vZGVBY3Rpb24odHJlZUlkLCBub2RlLmRhdGEuaWQpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY29sbGFwc2Uobm9kZTogTmdzc21FeHByZXNzaW9uVHJlZU5vZGUpOiB2b2lkIHtcbiAgICBjb25zdCB0cmVlSWQgPSB0aGlzLl90cmVlQ29uZmlnJC5nZXRWYWx1ZSgpPy50cmVlSWQ7XG4gICAgaWYgKHRyZWVJZCkge1xuICAgICAgdGhpcy5kaXNwYXRjaEFjdGlvbihuZXcgTmdzc21Db2xsYXBzZUV4cHJlc3Npb25UcmVlTm9kZUFjdGlvbih0cmVlSWQsIG5vZGUuZGF0YS5pZCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmb3JjZVJlZnJlc2goKTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBleHBhbmRBbGwoKTogdm9pZCB7XG4gICAgY29uc3QgdHJlZUlkID0gdGhpcy5fdHJlZUNvbmZpZyQuZ2V0VmFsdWUoKT8udHJlZUlkO1xuICAgIGlmICh0cmVlSWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24obmV3IE5nc3NtRXhwYW5kQWxsRXhwcmVzc2lvblRyZWVOb2Rlc0FjdGlvbih0cmVlSWQpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY29sbGFwc2VBbGwoKTogdm9pZCB7XG4gICAgY29uc3QgdHJlZUlkID0gdGhpcy5fdHJlZUNvbmZpZyQuZ2V0VmFsdWUoKT8udHJlZUlkO1xuICAgIGlmICh0cmVlSWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24obmV3IE5nc3NtQ29sbGFwc2VBbGxFeHByZXNzaW9uVHJlZU5vZGVzQWN0aW9uKHRyZWVJZCkpO1xuICAgIH1cbiAgfVxufVxuIiwiPG1hdC1jYXJkIGNsYXNzPVwiZmxleC1jb2x1bW4tc3RyZXRjaCBmeEZsZXggbmdzc20tZXhwcmVzc2lvbi10cmVlXCIgW2Nka0NvbnRleHRNZW51VHJpZ2dlckZvcl09XCJjb250ZXh0TWVudVwiPlxuICAgIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwiZmxleC1jb2x1bW4tc3RyZXRjaCBmeEZsZXggbmdzc20tZXhwcmVzc2lvbi10cmVlLWNvbnRlbnRcIlxuICAgICAgICAqbmdJZj1cIih0cmVlQ29uZmlnJCB8IGFzeW5jKSBhcyB0cmVlQ29uZmlnXCI+XG4gICAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgW2l0ZW1TaXplXT1cInRyZWVDb25maWcucm93U2l6ZSA/PyAzMFwiIGNsYXNzPVwiZnhGbGV4XCJcbiAgICAgICAgICAgICpuZ0lmPVwidHJlZUNvbmZpZy5kaXNhYmxlVmlydHVhbGl6YXRpb24gIT09IHRydWVcIj5cbiAgICAgICAgICAgIDxkaXYgKmNka1ZpcnR1YWxGb3I9XCJsZXQgaXRlbSBvZiBkaXNwbGF5ZWROb2RlcyQgfCBhc3luYzsgdHJhY2tCeTogZ2V0SXRlbUlkXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm5nc3NtLWV4cHJlc3Npb24tdHJlZS1ub2RlXCIgaWQ9XCJ7eydub2RlXycgKyBpdGVtLmRhdGEuaWR9fVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub2RlVGVtcGxhdGU7Y29udGV4dDoge3RyZWVDb25maWcsIGl0ZW19XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuZ3NzbS1leHByZXNzaW9uLXRyZWUtbm9kZXMtY29udGFpbmVyXCIgKm5nSWY9XCJ0cmVlQ29uZmlnLmRpc2FibGVWaXJ0dWFsaXphdGlvbiA9PT0gdHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkaXNwbGF5ZWROb2RlcyQgfCBhc3luYzsgdHJhY2tCeTogZ2V0SXRlbUlkXCIgY2xhc3M9XCJuZ3NzbS1leHByZXNzaW9uLXRyZWUtbm9kZVwiXG4gICAgICAgICAgICAgICAgaWQ9XCJ7eydub2RlXycgKyBpdGVtLmRhdGEuaWR9fVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub2RlVGVtcGxhdGU7Y29udGV4dDoge3RyZWVDb25maWcsIGl0ZW19XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxuPC9tYXQtY2FyZD5cblxuPG5nLXRlbXBsYXRlICNub2RlVGVtcGxhdGUgbGV0LXRyZWVDb25maWc9XCJ0cmVlQ29uZmlnXCIgbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgtcm93LWNlbnRlciBmeEZsZXhcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cInRyZWVDb25maWcucm93U2l6ZSA/PyAzMFwiPlxuICAgICAgICA8bWF0LWRpdmlkZXIgW3ZlcnRpY2FsXT1cInRydWVcIiBjbGFzcz1cIm5nc3NtLWV4cHJlc3Npb24tdHJlZS1ub2RlLWRpdmlkZXJcIlxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJ0cmVlQ29uZmlnLnJvd1NpemUgPz8gMzBcIiAqbmdGb3I9XCJsZXQgcGFydCBvZiBpdGVtLnBhdGhcIlxuICAgICAgICAgICAgW3N0eWxlLm1hcmdpbi1yaWdodC5weF09XCJnZXREZWZhdWx0UGFkZGluZygpXCI+XG4gICAgICAgIDwvbWF0LWRpdmlkZXI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInt7dHJlZUNvbmZpZy5leHBhbmRJY29uQ2xhc3N9fVwiXG4gICAgICAgICAgICAqbmdJZj1cIihpdGVtLmRhdGEuaXNFeHBhbmRhYmxlIHx8IGl0ZW0uZGF0YS5oYXNSb3dEZXRhaWwpICYmIGl0ZW0uaXNFeHBhbmRlZCA9PT0gZmFsc2VcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtleHBhbmQoaXRlbSk7XCIgaWQ9XCJleHBhbmRJY29uXCI+XG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInt7dHJlZUNvbmZpZy5jb2xsYXBzZUljb25DbGFzc319XCJcbiAgICAgICAgICAgICpuZ0lmPVwiKGl0ZW0uZGF0YS5pc0V4cGFuZGFibGUgfHwgaXRlbS5kYXRhLmhhc1Jvd0RldGFpbCkgJiYgaXRlbS5pc0V4cGFuZGVkID09PSB0cnVlXCJcbiAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Y29sbGFwc2UoaXRlbSk7XCIgaWQ9XCJjb2xsYXBzZUljb25cIj5cbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgPG5nc3NtLWV4cHJlc3Npb24tdHJlZS1ub2RlIFtub2RlSWRdPVwiaXRlbS5kYXRhLmlkXCIgW3RyZWVDb25maWddPVwidHJlZUNvbmZpZ1wiPlxuICAgICAgICA8L25nc3NtLWV4cHJlc3Npb24tdHJlZS1ub2RlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJpdGVtLmRhdGEuaGFzUm93RGV0YWlsID09PSB0cnVlICYmIGl0ZW0uaXNFeHBhbmRlZCA9PT0gdHJ1ZVwiIGNsYXNzPVwiZmxleC1yb3ctY2VudGVyIGZ4RmxleFwiPlxuICAgICAgICA8bWF0LWRpdmlkZXIgW3ZlcnRpY2FsXT1cInRydWVcIiBjbGFzcz1cIm5nc3NtLWV4cHJlc3Npb24tdHJlZS1ub2RlLWRpdmlkZXJcIlxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJkZXRhaWxDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0XCIgKm5nRm9yPVwiIGxldCBwYXJ0IG9mIGl0ZW0ucGF0aFwiXG4gICAgICAgICAgICBbc3R5bGUubWFyZ2luLXJpZ2h0LnB4XT1cImdldERlZmF1bHRQYWRkaW5nKClcIj5cbiAgICAgICAgPC9tYXQtZGl2aWRlcj5cblxuICAgICAgICA8ZGl2ICNkZXRhaWxDb250YWluZXIgY2xhc3M9XCJuZ3NzbS1leHByZXNzaW9uLXRyZWUtbm9kZS1kZXRhaWwtY29tcG9uZW50XCI+XG4gICAgICAgICAgICA8bmdzc20tZXhwcmVzc2lvbi10cmVlLW5vZGUtZGV0YWlscyBbbm9kZUlkXT1cIml0ZW0uZGF0YS5pZFwiIFt0cmVlQ29uZmlnXT1cInRyZWVDb25maWdcIlxuICAgICAgICAgICAgICAgIChoZWlnaHRDaGFuZ2VkKT1cImZvcmNlUmVmcmVzaCgpXCI+XG4gICAgICAgICAgICA8L25nc3NtLWV4cHJlc3Npb24tdHJlZS1ub2RlLWRldGFpbHM+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb250ZXh0TWVudT5cbiAgICA8ZGl2IGNsYXNzPVwibmdzc20tZXhwcmVzc2lvbi10cmVlLWNvbnRleHQtbWVudVwiIGNka01lbnU+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJuZ3NzbS1leHByZXNzaW9uLXRyZWUtY29udGV4dC1tZW51LWl0ZW1cIiBjZGtNZW51SXRlbSAoY2xpY2spPVwiZXhwYW5kQWxsKClcIj5FeHBhbmQgYWxsPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJuZ3NzbS1leHByZXNzaW9uLXRyZWUtY29udGV4dC1tZW51LWl0ZW1cIiBjZGtNZW51SXRlbSAoY2xpY2spPVwiY29sbGFwc2VBbGwoKVwiPlxuICAgICAgICAgICAgQ29sbGFwc2UgYWxsXG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
@@ -0,0 +1,87 @@
1
+ import { Component, ChangeDetectionStrategy, Input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { MatIconModule } from '@angular/material/icon';
4
+ import { BehaviorSubject, combineLatest, filter, switchMap, takeUntil } from 'rxjs';
5
+ import { NgSsmComponent } from 'ngssm-store';
6
+ import { NgssmComponentDisplayDirective } from 'ngssm-toolkit';
7
+ import { selectNgssmExpressionTreeState } from '../../state';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "ngssm-store";
10
+ import * as i2 from "@angular/common";
11
+ import * as i3 from "@angular/material/icon";
12
+ class NgssmExpressionTreeNodeComponent extends NgSsmComponent {
13
+ constructor(store) {
14
+ super(store);
15
+ this._nodeId$ = new BehaviorSubject(undefined);
16
+ this._treeConfig$ = new BehaviorSubject(undefined);
17
+ this._nodeLabel$ = new BehaviorSubject('');
18
+ this._nodeCssIcon$ = new BehaviorSubject(undefined);
19
+ this._nodeDescription$ = new BehaviorSubject(undefined);
20
+ this._componentAction$ = new BehaviorSubject(undefined);
21
+ this._componentToDisplay$ = new BehaviorSubject(undefined);
22
+ combineLatest([this._nodeId$, this._treeConfig$])
23
+ .pipe(filter((v) => v[0] !== undefined && v[1] !== undefined), takeUntil(this.unsubscribeAll$), switchMap((v) => combineLatest([
24
+ this.watch((s) => selectNgssmExpressionTreeState(s).trees[v[1]?.treeId ?? 'unknown'].data[v[0] ?? 'unknown']),
25
+ this.watch((s) => selectNgssmExpressionTreeState(s).trees[v[1]?.treeId ?? 'unknown'].nodes)
26
+ ])), takeUntil(this.unsubscribeAll$))
27
+ .subscribe((values) => {
28
+ const node = values[1].find((v) => v.data.id === this._nodeId$.getValue());
29
+ const treeConfig = this._treeConfig$.getValue();
30
+ const nodeValue = values[0];
31
+ if (node && treeConfig && nodeValue) {
32
+ this._nodeLabel$.next(treeConfig.getNodeLabel?.(node, nodeValue) ?? '');
33
+ this._nodeCssIcon$.next(treeConfig.getNodeCssIcon?.(node, nodeValue) ?? undefined);
34
+ this._nodeDescription$.next(treeConfig.getNodeDescription?.(node, nodeValue));
35
+ }
36
+ });
37
+ combineLatest([this._nodeId$, this._treeConfig$])
38
+ .pipe(takeUntil(this.unsubscribeAll$))
39
+ .subscribe((values) => {
40
+ const treeConfig = values[1];
41
+ const nodeId = values[0];
42
+ if (treeConfig && nodeId) {
43
+ this._componentAction$.next((c) => c.setup(treeConfig.treeId, nodeId));
44
+ this._componentToDisplay$.next(treeConfig.nodeDescriptionComponent);
45
+ }
46
+ });
47
+ }
48
+ set nodeId(value) {
49
+ if (!value) {
50
+ return;
51
+ }
52
+ this._nodeId$.next(value);
53
+ }
54
+ set treeConfig(value) {
55
+ if (!value) {
56
+ return;
57
+ }
58
+ this._treeConfig$.next(value);
59
+ }
60
+ get nodeLabel$() {
61
+ return this._nodeLabel$.asObservable();
62
+ }
63
+ get nodeCssIcon$() {
64
+ return this._nodeCssIcon$.asObservable();
65
+ }
66
+ get nodeDescription$() {
67
+ return this._nodeDescription$.asObservable();
68
+ }
69
+ get componentAction$() {
70
+ return this._componentAction$.asObservable();
71
+ }
72
+ get componentToDisplay$() {
73
+ return this._componentToDisplay$.asObservable();
74
+ }
75
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgssmExpressionTreeNodeComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
76
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgssmExpressionTreeNodeComponent, isStandalone: true, selector: "ngssm-expression-tree-node", inputs: { nodeId: "nodeId", treeConfig: "treeConfig" }, usesInheritance: true, ngImport: i0, template: "<div class=\"ngssm-expression-tree-node-icon\" *ngIf=\"(nodeCssIcon$ | async) !== undefined\">\n <mat-icon class=\"{{nodeCssIcon$ | async}}\"></mat-icon>\n</div>\n\n<div class=\"ngssm-expression-tree-node-label\">\n {{nodeLabel$ | async}}\n</div>\n\n<div class=\"ngssm-expression-tree-node-description\" [innerHTML]=\"nodeDescription$ | async\">\n</div>\n\n<div class=\"ngssm-expression-tree-node-description-component\" [ngssmComponentDisplay]=\"componentToDisplay$ | async\"\n [ngssmComponentAction]=\"componentAction$ | async\">\n</div>", styles: [":host{display:flex;flex-direction:row;align-items:center;flex:1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgssmComponentDisplayDirective, selector: "[ngssmComponentDisplay]", inputs: ["ngssmComponentDisplay", "ngssmComponentAction"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
77
+ }
78
+ export { NgssmExpressionTreeNodeComponent };
79
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgssmExpressionTreeNodeComponent, decorators: [{
80
+ type: Component,
81
+ args: [{ selector: 'ngssm-expression-tree-node', standalone: true, imports: [CommonModule, MatIconModule, NgssmComponentDisplayDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ngssm-expression-tree-node-icon\" *ngIf=\"(nodeCssIcon$ | async) !== undefined\">\n <mat-icon class=\"{{nodeCssIcon$ | async}}\"></mat-icon>\n</div>\n\n<div class=\"ngssm-expression-tree-node-label\">\n {{nodeLabel$ | async}}\n</div>\n\n<div class=\"ngssm-expression-tree-node-description\" [innerHTML]=\"nodeDescription$ | async\">\n</div>\n\n<div class=\"ngssm-expression-tree-node-description-component\" [ngssmComponentDisplay]=\"componentToDisplay$ | async\"\n [ngssmComponentAction]=\"componentAction$ | async\">\n</div>", styles: [":host{display:flex;flex-direction:row;align-items:center;flex:1}\n"] }]
82
+ }], ctorParameters: function () { return [{ type: i1.Store }]; }, propDecorators: { nodeId: [{
83
+ type: Input
84
+ }], treeConfig: [{
85
+ type: Input
86
+ }] } });
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdzc20tZXhwcmVzc2lvbi10cmVlLW5vZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdzc20tdHJlZS9zcmMvbGliL25nc3NtLWV4cHJlc3Npb24tdHJlZS9jb21wb25lbnRzL25nc3NtLWV4cHJlc3Npb24tdHJlZS1ub2RlL25nc3NtLWV4cHJlc3Npb24tdHJlZS1ub2RlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nc3NtLXRyZWUvc3JjL2xpYi9uZ3NzbS1leHByZXNzaW9uLXRyZWUvY29tcG9uZW50cy9uZ3NzbS1leHByZXNzaW9uLXRyZWUtbm9kZS9uZ3NzbS1leHByZXNzaW9uLXRyZWUtbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQWMsYUFBYSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhHLE9BQU8sRUFBRSxjQUFjLEVBQVMsTUFBTSxhQUFhLENBQUM7QUFDcEQsT0FBTyxFQUF3Qiw4QkFBOEIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdyRixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7O0FBRTdELE1BUWEsZ0NBQWlDLFNBQVEsY0FBYztJQVNsRSxZQUFZLEtBQVk7UUFDdEIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBVEUsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFxQixTQUFTLENBQUMsQ0FBQztR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QUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDbEQsQ0FBQzs4R0FqRlUsZ0NBQWdDO2tHQUFoQyxnQ0FBZ0MscUtDbkI3QyxzaUJBYU0sMkhEQ00sWUFBWSx1TEFBRSxhQUFhLG9MQUFFLDhCQUE4Qjs7U0FLMUQsZ0NBQWdDOzJGQUFoQyxnQ0FBZ0M7a0JBUjVDLFNBQVM7K0JBQ0UsNEJBQTRCLGNBQzFCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsOEJBQThCLENBQUMsbUJBR3JELHVCQUF1QixDQUFDLE1BQU07NEZBaUQzQixNQUFNO3NCQUF6QixLQUFLO2dCQVFjLFVBQVU7c0JBQTdCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgY29tYmluZUxhdGVzdCwgZmlsdGVyLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBOZ1NzbUNvbXBvbmVudCwgU3RvcmUgfSBmcm9tICduZ3NzbS1zdG9yZSc7XG5pbXBvcnQgeyBOZ3NzbUNvbXBvbmVudEFjdGlvbiwgTmdzc21Db21wb25lbnREaXNwbGF5RGlyZWN0aXZlIH0gZnJvbSAnbmdzc20tdG9vbGtpdCc7XG5cbmltcG9ydCB7IE5nc3NtRXhwcmVzc2lvblRyZWVDb25maWcsIE5nc3NtRXhwcmVzc2lvblRyZWVDdXN0b21Db21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2RlbCc7XG5pbXBvcnQgeyBzZWxlY3ROZ3NzbUV4cHJlc3Npb25UcmVlU3RhdGUgfSBmcm9tICcuLi8uLi9zdGF0ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nc3NtLWV4cHJlc3Npb24tdHJlZS1ub2RlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgTmdzc21Db21wb25lbnREaXNwbGF5RGlyZWN0aXZlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL25nc3NtLWV4cHJlc3Npb24tdHJlZS1ub2RlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbmdzc20tZXhwcmVzc2lvbi10cmVlLW5vZGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTmdzc21FeHByZXNzaW9uVHJlZU5vZGVDb21wb25lbnQgZXh0ZW5kcyBOZ1NzbUNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX25vZGVJZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdHJlZUNvbmZpZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE5nc3NtRXhwcmVzc2lvblRyZWVDb25maWcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX25vZGVMYWJlbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ub2RlQ3NzSWNvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbm9kZURlc2NyaXB0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb21wb25lbnRBY3Rpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOZ3NzbUNvbXBvbmVudEFjdGlvbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29tcG9uZW50VG9EaXNwbGF5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xuXG4gIGNvbnN0cnVjdG9yKHN0b3JlOiBTdG9yZSkge1xuICAgIHN1cGVyKHN0b3JlKTtcblxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuX25vZGVJZCQsIHRoaXMuX3RyZWVDb25maWckXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKHYpID0+IHZbMF0gIT09IHVuZGVmaW5lZCAmJiB2WzFdICE9PSB1bmRlZmluZWQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZUFsbCQpLFxuICAgICAgICBzd2l0Y2hNYXAoKHYpID0+XG4gICAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICB0aGlzLndhdGNoKChzKSA9PiBzZWxlY3ROZ3NzbUV4cHJlc3Npb25UcmVlU3RhdGUocykudHJlZXNbdlsxXT8udHJlZUlkID8/ICd1bmtub3duJ10uZGF0YVt2WzBdID8/ICd1bmtub3duJ10pLFxuICAgICAgICAgICAgdGhpcy53YXRjaCgocykgPT4gc2VsZWN0Tmdzc21FeHByZXNzaW9uVHJlZVN0YXRlKHMpLnRyZWVzW3ZbMV0/LnRyZWVJZCA/PyAndW5rbm93biddLm5vZGVzKVxuICAgICAgICAgIF0pXG4gICAgICAgICksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlQWxsJClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlcykgPT4ge1xuICAgICAgICBjb25zdCBub2RlID0gdmFsdWVzWzFdLmZpbmQoKHYpID0+IHYuZGF0YS5pZCA9PT0gdGhpcy5fbm9kZUlkJC5nZXRWYWx1ZSgpKTtcbiAgICAgICAgY29uc3QgdHJlZUNvbmZpZyA9IHRoaXMuX3RyZWVDb25maWckLmdldFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IG5vZGVWYWx1ZSA9IHZhbHVlc1swXTtcbiAgICAgICAgaWYgKG5vZGUgJiYgdHJlZUNvbmZpZyAmJiBub2RlVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLl9ub2RlTGFiZWwkLm5leHQodHJlZUNvbmZpZy5nZXROb2RlTGFiZWw/Lihub2RlLCBub2RlVmFsdWUpID8/ICcnKTtcbiAgICAgICAgICB0aGlzLl9ub2RlQ3NzSWNvbiQubmV4dCh0cmVlQ29uZmlnLmdldE5vZGVDc3NJY29uPy4obm9kZSwgbm9kZVZhbHVlKSA/PyB1bmRlZmluZWQpO1xuICAgICAgICAgIHRoaXMuX25vZGVEZXNjcmlwdGlvbiQubmV4dCh0cmVlQ29uZmlnLmdldE5vZGVEZXNjcmlwdGlvbj8uKG5vZGUsIG5vZGVWYWx1ZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuX25vZGVJZCQsIHRoaXMuX3RyZWVDb25maWckXSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlQWxsJCkpXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZXMpID0+IHtcbiAgICAgICAgY29uc3QgdHJlZUNvbmZpZyA9IHZhbHVlc1sxXTtcbiAgICAgICAgY29uc3Qgbm9kZUlkID0gdmFsdWVzWzBdO1xuICAgICAgICBpZiAodHJlZUNvbmZpZyAmJiBub2RlSWQpIHtcbiAgICAgICAgICB0aGlzLl9jb21wb25lbnRBY3Rpb24kLm5leHQoKGM6IE5nc3NtRXhwcmVzc2lvblRyZWVDdXN0b21Db21wb25lbnQpID0+IGMuc2V0dXAodHJlZUNvbmZpZy50cmVlSWQsIG5vZGVJZCkpO1xuICAgICAgICAgIHRoaXMuX2NvbXBvbmVudFRvRGlzcGxheSQubmV4dCh0cmVlQ29uZmlnLm5vZGVEZXNjcmlwdGlvbkNvbXBvbmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgQElucHV0KCkgcHVibGljIHNldCBub2RlSWQodmFsdWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbm9kZUlkJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgdHJlZUNvbmZpZyh2YWx1ZTogTmdzc21FeHByZXNzaW9uVHJlZUNvbmZpZyB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdHJlZUNvbmZpZyQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5vZGVMYWJlbCQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fbm9kZUxhYmVsJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbm9kZUNzc0ljb24kKCk6IE9ic2VydmFibGU8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuX25vZGVDc3NJY29uJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbm9kZURlc2NyaXB0aW9uJCgpOiBPYnNlcnZhYmxlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLl9ub2RlRGVzY3JpcHRpb24kLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBjb21wb25lbnRBY3Rpb24kKCk6IE9ic2VydmFibGU8Tmdzc21Db21wb25lbnRBY3Rpb24gfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50QWN0aW9uJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29tcG9uZW50VG9EaXNwbGF5JCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl9jb21wb25lbnRUb0Rpc3BsYXkkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibmdzc20tZXhwcmVzc2lvbi10cmVlLW5vZGUtaWNvblwiICpuZ0lmPVwiKG5vZGVDc3NJY29uJCB8IGFzeW5jKSAhPT0gdW5kZWZpbmVkXCI+XG4gICAgPG1hdC1pY29uIGNsYXNzPVwie3tub2RlQ3NzSWNvbiQgfCBhc3luY319XCI+PC9tYXQtaWNvbj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwibmdzc20tZXhwcmVzc2lvbi10cmVlLW5vZGUtbGFiZWxcIj5cbiAgICB7e25vZGVMYWJlbCQgfCBhc3luY319XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm5nc3NtLWV4cHJlc3Npb24tdHJlZS1ub2RlLWRlc2NyaXB0aW9uXCIgW2lubmVySFRNTF09XCJub2RlRGVzY3JpcHRpb24kIHwgYXN5bmNcIj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwibmdzc20tZXhwcmVzc2lvbi10cmVlLW5vZGUtZGVzY3JpcHRpb24tY29tcG9uZW50XCIgW25nc3NtQ29tcG9uZW50RGlzcGxheV09XCJjb21wb25lbnRUb0Rpc3BsYXkkIHwgYXN5bmNcIlxuICAgIFtuZ3NzbUNvbXBvbmVudEFjdGlvbl09XCJjb21wb25lbnRBY3Rpb24kIHwgYXN5bmNcIj5cbjwvZGl2PiJdfQ==
@@ -0,0 +1,68 @@
1
+ import { Component, ChangeDetectionStrategy, Input, Output, EventEmitter } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { BehaviorSubject, Subject, combineLatest, take } from 'rxjs';
4
+ import { NgSsmComponent } from 'ngssm-store';
5
+ import { NgssmComponentDisplayDirective } from 'ngssm-toolkit';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "ngssm-store";
8
+ import * as i2 from "@angular/common";
9
+ class NgssmExpressionTreeNodeDetailsComponent extends NgSsmComponent {
10
+ constructor(store, elementRef) {
11
+ super(store);
12
+ this.elementRef = elementRef;
13
+ this._nodeId$ = new Subject();
14
+ this._treeConfig$ = new Subject();
15
+ this._componentAction$ = new BehaviorSubject(undefined);
16
+ this._componentToDisplay$ = new BehaviorSubject(undefined);
17
+ this.initialized = false;
18
+ this.heightChanged = new EventEmitter();
19
+ combineLatest([this._nodeId$, this._treeConfig$])
20
+ .pipe(take(1))
21
+ .subscribe((values) => {
22
+ this.initialized = true;
23
+ this._componentAction$.next((c) => c.setup(values[1].treeId, values[0]));
24
+ this._componentToDisplay$.next(values[1].nodeDetailComponent);
25
+ setTimeout(() => {
26
+ this.heightChanged.emit(this.elementRef?.nativeElement.getBoundingClientRect().height ?? 0);
27
+ });
28
+ });
29
+ }
30
+ set nodeId(value) {
31
+ if (!value) {
32
+ return;
33
+ }
34
+ if (this.initialized) {
35
+ throw new Error('Component NgssmExpressionTreeNodeDetailsComponent is already initialized.');
36
+ }
37
+ this._nodeId$.next(value);
38
+ }
39
+ set treeConfig(value) {
40
+ if (!value) {
41
+ return;
42
+ }
43
+ if (this.initialized) {
44
+ throw new Error('Component NgssmExpressionTreeNodeDetailsComponent is already initialized.');
45
+ }
46
+ this._treeConfig$.next(value);
47
+ }
48
+ get componentAction$() {
49
+ return this._componentAction$.asObservable();
50
+ }
51
+ get componentToDisplay$() {
52
+ return this._componentToDisplay$.asObservable();
53
+ }
54
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgssmExpressionTreeNodeDetailsComponent, deps: [{ token: i1.Store }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
55
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgssmExpressionTreeNodeDetailsComponent, isStandalone: true, selector: "ngssm-expression-tree-node-details", inputs: { nodeId: "nodeId", treeConfig: "treeConfig" }, outputs: { heightChanged: "heightChanged" }, usesInheritance: true, ngImport: i0, template: "<div [ngssmComponentDisplay]=\"componentToDisplay$ | async\" [ngssmComponentAction]=\"componentAction$ | async\"></div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "directive", type: NgssmComponentDisplayDirective, selector: "[ngssmComponentDisplay]", inputs: ["ngssmComponentDisplay", "ngssmComponentAction"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
56
+ }
57
+ export { NgssmExpressionTreeNodeDetailsComponent };
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgssmExpressionTreeNodeDetailsComponent, decorators: [{
59
+ type: Component,
60
+ args: [{ selector: 'ngssm-expression-tree-node-details', standalone: true, imports: [CommonModule, NgssmComponentDisplayDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [ngssmComponentDisplay]=\"componentToDisplay$ | async\" [ngssmComponentAction]=\"componentAction$ | async\"></div>" }]
61
+ }], ctorParameters: function () { return [{ type: i1.Store }, { type: i0.ElementRef }]; }, propDecorators: { heightChanged: [{
62
+ type: Output
63
+ }], nodeId: [{
64
+ type: Input
65
+ }], treeConfig: [{
66
+ type: Input
67
+ }] } });
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdzc20tZXhwcmVzc2lvbi10cmVlLW5vZGUtZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS10cmVlL3NyYy9saWIvbmdzc20tZXhwcmVzc2lvbi10cmVlL2NvbXBvbmVudHMvbmdzc20tZXhwcmVzc2lvbi10cmVlLW5vZGUtZGV0YWlscy9uZ3NzbS1leHByZXNzaW9uLXRyZWUtbm9kZS1kZXRhaWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nc3NtLXRyZWUvc3JjL2xpYi9uZ3NzbS1leHByZXNzaW9uLXRyZWUvY29tcG9uZW50cy9uZ3NzbS1leHByZXNzaW9uLXRyZWUtbm9kZS1kZXRhaWxzL25nc3NtLWV4cHJlc3Npb24tdHJlZS1ub2RlLWRldGFpbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSx1QkFBdUIsRUFBRSxLQUFLLEVBQWMsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUU1RixPQUFPLEVBQUUsY0FBYyxFQUFTLE1BQU0sYUFBYSxDQUFDO0FBQ3BELE9BQU8sRUFBd0IsOEJBQThCLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFLckYsTUFRYSx1Q0FBd0MsU0FBUSxjQUFjO0lBVXpFLFlBQVksS0FBWSxFQUFVLFVBQXNCO1FBQ3RELEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQURtQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBVHZDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQ2pDLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQTZCLENBQUM7UUFDeEQsc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQW1DLFNBQVMsQ0FBQyxDQUFDO1FBQ3JGLHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUFNLFNBQVMsQ0FBQyxDQUFDO1FBRXBFLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRVgsa0JBQWEsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUtoRixhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2IsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFFeEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQXFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDOUQsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM5RixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELElBQW9CLE1BQU0sQ0FBQyxLQUFnQztRQUN6RCxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsT0FBTztTQUNSO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkVBQTJFLENBQUMsQ0FBQztTQUM5RjtRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFvQixVQUFVLENBQUMsS0FBbUQ7UUFDaEYsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLE9BQU87U0FDUjtRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLDJFQUEyRSxDQUFDLENBQUM7U0FDOUY7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBVyxnQkFBZ0I7UUFDekIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQVcsbUJBQW1CO1FBQzVCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2xELENBQUM7OEdBeERVLHVDQUF1QztrR0FBdkMsdUNBQXVDLDBOQ2xCcEQseUhBQW1ILHlERGF2RyxZQUFZLG9GQUFFLDhCQUE4Qjs7U0FLM0MsdUNBQXVDOzJGQUF2Qyx1Q0FBdUM7a0JBUm5ELFNBQVM7K0JBQ0Usb0NBQW9DLGNBQ2xDLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSw4QkFBOEIsQ0FBQyxtQkFHdEMsdUJBQXVCLENBQUMsTUFBTTtxSEFVOUIsYUFBYTtzQkFBN0IsTUFBTTtnQkFrQmEsTUFBTTtzQkFBekIsS0FBSztnQkFZYyxVQUFVO3NCQUE3QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgSW5wdXQsIEVsZW1lbnRSZWYsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTmdTc21Db21wb25lbnQsIFN0b3JlIH0gZnJvbSAnbmdzc20tc3RvcmUnO1xuaW1wb3J0IHsgTmdzc21Db21wb25lbnRBY3Rpb24sIE5nc3NtQ29tcG9uZW50RGlzcGxheURpcmVjdGl2ZSB9IGZyb20gJ25nc3NtLXRvb2xraXQnO1xuXG5pbXBvcnQgeyBOZ3NzbUV4cHJlc3Npb25UcmVlQ29uZmlnLCBOZ3NzbUV4cHJlc3Npb25UcmVlQ3VzdG9tQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9kZWwnO1xuaW1wb3J0IHsgc2VsZWN0Tmdzc21FeHByZXNzaW9uVHJlZVN0YXRlIH0gZnJvbSAnLi4vLi4vc3RhdGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3NzbS1leHByZXNzaW9uLXRyZWUtbm9kZS1kZXRhaWxzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTmdzc21Db21wb25lbnREaXNwbGF5RGlyZWN0aXZlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL25nc3NtLWV4cHJlc3Npb24tdHJlZS1ub2RlLWRldGFpbHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9uZ3NzbS1leHByZXNzaW9uLXRyZWUtbm9kZS1kZXRhaWxzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE5nc3NtRXhwcmVzc2lvblRyZWVOb2RlRGV0YWlsc0NvbXBvbmVudCBleHRlbmRzIE5nU3NtQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbm9kZUlkJCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdHJlZUNvbmZpZyQgPSBuZXcgU3ViamVjdDxOZ3NzbUV4cHJlc3Npb25UcmVlQ29uZmlnPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb21wb25lbnRBY3Rpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOZ3NzbUNvbXBvbmVudEFjdGlvbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29tcG9uZW50VG9EaXNwbGF5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgcHVibGljIGhlaWdodENoYW5nZWQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgY29uc3RydWN0b3Ioc3RvcmU6IFN0b3JlLCBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICBzdXBlcihzdG9yZSk7XG5cbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9ub2RlSWQkLCB0aGlzLl90cmVlQ29uZmlnJF0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWVzKSA9PiB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudEFjdGlvbiQubmV4dCgoYzogTmdzc21FeHByZXNzaW9uVHJlZUN1c3RvbUNvbXBvbmVudCkgPT4gYy5zZXR1cCh2YWx1ZXNbMV0udHJlZUlkLCB2YWx1ZXNbMF0pKTtcbiAgICAgICAgdGhpcy5fY29tcG9uZW50VG9EaXNwbGF5JC5uZXh0KHZhbHVlc1sxXS5ub2RlRGV0YWlsQ29tcG9uZW50KTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5oZWlnaHRDaGFuZ2VkLmVtaXQodGhpcy5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCA/PyAwKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgbm9kZUlkKHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBvbmVudCBOZ3NzbUV4cHJlc3Npb25UcmVlTm9kZURldGFpbHNDb21wb25lbnQgaXMgYWxyZWFkeSBpbml0aWFsaXplZC4nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9ub2RlSWQkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgQElucHV0KCkgcHVibGljIHNldCB0cmVlQ29uZmlnKHZhbHVlOiBOZ3NzbUV4cHJlc3Npb25UcmVlQ29uZmlnIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21wb25lbnQgTmdzc21FeHByZXNzaW9uVHJlZU5vZGVEZXRhaWxzQ29tcG9uZW50IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fdHJlZUNvbmZpZyQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbXBvbmVudEFjdGlvbiQoKTogT2JzZXJ2YWJsZTxOZ3NzbUNvbXBvbmVudEFjdGlvbiB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLl9jb21wb25lbnRBY3Rpb24kLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBjb21wb25lbnRUb0Rpc3BsYXkkKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbXBvbmVudFRvRGlzcGxheSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cbn1cbiIsIjxkaXYgW25nc3NtQ29tcG9uZW50RGlzcGxheV09XCJjb21wb25lbnRUb0Rpc3BsYXkkIHwgYXN5bmNcIiBbbmdzc21Db21wb25lbnRBY3Rpb25dPVwiY29tcG9uZW50QWN0aW9uJCB8IGFzeW5jXCI+PC9kaXY+Il19
@@ -0,0 +1,133 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { NGSSM_REDUCER } from 'ngssm-store';
3
+ import { NgssmExpressionTreeActionType } from '../actions';
4
+ import { selectNgssmExpressionTreeState, updateNgssmExpressionTreeState } from '../state';
5
+ import * as i0 from "@angular/core";
6
+ class TreeNodeEditionReducer {
7
+ constructor() {
8
+ this.processedActions = [
9
+ NgssmExpressionTreeActionType.ngssmAddExpressionTreeNode,
10
+ NgssmExpressionTreeActionType.ngssmDeleteExpressionTreeNode,
11
+ NgssmExpressionTreeActionType.ngssmUpdateExpressionTreeNode,
12
+ NgssmExpressionTreeActionType.ngssmAddExpressionTreeNodes
13
+ ];
14
+ }
15
+ updateState(state, action) {
16
+ switch (action.type) {
17
+ case NgssmExpressionTreeActionType.ngssmAddExpressionTreeNode: {
18
+ const ngssmAddExpressionTreeNodeAction = action;
19
+ return updateNgssmExpressionTreeState(state, {
20
+ trees: {
21
+ [ngssmAddExpressionTreeNodeAction.treeId]: {
22
+ data: {
23
+ [ngssmAddExpressionTreeNodeAction.node.id]: { $set: ngssmAddExpressionTreeNodeAction.node.data }
24
+ },
25
+ nodes: {
26
+ $apply: (values) => {
27
+ const output = [...values];
28
+ this.addNodeToList(ngssmAddExpressionTreeNodeAction.node, output);
29
+ return output;
30
+ }
31
+ }
32
+ }
33
+ }
34
+ });
35
+ }
36
+ case NgssmExpressionTreeActionType.ngssmAddExpressionTreeNodes: {
37
+ const ngssmAddExpressionTreeNodesAction = action;
38
+ const newProps = {};
39
+ ngssmAddExpressionTreeNodesAction.nodes.forEach((node) => (newProps[node.id] = node.data));
40
+ return updateNgssmExpressionTreeState(state, {
41
+ trees: {
42
+ [ngssmAddExpressionTreeNodesAction.treeId]: {
43
+ data: { $merge: newProps },
44
+ nodes: {
45
+ $apply: (values) => {
46
+ const output = [...values];
47
+ ngssmAddExpressionTreeNodesAction.nodes.forEach((node) => this.addNodeToList(node, output));
48
+ return output;
49
+ }
50
+ }
51
+ }
52
+ }
53
+ });
54
+ }
55
+ case NgssmExpressionTreeActionType.ngssmDeleteExpressionTreeNode: {
56
+ const ngssmDeleteExpressionTreeNodeAction = action;
57
+ const nodeIdsToDelete = selectNgssmExpressionTreeState(state)
58
+ .trees[ngssmDeleteExpressionTreeNodeAction.treeId].nodes.filter((n) => n.path.includes(ngssmDeleteExpressionTreeNodeAction.nodeId))
59
+ .map((n) => n.data.id);
60
+ nodeIdsToDelete.push(ngssmDeleteExpressionTreeNodeAction.nodeId);
61
+ return updateNgssmExpressionTreeState(state, {
62
+ trees: {
63
+ [ngssmDeleteExpressionTreeNodeAction.treeId]: {
64
+ nodes: { $apply: (values) => values.filter((v) => !nodeIdsToDelete.includes(v.data.id)) },
65
+ data: { $unset: nodeIdsToDelete }
66
+ }
67
+ }
68
+ });
69
+ }
70
+ case NgssmExpressionTreeActionType.ngssmUpdateExpressionTreeNode: {
71
+ const ngssmUpdateExpressionTreeNodeAction = action;
72
+ return updateNgssmExpressionTreeState(state, {
73
+ trees: {
74
+ [ngssmUpdateExpressionTreeNodeAction.treeId]: {
75
+ data: {
76
+ [ngssmUpdateExpressionTreeNodeAction.nodeId]: { $set: ngssmUpdateExpressionTreeNodeAction.data }
77
+ }
78
+ }
79
+ }
80
+ });
81
+ }
82
+ }
83
+ return state;
84
+ }
85
+ addNodeToList(node, nodeList) {
86
+ if (node.parentId === undefined) {
87
+ nodeList.push({
88
+ path: [],
89
+ data: node,
90
+ isExpanded: true
91
+ });
92
+ return;
93
+ }
94
+ let parentNode;
95
+ let insertionIndex = -1;
96
+ for (let i = 0; i < nodeList.length; i++) {
97
+ if (parentNode) {
98
+ if (nodeList[i].path.includes(node.parentId)) {
99
+ insertionIndex = i + 1;
100
+ }
101
+ else {
102
+ break;
103
+ }
104
+ continue;
105
+ }
106
+ if (nodeList[i].data.id === node.parentId) {
107
+ parentNode = nodeList[i];
108
+ insertionIndex = i + 1;
109
+ continue;
110
+ }
111
+ }
112
+ if (!parentNode || insertionIndex === -1) {
113
+ throw new Error('Invalid parent id');
114
+ }
115
+ nodeList.splice(insertionIndex, 0, {
116
+ path: [...parentNode.path, parentNode.data.id],
117
+ data: node,
118
+ isExpanded: true
119
+ });
120
+ }
121
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: TreeNodeEditionReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
122
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: TreeNodeEditionReducer }); }
123
+ }
124
+ export { TreeNodeEditionReducer };
125
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: TreeNodeEditionReducer, decorators: [{
126
+ type: Injectable
127
+ }] });
128
+ export const treeNodeEditionReducerProvider = {
129
+ provide: NGSSM_REDUCER,
130
+ useClass: TreeNodeEditionReducer,
131
+ multi: true
132
+ };
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLWVkaXRpb24ucmVkdWNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nc3NtLXRyZWUvc3JjL2xpYi9uZ3NzbS1leHByZXNzaW9uLXRyZWUvcmVkdWNlcnMvdHJlZS1ub2RlLWVkaXRpb24ucmVkdWNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBRXJELE9BQU8sRUFBMEIsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXBFLE9BQU8sRUFJTCw2QkFBNkIsRUFFOUIsTUFBTSxZQUFZLENBQUM7QUFDcEIsT0FBTyxFQUFFLDhCQUE4QixFQUFFLDhCQUE4QixFQUFFLE1BQU0sVUFBVSxDQUFDOztBQUcxRixNQUNhLHNCQUFzQjtJQURuQztRQUVrQixxQkFBZ0IsR0FBYTtZQUMzQyw2QkFBNkIsQ0FBQywwQkFBMEI7WUFDeEQsNkJBQTZCLENBQUMsNkJBQTZCO1lBQzNELDZCQUE2QixDQUFDLDZCQUE2QjtZQUMzRCw2QkFBNkIsQ0FBQywyQkFBMkI7U0FDMUQsQ0FBQztLQXVISDtJQXJIUSxXQUFXLENBQUMsS0FBWSxFQUFFLE1BQWM7UUFDN0MsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQ25CLEtBQUssNkJBQTZCLENBQUMsMEJBQTBCLENBQUMsQ0FBQztnQkFDN0QsTUFBTSxnQ0FBZ0MsR0FBRyxNQUEwQyxDQUFDO2dCQUNwRixPQUFPLDhCQUE4QixDQUFDLEtBQUssRUFBRTtvQkFDM0MsS0FBSyxFQUFFO3dCQUNMLENBQUMsZ0NBQWdDLENBQUMsTUFBTSxDQUFDLEVBQUU7NEJBQ3pDLElBQUksRUFBRTtnQ0FDSixDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFOzZCQUNqRzs0QkFD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LE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUN0QztRQUVELFFBQVEsQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsRUFBRTtZQUNqQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDOUMsSUFBSSxFQUFFLElBQUk7WUFDVixVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDOzhHQTVIVSxzQkFBc0I7a0hBQXRCLHNCQUFzQjs7U0FBdEIsc0JBQXNCOzJGQUF0QixzQkFBc0I7a0JBRGxDLFVBQVU7O0FBZ0lYLE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFhO0lBQ3RELE9BQU8sRUFBRSxhQUFhO0lBQ3RCLFFBQVEsRUFBRSxzQkFBc0I7SUFDaEMsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgUmVkdWNlciwgU3RhdGUsIEFjdGlvbiwgTkdTU01fUkVEVUNFUiB9IGZyb20gJ25nc3NtLXN0b3JlJztcblxuaW1wb3J0IHtcbiAgTmdzc21BZGRFeHByZXNzaW9uVHJlZU5vZGVBY3Rpb24sXG4gIE5nc3NtQWRkRXhwcmVzc2lvblRyZWVOb2Rlc0FjdGlvbixcbiAgTmdzc21EZWxldGVFeHByZXNzaW9uVHJlZU5vZGVBY3Rpb24sXG4gIE5nc3NtRXhwcmVzc2lvblRyZWVBY3Rpb25UeXBlLFxuICBOZ3NzbVVwZGF0ZUV4cHJlc3Npb25UcmVlTm9kZUFjdGlvblxufSBmcm9tICcuLi9hY3Rpb25zJztcbmltcG9ydCB7IHNlbGVjdE5nc3NtRXhwcmVzc2lvblRyZWVTdGF0ZSwgdXBkYXRlTmdzc21FeHByZXNzaW9uVHJlZVN0YXRlIH0gZnJvbSAnLi4vc3RhdGUnO1xuaW1wb3J0IHsgTmdzc21FeHByZXNzaW9uVHJlZURhdGEsIE5nc3NtRXhwcmVzc2lvblRyZWVOb2RlLCBOZ3NzbU5vZGUgfSBmcm9tICcuLi9tb2RlbCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUcmVlTm9kZUVkaXRpb25SZWR1Y2VyIGltcGxlbWVudHMgUmVkdWNlciB7XG4gIHB1YmxpYyByZWFkb25seSBwcm9jZXNzZWRBY3Rpb25zOiBzdHJpbmdbXSA9IFtcbiAgICBOZ3NzbUV4cHJlc3Npb25UcmVlQWN0aW9uVHlwZS5uZ3NzbUFkZEV4cHJlc3Npb25UcmVlTm9kZSxcbiAgICBOZ3NzbUV4cHJlc3Npb25UcmVlQWN0aW9uVHlwZS5uZ3NzbURlbGV0ZUV4cHJlc3Npb25UcmVlTm9kZSxcbiAgICBOZ3NzbUV4cHJlc3Npb25UcmVlQWN0aW9uVHlwZS5uZ3NzbVVwZGF0ZUV4cHJlc3Npb25UcmVlTm9kZSxcbiAgICBOZ3NzbUV4cHJlc3Npb25UcmVlQWN0aW9uVHlwZS5uZ3NzbUFkZEV4cHJlc3Npb25UcmVlTm9kZXNcbiAgXTtcblxuICBwdWJsaWMgdXBkYXRlU3RhdGUoc3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvbik6IFN0YXRlIHtcbiAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICBjYXNlIE5nc3NtRXhwcmVzc2lvblRyZWVBY3Rpb25UeXBlLm5nc3NtQWRkRXhwcmVzc2lvblRyZWVOb2RlOiB7XG4gICAgICAgIGNvbnN0IG5nc3NtQWRkRXhwcmVzc2lvblRyZWVOb2RlQWN0aW9uID0gYWN0aW9uIGFzIE5nc3NtQWRkRXhwcmVzc2lvblRyZWVOb2RlQWN0aW9uO1xuICAgICAgICByZXR1cm4gdXBkYXRlTmdzc21FeHByZXNzaW9uVHJlZVN0YXRlKHN0YXRlLCB7XG4gICAgICAgICAgdHJlZXM6IHtcbiAgICAgICAgICAgIFtuZ3NzbUFkZEV4cHJlc3Npb25UcmVlTm9kZUFjdGlvbi50cmVlSWRdOiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBbbmdzc21BZGRFeHByZXNzaW9uVHJlZU5vZGVBY3Rpb24ubm9kZS5pZF06IHsgJHNldDogbmdzc21BZGRFeHByZXNzaW9uVHJlZU5vZGVBY3Rpb24ubm9kZS5kYXRhIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbm9kZXM6IHtcbiAgICAgICAgICAgICAgICAkYXBwbHk6ICh2YWx1ZXM6IE5nc3NtRXhwcmVzc2lvblRyZWVOb2RlW10pID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dDogTmdzc21FeHByZXNzaW9uVHJlZU5vZGVbXSA9IFsuLi52YWx1ZXNdO1xuICAgICAgICAgICAgICAgICAgdGhpcy5hZGROb2RlVG9MaXN0KG5nc3NtQWRkRXhwcmVzc2lvblRyZWVOb2RlQWN0aW9uLm5vZGUsIG91dHB1dCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgTmdzc21FeHByZXNzaW9uVHJlZUFjdGlvblR5cGUubmdzc21BZGRFeHByZXNzaW9uVHJlZU5vZGVzOiB7XG4gICAgICAgIGNvbnN0IG5nc3NtQWRkRXhwcmVzc2lvblRyZWVOb2Rlc0FjdGlvbiA9IGFjdGlvbiBhcyBOZ3NzbUFkZEV4cHJlc3Npb25UcmVlTm9kZXNBY3Rpb247XG4gICAgICAgIGNvbnN0IG5ld1Byb3BzOiBOZ3NzbUV4cHJlc3Npb25UcmVlRGF0YSA9IHt9O1xuICAgICAgICBuZ3NzbUFkZEV4cHJlc3Npb25UcmVlTm9kZXNBY3Rpb24ubm9kZXMuZm9yRWFjaCgobm9kZSkgPT4gKG5ld1Byb3BzW25vZGUuaWRdID0gbm9kZS5kYXRhKSk7XG4gICAgICAgIHJldHVybiB1cGRhdGVOZ3NzbUV4cHJlc3Npb25UcmVlU3RhdGUoc3RhdGUsIHtcbiAgICAgICAgICB0cmVlczoge1xuICAgICAgICAgICAgW25nc3NtQWRkRXhwcmVzc2lvblRyZWVOb2Rlc0FjdGlvbi50cmVlSWRdOiB7XG4gICAgICAgICAgICAgIGRhdGE6IHsgJG1lcmdlOiBuZXdQcm9wcyB9LFxuICAgICAgICAgICAgICBub2Rlczoge1xuICAgICAgICAgICAgICAgICRhcHBseTogKHZhbHVlczogTmdzc21FeHByZXNzaW9uVHJlZU5vZGVbXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0OiBOZ3NzbUV4cHJlc3Npb25UcmVlTm9kZVtdID0gWy4uLnZhbHVlc107XG4gICAgICAgICAgICAgICAgICBuZ3NzbUFkZEV4cHJlc3Npb25UcmVlTm9kZXNBY3Rpb24ubm9kZXMuZm9yRWFjaCgobm9kZSkgPT4gdGhpcy5hZGROb2RlVG9MaXN0KG5vZGUsIG91dHB1dCkpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjYXNlIE5nc3NtRXhwcmVzc2lvblRyZWVBY3Rpb25UeXBlLm5nc3NtRGVsZXRlRXhwcmVzc2lvblRyZWVOb2RlOiB7XG4gICAgICAgIGNvbnN0IG5nc3NtRGVsZXRlRXhwcmVzc2lvblRyZWVOb2RlQWN0aW9uID0gYWN0aW9uIGFzIE5nc3NtRGVsZXRlRXhwcmVzc2lvblRyZWVOb2RlQWN0aW9uO1xuICAgICAgICBjb25zdCBub2RlSWRzVG9EZWxldGU6IHN0cmluZ1tdID0gc2VsZWN0Tmdzc21FeHByZXNzaW9uVHJlZVN0YXRlKHN0YXRlKVxuICAgICAgICAgIC50cmVlc1tuZ3NzbURlbGV0ZUV4cHJlc3Npb25UcmVlTm9kZUFjdGlvbi50cmVlSWRdLm5vZGVzLmZpbHRlcigobikgPT5cbiAgICAgICAgICAgIG4ucGF0aC5pbmNsdWRlcyhuZ3NzbURlbGV0ZUV4cHJlc3Npb25UcmVlTm9kZUFjdGlvbi5ub2RlSWQpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5tYXAoKG4pID0+IG4uZGF0YS5pZCk7XG4gICAgICAgIG5vZGVJZHNUb0RlbGV0ZS5wdXNoKG5nc3NtRGVsZXRlRXhwcmVzc2lvblRyZWVOb2RlQWN0aW9uLm5vZGVJZCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVOZ3NzbUV4cHJlc3Npb25UcmVlU3RhdGUoc3RhdGUsIHtcbiAgICAgICAgICB0cmVlczoge1xuICAgICAgICAgICAgW25nc3NtRGVsZXRlRXhwcmVzc2lvblRyZWVOb2RlQWN0aW9uLnRyZWVJZF06IHtcbiAgICAgICAgICAgICAgbm9kZXM6IHsgJGFwcGx5OiAodmFsdWVzOiBOZ3NzbUV4cHJlc3Npb25UcmVlTm9kZVtdKSA9PiB2YWx1ZXMuZmlsdGVyKCh2KSA9PiAhbm9kZUlkc1RvRGVsZXRlLmluY2x1ZGVzKHYuZGF0YS5pZCkpIH0sXG4gICAgICAgICAgICAgIGRhdGE6IHsgJHVuc2V0OiBub2RlSWRzVG9EZWxldGUgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgTmdzc21FeHByZXNzaW9uVHJlZUFjdGlvblR5cGUubmdzc21VcGRhdGVFeHByZXNzaW9uVHJlZU5vZGU6IHtcbiAgICAgICAgY29uc3Qgbmdzc21VcGRhdGVFeHByZXNzaW9uVHJlZU5vZGVBY3Rpb24gPSBhY3Rpb24gYXMgTmdzc21VcGRhdGVFeHByZXNzaW9uVHJlZU5vZGVBY3Rpb247XG4gICAgICAgIHJldHVybiB1cGRhdGVOZ3NzbUV4cHJlc3Npb25UcmVlU3RhdGUoc3RhdGUsIHtcbiAgICAgICAgICB0cmVlczoge1xuICAgICAgICAgICAgW25nc3NtVXBkYXRlRXhwcmVzc2lvblRyZWVOb2RlQWN0aW9uLnRyZWVJZF06IHtcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIFtuZ3NzbVVwZGF0ZUV4cHJlc3Npb25UcmVlTm9kZUFjdGlvbi5ub2RlSWRdOiB7ICRzZXQ6IG5nc3NtVXBkYXRlRXhwcmVzc2lvblRyZWVOb2RlQWN0aW9uLmRhdGEgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBwcml2YXRlIGFkZE5vZGVUb0xpc3Qobm9kZTogTmdzc21Ob2RlLCBub2RlTGlzdDogTmdzc21FeHByZXNzaW9uVHJlZU5vZGVbXSk6IHZvaWQge1xuICAgIGlmIChub2RlLnBhcmVudElkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5vZGVMaXN0LnB1c2goe1xuICAgICAgICBwYXRoOiBbXSxcbiAgICAgICAgZGF0YTogbm9kZSxcbiAgICAgICAgaXNFeHBhbmRlZDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHBhcmVudE5vZGU6IE5nc3NtRXhwcmVzc2lvblRyZWVOb2RlIHwgdW5kZWZpbmVkO1xuICAgIGxldCBpbnNlcnRpb25JbmRleCA9IC0xO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgIGlmIChub2RlTGlzdFtpXS5wYXRoLmluY2x1ZGVzKG5vZGUucGFyZW50SWQpKSB7XG4gICAgICAgICAgaW5zZXJ0aW9uSW5kZXggPSBpICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZUxpc3RbaV0uZGF0YS5pZCA9PT0gbm9kZS5wYXJlbnRJZCkge1xuICAgICAgICBwYXJlbnROb2RlID0gbm9kZUxpc3RbaV07XG4gICAgICAgIGluc2VydGlvbkluZGV4ID0gaSArIDE7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyZW50Tm9kZSB8fCBpbnNlcnRpb25JbmRleCA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwYXJlbnQgaWQnKTtcbiAgICB9XG5cbiAgICBub2RlTGlzdC5zcGxpY2UoaW5zZXJ0aW9uSW5kZXgsIDAsIHtcbiAgICAgIHBhdGg6IFsuLi5wYXJlbnROb2RlLnBhdGgsIHBhcmVudE5vZGUuZGF0YS5pZF0sXG4gICAgICBkYXRhOiBub2RlLFxuICAgICAgaXNFeHBhbmRlZDogdHJ1ZVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCB0cmVlTm9kZUVkaXRpb25SZWR1Y2VyUHJvdmlkZXI6IFByb3ZpZGVyID0ge1xuICBwcm92aWRlOiBOR1NTTV9SRURVQ0VSLFxuICB1c2VDbGFzczogVHJlZU5vZGVFZGl0aW9uUmVkdWNlcixcbiAgbXVsdGk6IHRydWVcbn07XG4iXX0=