ngssm-tree 21.1.1 → 21.1.3

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.
@@ -231,21 +231,21 @@ class TreeNodeLoadingEffect {
231
231
  }
232
232
  });
233
233
  }
234
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TreeNodeLoadingEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
235
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TreeNodeLoadingEffect });
234
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TreeNodeLoadingEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
235
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TreeNodeLoadingEffect });
236
236
  }
237
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TreeNodeLoadingEffect, decorators: [{
237
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TreeNodeLoadingEffect, decorators: [{
238
238
  type: Injectable
239
239
  }] });
240
240
 
241
241
  class NgssmTreeComponent {
242
- treeConfig = input(...(ngDevMode ? [undefined, { debugName: "treeConfig" }] : []));
242
+ treeConfig = input(...(ngDevMode ? [undefined, { debugName: "treeConfig" }] : /* istanbul ignore next */ []));
243
243
  dataStatus = DataStatus;
244
- displayedItems = signal([], ...(ngDevMode ? [{ debugName: "displayedItems" }] : []));
245
- selectedNodeId = signal(undefined, ...(ngDevMode ? [{ debugName: "selectedNodeId" }] : []));
244
+ displayedItems = signal([], ...(ngDevMode ? [{ debugName: "displayedItems" }] : /* istanbul ignore next */ []));
245
+ selectedNodeId = signal(undefined, ...(ngDevMode ? [{ debugName: "selectedNodeId" }] : /* istanbul ignore next */ []));
246
246
  store = inject(Store);
247
247
  trees = createSignal((state) => selectNgssmTreeState(state).trees);
248
- tree = signal(undefined, ...(ngDevMode ? [{ debugName: "tree" }] : []));
248
+ tree = signal(undefined, ...(ngDevMode ? [{ debugName: "tree" }] : /* istanbul ignore next */ []));
249
249
  constructor() {
250
250
  effect(() => {
251
251
  const currentConfig = this.treeConfig();
@@ -336,17 +336,17 @@ class NgssmTreeComponent {
336
336
  this.store.dispatchAction(new DisplaySearchDialogAction(treeId, node.node.nodeId));
337
337
  }
338
338
  }
339
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
340
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: NgssmTreeComponent, isStandalone: true, selector: "ngssm-tree", inputs: { treeConfig: { classPropertyName: "treeConfig", publicName: "treeConfig", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<mat-card class=\"flex-column-stretch fxFlex\">\n @if (treeConfig(); as config) {\n <mat-card-content class=\"flex-column-stretch fxFlex\">\n <cdk-virtual-scroll-viewport itemSize=\"30\" class=\"fxFlex\">\n <div\n *cdkVirtualFor=\"let item of displayedItems(); trackBy: getItemId\"\n class=\"ngssm-tree-node\"\n [style.padding-left.px]=\"item.node.level * 20\"\n (click)=\"selectNode(item.node)\"\n aria-hidden=\"true\"\n (keyup.enter)=\"selectNode(item.node)\"\n [ngClass]=\"{ selected: selectedNodeId() === item.node.node.nodeId }\">\n @if (item.node.node.isExpandable) {\n @if (item.node.status === dataStatus.loading) {\n <mat-spinner diameter=\"20\"></mat-spinner>\n } @else {\n @if (item.node.isExpanded) {\n <mat-icon class=\"fa-solid fa-chevron-down\" (click)=\"$event.stopPropagation(); collapse(item.node)\"></mat-icon>\n } @else {\n <mat-icon class=\"fa-solid fa-chevron-right\" (click)=\"$event.stopPropagation(); expand(item.node)\"></mat-icon>\n }\n }\n } @else {\n <span class=\"not-expandable-padding\"></span>\n }\n\n <mat-icon class=\"{{ config.iconClasses[item.node.node.type] }}\" color=\"primary\"></mat-icon>\n\n <span class=\"ngssm-tree-node-label\">\n {{ item.node.node.label }}\n </span>\n <span class=\"fxFlex\"></span>\n @if (item.canSearch) {\n <i class=\"fa-solid fa-magnifying-glass search-icon\" (click)=\"$event.stopPropagation(); displaySearchDialog(item.node)\"> </i>\n }\n </div>\n </cdk-virtual-scroll-viewport>\n </mat-card-content>\n }\n</mat-card>\n", styles: [":host{display:flex;flex-direction:column}:host .ngssm-tree-node{height:30px;display:flex;flex-direction:row;align-items:center;padding-right:12px}:host .ngssm-tree-node .fa-folder{margin-right:4px}:host .ngssm-tree-node .fa-chevron-right:hover{cursor:pointer}:host .ngssm-tree-node.selected{background-color:#e4e6f1}:host .ngssm-tree-node:hover{cursor:pointer}:host .ngssm-tree-node:hover .search-icon{display:unset}:host .ngssm-tree-node:hover:not(.selected){background-color:#f3f3f3}:host .not-expandable-padding{width:24px}:host .search-icon{font-size:12px;display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i2.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i2.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i2.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i6.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i6.MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
339
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: NgssmTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
340
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: NgssmTreeComponent, isStandalone: true, selector: "ngssm-tree", inputs: { treeConfig: { classPropertyName: "treeConfig", publicName: "treeConfig", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<mat-card class=\"flex-column-stretch fxFlex\">\n @if (treeConfig(); as config) {\n <mat-card-content class=\"flex-column-stretch fxFlex\">\n <cdk-virtual-scroll-viewport itemSize=\"30\" class=\"fxFlex\">\n <div\n *cdkVirtualFor=\"let item of displayedItems(); trackBy: getItemId\"\n class=\"ngssm-tree-node\"\n [style.padding-left.px]=\"item.node.level * 20\"\n (click)=\"selectNode(item.node)\"\n aria-hidden=\"true\"\n (keyup.enter)=\"selectNode(item.node)\"\n [ngClass]=\"{ selected: selectedNodeId() === item.node.node.nodeId }\">\n @if (item.node.node.isExpandable) {\n @if (item.node.status === dataStatus.loading) {\n <mat-spinner diameter=\"20\"></mat-spinner>\n } @else {\n @if (item.node.isExpanded) {\n <mat-icon class=\"fa-solid fa-chevron-down\" (click)=\"$event.stopPropagation(); collapse(item.node)\"></mat-icon>\n } @else {\n <mat-icon class=\"fa-solid fa-chevron-right\" (click)=\"$event.stopPropagation(); expand(item.node)\"></mat-icon>\n }\n }\n } @else {\n <span class=\"not-expandable-padding\"></span>\n }\n\n <mat-icon class=\"{{ config.iconClasses[item.node.node.type] }}\" color=\"primary\"></mat-icon>\n\n <span class=\"ngssm-tree-node-label\">\n {{ item.node.node.label }}\n </span>\n <span class=\"fxFlex\"></span>\n @if (item.canSearch) {\n <i class=\"fa-solid fa-magnifying-glass search-icon\" (click)=\"$event.stopPropagation(); displaySearchDialog(item.node)\"> </i>\n }\n </div>\n </cdk-virtual-scroll-viewport>\n </mat-card-content>\n }\n</mat-card>\n", styles: [":host{display:flex;flex-direction:column}:host .ngssm-tree-node{height:30px;display:flex;flex-direction:row;align-items:center;padding-right:12px}:host .ngssm-tree-node .fa-folder{margin-right:4px}:host .ngssm-tree-node .fa-chevron-right:hover{cursor:pointer}:host .ngssm-tree-node.selected{background-color:#e4e6f1}:host .ngssm-tree-node:hover{cursor:pointer}:host .ngssm-tree-node:hover .search-icon{display:unset}:host .ngssm-tree-node:hover:not(.selected){background-color:#f3f3f3}:host .not-expandable-padding{width:24px}:host .search-icon{font-size:12px;display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i2.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i2.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i2.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i6.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i6.MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
341
341
  }
342
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmTreeComponent, decorators: [{
342
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: NgssmTreeComponent, decorators: [{
343
343
  type: Component,
344
344
  args: [{ selector: 'ngssm-tree', imports: [CommonModule, ScrollingModule, MatCardModule, MatIconModule, MatProgressSpinnerModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-card class=\"flex-column-stretch fxFlex\">\n @if (treeConfig(); as config) {\n <mat-card-content class=\"flex-column-stretch fxFlex\">\n <cdk-virtual-scroll-viewport itemSize=\"30\" class=\"fxFlex\">\n <div\n *cdkVirtualFor=\"let item of displayedItems(); trackBy: getItemId\"\n class=\"ngssm-tree-node\"\n [style.padding-left.px]=\"item.node.level * 20\"\n (click)=\"selectNode(item.node)\"\n aria-hidden=\"true\"\n (keyup.enter)=\"selectNode(item.node)\"\n [ngClass]=\"{ selected: selectedNodeId() === item.node.node.nodeId }\">\n @if (item.node.node.isExpandable) {\n @if (item.node.status === dataStatus.loading) {\n <mat-spinner diameter=\"20\"></mat-spinner>\n } @else {\n @if (item.node.isExpanded) {\n <mat-icon class=\"fa-solid fa-chevron-down\" (click)=\"$event.stopPropagation(); collapse(item.node)\"></mat-icon>\n } @else {\n <mat-icon class=\"fa-solid fa-chevron-right\" (click)=\"$event.stopPropagation(); expand(item.node)\"></mat-icon>\n }\n }\n } @else {\n <span class=\"not-expandable-padding\"></span>\n }\n\n <mat-icon class=\"{{ config.iconClasses[item.node.node.type] }}\" color=\"primary\"></mat-icon>\n\n <span class=\"ngssm-tree-node-label\">\n {{ item.node.node.label }}\n </span>\n <span class=\"fxFlex\"></span>\n @if (item.canSearch) {\n <i class=\"fa-solid fa-magnifying-glass search-icon\" (click)=\"$event.stopPropagation(); displaySearchDialog(item.node)\"> </i>\n }\n </div>\n </cdk-virtual-scroll-viewport>\n </mat-card-content>\n }\n</mat-card>\n", styles: [":host{display:flex;flex-direction:column}:host .ngssm-tree-node{height:30px;display:flex;flex-direction:row;align-items:center;padding-right:12px}:host .ngssm-tree-node .fa-folder{margin-right:4px}:host .ngssm-tree-node .fa-chevron-right:hover{cursor:pointer}:host .ngssm-tree-node.selected{background-color:#e4e6f1}:host .ngssm-tree-node:hover{cursor:pointer}:host .ngssm-tree-node:hover .search-icon{display:unset}:host .ngssm-tree-node:hover:not(.selected){background-color:#f3f3f3}:host .not-expandable-padding{width:24px}:host .search-icon{font-size:12px;display:none}\n"] }]
345
345
  }], ctorParameters: () => [], propDecorators: { treeConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "treeConfig", required: false }] }] } });
346
346
 
347
347
  class NgssmBreadcrumbComponent {
348
- treeId = input(undefined, ...(ngDevMode ? [{ debugName: "treeId" }] : []));
349
- nodes = signal([], ...(ngDevMode ? [{ debugName: "nodes" }] : []));
348
+ treeId = input(undefined, ...(ngDevMode ? [{ debugName: "treeId" }] : /* istanbul ignore next */ []));
349
+ nodes = signal([], ...(ngDevMode ? [{ debugName: "nodes" }] : /* istanbul ignore next */ []));
350
350
  store = inject(Store);
351
351
  treeState = createSignal((state) => selectNgssmTreeState(state));
352
352
  constructor() {
@@ -381,16 +381,16 @@ class NgssmBreadcrumbComponent {
381
381
  this.store.dispatchAction(new SelectNodeAction(treeId, node.nodeId));
382
382
  }
383
383
  }
384
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmBreadcrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
385
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: NgssmBreadcrumbComponent, isStandalone: true, selector: "ngssm-breadcrumb", inputs: { treeId: { classPropertyName: "treeId", publicName: "treeId", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex-row-center\">\n <mat-icon class=\"fa-solid fa-folder-tree\" color=\"primary\"></mat-icon>\n @for (node of nodes(); track node; let last = $last) {\n <span class=\"flex-row-center\">\n <button mat-button [disabled]=\"last\" (click)=\"selectNode(node)\">\n {{ node.label }}\n </button>\n\n @if (!last) {\n <div class=\"ngssm-breadcrumb-separator\">/</div>\n }\n </span>\n }\n</div>\n", styles: [".ngssm-breadcrumb-separator{font-weight:700}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
384
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: NgssmBreadcrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
385
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: NgssmBreadcrumbComponent, isStandalone: true, selector: "ngssm-breadcrumb", inputs: { treeId: { classPropertyName: "treeId", publicName: "treeId", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex-row-center\">\n <mat-icon class=\"fa-solid fa-folder-tree\" color=\"primary\"></mat-icon>\n @for (node of nodes(); track node; let last = $last) {\n <span class=\"flex-row-center\">\n <button mat-button [disabled]=\"last\" (click)=\"selectNode(node)\">\n {{ node.label }}\n </button>\n\n @if (!last) {\n <div class=\"ngssm-breadcrumb-separator\">/</div>\n }\n </span>\n }\n</div>\n", styles: [".ngssm-breadcrumb-separator{font-weight:700}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
386
386
  }
387
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmBreadcrumbComponent, decorators: [{
387
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: NgssmBreadcrumbComponent, decorators: [{
388
388
  type: Component,
389
389
  args: [{ selector: 'ngssm-breadcrumb', imports: [MatIconModule, MatButtonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex-row-center\">\n <mat-icon class=\"fa-solid fa-folder-tree\" color=\"primary\"></mat-icon>\n @for (node of nodes(); track node; let last = $last) {\n <span class=\"flex-row-center\">\n <button mat-button [disabled]=\"last\" (click)=\"selectNode(node)\">\n {{ node.label }}\n </button>\n\n @if (!last) {\n <div class=\"ngssm-breadcrumb-separator\">/</div>\n }\n </span>\n }\n</div>\n", styles: [".ngssm-breadcrumb-separator{font-weight:700}\n"] }]
390
390
  }], ctorParameters: () => [], propDecorators: { treeId: [{ type: i0.Input, args: [{ isSignal: true, alias: "treeId", required: false }] }] } });
391
391
 
392
392
  class NgssmTreeSearchDialogComponent {
393
- resultsViewerContainer = viewChild('resultsViewerContainer', { ...(ngDevMode ? { debugName: "resultsViewerContainer" } : {}), read: ViewContainerRef });
393
+ resultsViewerContainer = viewChild('resultsViewerContainer', { ...(ngDevMode ? { debugName: "resultsViewerContainer" } : /* istanbul ignore next */ {}), read: ViewContainerRef });
394
394
  searchStatus = SearchStatus;
395
395
  searchRootPath = createSignal((state) => selectNgssmTreeState(state).treeNodesSearch.rootSearchPath ?? '');
396
396
  currentSearchedPath = createSignal((state) => selectNgssmTreeState(state).treeNodesSearch.toProcess[0]?.fullPath ?? '');
@@ -426,7 +426,7 @@ class NgssmTreeSearchDialogComponent {
426
426
  this.resultsViewerContainer()?.createComponent(dataService.searchResultViewer);
427
427
  this.changeDetectorRef.markForCheck();
428
428
  effectRef.destroy();
429
- }, ...(ngDevMode ? [{ debugName: "effectRef" }] : []));
429
+ }, ...(ngDevMode ? [{ debugName: "effectRef" }] : /* istanbul ignore next */ []));
430
430
  }
431
431
  close() {
432
432
  this.store.dispatchActionType(NgssmTreeActionType.closeSearchDialog);
@@ -449,10 +449,10 @@ class NgssmTreeSearchDialogComponent {
449
449
  regex: result.error
450
450
  };
451
451
  }
452
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmTreeSearchDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
453
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: NgssmTreeSearchDialogComponent, isStandalone: true, selector: "ngssm-ngssm-tree-search-dialog", viewQueries: [{ propertyName: "resultsViewerContainer", first: true, predicate: ["resultsViewerContainer"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: "<h1 mat-dialog-title>Tree search dialog</h1>\n@let searchInProgress = currentSearchStatus() === searchStatus.inProgress;\n<mat-dialog-content class=\"flex-column-stretch fxFlex\">\n <mat-card class=\"flex-column-stretch\">\n <mat-card-content class=\"flex-row-center\">\n <mat-form-field class=\"with-margin-right-12 fxFlex\">\n <mat-label>Starts search in</mat-label>\n <input matInput readonly [ngModel]=\"searchRootPath()\" />\n </mat-form-field>\n\n <mat-form-field class=\"fxFlex with-margin-right-12\">\n <mat-label>Search pattern</mat-label>\n <input matInput [formControl]=\"searchPatternControl\" />\n @if (searchPatternControl.errors?.['regex']; as error) {\n <mat-error>\n {{ error }}\n </mat-error>\n }\n </mat-form-field>\n\n @if (!searchInProgress) {\n <button mat-stroked-button color=\"primary\" [disabled]=\"searchPatternControl.invalid\" (click)=\"search()\">\n <mat-icon class=\"fa-solid fa-magnifying-glass\"></mat-icon>\n Search\n </button>\n } @else {\n <button mat-raised-button color=\"accent\" (click)=\"abort()\">\n <mat-icon class=\"fa-solid fa-ban\"></mat-icon>\n Abort\n </button>\n }\n </mat-card-content>\n @if (searchInProgress) {\n <mat-card-footer class=\"flex-row-center\">\n <mat-spinner [diameter]=\"20\"></mat-spinner>\n {{ currentSearchedPath() }}\n </mat-card-footer>\n }\n </mat-card>\n <mat-card class=\"flex-column-stretch fxFlex with-margin-top-8\">\n <ng-container #resultsViewerContainer></ng-container>\n </mat-card>\n</mat-dialog-content>\n<mat-dialog-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button (click)=\"close()\">Close</button>\n</mat-dialog-actions>\n", styles: [":host{display:flex;flex-direction:column;height:100%}:host .mat-mdc-dialog-content{max-height:unset!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i4$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i4$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i4$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i6.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i6.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i6.MatCardFooter, selector: "mat-card-footer" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
452
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: NgssmTreeSearchDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
453
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: NgssmTreeSearchDialogComponent, isStandalone: true, selector: "ngssm-ngssm-tree-search-dialog", viewQueries: [{ propertyName: "resultsViewerContainer", first: true, predicate: ["resultsViewerContainer"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: "<h1 mat-dialog-title>Tree search dialog</h1>\n@let searchInProgress = currentSearchStatus() === searchStatus.inProgress;\n<mat-dialog-content class=\"flex-column-stretch fxFlex\">\n <mat-card class=\"flex-column-stretch\">\n <mat-card-content class=\"flex-row-center\">\n <mat-form-field class=\"with-margin-right-12 fxFlex\">\n <mat-label>Starts search in</mat-label>\n <input matInput readonly [ngModel]=\"searchRootPath()\" />\n </mat-form-field>\n\n <mat-form-field class=\"fxFlex with-margin-right-12\">\n <mat-label>Search pattern</mat-label>\n <input matInput [formControl]=\"searchPatternControl\" />\n @if (searchPatternControl.errors?.['regex']; as error) {\n <mat-error>\n {{ error }}\n </mat-error>\n }\n </mat-form-field>\n\n @if (!searchInProgress) {\n <button mat-stroked-button color=\"primary\" [disabled]=\"searchPatternControl.invalid\" (click)=\"search()\">\n <mat-icon class=\"fa-solid fa-magnifying-glass\"></mat-icon>\n Search\n </button>\n } @else {\n <button mat-raised-button color=\"accent\" (click)=\"abort()\">\n <mat-icon class=\"fa-solid fa-ban\"></mat-icon>\n Abort\n </button>\n }\n </mat-card-content>\n @if (searchInProgress) {\n <mat-card-footer class=\"flex-row-center\">\n <mat-spinner [diameter]=\"20\"></mat-spinner>\n {{ currentSearchedPath() }}\n </mat-card-footer>\n }\n </mat-card>\n <mat-card class=\"flex-column-stretch fxFlex with-margin-top-8\">\n <ng-container #resultsViewerContainer></ng-container>\n </mat-card>\n</mat-dialog-content>\n<mat-dialog-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button (click)=\"close()\">Close</button>\n</mat-dialog-actions>\n", styles: [":host{display:flex;flex-direction:column;height:100%}:host .mat-mdc-dialog-content{max-height:unset!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i4$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i4$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i4$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i6.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i6.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i6.MatCardFooter, selector: "mat-card-footer" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
454
454
  }
455
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmTreeSearchDialogComponent, decorators: [{
455
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: NgssmTreeSearchDialogComponent, decorators: [{
456
456
  type: Component,
457
457
  args: [{ selector: 'ngssm-ngssm-tree-search-dialog', imports: [
458
458
  FormsModule,
@@ -532,10 +532,10 @@ class TreeNodesSearchingEffect {
532
532
  this.dialog?.close();
533
533
  this.dialog = undefined;
534
534
  }
535
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TreeNodesSearchingEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
536
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TreeNodesSearchingEffect });
535
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TreeNodesSearchingEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
536
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TreeNodesSearchingEffect });
537
537
  }
538
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TreeNodesSearchingEffect, decorators: [{
538
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TreeNodesSearchingEffect, decorators: [{
539
539
  type: Injectable
540
540
  }] });
541
541
 
@@ -655,10 +655,10 @@ class TreeNodeExpandReducer {
655
655
  }
656
656
  return state;
657
657
  }
658
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TreeNodeExpandReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
659
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TreeNodeExpandReducer });
658
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TreeNodeExpandReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
659
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TreeNodeExpandReducer });
660
660
  }
661
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TreeNodeExpandReducer, decorators: [{
661
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TreeNodeExpandReducer, decorators: [{
662
662
  type: Injectable
663
663
  }] });
664
664
 
@@ -679,10 +679,10 @@ class TreeNodeSelectionReducer {
679
679
  }
680
680
  return state;
681
681
  }
682
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TreeNodeSelectionReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
683
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TreeNodeSelectionReducer });
682
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TreeNodeSelectionReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
683
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TreeNodeSelectionReducer });
684
684
  }
685
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TreeNodeSelectionReducer, decorators: [{
685
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TreeNodeSelectionReducer, decorators: [{
686
686
  type: Injectable
687
687
  }] });
688
688
 
@@ -761,10 +761,10 @@ class TreeNodesSearchReducer {
761
761
  }
762
762
  return state;
763
763
  }
764
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TreeNodesSearchReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
765
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TreeNodesSearchReducer });
764
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TreeNodesSearchReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
765
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TreeNodesSearchReducer });
766
766
  }
767
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TreeNodesSearchReducer, decorators: [{
767
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TreeNodesSearchReducer, decorators: [{
768
768
  type: Injectable
769
769
  }] });
770
770
 
@@ -806,10 +806,10 @@ class TreeNodesReducer {
806
806
  }
807
807
  return state;
808
808
  }
809
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TreeNodesReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
810
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TreeNodesReducer });
809
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TreeNodesReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
810
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TreeNodesReducer });
811
811
  }
812
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TreeNodesReducer, decorators: [{
812
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TreeNodesReducer, decorators: [{
813
813
  type: Injectable
814
814
  }] });
815
815
 
@@ -846,10 +846,10 @@ class TreesReducer {
846
846
  }
847
847
  return state;
848
848
  }
849
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TreesReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
850
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TreesReducer });
849
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TreesReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
850
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TreesReducer });
851
851
  }
852
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TreesReducer, decorators: [{
852
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TreesReducer, decorators: [{
853
853
  type: Injectable
854
854
  }] });
855
855
 
@@ -1 +1 @@
1
- {"version":3,"file":"ngssm-tree.mjs","sources":["../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/ngssm-tree-action-type.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/tree-action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/init-ngssm-tree.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/tree-node-action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/expand-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/register-nodes.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/collapse-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/select-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/delete-ngssm-tree.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/display-search-dialog.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/search-tree-nodes.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/register-partial-search-results.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/load-children-of-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/model/ngssm-tree-node.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/model/ngssm-tree-data-service.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/model/ngssm-tree.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/model/search-status.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/state/tree-nodes-search.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/state/ngssm-tree.state.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/state/selectors.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/effects/tree-node-loading.effect.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/components/ngssm-tree/ngssm-tree.component.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/components/ngssm-tree/ngssm-tree.component.html","../../../projects/ngssm-tree/src/lib/ngssm-tree/components/ngssm-breadcrumb/ngssm-breadcrumb.component.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/components/ngssm-breadcrumb/ngssm-breadcrumb.component.html","../../../projects/ngssm-tree/src/lib/ngssm-tree/components/ngssm-tree-search-dialog/ngssm-tree-search-dialog.component.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/components/ngssm-tree-search-dialog/ngssm-tree-search-dialog.component.html","../../../projects/ngssm-tree/src/lib/ngssm-tree/effects/tree-nodes-searching.effect.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/reducers/tree-node-expand.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/reducers/tree-node-selection.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/reducers/tree-nodes-search.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/reducers/tree-nodes.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/reducers/trees.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/provide-ngssm-tree.ts","../../../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 loadChildrenOfNode = '[NgssmTreeActionType] loadChildrenOfNode',\n displaySearchDialog = '[NgssmTreeActionType] displaySearchDialog',\n closeSearchDialog = '[NgssmTreeActionType] closeSearchDialog',\n searchTreeNodes = '[NgssmTreeActionType] searchTreeNodes',\n registerPartialSearchResults = '[NgssmTreeActionType] registerPartialSearchResults',\n abortTreeNodesSearch = '[NgssmTreeActionType] abortTreeNodesSearch'\n}\n","import { Action } from 'ngssm-store';\n\nexport class TreeAction implements Action {\n constructor(\n public readonly type: string,\n public readonly treeId: string\n ) {}\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(\n treeId: string,\n public readonly treeType: string,\n public readonly root: NodeData\n ) {\n super(NgssmTreeActionType.initNgssmTree, treeId);\n }\n}\n","import { TreeAction } from './tree-action';\n\nexport class TreeNodeAction extends TreeAction {\n constructor(\n actionType: string,\n treeId: string,\n public readonly nodeId: string\n ) {\n super(actionType, treeId);\n }\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeNodeAction } from './tree-node-action';\n\nexport class ExpandNodeAction extends TreeNodeAction {\n constructor(treeId: string, nodeId: string) {\n super(NgssmTreeActionType.expandNode, treeId, nodeId);\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(\n treeId: string,\n public readonly nodeId: string\n ) {\n super(NgssmTreeActionType.collapseNode, treeId);\n }\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeNodeAction } from './tree-node-action';\n\nexport class SelectNodeAction extends TreeNodeAction {\n constructor(treeId: string, nodeId: string) {\n super(NgssmTreeActionType.selectNode, treeId, nodeId);\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 { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class DisplaySearchDialogAction extends TreeAction {\n constructor(\n treeId: string,\n public readonly startNodeId: string\n ) {\n super(NgssmTreeActionType.displaySearchDialog, treeId);\n }\n}\n","import { Action } from 'ngssm-store';\nimport { NgssmTreeActionType } from './ngssm-tree-action-type';\n\nexport class SearchTreeNodesAction implements Action {\n public readonly type: string = NgssmTreeActionType.searchTreeNodes;\n\n constructor(public readonly searchPattern: string) {}\n}\n","import { Action } from 'ngssm-store';\n\nimport { NgssmTreeNode } from '../model';\nimport { NgssmTreeActionType } from './ngssm-tree-action-type';\n\nexport class RegisterPartialSearchResultsAction implements Action {\n public readonly type: string = NgssmTreeActionType.registerPartialSearchResults;\n\n constructor(\n public readonly matchingNodes: NgssmTreeNode[],\n public nodesToProcess: NgssmTreeNode[]\n ) {}\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeNodeAction } from './tree-node-action';\n\nexport class LoadChildrenOfNodeAction extends TreeNodeAction {\n constructor(treeId: string, nodeId: string) {\n super(NgssmTreeActionType.loadChildrenOfNode, treeId, nodeId);\n }\n}\n","import { DataStatus } from 'ngssm-remote-data';\nimport { NodeData } from './node-data';\n\nexport interface NgssmTreeNode {\n status: DataStatus;\n isExpanded?: boolean;\n level: number;\n parentFullPath?: string;\n\n node: NodeData;\n}\n\nexport const getNgssmTreeNodeFullPath = (node: NgssmTreeNode): string => {\n if (node.parentFullPath) {\n return `${node.parentFullPath}/${node.node.label}`;\n }\n\n return node.node.label;\n};\n","import { InjectionToken, Type } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { NodeData } from './node-data';\n\nexport interface NgssmTreeDataService {\n readonly treeType: string;\n // Component used to display the result of a search\n readonly searchResultViewer?: Type<unknown>;\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 { NgssmTreeNode } from './ngssm-tree-node';\n\nexport interface NgssmTree {\n nodes: NgssmTreeNode[];\n selectedNode?: string;\n type: string;\n}\n\nexport const getNgssmTreePath = (tree: NgssmTree, nodeId: string): NgssmTreeNode[] => {\n const nodesPerId = new Map<string, NgssmTreeNode>(tree.nodes.map((n) => [n.node.nodeId, n]));\n const path: NgssmTreeNode[] = [];\n let node = nodesPerId.get(nodeId);\n while (node) {\n path.unshift(node);\n node = node.node.parentNodeId ? nodesPerId.get(node.node.parentNodeId) : undefined;\n }\n\n if (path.length === 0 && tree.nodes.length > 0) {\n path.push(tree.nodes[0]);\n }\n\n return path;\n};\n","export enum SearchStatus {\n none = 'None',\n inProgress = 'In progress',\n done = 'Done',\n aborted = 'Aborted'\n}\n","import { SearchStatus } from '../model';\n\nexport interface TreeNodesSearch {\n treeId?: string;\n rootSearchNodeId?: string;\n rootSearchPath?: string;\n searchPattern?: string;\n searchStatus: SearchStatus;\n toProcess: { nodeId: string; fullPath: string }[];\n matchingNodes: string[];\n}\n\nexport const getDefaultTreeNodesSearch = (): TreeNodesSearch => ({\n searchStatus: SearchStatus.none,\n toProcess: [],\n matchingNodes: []\n});\n","import update, { Spec } from 'immutability-helper';\n\nimport { NgSsmFeatureState, State } from 'ngssm-store';\n\nimport { NgssmTree } from '../model';\nimport { getDefaultTreeNodesSearch, TreeNodesSearch } from './tree-nodes-search';\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: Record<string, NgssmTree>;\n treeNodesSearch: TreeNodesSearch;\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 treeNodesSearch: getDefaultTreeNodesSearch()\n };\n}\n","import { State } from 'ngssm-store';\nimport { NgssmTreeNode } from '../model';\nimport { selectNgssmTreeState } from './ngssm-tree.state';\n\nexport const selectNgssmTreeNode = (state: State, treeId: string, nodeId: string): NgssmTreeNode | undefined =>\n selectNgssmTreeState(state).trees[treeId]?.nodes.find((n) => n.node.nodeId === nodeId);\n\nexport const selectNgssmTreeNodeChildren = (state: State, treeId: string, nodeId: string): NgssmTreeNode[] =>\n selectNgssmTreeState(state).trees[treeId]?.nodes.filter((n) => n.node.parentNodeId === nodeId) ?? [];\n","import { Injectable, inject } from '@angular/core';\n\nimport { DataStatus } from 'ngssm-remote-data';\nimport { Effect, State, Action, Logger, ActionDispatcher } from 'ngssm-store';\n\nimport { NgssmTreeActionType, RegisterNodesAction, TreeNodeAction } 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[] = [\n NgssmTreeActionType.expandNode,\n NgssmTreeActionType.selectNode,\n NgssmTreeActionType.loadChildrenOfNode\n ];\n\n private readonly dataServices: NgssmTreeDataService[] =\n (inject(NGSSM_TREE_DATA_SERVICE, { optional: true }) as unknown as NgssmTreeDataService[]) ?? [];\n private readonly logger = inject(Logger);\n\n public processAction(actiondispatcher: ActionDispatcher, state: State, action: Action): void {\n const treeNodeAction = action as TreeNodeAction;\n if (!selectNgssmTreeState(state).trees[treeNodeAction.treeId]) {\n this.logger.error(`Trying to process action for tree not initialized: ${treeNodeAction.treeId}.`);\n return;\n }\n\n const treeType = selectNgssmTreeState(state).trees[treeNodeAction.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: ${treeNodeAction.treeId} / ${treeType}.`);\n return;\n }\n\n const node = selectNgssmTreeState(state).trees[treeNodeAction.treeId].nodes.find((n) => n.node.nodeId === treeNodeAction.nodeId);\n if (node?.status !== DataStatus.loading) {\n return;\n }\n\n dataService.load(treeNodeAction.treeId, treeNodeAction.nodeId).subscribe({\n next: (value) =>\n actiondispatcher.dispatchAction(new RegisterNodesAction(DataStatus.loaded, treeNodeAction.treeId, treeNodeAction.nodeId, value)),\n error: (error) => {\n this.logger.error(`Unable to load children nodes for tree '${treeNodeAction.treeId}' and node '${treeNodeAction.nodeId}'`, error);\n actiondispatcher.dispatchAction(new RegisterNodesAction(DataStatus.error, treeNodeAction.treeId, treeNodeAction.nodeId));\n }\n });\n }\n}\n","import { Component, ChangeDetectionStrategy, inject, input, effect, signal, untracked } 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';\n\nimport { createSignal, Store } from 'ngssm-store';\nimport { DataStatus } from 'ngssm-remote-data';\n\nimport { NgssmTree, NgssmTreeConfig, NgssmTreeNode, NodeData } from '../../model';\nimport { selectNgssmTreeState } from '../../state';\nimport { CollapseNodeAction, DisplaySearchDialogAction, ExpandNodeAction, SelectNodeAction } from '../../actions';\n\ninterface DisplayedNode {\n node: NgssmTreeNode;\n canSearch: boolean;\n}\n\n@Component({\n selector: 'ngssm-tree',\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 {\n public readonly treeConfig = input<NgssmTreeConfig | undefined | null>();\n\n protected readonly dataStatus = DataStatus;\n protected readonly displayedItems = signal<DisplayedNode[]>([]);\n protected readonly selectedNodeId = signal<string | undefined>(undefined);\n\n private readonly store = inject(Store);\n private readonly trees = createSignal((state) => selectNgssmTreeState(state).trees);\n private readonly tree = signal<NgssmTree | undefined>(undefined);\n\n constructor() {\n effect(() => {\n const currentConfig = this.treeConfig();\n const currentTrees = this.trees();\n if (currentConfig) {\n this.tree.set(currentTrees[currentConfig.treeId]);\n } else {\n this.tree.set(undefined);\n }\n });\n\n effect(() => {\n const currentTree = this.tree();\n const config = untracked(() => this.treeConfig());\n if (!currentTree || !config) {\n this.displayedItems.set([]);\n return;\n }\n\n const alwaysTrue = () => true;\n const filter: (node: NodeData) => boolean = config.filter ?? alwaysTrue;\n const canSearch: (node: NodeData) => boolean = config.canSearch ?? alwaysTrue;\n\n const items: DisplayedNode[] = [];\n let hiddenLevel = -1;\n const nodesToFindSelected = new Map<string, { isDisplayed: boolean; node: NgssmTreeNode }>();\n (currentTree.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({\n node: t,\n canSearch: canSearch(t.node)\n });\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.set(items);\n\n let selectedNode = currentTree.selectedNode;\n if (!selectedNode) {\n this.selectedNodeId.set(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.set(selectedNode);\n }\n });\n }\n\n protected getItemId(_: number, node: DisplayedNode): string {\n return node.node.node.nodeId;\n }\n\n protected expand(node: NgssmTreeNode): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new ExpandNodeAction(treeId, node.node.nodeId));\n }\n }\n\n protected collapse(node: NgssmTreeNode): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new CollapseNodeAction(treeId, node.node.nodeId));\n }\n }\n\n protected selectNode(node: NgssmTreeNode): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new SelectNodeAction(treeId, node.node.nodeId));\n }\n }\n\n protected displaySearchDialog(node: NgssmTreeNode): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new DisplaySearchDialogAction(treeId, node.node.nodeId));\n }\n }\n}\n","<mat-card class=\"flex-column-stretch fxFlex\">\n @if (treeConfig(); as config) {\n <mat-card-content class=\"flex-column-stretch fxFlex\">\n <cdk-virtual-scroll-viewport itemSize=\"30\" class=\"fxFlex\">\n <div\n *cdkVirtualFor=\"let item of displayedItems(); trackBy: getItemId\"\n class=\"ngssm-tree-node\"\n [style.padding-left.px]=\"item.node.level * 20\"\n (click)=\"selectNode(item.node)\"\n aria-hidden=\"true\"\n (keyup.enter)=\"selectNode(item.node)\"\n [ngClass]=\"{ selected: selectedNodeId() === item.node.node.nodeId }\">\n @if (item.node.node.isExpandable) {\n @if (item.node.status === dataStatus.loading) {\n <mat-spinner diameter=\"20\"></mat-spinner>\n } @else {\n @if (item.node.isExpanded) {\n <mat-icon class=\"fa-solid fa-chevron-down\" (click)=\"$event.stopPropagation(); collapse(item.node)\"></mat-icon>\n } @else {\n <mat-icon class=\"fa-solid fa-chevron-right\" (click)=\"$event.stopPropagation(); expand(item.node)\"></mat-icon>\n }\n }\n } @else {\n <span class=\"not-expandable-padding\"></span>\n }\n\n <mat-icon class=\"{{ config.iconClasses[item.node.node.type] }}\" color=\"primary\"></mat-icon>\n\n <span class=\"ngssm-tree-node-label\">\n {{ item.node.node.label }}\n </span>\n <span class=\"fxFlex\"></span>\n @if (item.canSearch) {\n <i class=\"fa-solid fa-magnifying-glass search-icon\" (click)=\"$event.stopPropagation(); displaySearchDialog(item.node)\"> </i>\n }\n </div>\n </cdk-virtual-scroll-viewport>\n </mat-card-content>\n }\n</mat-card>\n","import { Component, ChangeDetectionStrategy, inject, input, effect, signal } from '@angular/core';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { createSignal, 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 imports: [MatIconModule, MatButtonModule],\n templateUrl: './ngssm-breadcrumb.component.html',\n styleUrls: ['./ngssm-breadcrumb.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmBreadcrumbComponent {\n public readonly treeId = input<string | undefined>(undefined);\n\n public readonly nodes = signal<NodeData[]>([]);\n\n private readonly store = inject(Store);\n private readonly treeState = createSignal((state) => selectNgssmTreeState(state));\n\n constructor() {\n effect(() => {\n const currentTreeId = this.treeId();\n if (!currentTreeId) {\n this.nodes.set([]);\n return;\n }\n\n const state = this.treeState();\n\n const tree = state?.trees[currentTreeId];\n if (!tree) {\n this.nodes.set([]);\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.set(path);\n });\n }\n\n public selectNode(node: NodeData): void {\n const treeId = this.treeId();\n if (treeId) {\n this.store.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 @for (node of nodes(); track node; let last = $last) {\n <span class=\"flex-row-center\">\n <button mat-button [disabled]=\"last\" (click)=\"selectNode(node)\">\n {{ node.label }}\n </button>\n\n @if (!last) {\n <div class=\"ngssm-breadcrumb-separator\">/</div>\n }\n </span>\n }\n</div>\n","import { Component, ChangeDetectionStrategy, ViewContainerRef, ChangeDetectorRef, inject, viewChild, effect } from '@angular/core';\n\nimport { AbstractControl, FormControl, FormsModule, ReactiveFormsModule, ValidationErrors, Validators } from '@angular/forms';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { createSignal, Store } from 'ngssm-store';\nimport { defaultRegexEditorValidator } from 'ngssm-toolkit';\n\nimport { selectNgssmTreeState } from '../../state';\nimport { NgssmTreeActionType, SearchTreeNodesAction } from '../../actions';\nimport { NgssmTreeDataService, NGSSM_TREE_DATA_SERVICE, SearchStatus } from '../../model';\n\n@Component({\n selector: 'ngssm-ngssm-tree-search-dialog',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatDialogModule,\n MatButtonModule,\n MatCardModule,\n MatIconModule,\n MatProgressSpinnerModule\n ],\n templateUrl: './ngssm-tree-search-dialog.component.html',\n styleUrls: ['./ngssm-tree-search-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmTreeSearchDialogComponent {\n public readonly resultsViewerContainer = viewChild('resultsViewerContainer', { read: ViewContainerRef });\n\n public readonly searchStatus = SearchStatus;\n public readonly searchRootPath = createSignal((state) => selectNgssmTreeState(state).treeNodesSearch.rootSearchPath ?? '');\n public readonly currentSearchedPath = createSignal((state) => selectNgssmTreeState(state).treeNodesSearch.toProcess[0]?.fullPath ?? '');\n public readonly currentSearchStatus = createSignal((state) => selectNgssmTreeState(state).treeNodesSearch.searchStatus);\n\n public readonly searchPatternControl = new FormControl<string | undefined>(undefined, [\n Validators.required,\n (c) => this.validatedRegex(c)\n ]);\n\n private readonly store = inject(Store);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private readonly dataServices: NgssmTreeDataService[] = inject(NGSSM_TREE_DATA_SERVICE, {\n optional: true\n }) as unknown as NgssmTreeDataService[];\n\n constructor() {\n const effectRef = effect(() => {\n const container = this.resultsViewerContainer();\n if (!container) {\n return;\n }\n\n const treeState = selectNgssmTreeState(this.store.state());\n const treeId = treeState.treeNodesSearch.treeId;\n if (!treeId) {\n return;\n }\n\n const treeType = treeState.trees[treeId]?.type;\n if (!treeType) {\n return;\n }\n\n const dataService = this.dataServices.find((d) => d.treeType === treeType);\n if (!dataService?.searchResultViewer) {\n return;\n }\n\n this.resultsViewerContainer()?.createComponent(dataService.searchResultViewer);\n this.changeDetectorRef.markForCheck();\n\n effectRef.destroy();\n });\n }\n\n public close(): void {\n this.store.dispatchActionType(NgssmTreeActionType.closeSearchDialog);\n }\n\n public search(): void {\n const searchPattern = this.searchPatternControl.value;\n if (searchPattern) {\n this.store.dispatchAction(new SearchTreeNodesAction(searchPattern));\n }\n }\n\n public abort(): void {\n this.store.dispatchActionType(NgssmTreeActionType.abortTreeNodesSearch);\n }\n\n private validatedRegex(control: AbstractControl): ValidationErrors | null {\n const result = defaultRegexEditorValidator.validatePattern(control.value);\n if (result.isValid) {\n return null;\n }\n\n return {\n regex: result.error\n };\n }\n}\n","<h1 mat-dialog-title>Tree search dialog</h1>\n@let searchInProgress = currentSearchStatus() === searchStatus.inProgress;\n<mat-dialog-content class=\"flex-column-stretch fxFlex\">\n <mat-card class=\"flex-column-stretch\">\n <mat-card-content class=\"flex-row-center\">\n <mat-form-field class=\"with-margin-right-12 fxFlex\">\n <mat-label>Starts search in</mat-label>\n <input matInput readonly [ngModel]=\"searchRootPath()\" />\n </mat-form-field>\n\n <mat-form-field class=\"fxFlex with-margin-right-12\">\n <mat-label>Search pattern</mat-label>\n <input matInput [formControl]=\"searchPatternControl\" />\n @if (searchPatternControl.errors?.['regex']; as error) {\n <mat-error>\n {{ error }}\n </mat-error>\n }\n </mat-form-field>\n\n @if (!searchInProgress) {\n <button mat-stroked-button color=\"primary\" [disabled]=\"searchPatternControl.invalid\" (click)=\"search()\">\n <mat-icon class=\"fa-solid fa-magnifying-glass\"></mat-icon>\n Search\n </button>\n } @else {\n <button mat-raised-button color=\"accent\" (click)=\"abort()\">\n <mat-icon class=\"fa-solid fa-ban\"></mat-icon>\n Abort\n </button>\n }\n </mat-card-content>\n @if (searchInProgress) {\n <mat-card-footer class=\"flex-row-center\">\n <mat-spinner [diameter]=\"20\"></mat-spinner>\n {{ currentSearchedPath() }}\n </mat-card-footer>\n }\n </mat-card>\n <mat-card class=\"flex-column-stretch fxFlex with-margin-top-8\">\n <ng-container #resultsViewerContainer></ng-container>\n </mat-card>\n</mat-dialog-content>\n<mat-dialog-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button (click)=\"close()\">Close</button>\n</mat-dialog-actions>\n","import { Injectable, inject } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\n\nimport { DataStatus } from 'ngssm-remote-data';\nimport { Effect, State, Action, Logger, ActionDispatcher } from 'ngssm-store';\nimport { defaultRegexEditorValidator } from 'ngssm-toolkit';\n\nimport { LoadChildrenOfNodeAction, NgssmTreeActionType, RegisterPartialSearchResultsAction } from '../actions';\nimport { NgssmTreeSearchDialogComponent } from '../components';\nimport { NgssmTreeNode, SearchStatus } from '../model';\nimport { selectNgssmTreeNode, selectNgssmTreeNodeChildren, selectNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodesSearchingEffect implements Effect {\n public readonly processedActions: string[] = [\n NgssmTreeActionType.displaySearchDialog,\n NgssmTreeActionType.closeSearchDialog,\n NgssmTreeActionType.searchTreeNodes,\n NgssmTreeActionType.registerNodes,\n NgssmTreeActionType.registerPartialSearchResults\n ];\n\n private readonly matDialog = inject(MatDialog);\n private readonly logger = inject(Logger);\n\n private dialog: MatDialogRef<NgssmTreeSearchDialogComponent> | undefined;\n\n public processAction(actiondispatcher: ActionDispatcher, state: State, action: Action): void {\n switch (action.type) {\n case NgssmTreeActionType.displaySearchDialog: {\n this.dialog = this.matDialog.open(NgssmTreeSearchDialogComponent, {\n disableClose: true,\n width: '80vw',\n height: '80vh'\n });\n\n break;\n }\n\n case NgssmTreeActionType.closeSearchDialog: {\n this.closeDialog();\n\n break;\n }\n\n case NgssmTreeActionType.searchTreeNodes:\n case NgssmTreeActionType.registerNodes:\n case NgssmTreeActionType.registerPartialSearchResults: {\n const searchState = selectNgssmTreeState(state).treeNodesSearch;\n if (!searchState.treeId || !searchState.rootSearchNodeId || searchState.searchStatus !== SearchStatus.inProgress) {\n return;\n }\n\n if (searchState.toProcess.length === 0) {\n return;\n }\n\n const currentNode = selectNgssmTreeNode(state, searchState.treeId, searchState.toProcess[0].nodeId);\n if (!currentNode) {\n this.logger.error(`No node for treeId '${searchState.treeId}' with id '${searchState.toProcess[0].nodeId}'.`);\n return;\n }\n\n if (currentNode.node.isExpandable && currentNode.status !== DataStatus.loaded && currentNode.status !== DataStatus.loading) {\n actiondispatcher.dispatchAction(new LoadChildrenOfNodeAction(searchState.treeId, currentNode.node.nodeId));\n return;\n }\n\n const childrenNodes = selectNgssmTreeNodeChildren(state, searchState.treeId, currentNode.node.nodeId);\n const matching: NgssmTreeNode[] = [];\n const toProcess: NgssmTreeNode[] = [];\n childrenNodes.forEach((node) => {\n const fullPath = `${node.parentFullPath}/${node.node.label}`;\n if (defaultRegexEditorValidator.isMatch(searchState.searchPattern ?? '', fullPath)) {\n matching.push(node);\n }\n\n if (node.node.isExpandable) {\n toProcess.push(node);\n }\n });\n\n actiondispatcher.dispatchAction(new RegisterPartialSearchResultsAction(matching, toProcess));\n\n break;\n }\n }\n }\n\n private closeDialog(): void {\n this.dialog?.close();\n this.dialog = undefined;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport update from 'immutability-helper';\n\nimport { DataStatus } from 'ngssm-remote-data';\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { CollapseNodeAction, ExpandNodeAction, LoadChildrenOfNodeAction, 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 NgssmTreeActionType.loadChildrenOfNode\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 case NgssmTreeActionType.loadChildrenOfNode: {\n const loadChildrenOfNodeAction = action as LoadChildrenOfNodeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [loadChildrenOfNodeAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const result = [...nodes];\n const index = result.findIndex((n) => n.node.nodeId === loadChildrenOfNodeAction.nodeId);\n if (index !== -1) {\n let item = result[index];\n if (item.status !== DataStatus.loaded) {\n item = update(result[index], {\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\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } 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","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { DisplaySearchDialogAction, NgssmTreeActionType, RegisterPartialSearchResultsAction, SearchTreeNodesAction } from '../actions';\nimport { getNgssmTreeNodeFullPath, getNgssmTreePath, SearchStatus } from '../model';\nimport { getDefaultTreeNodesSearch, selectNgssmTreeNode, selectNgssmTreeState, updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodesSearchReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmTreeActionType.displaySearchDialog,\n NgssmTreeActionType.closeSearchDialog,\n NgssmTreeActionType.searchTreeNodes,\n NgssmTreeActionType.registerPartialSearchResults,\n NgssmTreeActionType.abortTreeNodesSearch\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.displaySearchDialog: {\n const displaySearchDialogAction = action as DisplaySearchDialogAction;\n const path = getNgssmTreePath(\n selectNgssmTreeState(state).trees[displaySearchDialogAction.treeId],\n displaySearchDialogAction.startNodeId\n );\n return updateNgssmTreeState(state, {\n treeNodesSearch: {\n treeId: { $set: displaySearchDialogAction.treeId },\n rootSearchNodeId: { $set: displaySearchDialogAction.startNodeId },\n rootSearchPath: { $set: path.map((p) => p.node.label).join('/') }\n }\n });\n }\n\n case NgssmTreeActionType.closeSearchDialog: {\n return updateNgssmTreeState(state, {\n treeNodesSearch: { $set: getDefaultTreeNodesSearch() }\n });\n }\n\n case NgssmTreeActionType.searchTreeNodes: {\n const searchTreeNodesAction = action as SearchTreeNodesAction;\n const startNode = selectNgssmTreeNode(\n state,\n selectNgssmTreeState(state).treeNodesSearch.treeId ?? '',\n selectNgssmTreeState(state).treeNodesSearch.rootSearchNodeId ?? ''\n );\n const toBeProcess: { nodeId: string; fullPath: string }[] = [];\n if (startNode) {\n toBeProcess.push({ nodeId: startNode.node.nodeId, fullPath: getNgssmTreeNodeFullPath(startNode) });\n }\n\n return updateNgssmTreeState(state, {\n treeNodesSearch: {\n searchPattern: { $set: searchTreeNodesAction.searchPattern },\n searchStatus: { $set: SearchStatus.inProgress },\n toProcess: { $set: toBeProcess },\n matchingNodes: { $set: [] }\n }\n });\n }\n\n case NgssmTreeActionType.registerPartialSearchResults: {\n const registerPartialSearchResultsAction = action as RegisterPartialSearchResultsAction;\n const toProcess: { nodeId: string; fullPath: string }[] = selectNgssmTreeState(state).treeNodesSearch.toProcess.slice(1);\n toProcess.push(\n ...registerPartialSearchResultsAction.nodesToProcess.map((n) => ({\n nodeId: n.node.nodeId,\n fullPath: getNgssmTreeNodeFullPath(n)\n }))\n );\n return updateNgssmTreeState(state, {\n treeNodesSearch: {\n searchStatus: {\n $apply: (value) => {\n if (toProcess.length === 0) {\n return SearchStatus.done;\n }\n\n return value;\n }\n },\n toProcess: { $set: toProcess },\n matchingNodes: { $push: registerPartialSearchResultsAction.matchingNodes.map((n) => n.node.nodeId) }\n }\n });\n }\n\n case NgssmTreeActionType.abortTreeNodesSearch: {\n return updateNgssmTreeState(state, {\n treeNodesSearch: {\n searchStatus: { $set: SearchStatus.aborted },\n toProcess: { $set: [] }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport update from 'immutability-helper';\nimport { DataStatus } from 'ngssm-remote-data';\n\nimport { Reducer, State, Action } 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 parentFullPath:\n nodes[index].parentFullPath !== undefined\n ? `${nodes[index].parentFullPath}/${nodes[index].node.label}`\n : nodes[index].node.label\n })),\n ...nodes.slice(index + 1)\n ];\n }\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DataStatus } from 'ngssm-remote-data';\n\nimport { Reducer, State, Action } 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","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport { provideEffects, provideReducers } from 'ngssm-store';\n\nimport { TreeNodeLoadingEffect } from './effects/tree-node-loading.effect';\nimport { TreeNodesSearchingEffect } from './effects/tree-nodes-searching.effect';\nimport { TreeNodeExpandReducer } from './reducers/tree-node-expand.reducer';\nimport { TreeNodeSelectionReducer } from './reducers/tree-node-selection.reducer';\nimport { TreeNodesSearchReducer } from './reducers/tree-nodes-search.reducer';\nimport { TreeNodesReducer } from './reducers/tree-nodes.reducer';\nimport { TreesReducer } from './reducers/trees.reducer';\n\nexport const provideNgssmTree = (): EnvironmentProviders => {\n return makeEnvironmentProviders([\n provideReducers(TreeNodeExpandReducer, TreeNodeSelectionReducer, TreeNodesSearchReducer, TreeNodesReducer, TreesReducer),\n provideEffects(TreeNodeLoadingEffect, TreeNodesSearchingEffect)\n ]);\n};\n","/*\n * Public API Surface of ngssm-tree\n */\n\nexport * from './lib/ngssm-tree/public-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i2","i1","i4","i7","i8"],"mappings":"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"}
1
+ {"version":3,"file":"ngssm-tree.mjs","sources":["../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/ngssm-tree-action-type.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/tree-action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/init-ngssm-tree.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/tree-node-action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/expand-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/register-nodes.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/collapse-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/select-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/delete-ngssm-tree.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/display-search-dialog.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/search-tree-nodes.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/register-partial-search-results.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/actions/load-children-of-node.action.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/model/ngssm-tree-node.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/model/ngssm-tree-data-service.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/model/ngssm-tree.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/model/search-status.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/state/tree-nodes-search.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/state/ngssm-tree.state.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/state/selectors.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/effects/tree-node-loading.effect.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/components/ngssm-tree/ngssm-tree.component.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/components/ngssm-tree/ngssm-tree.component.html","../../../projects/ngssm-tree/src/lib/ngssm-tree/components/ngssm-breadcrumb/ngssm-breadcrumb.component.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/components/ngssm-breadcrumb/ngssm-breadcrumb.component.html","../../../projects/ngssm-tree/src/lib/ngssm-tree/components/ngssm-tree-search-dialog/ngssm-tree-search-dialog.component.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/components/ngssm-tree-search-dialog/ngssm-tree-search-dialog.component.html","../../../projects/ngssm-tree/src/lib/ngssm-tree/effects/tree-nodes-searching.effect.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/reducers/tree-node-expand.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/reducers/tree-node-selection.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/reducers/tree-nodes-search.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/reducers/tree-nodes.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/reducers/trees.reducer.ts","../../../projects/ngssm-tree/src/lib/ngssm-tree/provide-ngssm-tree.ts","../../../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 loadChildrenOfNode = '[NgssmTreeActionType] loadChildrenOfNode',\n displaySearchDialog = '[NgssmTreeActionType] displaySearchDialog',\n closeSearchDialog = '[NgssmTreeActionType] closeSearchDialog',\n searchTreeNodes = '[NgssmTreeActionType] searchTreeNodes',\n registerPartialSearchResults = '[NgssmTreeActionType] registerPartialSearchResults',\n abortTreeNodesSearch = '[NgssmTreeActionType] abortTreeNodesSearch'\n}\n","import { Action } from 'ngssm-store';\n\nexport class TreeAction implements Action {\n constructor(\n public readonly type: string,\n public readonly treeId: string\n ) {}\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(\n treeId: string,\n public readonly treeType: string,\n public readonly root: NodeData\n ) {\n super(NgssmTreeActionType.initNgssmTree, treeId);\n }\n}\n","import { TreeAction } from './tree-action';\n\nexport class TreeNodeAction extends TreeAction {\n constructor(\n actionType: string,\n treeId: string,\n public readonly nodeId: string\n ) {\n super(actionType, treeId);\n }\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeNodeAction } from './tree-node-action';\n\nexport class ExpandNodeAction extends TreeNodeAction {\n constructor(treeId: string, nodeId: string) {\n super(NgssmTreeActionType.expandNode, treeId, nodeId);\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(\n treeId: string,\n public readonly nodeId: string\n ) {\n super(NgssmTreeActionType.collapseNode, treeId);\n }\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeNodeAction } from './tree-node-action';\n\nexport class SelectNodeAction extends TreeNodeAction {\n constructor(treeId: string, nodeId: string) {\n super(NgssmTreeActionType.selectNode, treeId, nodeId);\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 { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeAction } from './tree-action';\n\nexport class DisplaySearchDialogAction extends TreeAction {\n constructor(\n treeId: string,\n public readonly startNodeId: string\n ) {\n super(NgssmTreeActionType.displaySearchDialog, treeId);\n }\n}\n","import { Action } from 'ngssm-store';\nimport { NgssmTreeActionType } from './ngssm-tree-action-type';\n\nexport class SearchTreeNodesAction implements Action {\n public readonly type: string = NgssmTreeActionType.searchTreeNodes;\n\n constructor(public readonly searchPattern: string) {}\n}\n","import { Action } from 'ngssm-store';\n\nimport { NgssmTreeNode } from '../model';\nimport { NgssmTreeActionType } from './ngssm-tree-action-type';\n\nexport class RegisterPartialSearchResultsAction implements Action {\n public readonly type: string = NgssmTreeActionType.registerPartialSearchResults;\n\n constructor(\n public readonly matchingNodes: NgssmTreeNode[],\n public nodesToProcess: NgssmTreeNode[]\n ) {}\n}\n","import { NgssmTreeActionType } from './ngssm-tree-action-type';\nimport { TreeNodeAction } from './tree-node-action';\n\nexport class LoadChildrenOfNodeAction extends TreeNodeAction {\n constructor(treeId: string, nodeId: string) {\n super(NgssmTreeActionType.loadChildrenOfNode, treeId, nodeId);\n }\n}\n","import { DataStatus } from 'ngssm-remote-data';\nimport { NodeData } from './node-data';\n\nexport interface NgssmTreeNode {\n status: DataStatus;\n isExpanded?: boolean;\n level: number;\n parentFullPath?: string;\n\n node: NodeData;\n}\n\nexport const getNgssmTreeNodeFullPath = (node: NgssmTreeNode): string => {\n if (node.parentFullPath) {\n return `${node.parentFullPath}/${node.node.label}`;\n }\n\n return node.node.label;\n};\n","import { InjectionToken, Type } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { NodeData } from './node-data';\n\nexport interface NgssmTreeDataService {\n readonly treeType: string;\n // Component used to display the result of a search\n readonly searchResultViewer?: Type<unknown>;\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 { NgssmTreeNode } from './ngssm-tree-node';\n\nexport interface NgssmTree {\n nodes: NgssmTreeNode[];\n selectedNode?: string;\n type: string;\n}\n\nexport const getNgssmTreePath = (tree: NgssmTree, nodeId: string): NgssmTreeNode[] => {\n const nodesPerId = new Map<string, NgssmTreeNode>(tree.nodes.map((n) => [n.node.nodeId, n]));\n const path: NgssmTreeNode[] = [];\n let node = nodesPerId.get(nodeId);\n while (node) {\n path.unshift(node);\n node = node.node.parentNodeId ? nodesPerId.get(node.node.parentNodeId) : undefined;\n }\n\n if (path.length === 0 && tree.nodes.length > 0) {\n path.push(tree.nodes[0]);\n }\n\n return path;\n};\n","export enum SearchStatus {\n none = 'None',\n inProgress = 'In progress',\n done = 'Done',\n aborted = 'Aborted'\n}\n","import { SearchStatus } from '../model';\n\nexport interface TreeNodesSearch {\n treeId?: string;\n rootSearchNodeId?: string;\n rootSearchPath?: string;\n searchPattern?: string;\n searchStatus: SearchStatus;\n toProcess: { nodeId: string; fullPath: string }[];\n matchingNodes: string[];\n}\n\nexport const getDefaultTreeNodesSearch = (): TreeNodesSearch => ({\n searchStatus: SearchStatus.none,\n toProcess: [],\n matchingNodes: []\n});\n","import update, { Spec } from 'immutability-helper';\n\nimport { NgSsmFeatureState, State } from 'ngssm-store';\n\nimport { NgssmTree } from '../model';\nimport { getDefaultTreeNodesSearch, TreeNodesSearch } from './tree-nodes-search';\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: Record<string, NgssmTree>;\n treeNodesSearch: TreeNodesSearch;\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 treeNodesSearch: getDefaultTreeNodesSearch()\n };\n}\n","import { State } from 'ngssm-store';\nimport { NgssmTreeNode } from '../model';\nimport { selectNgssmTreeState } from './ngssm-tree.state';\n\nexport const selectNgssmTreeNode = (state: State, treeId: string, nodeId: string): NgssmTreeNode | undefined =>\n selectNgssmTreeState(state).trees[treeId]?.nodes.find((n) => n.node.nodeId === nodeId);\n\nexport const selectNgssmTreeNodeChildren = (state: State, treeId: string, nodeId: string): NgssmTreeNode[] =>\n selectNgssmTreeState(state).trees[treeId]?.nodes.filter((n) => n.node.parentNodeId === nodeId) ?? [];\n","import { Injectable, inject } from '@angular/core';\n\nimport { DataStatus } from 'ngssm-remote-data';\nimport { Effect, State, Action, Logger, ActionDispatcher } from 'ngssm-store';\n\nimport { NgssmTreeActionType, RegisterNodesAction, TreeNodeAction } 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[] = [\n NgssmTreeActionType.expandNode,\n NgssmTreeActionType.selectNode,\n NgssmTreeActionType.loadChildrenOfNode\n ];\n\n private readonly dataServices: NgssmTreeDataService[] =\n (inject(NGSSM_TREE_DATA_SERVICE, { optional: true }) as unknown as NgssmTreeDataService[]) ?? [];\n private readonly logger = inject(Logger);\n\n public processAction(actiondispatcher: ActionDispatcher, state: State, action: Action): void {\n const treeNodeAction = action as TreeNodeAction;\n if (!selectNgssmTreeState(state).trees[treeNodeAction.treeId]) {\n this.logger.error(`Trying to process action for tree not initialized: ${treeNodeAction.treeId}.`);\n return;\n }\n\n const treeType = selectNgssmTreeState(state).trees[treeNodeAction.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: ${treeNodeAction.treeId} / ${treeType}.`);\n return;\n }\n\n const node = selectNgssmTreeState(state).trees[treeNodeAction.treeId].nodes.find((n) => n.node.nodeId === treeNodeAction.nodeId);\n if (node?.status !== DataStatus.loading) {\n return;\n }\n\n dataService.load(treeNodeAction.treeId, treeNodeAction.nodeId).subscribe({\n next: (value) =>\n actiondispatcher.dispatchAction(new RegisterNodesAction(DataStatus.loaded, treeNodeAction.treeId, treeNodeAction.nodeId, value)),\n error: (error) => {\n this.logger.error(`Unable to load children nodes for tree '${treeNodeAction.treeId}' and node '${treeNodeAction.nodeId}'`, error);\n actiondispatcher.dispatchAction(new RegisterNodesAction(DataStatus.error, treeNodeAction.treeId, treeNodeAction.nodeId));\n }\n });\n }\n}\n","import { Component, ChangeDetectionStrategy, inject, input, effect, signal, untracked } 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';\n\nimport { createSignal, Store } from 'ngssm-store';\nimport { DataStatus } from 'ngssm-remote-data';\n\nimport { NgssmTree, NgssmTreeConfig, NgssmTreeNode, NodeData } from '../../model';\nimport { selectNgssmTreeState } from '../../state';\nimport { CollapseNodeAction, DisplaySearchDialogAction, ExpandNodeAction, SelectNodeAction } from '../../actions';\n\ninterface DisplayedNode {\n node: NgssmTreeNode;\n canSearch: boolean;\n}\n\n@Component({\n selector: 'ngssm-tree',\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 {\n public readonly treeConfig = input<NgssmTreeConfig | undefined | null>();\n\n protected readonly dataStatus = DataStatus;\n protected readonly displayedItems = signal<DisplayedNode[]>([]);\n protected readonly selectedNodeId = signal<string | undefined>(undefined);\n\n private readonly store = inject(Store);\n private readonly trees = createSignal((state) => selectNgssmTreeState(state).trees);\n private readonly tree = signal<NgssmTree | undefined>(undefined);\n\n constructor() {\n effect(() => {\n const currentConfig = this.treeConfig();\n const currentTrees = this.trees();\n if (currentConfig) {\n this.tree.set(currentTrees[currentConfig.treeId]);\n } else {\n this.tree.set(undefined);\n }\n });\n\n effect(() => {\n const currentTree = this.tree();\n const config = untracked(() => this.treeConfig());\n if (!currentTree || !config) {\n this.displayedItems.set([]);\n return;\n }\n\n const alwaysTrue = () => true;\n const filter: (node: NodeData) => boolean = config.filter ?? alwaysTrue;\n const canSearch: (node: NodeData) => boolean = config.canSearch ?? alwaysTrue;\n\n const items: DisplayedNode[] = [];\n let hiddenLevel = -1;\n const nodesToFindSelected = new Map<string, { isDisplayed: boolean; node: NgssmTreeNode }>();\n (currentTree.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({\n node: t,\n canSearch: canSearch(t.node)\n });\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.set(items);\n\n let selectedNode = currentTree.selectedNode;\n if (!selectedNode) {\n this.selectedNodeId.set(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.set(selectedNode);\n }\n });\n }\n\n protected getItemId(_: number, node: DisplayedNode): string {\n return node.node.node.nodeId;\n }\n\n protected expand(node: NgssmTreeNode): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new ExpandNodeAction(treeId, node.node.nodeId));\n }\n }\n\n protected collapse(node: NgssmTreeNode): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new CollapseNodeAction(treeId, node.node.nodeId));\n }\n }\n\n protected selectNode(node: NgssmTreeNode): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new SelectNodeAction(treeId, node.node.nodeId));\n }\n }\n\n protected displaySearchDialog(node: NgssmTreeNode): void {\n const treeId = this.treeConfig()?.treeId;\n if (treeId) {\n this.store.dispatchAction(new DisplaySearchDialogAction(treeId, node.node.nodeId));\n }\n }\n}\n","<mat-card class=\"flex-column-stretch fxFlex\">\n @if (treeConfig(); as config) {\n <mat-card-content class=\"flex-column-stretch fxFlex\">\n <cdk-virtual-scroll-viewport itemSize=\"30\" class=\"fxFlex\">\n <div\n *cdkVirtualFor=\"let item of displayedItems(); trackBy: getItemId\"\n class=\"ngssm-tree-node\"\n [style.padding-left.px]=\"item.node.level * 20\"\n (click)=\"selectNode(item.node)\"\n aria-hidden=\"true\"\n (keyup.enter)=\"selectNode(item.node)\"\n [ngClass]=\"{ selected: selectedNodeId() === item.node.node.nodeId }\">\n @if (item.node.node.isExpandable) {\n @if (item.node.status === dataStatus.loading) {\n <mat-spinner diameter=\"20\"></mat-spinner>\n } @else {\n @if (item.node.isExpanded) {\n <mat-icon class=\"fa-solid fa-chevron-down\" (click)=\"$event.stopPropagation(); collapse(item.node)\"></mat-icon>\n } @else {\n <mat-icon class=\"fa-solid fa-chevron-right\" (click)=\"$event.stopPropagation(); expand(item.node)\"></mat-icon>\n }\n }\n } @else {\n <span class=\"not-expandable-padding\"></span>\n }\n\n <mat-icon class=\"{{ config.iconClasses[item.node.node.type] }}\" color=\"primary\"></mat-icon>\n\n <span class=\"ngssm-tree-node-label\">\n {{ item.node.node.label }}\n </span>\n <span class=\"fxFlex\"></span>\n @if (item.canSearch) {\n <i class=\"fa-solid fa-magnifying-glass search-icon\" (click)=\"$event.stopPropagation(); displaySearchDialog(item.node)\"> </i>\n }\n </div>\n </cdk-virtual-scroll-viewport>\n </mat-card-content>\n }\n</mat-card>\n","import { Component, ChangeDetectionStrategy, inject, input, effect, signal } from '@angular/core';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { createSignal, 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 imports: [MatIconModule, MatButtonModule],\n templateUrl: './ngssm-breadcrumb.component.html',\n styleUrls: ['./ngssm-breadcrumb.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmBreadcrumbComponent {\n public readonly treeId = input<string | undefined>(undefined);\n\n public readonly nodes = signal<NodeData[]>([]);\n\n private readonly store = inject(Store);\n private readonly treeState = createSignal((state) => selectNgssmTreeState(state));\n\n constructor() {\n effect(() => {\n const currentTreeId = this.treeId();\n if (!currentTreeId) {\n this.nodes.set([]);\n return;\n }\n\n const state = this.treeState();\n\n const tree = state?.trees[currentTreeId];\n if (!tree) {\n this.nodes.set([]);\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.set(path);\n });\n }\n\n public selectNode(node: NodeData): void {\n const treeId = this.treeId();\n if (treeId) {\n this.store.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 @for (node of nodes(); track node; let last = $last) {\n <span class=\"flex-row-center\">\n <button mat-button [disabled]=\"last\" (click)=\"selectNode(node)\">\n {{ node.label }}\n </button>\n\n @if (!last) {\n <div class=\"ngssm-breadcrumb-separator\">/</div>\n }\n </span>\n }\n</div>\n","import { Component, ChangeDetectionStrategy, ViewContainerRef, ChangeDetectorRef, inject, viewChild, effect } from '@angular/core';\n\nimport { AbstractControl, FormControl, FormsModule, ReactiveFormsModule, ValidationErrors, Validators } from '@angular/forms';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { createSignal, Store } from 'ngssm-store';\nimport { defaultRegexEditorValidator } from 'ngssm-toolkit';\n\nimport { selectNgssmTreeState } from '../../state';\nimport { NgssmTreeActionType, SearchTreeNodesAction } from '../../actions';\nimport { NgssmTreeDataService, NGSSM_TREE_DATA_SERVICE, SearchStatus } from '../../model';\n\n@Component({\n selector: 'ngssm-ngssm-tree-search-dialog',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatDialogModule,\n MatButtonModule,\n MatCardModule,\n MatIconModule,\n MatProgressSpinnerModule\n ],\n templateUrl: './ngssm-tree-search-dialog.component.html',\n styleUrls: ['./ngssm-tree-search-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmTreeSearchDialogComponent {\n public readonly resultsViewerContainer = viewChild('resultsViewerContainer', { read: ViewContainerRef });\n\n public readonly searchStatus = SearchStatus;\n public readonly searchRootPath = createSignal((state) => selectNgssmTreeState(state).treeNodesSearch.rootSearchPath ?? '');\n public readonly currentSearchedPath = createSignal((state) => selectNgssmTreeState(state).treeNodesSearch.toProcess[0]?.fullPath ?? '');\n public readonly currentSearchStatus = createSignal((state) => selectNgssmTreeState(state).treeNodesSearch.searchStatus);\n\n public readonly searchPatternControl = new FormControl<string | undefined>(undefined, [\n Validators.required,\n (c) => this.validatedRegex(c)\n ]);\n\n private readonly store = inject(Store);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private readonly dataServices: NgssmTreeDataService[] = inject(NGSSM_TREE_DATA_SERVICE, {\n optional: true\n }) as unknown as NgssmTreeDataService[];\n\n constructor() {\n const effectRef = effect(() => {\n const container = this.resultsViewerContainer();\n if (!container) {\n return;\n }\n\n const treeState = selectNgssmTreeState(this.store.state());\n const treeId = treeState.treeNodesSearch.treeId;\n if (!treeId) {\n return;\n }\n\n const treeType = treeState.trees[treeId]?.type;\n if (!treeType) {\n return;\n }\n\n const dataService = this.dataServices.find((d) => d.treeType === treeType);\n if (!dataService?.searchResultViewer) {\n return;\n }\n\n this.resultsViewerContainer()?.createComponent(dataService.searchResultViewer);\n this.changeDetectorRef.markForCheck();\n\n effectRef.destroy();\n });\n }\n\n public close(): void {\n this.store.dispatchActionType(NgssmTreeActionType.closeSearchDialog);\n }\n\n public search(): void {\n const searchPattern = this.searchPatternControl.value;\n if (searchPattern) {\n this.store.dispatchAction(new SearchTreeNodesAction(searchPattern));\n }\n }\n\n public abort(): void {\n this.store.dispatchActionType(NgssmTreeActionType.abortTreeNodesSearch);\n }\n\n private validatedRegex(control: AbstractControl): ValidationErrors | null {\n const result = defaultRegexEditorValidator.validatePattern(control.value);\n if (result.isValid) {\n return null;\n }\n\n return {\n regex: result.error\n };\n }\n}\n","<h1 mat-dialog-title>Tree search dialog</h1>\n@let searchInProgress = currentSearchStatus() === searchStatus.inProgress;\n<mat-dialog-content class=\"flex-column-stretch fxFlex\">\n <mat-card class=\"flex-column-stretch\">\n <mat-card-content class=\"flex-row-center\">\n <mat-form-field class=\"with-margin-right-12 fxFlex\">\n <mat-label>Starts search in</mat-label>\n <input matInput readonly [ngModel]=\"searchRootPath()\" />\n </mat-form-field>\n\n <mat-form-field class=\"fxFlex with-margin-right-12\">\n <mat-label>Search pattern</mat-label>\n <input matInput [formControl]=\"searchPatternControl\" />\n @if (searchPatternControl.errors?.['regex']; as error) {\n <mat-error>\n {{ error }}\n </mat-error>\n }\n </mat-form-field>\n\n @if (!searchInProgress) {\n <button mat-stroked-button color=\"primary\" [disabled]=\"searchPatternControl.invalid\" (click)=\"search()\">\n <mat-icon class=\"fa-solid fa-magnifying-glass\"></mat-icon>\n Search\n </button>\n } @else {\n <button mat-raised-button color=\"accent\" (click)=\"abort()\">\n <mat-icon class=\"fa-solid fa-ban\"></mat-icon>\n Abort\n </button>\n }\n </mat-card-content>\n @if (searchInProgress) {\n <mat-card-footer class=\"flex-row-center\">\n <mat-spinner [diameter]=\"20\"></mat-spinner>\n {{ currentSearchedPath() }}\n </mat-card-footer>\n }\n </mat-card>\n <mat-card class=\"flex-column-stretch fxFlex with-margin-top-8\">\n <ng-container #resultsViewerContainer></ng-container>\n </mat-card>\n</mat-dialog-content>\n<mat-dialog-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button (click)=\"close()\">Close</button>\n</mat-dialog-actions>\n","import { Injectable, inject } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\n\nimport { DataStatus } from 'ngssm-remote-data';\nimport { Effect, State, Action, Logger, ActionDispatcher } from 'ngssm-store';\nimport { defaultRegexEditorValidator } from 'ngssm-toolkit';\n\nimport { LoadChildrenOfNodeAction, NgssmTreeActionType, RegisterPartialSearchResultsAction } from '../actions';\nimport { NgssmTreeSearchDialogComponent } from '../components';\nimport { NgssmTreeNode, SearchStatus } from '../model';\nimport { selectNgssmTreeNode, selectNgssmTreeNodeChildren, selectNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodesSearchingEffect implements Effect {\n public readonly processedActions: string[] = [\n NgssmTreeActionType.displaySearchDialog,\n NgssmTreeActionType.closeSearchDialog,\n NgssmTreeActionType.searchTreeNodes,\n NgssmTreeActionType.registerNodes,\n NgssmTreeActionType.registerPartialSearchResults\n ];\n\n private readonly matDialog = inject(MatDialog);\n private readonly logger = inject(Logger);\n\n private dialog: MatDialogRef<NgssmTreeSearchDialogComponent> | undefined;\n\n public processAction(actiondispatcher: ActionDispatcher, state: State, action: Action): void {\n switch (action.type) {\n case NgssmTreeActionType.displaySearchDialog: {\n this.dialog = this.matDialog.open(NgssmTreeSearchDialogComponent, {\n disableClose: true,\n width: '80vw',\n height: '80vh'\n });\n\n break;\n }\n\n case NgssmTreeActionType.closeSearchDialog: {\n this.closeDialog();\n\n break;\n }\n\n case NgssmTreeActionType.searchTreeNodes:\n case NgssmTreeActionType.registerNodes:\n case NgssmTreeActionType.registerPartialSearchResults: {\n const searchState = selectNgssmTreeState(state).treeNodesSearch;\n if (!searchState.treeId || !searchState.rootSearchNodeId || searchState.searchStatus !== SearchStatus.inProgress) {\n return;\n }\n\n if (searchState.toProcess.length === 0) {\n return;\n }\n\n const currentNode = selectNgssmTreeNode(state, searchState.treeId, searchState.toProcess[0].nodeId);\n if (!currentNode) {\n this.logger.error(`No node for treeId '${searchState.treeId}' with id '${searchState.toProcess[0].nodeId}'.`);\n return;\n }\n\n if (currentNode.node.isExpandable && currentNode.status !== DataStatus.loaded && currentNode.status !== DataStatus.loading) {\n actiondispatcher.dispatchAction(new LoadChildrenOfNodeAction(searchState.treeId, currentNode.node.nodeId));\n return;\n }\n\n const childrenNodes = selectNgssmTreeNodeChildren(state, searchState.treeId, currentNode.node.nodeId);\n const matching: NgssmTreeNode[] = [];\n const toProcess: NgssmTreeNode[] = [];\n childrenNodes.forEach((node) => {\n const fullPath = `${node.parentFullPath}/${node.node.label}`;\n if (defaultRegexEditorValidator.isMatch(searchState.searchPattern ?? '', fullPath)) {\n matching.push(node);\n }\n\n if (node.node.isExpandable) {\n toProcess.push(node);\n }\n });\n\n actiondispatcher.dispatchAction(new RegisterPartialSearchResultsAction(matching, toProcess));\n\n break;\n }\n }\n }\n\n private closeDialog(): void {\n this.dialog?.close();\n this.dialog = undefined;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport update from 'immutability-helper';\n\nimport { DataStatus } from 'ngssm-remote-data';\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { CollapseNodeAction, ExpandNodeAction, LoadChildrenOfNodeAction, 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 NgssmTreeActionType.loadChildrenOfNode\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 case NgssmTreeActionType.loadChildrenOfNode: {\n const loadChildrenOfNodeAction = action as LoadChildrenOfNodeAction;\n return updateNgssmTreeState(state, {\n trees: {\n [loadChildrenOfNodeAction.treeId]: {\n nodes: {\n $apply: (nodes: NgssmTreeNode[]) => {\n const result = [...nodes];\n const index = result.findIndex((n) => n.node.nodeId === loadChildrenOfNodeAction.nodeId);\n if (index !== -1) {\n let item = result[index];\n if (item.status !== DataStatus.loaded) {\n item = update(result[index], {\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\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } 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","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { DisplaySearchDialogAction, NgssmTreeActionType, RegisterPartialSearchResultsAction, SearchTreeNodesAction } from '../actions';\nimport { getNgssmTreeNodeFullPath, getNgssmTreePath, SearchStatus } from '../model';\nimport { getDefaultTreeNodesSearch, selectNgssmTreeNode, selectNgssmTreeState, updateNgssmTreeState } from '../state';\n\n@Injectable()\nexport class TreeNodesSearchReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmTreeActionType.displaySearchDialog,\n NgssmTreeActionType.closeSearchDialog,\n NgssmTreeActionType.searchTreeNodes,\n NgssmTreeActionType.registerPartialSearchResults,\n NgssmTreeActionType.abortTreeNodesSearch\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmTreeActionType.displaySearchDialog: {\n const displaySearchDialogAction = action as DisplaySearchDialogAction;\n const path = getNgssmTreePath(\n selectNgssmTreeState(state).trees[displaySearchDialogAction.treeId],\n displaySearchDialogAction.startNodeId\n );\n return updateNgssmTreeState(state, {\n treeNodesSearch: {\n treeId: { $set: displaySearchDialogAction.treeId },\n rootSearchNodeId: { $set: displaySearchDialogAction.startNodeId },\n rootSearchPath: { $set: path.map((p) => p.node.label).join('/') }\n }\n });\n }\n\n case NgssmTreeActionType.closeSearchDialog: {\n return updateNgssmTreeState(state, {\n treeNodesSearch: { $set: getDefaultTreeNodesSearch() }\n });\n }\n\n case NgssmTreeActionType.searchTreeNodes: {\n const searchTreeNodesAction = action as SearchTreeNodesAction;\n const startNode = selectNgssmTreeNode(\n state,\n selectNgssmTreeState(state).treeNodesSearch.treeId ?? '',\n selectNgssmTreeState(state).treeNodesSearch.rootSearchNodeId ?? ''\n );\n const toBeProcess: { nodeId: string; fullPath: string }[] = [];\n if (startNode) {\n toBeProcess.push({ nodeId: startNode.node.nodeId, fullPath: getNgssmTreeNodeFullPath(startNode) });\n }\n\n return updateNgssmTreeState(state, {\n treeNodesSearch: {\n searchPattern: { $set: searchTreeNodesAction.searchPattern },\n searchStatus: { $set: SearchStatus.inProgress },\n toProcess: { $set: toBeProcess },\n matchingNodes: { $set: [] }\n }\n });\n }\n\n case NgssmTreeActionType.registerPartialSearchResults: {\n const registerPartialSearchResultsAction = action as RegisterPartialSearchResultsAction;\n const toProcess: { nodeId: string; fullPath: string }[] = selectNgssmTreeState(state).treeNodesSearch.toProcess.slice(1);\n toProcess.push(\n ...registerPartialSearchResultsAction.nodesToProcess.map((n) => ({\n nodeId: n.node.nodeId,\n fullPath: getNgssmTreeNodeFullPath(n)\n }))\n );\n return updateNgssmTreeState(state, {\n treeNodesSearch: {\n searchStatus: {\n $apply: (value) => {\n if (toProcess.length === 0) {\n return SearchStatus.done;\n }\n\n return value;\n }\n },\n toProcess: { $set: toProcess },\n matchingNodes: { $push: registerPartialSearchResultsAction.matchingNodes.map((n) => n.node.nodeId) }\n }\n });\n }\n\n case NgssmTreeActionType.abortTreeNodesSearch: {\n return updateNgssmTreeState(state, {\n treeNodesSearch: {\n searchStatus: { $set: SearchStatus.aborted },\n toProcess: { $set: [] }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport update from 'immutability-helper';\nimport { DataStatus } from 'ngssm-remote-data';\n\nimport { Reducer, State, Action } 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 parentFullPath:\n nodes[index].parentFullPath !== undefined\n ? `${nodes[index].parentFullPath}/${nodes[index].node.label}`\n : nodes[index].node.label\n })),\n ...nodes.slice(index + 1)\n ];\n }\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DataStatus } from 'ngssm-remote-data';\n\nimport { Reducer, State, Action } 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","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport { provideEffects, provideReducers } from 'ngssm-store';\n\nimport { TreeNodeLoadingEffect } from './effects/tree-node-loading.effect';\nimport { TreeNodesSearchingEffect } from './effects/tree-nodes-searching.effect';\nimport { TreeNodeExpandReducer } from './reducers/tree-node-expand.reducer';\nimport { TreeNodeSelectionReducer } from './reducers/tree-node-selection.reducer';\nimport { TreeNodesSearchReducer } from './reducers/tree-nodes-search.reducer';\nimport { TreeNodesReducer } from './reducers/tree-nodes.reducer';\nimport { TreesReducer } from './reducers/trees.reducer';\n\nexport const provideNgssmTree = (): EnvironmentProviders => {\n return makeEnvironmentProviders([\n provideReducers(TreeNodeExpandReducer, TreeNodeSelectionReducer, TreeNodesSearchReducer, TreeNodesReducer, TreesReducer),\n provideEffects(TreeNodeLoadingEffect, TreeNodesSearchingEffect)\n ]);\n};\n","/*\n * Public API Surface of ngssm-tree\n */\n\nexport * from './lib/ngssm-tree/public-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i2","i1","i4","i7","i8"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngssm-tree",
3
- "version": "21.1.1",
3
+ "version": "21.1.3",
4
4
  "description": "NgSsm - Tree implementation.",
5
5
  "author": "Lion Marc",
6
6
  "license": "MIT",