ngssm-remote-data 21.1.0 → 21.1.2

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.
@@ -58,10 +58,10 @@ class NgssmRemoteCallSetter {
58
58
  });
59
59
  return this;
60
60
  }
61
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmRemoteCallSetter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
62
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmRemoteCallSetter });
61
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: NgssmRemoteCallSetter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
62
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: NgssmRemoteCallSetter });
63
63
  }
64
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmRemoteCallSetter, decorators: [{
64
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: NgssmRemoteCallSetter, decorators: [{
65
65
  type: Injectable
66
66
  }] });
67
67
  const ngssmRemoteCallSetter = () => TestBed.inject(NgssmRemoteCallSetter);
@@ -113,10 +113,10 @@ class RemoteDataLoadingGuard {
113
113
  });
114
114
  return true;
115
115
  }
116
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RemoteDataLoadingGuard, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
117
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RemoteDataLoadingGuard, providedIn: 'root' });
116
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: RemoteDataLoadingGuard, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
117
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: RemoteDataLoadingGuard, providedIn: 'root' });
118
118
  }
119
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RemoteDataLoadingGuard, decorators: [{
119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: RemoteDataLoadingGuard, decorators: [{
120
120
  type: Injectable,
121
121
  args: [{
122
122
  providedIn: 'root'
@@ -131,11 +131,11 @@ const ngssmReloadRemoteData = (remoteDataKey, params = { forceReload: true }) =>
131
131
 
132
132
  const datePipe = new DatePipe('en-US');
133
133
  class NgssmRemoteDataReloadButtonComponent {
134
- tooltipMessage = signal('', ...(ngDevMode ? [{ debugName: "tooltipMessage" }] : []));
135
- disabled = signal(true, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
136
- inLoadingStatus = signal(false, ...(ngDevMode ? [{ debugName: "inLoadingStatus" }] : []));
137
- actionTypes = input([], ...(ngDevMode ? [{ debugName: "actionTypes" }] : []));
138
- remoteDataKeys = input([], ...(ngDevMode ? [{ debugName: "remoteDataKeys" }] : []));
134
+ tooltipMessage = signal('', ...(ngDevMode ? [{ debugName: "tooltipMessage" }] : /* istanbul ignore next */ []));
135
+ disabled = signal(true, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
136
+ inLoadingStatus = signal(false, ...(ngDevMode ? [{ debugName: "inLoadingStatus" }] : /* istanbul ignore next */ []));
137
+ actionTypes = input([], ...(ngDevMode ? [{ debugName: "actionTypes" }] : /* istanbul ignore next */ []));
138
+ remoteDataKeys = input([], ...(ngDevMode ? [{ debugName: "remoteDataKeys" }] : /* istanbul ignore next */ []));
139
139
  store = inject(Store);
140
140
  remoteDataState = createSignal((state) => selectRemoteDataState(state));
141
141
  constructor() {
@@ -164,10 +164,10 @@ class NgssmRemoteDataReloadButtonComponent {
164
164
  this.remoteDataKeys().forEach((key) => this.store.dispatchAction(new LoadRemoteDataAction(key, { forceReload: true, keepStoredGetterParams: true })));
165
165
  this.actionTypes().forEach((type) => this.store.dispatchActionType(type));
166
166
  }
167
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmRemoteDataReloadButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
168
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: NgssmRemoteDataReloadButtonComponent, isStandalone: true, selector: "ngssm-remote-data-reload-button", inputs: { actionTypes: { classPropertyName: "actionTypes", publicName: "actionTypes", isSignal: true, isRequired: false, transformFunction: null }, remoteDataKeys: { classPropertyName: "remoteDataKeys", publicName: "remoteDataKeys", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<button\n mat-icon-button\n color=\"primary\"\n (click)=\"reload()\"\n [matTooltip]=\"tooltipMessage()\"\n [disabled]=\"disabled() === true\"\n id=\"reloadButton\">\n @if (inLoadingStatus()) {\n <mat-spinner [diameter]=\"24\" id=\"loadingSpinner\"></mat-spinner>\n } @else {\n <mat-icon class=\"fa-solid fa-rotate-right\"></mat-icon>\n }\n</button>\n", dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
167
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: NgssmRemoteDataReloadButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
168
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: NgssmRemoteDataReloadButtonComponent, isStandalone: true, selector: "ngssm-remote-data-reload-button", inputs: { actionTypes: { classPropertyName: "actionTypes", publicName: "actionTypes", isSignal: true, isRequired: false, transformFunction: null }, remoteDataKeys: { classPropertyName: "remoteDataKeys", publicName: "remoteDataKeys", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<button\n mat-icon-button\n color=\"primary\"\n (click)=\"reload()\"\n [matTooltip]=\"tooltipMessage()\"\n [disabled]=\"disabled() === true\"\n id=\"reloadButton\">\n @if (inLoadingStatus()) {\n <mat-spinner [diameter]=\"24\" id=\"loadingSpinner\"></mat-spinner>\n } @else {\n <mat-icon class=\"fa-solid fa-rotate-right\"></mat-icon>\n }\n</button>\n", dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
169
169
  }
170
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmRemoteDataReloadButtonComponent, decorators: [{
170
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: NgssmRemoteDataReloadButtonComponent, decorators: [{
171
171
  type: Component,
172
172
  args: [{ selector: 'ngssm-remote-data-reload-button', imports: [MatIconModule, MatButtonModule, MatTooltipModule, MatProgressSpinnerModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n mat-icon-button\n color=\"primary\"\n (click)=\"reload()\"\n [matTooltip]=\"tooltipMessage()\"\n [disabled]=\"disabled() === true\"\n id=\"reloadButton\">\n @if (inLoadingStatus()) {\n <mat-spinner [diameter]=\"24\" id=\"loadingSpinner\"></mat-spinner>\n } @else {\n <mat-icon class=\"fa-solid fa-rotate-right\"></mat-icon>\n }\n</button>\n" }]
173
173
  }], ctorParameters: () => [], propDecorators: { actionTypes: [{ type: i0.Input, args: [{ isSignal: true, alias: "actionTypes", required: false }] }], remoteDataKeys: [{ type: i0.Input, args: [{ isSignal: true, alias: "remoteDataKeys", required: false }] }] } });
@@ -177,10 +177,10 @@ class NgssmCachesDisplayButtonComponent {
177
177
  displayCaches() {
178
178
  this.store.dispatchActionType(RemoteDataActionType.displayCaches);
179
179
  }
180
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmCachesDisplayButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
181
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.3", type: NgssmCachesDisplayButtonComponent, isStandalone: true, selector: "ngssm-caches-display-button", ngImport: i0, template: "<button mat-icon-button matTooltip=\"Display caches\" (click)=\"displayCaches()\">\n <mat-icon class=\"fa-solid fa-cloud-bolt\"></mat-icon>\n</button>\n", dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
180
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: NgssmCachesDisplayButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
181
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: NgssmCachesDisplayButtonComponent, isStandalone: true, selector: "ngssm-caches-display-button", ngImport: i0, template: "<button mat-icon-button matTooltip=\"Display caches\" (click)=\"displayCaches()\">\n <mat-icon class=\"fa-solid fa-cloud-bolt\"></mat-icon>\n</button>\n", dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
182
182
  }
183
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmCachesDisplayButtonComponent, decorators: [{
183
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: NgssmCachesDisplayButtonComponent, decorators: [{
184
184
  type: Component,
185
185
  args: [{ selector: 'ngssm-caches-display-button', imports: [MatButtonModule, MatIconModule, MatTooltipModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<button mat-icon-button matTooltip=\"Display caches\" (click)=\"displayCaches()\">\n <mat-icon class=\"fa-solid fa-cloud-bolt\"></mat-icon>\n</button>\n" }]
186
186
  }] });
@@ -201,10 +201,10 @@ class NgssmCachesComponent {
201
201
  reloadCache(cache) {
202
202
  this.store.dispatchAction(new LoadRemoteDataAction(cache.key, { forceReload: true, keepStoredGetterParams: true }));
203
203
  }
204
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmCachesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
205
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: NgssmCachesComponent, isStandalone: true, selector: "ngssm-caches", ngImport: i0, template: "<h1 mat-dialog-title>List of caches</h1>\n<mat-dialog-content class=\"flex-column-stretch fxFlex\">\n <mat-table [dataSource]=\"caches()\" class=\"fxFlex\">\n <ng-container matColumnDef=\"actions\">\n <mat-header-cell *matHeaderCellDef> </mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n <button\n mat-icon-button\n [disabled]=\"element.value.status === dataStatus.loading\"\n (click)=\"reloadCache(element)\"\n color=\"primary\"\n id=\"reload_{{ element.key }}\">\n <mat-icon class=\"fa-solid fa-rotate-right\"></mat-icon>\n </button>\n </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"key\">\n <mat-header-cell *matHeaderCellDef> Key </mat-header-cell>\n <mat-cell *matCellDef=\"let element\"> {{ element.key }} </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"status\">\n <mat-header-cell *matHeaderCellDef> Status </mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n @switch (element.value.status) {\n @case (dataStatus.none) {\n <mat-icon class=\"fa-solid fa-minus\"></mat-icon>\n }\n @case (dataStatus.loaded) {\n <mat-icon class=\"fa-solid fa-check\" color=\"primary\"></mat-icon>\n }\n @case (dataStatus.error) {\n <mat-icon class=\"fa-solid fa-xmark\" color=\"warn\"></mat-icon>\n }\n @case (dataStatus.notFound) {\n <mat-icon class=\"fa-solid fa-xmark\" color=\"warn\"></mat-icon>\n }\n @case (dataStatus.loading) {\n <mat-spinner [diameter]=\"20\"></mat-spinner>\n }\n }\n </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"timestamp\">\n <mat-header-cell *matHeaderCellDef> Timestamp </mat-header-cell>\n <mat-cell *matCellDef=\"let element\"> {{ element.value.timestamp }} </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"['actions', 'status', 'key', 'timestamp']; sticky: true\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: ['actions', 'status', 'key', 'timestamp']\"></mat-row>\n </mat-table>\n</mat-dialog-content>\n<mat-dialog-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button (click)=\"close()\" id=\"closeButton\">Close</button>\n</mat-dialog-actions>\n", styles: [":host{display:flex;flex-direction:column;min-width:800px;max-width:80vw;min-height:500px;max-height:80vh}:host .mat-column-actions{min-width:50px;max-width:50px;padding-left:0!important}:host .mat-column-status{min-width:60px;max-width:60px}\n"], dependencies: [{ kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.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: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i3$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i3$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i3$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i3$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i3$1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i3$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i3$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i3$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i3$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i3$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
204
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: NgssmCachesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
205
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: NgssmCachesComponent, isStandalone: true, selector: "ngssm-caches", ngImport: i0, template: "<h1 mat-dialog-title>List of caches</h1>\n<mat-dialog-content class=\"flex-column-stretch fxFlex\">\n <mat-table [dataSource]=\"caches()\" class=\"fxFlex\">\n <ng-container matColumnDef=\"actions\">\n <mat-header-cell *matHeaderCellDef> </mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n <button\n mat-icon-button\n [disabled]=\"element.value.status === dataStatus.loading\"\n (click)=\"reloadCache(element)\"\n color=\"primary\"\n id=\"reload_{{ element.key }}\">\n <mat-icon class=\"fa-solid fa-rotate-right\"></mat-icon>\n </button>\n </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"key\">\n <mat-header-cell *matHeaderCellDef> Key </mat-header-cell>\n <mat-cell *matCellDef=\"let element\"> {{ element.key }} </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"status\">\n <mat-header-cell *matHeaderCellDef> Status </mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n @switch (element.value.status) {\n @case (dataStatus.none) {\n <mat-icon class=\"fa-solid fa-minus\"></mat-icon>\n }\n @case (dataStatus.loaded) {\n <mat-icon class=\"fa-solid fa-check\" color=\"primary\"></mat-icon>\n }\n @case (dataStatus.error) {\n <mat-icon class=\"fa-solid fa-xmark\" color=\"warn\"></mat-icon>\n }\n @case (dataStatus.notFound) {\n <mat-icon class=\"fa-solid fa-xmark\" color=\"warn\"></mat-icon>\n }\n @case (dataStatus.loading) {\n <mat-spinner [diameter]=\"20\"></mat-spinner>\n }\n }\n </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"timestamp\">\n <mat-header-cell *matHeaderCellDef> Timestamp </mat-header-cell>\n <mat-cell *matCellDef=\"let element\"> {{ element.value.timestamp }} </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"['actions', 'status', 'key', 'timestamp']; sticky: true\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: ['actions', 'status', 'key', 'timestamp']\"></mat-row>\n </mat-table>\n</mat-dialog-content>\n<mat-dialog-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button (click)=\"close()\" id=\"closeButton\">Close</button>\n</mat-dialog-actions>\n", styles: [":host{display:flex;flex-direction:column;min-width:800px;max-width:80vw;min-height:500px;max-height:80vh}:host .mat-column-actions{min-width:50px;max-width:50px;padding-left:0!important}:host .mat-column-status{min-width:60px;max-width:60px}\n"], dependencies: [{ kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.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: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i3$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i3$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i3$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i3$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i3$1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i3$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i3$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i3$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i3$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i3$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
206
206
  }
207
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmCachesComponent, decorators: [{
207
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: NgssmCachesComponent, decorators: [{
208
208
  type: Component,
209
209
  args: [{ selector: 'ngssm-caches', imports: [MatDialogModule, MatButtonModule, MatTableModule, MatIconModule, MatProgressSpinnerModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<h1 mat-dialog-title>List of caches</h1>\n<mat-dialog-content class=\"flex-column-stretch fxFlex\">\n <mat-table [dataSource]=\"caches()\" class=\"fxFlex\">\n <ng-container matColumnDef=\"actions\">\n <mat-header-cell *matHeaderCellDef> </mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n <button\n mat-icon-button\n [disabled]=\"element.value.status === dataStatus.loading\"\n (click)=\"reloadCache(element)\"\n color=\"primary\"\n id=\"reload_{{ element.key }}\">\n <mat-icon class=\"fa-solid fa-rotate-right\"></mat-icon>\n </button>\n </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"key\">\n <mat-header-cell *matHeaderCellDef> Key </mat-header-cell>\n <mat-cell *matCellDef=\"let element\"> {{ element.key }} </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"status\">\n <mat-header-cell *matHeaderCellDef> Status </mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n @switch (element.value.status) {\n @case (dataStatus.none) {\n <mat-icon class=\"fa-solid fa-minus\"></mat-icon>\n }\n @case (dataStatus.loaded) {\n <mat-icon class=\"fa-solid fa-check\" color=\"primary\"></mat-icon>\n }\n @case (dataStatus.error) {\n <mat-icon class=\"fa-solid fa-xmark\" color=\"warn\"></mat-icon>\n }\n @case (dataStatus.notFound) {\n <mat-icon class=\"fa-solid fa-xmark\" color=\"warn\"></mat-icon>\n }\n @case (dataStatus.loading) {\n <mat-spinner [diameter]=\"20\"></mat-spinner>\n }\n }\n </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"timestamp\">\n <mat-header-cell *matHeaderCellDef> Timestamp </mat-header-cell>\n <mat-cell *matCellDef=\"let element\"> {{ element.value.timestamp }} </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"['actions', 'status', 'key', 'timestamp']; sticky: true\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: ['actions', 'status', 'key', 'timestamp']\"></mat-row>\n </mat-table>\n</mat-dialog-content>\n<mat-dialog-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button (click)=\"close()\" id=\"closeButton\">Close</button>\n</mat-dialog-actions>\n", styles: [":host{display:flex;flex-direction:column;min-width:800px;max-width:80vw;min-height:500px;max-height:80vh}:host .mat-column-actions{min-width:50px;max-width:50px;padding-left:0!important}:host .mat-column-status{min-width:60px;max-width:60px}\n"] }]
210
210
  }] });
@@ -228,10 +228,10 @@ class CachesDisplayEffect {
228
228
  }
229
229
  }
230
230
  }
231
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: CachesDisplayEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
232
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: CachesDisplayEffect });
231
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: CachesDisplayEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
232
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: CachesDisplayEffect });
233
233
  }
234
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: CachesDisplayEffect, decorators: [{
234
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: CachesDisplayEffect, decorators: [{
235
235
  type: Injectable
236
236
  }] });
237
237
 
@@ -271,10 +271,10 @@ class RemoteDataLoadingEffect {
271
271
  });
272
272
  });
273
273
  }
274
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RemoteDataLoadingEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
275
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RemoteDataLoadingEffect });
274
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: RemoteDataLoadingEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
275
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: RemoteDataLoadingEffect });
276
276
  }
277
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RemoteDataLoadingEffect, decorators: [{
277
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: RemoteDataLoadingEffect, decorators: [{
278
278
  type: Injectable
279
279
  }], ctorParameters: () => [] });
280
280
 
@@ -340,10 +340,10 @@ class RemoteDataReducer {
340
340
  }
341
341
  return state;
342
342
  }
343
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RemoteDataReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
344
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RemoteDataReducer });
343
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: RemoteDataReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
344
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: RemoteDataReducer });
345
345
  }
346
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RemoteDataReducer, decorators: [{
346
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: RemoteDataReducer, decorators: [{
347
347
  type: Injectable
348
348
  }], ctorParameters: () => [] });
349
349
 
@@ -355,10 +355,10 @@ class RemoteDataStateInitializer {
355
355
  const tempState = state;
356
356
  return (this.remoteDataProviders ?? []).reduce((s, provider) => updateRemoteDataState(s, { [provider.remoteDataKey]: { $set: { status: DataStatus.none } } }), tempState);
357
357
  }
358
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RemoteDataStateInitializer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
359
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RemoteDataStateInitializer });
358
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: RemoteDataStateInitializer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
359
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: RemoteDataStateInitializer });
360
360
  }
361
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RemoteDataStateInitializer, decorators: [{
361
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: RemoteDataStateInitializer, decorators: [{
362
362
  type: Injectable
363
363
  }] });
364
364
 
@@ -455,10 +455,10 @@ class NgssmRemoteCallStateInitializer {
455
455
  const tempState = state;
456
456
  return (this.remoteCallConfigs ?? []).reduce((s, config) => updateNgssmRemoteCallState(s, { remoteCalls: { [config.id]: { $set: { status: RemoteCallStatus.none } } } }), tempState);
457
457
  }
458
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmRemoteCallStateInitializer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
459
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmRemoteCallStateInitializer });
458
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: NgssmRemoteCallStateInitializer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
459
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: NgssmRemoteCallStateInitializer });
460
460
  }
461
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmRemoteCallStateInitializer, decorators: [{
461
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: NgssmRemoteCallStateInitializer, decorators: [{
462
462
  type: Injectable
463
463
  }] });
464
464
 
@@ -492,10 +492,10 @@ class RemoteCallReducer {
492
492
  });
493
493
  return output;
494
494
  }
495
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RemoteCallReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
496
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RemoteCallReducer });
495
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: RemoteCallReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
496
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: RemoteCallReducer });
497
497
  }
498
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RemoteCallReducer, decorators: [{
498
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: RemoteCallReducer, decorators: [{
499
499
  type: Injectable
500
500
  }], ctorParameters: () => [] });
501
501
 
@@ -528,10 +528,10 @@ class RemoteCallSetterReducer {
528
528
  }
529
529
  return state;
530
530
  }
531
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RemoteCallSetterReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
532
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RemoteCallSetterReducer });
531
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: RemoteCallSetterReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
532
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: RemoteCallSetterReducer });
533
533
  }
534
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RemoteCallSetterReducer, decorators: [{
534
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: RemoteCallSetterReducer, decorators: [{
535
535
  type: Injectable
536
536
  }] });
537
537
 
@@ -567,10 +567,10 @@ class RemoteCallResultProcessor {
567
567
  this.notifier.notifySuccess(message);
568
568
  this.injector.get(Store).dispatchAction(new SetRemoteCallAction(remoteCallId, { status: RemoteCallStatus.done }));
569
569
  }
570
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RemoteCallResultProcessor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
571
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RemoteCallResultProcessor, providedIn: 'root' });
570
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: RemoteCallResultProcessor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
571
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: RemoteCallResultProcessor, providedIn: 'root' });
572
572
  }
573
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RemoteCallResultProcessor, decorators: [{
573
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: RemoteCallResultProcessor, decorators: [{
574
574
  type: Injectable,
575
575
  args: [{
576
576
  providedIn: 'root'
@@ -595,9 +595,9 @@ const processRemoteCallError = (error, errorMessage, remoteCallId, actionDispatc
595
595
  };
596
596
 
597
597
  class NgssmRemoteCallErrorComponent {
598
- remoteCallId = input('', ...(ngDevMode ? [{ debugName: "remoteCallId" }] : []));
599
- errorContainerRendered = signal(false, ...(ngDevMode ? [{ debugName: "errorContainerRendered" }] : []));
600
- errorDescription = signal('', ...(ngDevMode ? [{ debugName: "errorDescription" }] : []));
598
+ remoteCallId = input('', ...(ngDevMode ? [{ debugName: "remoteCallId" }] : /* istanbul ignore next */ []));
599
+ errorContainerRendered = signal(false, ...(ngDevMode ? [{ debugName: "errorContainerRendered" }] : /* istanbul ignore next */ []));
600
+ errorDescription = signal('', ...(ngDevMode ? [{ debugName: "errorDescription" }] : /* istanbul ignore next */ []));
601
601
  remoteCalls = createSignal((state) => selectNgssmRemoteCallState(state).remoteCalls);
602
602
  constructor() {
603
603
  effect(() => {
@@ -616,10 +616,10 @@ class NgssmRemoteCallErrorComponent {
616
616
  this.errorDescription.set(description);
617
617
  });
618
618
  }
619
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmRemoteCallErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
620
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: NgssmRemoteCallErrorComponent, isStandalone: true, selector: "ngssm-remote-call-error", inputs: { remoteCallId: { classPropertyName: "remoteCallId", publicName: "remoteCallId", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "ngssm-remote-call-error" }, ngImport: i0, template: "@if (errorContainerRendered()) {\n <div class=\"ngssm-remote-call-error-container\">\n {{ errorDescription() }}\n\n <button mat-icon-button color=\"warn\" class=\"ngssm-remote-call-error-close-button\" (click)=\"errorContainerRendered.set(false)\">\n <mat-icon class=\"fa-solid fa-square-xmark\"></mat-icon>\n </button>\n </div>\n}\n", dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
619
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: NgssmRemoteCallErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
620
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: NgssmRemoteCallErrorComponent, isStandalone: true, selector: "ngssm-remote-call-error", inputs: { remoteCallId: { classPropertyName: "remoteCallId", publicName: "remoteCallId", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "ngssm-remote-call-error" }, ngImport: i0, template: "@if (errorContainerRendered()) {\n <div class=\"ngssm-remote-call-error-container\">\n {{ errorDescription() }}\n\n <button mat-icon-button color=\"warn\" class=\"ngssm-remote-call-error-close-button\" (click)=\"errorContainerRendered.set(false)\">\n <mat-icon class=\"fa-solid fa-square-xmark\"></mat-icon>\n </button>\n </div>\n}\n", dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
621
621
  }
622
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmRemoteCallErrorComponent, decorators: [{
622
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: NgssmRemoteCallErrorComponent, decorators: [{
623
623
  type: Component,
624
624
  args: [{ selector: 'ngssm-remote-call-error', imports: [MatButtonModule, MatIconModule], changeDetection: ChangeDetectionStrategy.OnPush, host: {
625
625
  class: 'ngssm-remote-call-error'
@@ -1 +1 @@
1
- {"version":3,"file":"ngssm-remote-data.mjs","sources":["../../../projects/ngssm-remote-data/src/lib/remote-data/model/data-status.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/model/remote-data.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/model/remote-data-provider.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/state/remote-data.state.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/state/selectors.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/actions/remote-data-action-type.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/actions/load-remote-data.action.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/actions/register-loaded-remote-data.action.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/guards/remote-data-loading.guard.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/components/ngssm-remote-data-reload-button/ngssm-remote-data-reload-button.component.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/components/ngssm-remote-data-reload-button/ngssm-remote-data-reload-button.component.html","../../../projects/ngssm-remote-data/src/lib/remote-data/components/ngssm-caches-display-button/ngssm-caches-display-button.component.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/components/ngssm-caches-display-button/ngssm-caches-display-button.component.html","../../../projects/ngssm-remote-data/src/lib/remote-data/components/ngssm-caches/ngssm-caches.component.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/components/ngssm-caches/ngssm-caches.component.html","../../../projects/ngssm-remote-data/src/lib/remote-data/effects/caches-display.effect.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/effects/remote-data-loading.effect.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/reducers/remote-data.reducer.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/remote-data-state-initializer.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/provide-ngssm-remote-data.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/public-api.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-call/register-remote-call.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-call/remote-call.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-call/ngssm-remote-call.state.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-call/ngssm-remote-call-state-initializer.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-call/reducers/remote-call.reducer.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-call/actions.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-call/reducers/remote-call-setter.reducer.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-call/provide-ngssm-remote-call.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-call/selectors.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-call/remote-call-result-processor.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-call/ngssm-remote-call-error/ngssm-remote-call-error.component.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-call/ngssm-remote-call-error/ngssm-remote-call-error.component.html","../../../projects/ngssm-remote-data/src/public-api.ts","../../../projects/ngssm-remote-data/src/ngssm-remote-data.ts"],"sourcesContent":["export enum DataStatus {\n none = 'None',\n loading = 'Loading',\n loaded = 'Loaded',\n notFound = 'NotFound',\n error = 'Error'\n}\n","import { DataStatus } from './data-status';\nimport { RemoteCallError } from './remote-call-error';\nimport { RemoteDataGetterParams } from './remote-data-getter-params';\n\nexport interface RemoteData<TData = unknown, TGetterParams = unknown> {\n status: DataStatus;\n data?: TData;\n timestamp?: Date;\n message?: string;\n error?: RemoteCallError;\n getterParams?: RemoteDataGetterParams<TGetterParams>;\n}\n\nexport const getDefaultRemoteData = <T>(defaultValue?: T, defaultStatus: DataStatus = DataStatus.none): RemoteData<T> => ({\n status: defaultStatus,\n data: defaultValue\n});\n","import { EnvironmentProviders, InjectionToken, Type, makeEnvironmentProviders } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { RemoteDataGetterParams } from './remote-data-getter-params';\n\nexport interface RemoteDataProvider<TData = unknown, TValue = unknown> {\n readonly remoteDataKey: string;\n readonly cacheDurationInSeconds?: number;\n\n get(params?: RemoteDataGetterParams<TValue>): Observable<TData>;\n}\n\nexport const NGSSM_REMOTE_DATA_PROVIDER = new InjectionToken<RemoteDataProvider>('NGSSM_REMOTE_DATA_PROVIDER');\n\nexport const provideRemoteDataProviders = (...providers: Type<RemoteDataProvider>[]): EnvironmentProviders => {\n return makeEnvironmentProviders(providers.map((provider) => ({ provide: NGSSM_REMOTE_DATA_PROVIDER, useClass: provider, multi: true })));\n};\n\nexport type RemoteDataLoadingFunc<TData = unknown, TValue = unknown> = (params?: RemoteDataGetterParams<TValue>) => Observable<TData>;\n\nexport const provideRemoteDataFunc = <TData = unknown, TValue = unknown>(\n remoteDataKey: string,\n remoteDataLoadingFunc: RemoteDataLoadingFunc<TData, TValue>,\n cacheDurationInSeconds?: number\n): EnvironmentProviders => {\n return makeEnvironmentProviders([\n {\n provide: NGSSM_REMOTE_DATA_PROVIDER,\n useFactory: () => {\n const provider: RemoteDataProvider<TData, TValue> = {\n remoteDataKey,\n cacheDurationInSeconds,\n get: remoteDataLoadingFunc\n };\n return provider;\n },\n multi: true\n }\n ]);\n};\n","import update, { Spec } from 'immutability-helper';\n\nimport { NgSsmFeatureState, State } from 'ngssm-store';\n\nimport { RemoteData } from '../model';\n\nexport const selectRemoteDataState = (state: State): RemoteDataState =>\n state[RemoteDataStateSpecification.featureStateKey] as RemoteDataState;\n\nexport const updateRemoteDataState = (state: State, command: Spec<RemoteDataState, never>): State =>\n update(state, {\n [RemoteDataStateSpecification.featureStateKey]: command\n });\n\nexport type RemoteDataState = Record<string, RemoteData<unknown>>;\n\n@NgSsmFeatureState({\n featureStateKey: RemoteDataStateSpecification.featureStateKey,\n initialState: RemoteDataStateSpecification.initialState\n})\nexport class RemoteDataStateSpecification {\n public static readonly featureStateKey = 'remote-data-state';\n public static readonly initialState: RemoteDataState = {};\n}\n","import { State } from 'ngssm-store';\n\nimport { selectRemoteDataState } from './remote-data.state';\nimport { RemoteData } from '../model';\n\nexport const selectRemoteData = <TData = unknown>(state: State, remoteDataKey: string): RemoteData<TData> | undefined =>\n selectRemoteDataState(state)[remoteDataKey] as RemoteData<TData>;\n","export enum RemoteDataActionType {\n loadRemoteData = '[RemoteDataActionType] loadRemoteData',\n registerLoadedRemoteData = '[RemoteDataActionType] registerLoadedRemoteData',\n displayCaches = '[RemoteDataActionType] displayCaches',\n closeCachesComponent = '[RemoteDataActionType] closeCachesComponent'\n}\n","import { Action } from 'ngssm-store';\n\nimport { ReloadParams } from '../model';\nimport { RemoteDataActionType } from './remote-data-action-type';\n\nexport class LoadRemoteDataAction<TValue = unknown> implements Action {\n public readonly type: string = RemoteDataActionType.loadRemoteData;\n\n constructor(\n public readonly remoteDataKey: string,\n public readonly params?: ReloadParams<TValue>\n ) {}\n}\n","import { Action } from 'ngssm-store';\n\nimport { DataStatus, RemoteCallError } from '../model';\nimport { RemoteDataActionType } from './remote-data-action-type';\n\nexport class RegisterLoadedRemoteDataAction<T = unknown> implements Action {\n public readonly type: string = RemoteDataActionType.registerLoadedRemoteData;\n\n constructor(\n public readonly remoteDataKey: string,\n public readonly status: DataStatus,\n public readonly data: T,\n public readonly message?: string,\n public readonly remoteCallError?: RemoteCallError\n ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport { Store } from 'ngssm-store';\n\nimport { LoadRemoteDataAction } from '../actions';\nimport { ReloadParams } from '../model';\n\nexport interface RemoteDataLoadingGuardItem {\n remoteDataKey: string;\n forceReload?: boolean;\n}\n\nexport interface RemoteDataLoadingGuardParameters {\n remoteDataItems: RemoteDataLoadingGuardItem[];\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RemoteDataLoadingGuard {\n private readonly store = inject(Store);\n\n public canActivate(route: ActivatedRouteSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n const parameters = route.data as RemoteDataLoadingGuardParameters;\n (parameters?.remoteDataItems ?? []).forEach((item) => {\n this.store.dispatchAction(new LoadRemoteDataAction(item.remoteDataKey, { forceReload: item.forceReload === true }));\n });\n\n return true;\n }\n}\n\nexport const ngssmReloadRemoteData = <TData = unknown>(\n remoteDataKey: string,\n params: ReloadParams<TData> = { forceReload: true }\n): (() => boolean) => {\n return () => {\n inject(Store).dispatchAction(new LoadRemoteDataAction(remoteDataKey, params));\n return true;\n };\n};\n","import { Component, ChangeDetectionStrategy, signal, input, inject, effect } from '@angular/core';\nimport { DatePipe } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { createSignal, Store } from 'ngssm-store';\n\nimport { LoadRemoteDataAction } from '../../actions';\nimport { selectRemoteDataState } from '../../state';\nimport { DataStatus } from '../../model';\n\nconst datePipe = new DatePipe('en-US');\n\n@Component({\n selector: 'ngssm-remote-data-reload-button',\n imports: [MatIconModule, MatButtonModule, MatTooltipModule, MatProgressSpinnerModule],\n templateUrl: './ngssm-remote-data-reload-button.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmRemoteDataReloadButtonComponent {\n public readonly tooltipMessage = signal<string>('');\n public readonly disabled = signal<boolean>(true);\n public readonly inLoadingStatus = signal<boolean>(false);\n\n public actionTypes = input<string[]>([]);\n public remoteDataKeys = input<string[]>([]);\n\n private readonly store = inject(Store);\n private readonly remoteDataState = createSignal((state) => selectRemoteDataState(state));\n\n constructor() {\n effect(() => {\n const remoteDataState = this.remoteDataState();\n const keys = this.remoteDataKeys();\n\n this.inLoadingStatus.set(keys.findIndex((v) => remoteDataState[v]?.status === DataStatus.loading) !== -1);\n this.disabled.set(this.inLoadingStatus() === true || keys.findIndex((v) => !!remoteDataState[v]) === -1);\n let timestamp: Date | undefined;\n keys.forEach((key) => {\n const keyTimestamp = remoteDataState[key]?.timestamp;\n if (keyTimestamp) {\n if (!timestamp || timestamp.getTime() > keyTimestamp.getTime()) {\n timestamp = keyTimestamp;\n }\n }\n });\n\n let tooltiMessage = 'Reload data.';\n if (timestamp) {\n tooltiMessage = [tooltiMessage, `Loaded at ${datePipe.transform(timestamp, 'mediumTime')}`].join('\\n');\n }\n this.tooltipMessage.set(tooltiMessage);\n });\n }\n\n public reload(): void {\n this.remoteDataKeys().forEach((key) =>\n this.store.dispatchAction(new LoadRemoteDataAction(key, { forceReload: true, keepStoredGetterParams: true }))\n );\n this.actionTypes().forEach((type) => this.store.dispatchActionType(type));\n }\n}\n","<button\n mat-icon-button\n color=\"primary\"\n (click)=\"reload()\"\n [matTooltip]=\"tooltipMessage()\"\n [disabled]=\"disabled() === true\"\n id=\"reloadButton\">\n @if (inLoadingStatus()) {\n <mat-spinner [diameter]=\"24\" id=\"loadingSpinner\"></mat-spinner>\n } @else {\n <mat-icon class=\"fa-solid fa-rotate-right\"></mat-icon>\n }\n</button>\n","import { Component, ChangeDetectionStrategy, inject } from '@angular/core';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { Store } from 'ngssm-store';\n\nimport { RemoteDataActionType } from '../../actions';\n\n@Component({\n selector: 'ngssm-caches-display-button',\n imports: [MatButtonModule, MatIconModule, MatTooltipModule],\n templateUrl: './ngssm-caches-display-button.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmCachesDisplayButtonComponent {\n private readonly store = inject(Store);\n\n public displayCaches(): void {\n this.store.dispatchActionType(RemoteDataActionType.displayCaches);\n }\n}\n","<button mat-icon-button matTooltip=\"Display caches\" (click)=\"displayCaches()\">\n <mat-icon class=\"fa-solid fa-cloud-bolt\"></mat-icon>\n</button>\n","import { Component, ChangeDetectionStrategy, inject } from '@angular/core';\n\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { createSignal, Store } from 'ngssm-store';\n\nimport { RemoteDataActionType, LoadRemoteDataAction } from '../../actions';\nimport { DataStatus, RemoteData } from '../../model';\nimport { selectRemoteDataState } from '../../state';\n\ninterface Cache {\n key: string;\n value: RemoteData;\n}\n\n@Component({\n selector: 'ngssm-caches',\n imports: [MatDialogModule, MatButtonModule, MatTableModule, MatIconModule, MatProgressSpinnerModule],\n templateUrl: './ngssm-caches.component.html',\n styleUrls: ['./ngssm-caches.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmCachesComponent {\n public readonly caches = createSignal<Cache[]>((state) => {\n const remoteDataState = selectRemoteDataState(state);\n return Object.keys(remoteDataState).map((key) => ({\n key,\n value: remoteDataState[key]\n }));\n });\n\n public readonly dataStatus = DataStatus;\n\n private readonly store = inject(Store);\n\n public close(): void {\n this.store.dispatchActionType(RemoteDataActionType.closeCachesComponent);\n }\n\n public reloadCache(cache: Cache): void {\n this.store.dispatchAction(new LoadRemoteDataAction(cache.key, { forceReload: true, keepStoredGetterParams: true }));\n }\n}\n","<h1 mat-dialog-title>List of caches</h1>\n<mat-dialog-content class=\"flex-column-stretch fxFlex\">\n <mat-table [dataSource]=\"caches()\" class=\"fxFlex\">\n <ng-container matColumnDef=\"actions\">\n <mat-header-cell *matHeaderCellDef> </mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n <button\n mat-icon-button\n [disabled]=\"element.value.status === dataStatus.loading\"\n (click)=\"reloadCache(element)\"\n color=\"primary\"\n id=\"reload_{{ element.key }}\">\n <mat-icon class=\"fa-solid fa-rotate-right\"></mat-icon>\n </button>\n </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"key\">\n <mat-header-cell *matHeaderCellDef> Key </mat-header-cell>\n <mat-cell *matCellDef=\"let element\"> {{ element.key }} </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"status\">\n <mat-header-cell *matHeaderCellDef> Status </mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n @switch (element.value.status) {\n @case (dataStatus.none) {\n <mat-icon class=\"fa-solid fa-minus\"></mat-icon>\n }\n @case (dataStatus.loaded) {\n <mat-icon class=\"fa-solid fa-check\" color=\"primary\"></mat-icon>\n }\n @case (dataStatus.error) {\n <mat-icon class=\"fa-solid fa-xmark\" color=\"warn\"></mat-icon>\n }\n @case (dataStatus.notFound) {\n <mat-icon class=\"fa-solid fa-xmark\" color=\"warn\"></mat-icon>\n }\n @case (dataStatus.loading) {\n <mat-spinner [diameter]=\"20\"></mat-spinner>\n }\n }\n </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"timestamp\">\n <mat-header-cell *matHeaderCellDef> Timestamp </mat-header-cell>\n <mat-cell *matCellDef=\"let element\"> {{ element.value.timestamp }} </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"['actions', 'status', 'key', 'timestamp']; sticky: true\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: ['actions', 'status', 'key', 'timestamp']\"></mat-row>\n </mat-table>\n</mat-dialog-content>\n<mat-dialog-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button (click)=\"close()\" id=\"closeButton\">Close</button>\n</mat-dialog-actions>\n","import { Injectable, inject } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\n\nimport { Effect, State, Action, ActionDispatcher } from 'ngssm-store';\nimport { RemoteDataActionType } from '../actions';\nimport { NgssmCachesComponent } from '../components';\n\n@Injectable()\nexport class CachesDisplayEffect implements Effect {\n public readonly processedActions: string[] = [RemoteDataActionType.displayCaches, RemoteDataActionType.closeCachesComponent];\n\n private readonly matDialog = inject(MatDialog);\n\n private dialog: MatDialogRef<NgssmCachesComponent> | undefined;\n\n public processAction(actiondispatcher: ActionDispatcher, state: State, action: Action): void {\n switch (action.type) {\n case RemoteDataActionType.displayCaches: {\n this.dialog = this.matDialog.open(NgssmCachesComponent, {\n disableClose: true\n });\n\n break;\n }\n\n case RemoteDataActionType.closeCachesComponent: {\n this.dialog?.close();\n this.dialog = undefined;\n\n break;\n }\n }\n }\n}\n","import { EnvironmentInjector, Injectable, runInInjectionContext, inject } from '@angular/core';\n\nimport { Effect, State, Action, ActionDispatcher } from 'ngssm-store';\nimport { NgssmNotifierService } from 'ngssm-toolkit';\n\nimport { LoadRemoteDataAction, RegisterLoadedRemoteDataAction, RemoteDataActionType } from '../actions';\nimport { DataStatus, RemoteDataProvider, NGSSM_REMOTE_DATA_PROVIDER } from '../model';\nimport { selectRemoteDataState } from '../state';\n\n@Injectable()\nexport class RemoteDataLoadingEffect implements Effect {\n public readonly processedActions: string[] = [RemoteDataActionType.loadRemoteData];\n\n private readonly remoteDataProviders: RemoteDataProvider[] | null = inject(NGSSM_REMOTE_DATA_PROVIDER, {\n optional: true\n }) as unknown as RemoteDataProvider[];\n private readonly notifierService = inject(NgssmNotifierService);\n private readonly injector = inject(EnvironmentInjector);\n\n private readonly remoteDataProvidersPerKey: Map<string, RemoteDataProvider>;\n\n constructor() {\n this.remoteDataProvidersPerKey = new Map<string, RemoteDataProvider>((this.remoteDataProviders ?? []).map((r) => [r.remoteDataKey, r]));\n }\n\n public processAction(actiondispatcher: ActionDispatcher, state: State, action: Action): void {\n const loadRemoteDataAction = action as LoadRemoteDataAction;\n const item = selectRemoteDataState(state)[loadRemoteDataAction.remoteDataKey];\n const provider = this.remoteDataProvidersPerKey.get(loadRemoteDataAction.remoteDataKey);\n\n if (!item || !provider || item.status !== DataStatus.loading) {\n return;\n }\n\n runInInjectionContext(this.injector, () => {\n provider.get(item.getterParams).subscribe({\n next: (value) => {\n actiondispatcher.dispatchAction(new RegisterLoadedRemoteDataAction(loadRemoteDataAction.remoteDataKey, DataStatus.loaded, value));\n if (item.getterParams?.callbackAction) {\n actiondispatcher.dispatchActionType(item.getterParams.callbackAction);\n }\n },\n error: (error) => {\n console.error(`Unable to load data for '${loadRemoteDataAction.remoteDataKey}'`, error);\n if (item.getterParams?.errorNotificationMessage) {\n this.notifierService.notifyError(item.getterParams.errorNotificationMessage(error?.error));\n }\n\n actiondispatcher.dispatchAction(\n new RegisterLoadedRemoteDataAction(loadRemoteDataAction.remoteDataKey, DataStatus.error, undefined, error?.error)\n );\n }\n });\n });\n }\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { LoadRemoteDataAction, RegisterLoadedRemoteDataAction, RemoteDataActionType } from '../actions';\nimport { DataStatus, RemoteDataProvider, NGSSM_REMOTE_DATA_PROVIDER } from '../model';\nimport { selectRemoteDataState, updateRemoteDataState } from '../state';\n\n@Injectable()\nexport class RemoteDataReducer implements Reducer {\n public readonly processedActions: string[] = [RemoteDataActionType.loadRemoteData, RemoteDataActionType.registerLoadedRemoteData];\n\n private readonly remoteDataProviders: RemoteDataProvider[] | null = inject(NGSSM_REMOTE_DATA_PROVIDER, {\n optional: true\n }) as unknown as RemoteDataProvider[];\n\n private readonly remoteDataProvidersPerKey: Map<string, RemoteDataProvider>;\n\n constructor() {\n this.remoteDataProvidersPerKey = new Map<string, RemoteDataProvider>((this.remoteDataProviders ?? []).map((r) => [r.remoteDataKey, r]));\n }\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case RemoteDataActionType.loadRemoteData: {\n const loadRemoteDataAction = action as LoadRemoteDataAction;\n const item = selectRemoteDataState(state)[loadRemoteDataAction.remoteDataKey];\n if (!item) {\n return state;\n }\n\n const provider = this.remoteDataProvidersPerKey.get(loadRemoteDataAction.remoteDataKey);\n if (!provider) {\n return state;\n }\n\n if (\n !provider.cacheDurationInSeconds ||\n loadRemoteDataAction.params?.forceReload === true ||\n item.status === DataStatus.none ||\n item.status === DataStatus.error ||\n item.status === DataStatus.notFound ||\n !item.timestamp ||\n new Date().getTime() - item.timestamp.getTime() >= 1000 * provider.cacheDurationInSeconds\n ) {\n return updateRemoteDataState(state, {\n [loadRemoteDataAction.remoteDataKey]: {\n status: { $set: DataStatus.loading },\n getterParams: {\n $apply: (value) => {\n if (!loadRemoteDataAction.params || loadRemoteDataAction.params.keepStoredGetterParams !== true) {\n return loadRemoteDataAction.params?.params;\n }\n\n return value;\n }\n }\n }\n });\n }\n\n break;\n }\n\n case RemoteDataActionType.registerLoadedRemoteData: {\n const registerLoadedRemoteDataAction = action as RegisterLoadedRemoteDataAction;\n if (this.remoteDataProvidersPerKey.has(registerLoadedRemoteDataAction.remoteDataKey)) {\n return updateRemoteDataState(state, {\n [registerLoadedRemoteDataAction.remoteDataKey]: {\n status: { $set: registerLoadedRemoteDataAction.status },\n data: { $set: registerLoadedRemoteDataAction.data },\n timestamp: { $set: new Date() },\n message: { $set: registerLoadedRemoteDataAction.message },\n error: { $set: registerLoadedRemoteDataAction.remoteCallError }\n }\n });\n }\n\n break;\n }\n }\n\n return state;\n }\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport { State, StateInitializer } from 'ngssm-store';\n\nimport { DataStatus, RemoteDataProvider, NGSSM_REMOTE_DATA_PROVIDER } from './model';\nimport { updateRemoteDataState } from './state';\n\n@Injectable()\nexport class RemoteDataStateInitializer implements StateInitializer {\n private readonly remoteDataProviders: RemoteDataProvider[] | null = inject(NGSSM_REMOTE_DATA_PROVIDER, {\n optional: true\n }) as unknown as RemoteDataProvider[];\n\n public initializeState(state: State): State {\n const tempState = state;\n return (this.remoteDataProviders ?? []).reduce(\n (s, provider) => updateRemoteDataState(s, { [provider.remoteDataKey]: { $set: { status: DataStatus.none } } }),\n tempState\n );\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport { NGSSM_STATE_INITIALIZER, provideEffects, provideReducer } from 'ngssm-store';\n\nimport { CachesDisplayEffect, RemoteDataLoadingEffect } from './effects';\nimport { RemoteDataReducer } from './reducers/remote-data.reducer';\nimport { RemoteDataStateInitializer } from './remote-data-state-initializer';\n\nexport const provideNgssmRemoteData = (): EnvironmentProviders => {\n return makeEnvironmentProviders([\n provideReducer(RemoteDataReducer),\n provideEffects(CachesDisplayEffect, RemoteDataLoadingEffect),\n { provide: NGSSM_STATE_INITIALIZER, useClass: RemoteDataStateInitializer, multi: true }\n ]);\n};\n","/*\n * Public API Surface of ngssm-remote-data\n */\n\nexport * from './model';\nexport * from './state';\nexport * from './actions';\nexport * from './guards';\nexport * from './components';\nexport * from './provide-ngssm-remote-data';\n","import { InjectionToken, Provider } from '@angular/core';\n\nimport { Action } from 'ngssm-store';\n\nimport { RemoteCall } from './remote-call';\n\n/**\n * Represents an action that encapsulates the result of a remote call.\n *\n * This action is typically dispatched when a remote call completes,\n * carrying both the action type and the associated remote call data.\n *\n * @remarks\n * Implements the `Action` interface.\n *\n * @param type - The type of the action.\n * @param remoteCall - The remote call instance containing the result details.\n */\nexport class NgssmRemoteCallResultAction implements Action {\n constructor(\n public readonly type: string,\n public readonly remoteCall: RemoteCall\n ) {}\n}\n\n// Configuration for a remote call, including its identifier and associated action types.\nexport interface RemoteCallConfig {\n id: string; // Unique identifier for the remote call\n triggeredActionTypes: string[]; // Action types that trigger the remote call\n resultActionTypes: string[]; // Action derived from NgssmRemoteCallResultAction that will notify end of call\n}\n\n/**\n * Injection token for providing NGSSM remote call configuration.\n * Used to register and inject RemoteCallConfig objects in Angular's dependency injection system.\n */\nexport const NGSSM_REMOTE_CALL_CONFIG = new InjectionToken<RemoteCallConfig>('NGSSM_REMOTE_CALL_CONFIG');\n\n/**\n * Provides the configuration for NGSSM remote calls as an Angular provider.\n *\n * @param config - The remote call configuration object to be provided.\n * @returns An Angular provider object that supplies the given configuration for NGSSM remote calls.\n *\n * @remarks\n * This function is intended to be used in Angular module providers to register\n * multiple remote call configurations using the `multi: true` option.\n */\nexport const provideNgssmRemoteCallConfig = (config: RemoteCallConfig): Provider => ({\n provide: NGSSM_REMOTE_CALL_CONFIG,\n useValue: config,\n multi: true\n});\n","import { HttpErrorResponse } from '@angular/common/http';\n\n// Represents the possible statuses of a remote call.\nexport enum RemoteCallStatus {\n none = 'None', // No call has been made yet\n inProgress = 'In progress', // The remote call is currently in progress\n done = 'Done', // The remote call completed successfully\n ko = 'Ko' // The remote call failed\n}\n\n/**\n * Describes the state and result of a remote call, including error information if applicable.\n *\n * Note that the property error is only here to ensure compatibility with previous versions. It will be removed in a future release.\n * Only the processRemoteCallError helper sets this property.\n * The service RemoteCallResultProcessor which must be used instead of the helper does not set this property.\n */\nexport interface RemoteCall<TErrorType = unknown> {\n status: RemoteCallStatus; // The current status of the remote call\n httpErrorResponse?: HttpErrorResponse; // Optional HTTP error response if the call failed\n message?: string; // Optional message describing the result or error\n error?: TErrorType; // Error property of HttpErrorResponse => to avoid too many impacts on code using this.\n}\n\n/**\n * Returns a default RemoteCall object with the specified status (defaults to 'none').\n * @param status The status to set for the remote call.\n * @returns A RemoteCall object with the given status.\n */\nexport const getDefaultRemoteCall = (status: RemoteCallStatus = RemoteCallStatus.none): RemoteCall => ({ status });\n","import update, { Spec } from 'immutability-helper';\n\nimport { NgSsmFeatureState, State } from 'ngssm-store';\n\nimport { RemoteCall } from './remote-call';\n\nexport const selectNgssmRemoteCallState = (state: State): NgssmRemoteCallState =>\n state[NgssmRemoteCallStateSpecification.featureStateKey] as NgssmRemoteCallState;\n\nexport const updateNgssmRemoteCallState = (state: State, command: Spec<NgssmRemoteCallState, never>): State =>\n update(state, {\n [NgssmRemoteCallStateSpecification.featureStateKey]: command\n });\n\nexport interface NgssmRemoteCallState {\n remoteCalls: Record<string, RemoteCall>;\n}\n\n@NgSsmFeatureState({\n featureStateKey: NgssmRemoteCallStateSpecification.featureStateKey,\n initialState: NgssmRemoteCallStateSpecification.initialState\n})\nexport class NgssmRemoteCallStateSpecification {\n public static readonly featureStateKey = 'ngssm-remote-call-state';\n public static readonly initialState: NgssmRemoteCallState = {\n remoteCalls: {}\n };\n}\n","import { inject, Injectable } from '@angular/core';\n\nimport { State, StateInitializer } from 'ngssm-store';\n\nimport { NGSSM_REMOTE_CALL_CONFIG, RemoteCallConfig } from './register-remote-call';\nimport { RemoteCallStatus } from './remote-call';\nimport { updateNgssmRemoteCallState } from './ngssm-remote-call.state';\n\n@Injectable()\nexport class NgssmRemoteCallStateInitializer implements StateInitializer {\n private readonly remoteCallConfigs: RemoteCallConfig[] | null = inject(NGSSM_REMOTE_CALL_CONFIG, {\n optional: true\n }) as unknown as RemoteCallConfig[];\n\n public initializeState(state: State): State {\n const tempState = state;\n return (this.remoteCallConfigs ?? []).reduce(\n (s, config) => updateNgssmRemoteCallState(s, { remoteCalls: { [config.id]: { $set: { status: RemoteCallStatus.none } } } }),\n tempState\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { NGSSM_REMOTE_CALL_CONFIG, NgssmRemoteCallResultAction, RemoteCallConfig } from '../register-remote-call';\nimport { getDefaultRemoteCall, RemoteCallStatus } from '../remote-call';\nimport { updateNgssmRemoteCallState } from '../ngssm-remote-call.state';\n\n@Injectable()\nexport class RemoteCallReducer implements Reducer {\n public readonly processedActions: string[] = [];\n\n private readonly remoteCallConfigs: RemoteCallConfig[] | null = inject(NGSSM_REMOTE_CALL_CONFIG, {\n optional: true\n }) as unknown as RemoteCallConfig[];\n\n constructor() {\n (this.remoteCallConfigs ?? []).forEach((c) => this.processedActions.push(...[...c.triggeredActionTypes, ...c.resultActionTypes]));\n }\n\n public updateState(state: State, action: Action): State {\n const configs = (this.remoteCallConfigs ?? []).filter(\n (c) => c.triggeredActionTypes.includes(action.type) || c.resultActionTypes.includes(action.type)\n );\n let output = state;\n configs.forEach((config) => {\n if (config.triggeredActionTypes.includes(action.type)) {\n output = updateNgssmRemoteCallState(output, {\n remoteCalls: {\n [config.id]: { $set: getDefaultRemoteCall(RemoteCallStatus.inProgress) }\n }\n });\n } else {\n const ngssmRemoteCallResultAction = action as NgssmRemoteCallResultAction;\n output = updateNgssmRemoteCallState(output, {\n remoteCalls: {\n [config.id]: { $set: ngssmRemoteCallResultAction.remoteCall }\n }\n });\n }\n });\n\n return output;\n }\n}\n","import { Action } from 'ngssm-store';\n\nimport { RemoteCall } from './remote-call';\n\nexport enum NgssmRemoteCallActionType {\n setRemoteCall = '[NgssmRemoteCallActionType] setRemoteCall'\n}\n\nexport class SetRemoteCallAction implements Action {\n public readonly type: string = NgssmRemoteCallActionType.setRemoteCall;\n\n constructor(\n public readonly remoteCallId: string,\n public readonly remoteCall: RemoteCall\n ) {}\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { NgssmRemoteCallActionType, SetRemoteCallAction } from '../actions';\nimport { updateNgssmRemoteCallState } from '../ngssm-remote-call.state';\n\n@Injectable()\nexport class RemoteCallSetterReducer implements Reducer {\n public readonly processedActions: string[] = [NgssmRemoteCallActionType.setRemoteCall];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmRemoteCallActionType.setRemoteCall: {\n const setRemoteCallAction = action as SetRemoteCallAction;\n return updateNgssmRemoteCallState(state, {\n remoteCalls: {\n [setRemoteCallAction.remoteCallId]: { $set: setRemoteCallAction.remoteCall }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport { NGSSM_STATE_INITIALIZER, provideReducers } from 'ngssm-store';\n\nimport { NgssmRemoteCallStateInitializer } from './ngssm-remote-call-state-initializer';\nimport { RemoteCallReducer, RemoteCallSetterReducer } from './reducers';\n\nexport const provideNgssmRemoteCall = (): EnvironmentProviders => {\n return makeEnvironmentProviders([\n { provide: NGSSM_STATE_INITIALIZER, useClass: NgssmRemoteCallStateInitializer, multi: true },\n provideReducers(RemoteCallSetterReducer, RemoteCallReducer)\n ]);\n};\n","import { State } from 'ngssm-store';\n\nimport { getDefaultRemoteCall, RemoteCall, RemoteCallStatus } from './remote-call';\nimport { selectNgssmRemoteCallState } from './ngssm-remote-call.state';\n\nexport const selectRemoteCall = (state: State, id: string): RemoteCall =>\n selectNgssmRemoteCallState(state).remoteCalls[id] ?? getDefaultRemoteCall();\n\n/**\n * Returns true if the specified remote call is currently in progress, false otherwise.\n * @param state The global application state.\n * @param remoteCallId The unique id of the remote call.\n */\nexport const isNgssmRemoteCallInProgress = (state: State, remoteCallId: string): boolean =>\n selectRemoteCall(state, remoteCallId)?.status === RemoteCallStatus.inProgress;\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable, Injector, inject } from '@angular/core';\n\nimport { ActionDispatcher, Logger, Store } from 'ngssm-store';\nimport { NgssmNotifierService } from 'ngssm-toolkit';\n\nimport { SetRemoteCallAction } from './actions';\nimport { RemoteCallStatus } from './remote-call';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RemoteCallResultProcessor {\n private readonly logger = inject(Logger);\n\n // Inject Injector instead of Store because Effects are injected into Store and this class may be used by Effects\n private readonly injector = inject(Injector);\n private readonly notifier = inject(NgssmNotifierService);\n\n public processRemoteCallError(remoteCallId: string, error: HttpErrorResponse, errorMessage: string): void {\n this.logger.error(errorMessage, error);\n this.notifier.notifyError(`${errorMessage}: ${error.message}`);\n this.injector\n .get(Store)\n .dispatchAction(\n new SetRemoteCallAction(remoteCallId, { status: RemoteCallStatus.ko, httpErrorResponse: error, message: errorMessage })\n );\n }\n\n public processRemoteCallSuccess(remoteCallId: string, message: string): void {\n this.logger.information(message);\n this.notifier.notifySuccess(message);\n this.injector.get(Store).dispatchAction(new SetRemoteCallAction(remoteCallId, { status: RemoteCallStatus.done }));\n }\n}\n\n/**\n * Helper method to process http error.\n *\n * Use instead the service RemoteCallResultProcessor.\n *\n * @param error The http error response.\n * @param errorMessage The custom error message.\n * @param remoteCallId The remote call identifier.\n * @param actionDispatcher The action dispatcher.\n * @param logger The logger.\n * @param notifier The message notifier.\n */\nexport const processRemoteCallError = (\n error: HttpErrorResponse,\n errorMessage: string,\n remoteCallId: string,\n actionDispatcher: ActionDispatcher,\n logger: Logger,\n notifier: NgssmNotifierService\n): void => {\n logger.error(errorMessage, error);\n notifier.notifyError(`${errorMessage}: ${error.error?.title}`);\n actionDispatcher.dispatchAction(new SetRemoteCallAction(remoteCallId, { status: RemoteCallStatus.ko, error: error.error }));\n};\n","import { Component, ChangeDetectionStrategy, signal, input, effect } from '@angular/core';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { createSignal } from 'ngssm-store';\n\nimport { RemoteCall, RemoteCallStatus } from '../remote-call';\nimport { selectNgssmRemoteCallState } from '../ngssm-remote-call.state';\n\n@Component({\n selector: 'ngssm-remote-call-error',\n imports: [MatButtonModule, MatIconModule],\n templateUrl: './ngssm-remote-call-error.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ngssm-remote-call-error'\n }\n})\nexport class NgssmRemoteCallErrorComponent {\n public readonly remoteCallId = input<string>('');\n\n public readonly errorContainerRendered = signal<boolean>(false);\n public readonly errorDescription = signal<string>('');\n\n private readonly remoteCalls = createSignal((state) => selectNgssmRemoteCallState(state).remoteCalls);\n\n constructor() {\n effect(() => {\n const id = this.remoteCallId();\n const remoteCall: RemoteCall = this.remoteCalls()[id];\n this.errorContainerRendered.set(remoteCall?.status === RemoteCallStatus.ko);\n const description: string =\n remoteCall?.status !== RemoteCallStatus.ko\n ? ''\n : remoteCall.message\n ? remoteCall.message\n : remoteCall.httpErrorResponse\n ? JSON.stringify(remoteCall.httpErrorResponse, null, 2)\n : remoteCall.error\n ? JSON.stringify(remoteCall.error, null, 2)\n : 'No error description provided!';\n this.errorDescription.set(description);\n });\n }\n}\n","@if (errorContainerRendered()) {\n <div class=\"ngssm-remote-call-error-container\">\n {{ errorDescription() }}\n\n <button mat-icon-button color=\"warn\" class=\"ngssm-remote-call-error-close-button\" (click)=\"errorContainerRendered.set(false)\">\n <mat-icon class=\"fa-solid fa-square-xmark\"></mat-icon>\n </button>\n </div>\n}\n","/*\n * Public API Surface of ngssm-remote-data\n */\n\nexport * from './lib/remote-data/public-api';\nexport * from './lib/ngssm-remote-call/public-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1","i3","i4","i5"],"mappings":"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"}
1
+ {"version":3,"file":"ngssm-remote-data.mjs","sources":["../../../projects/ngssm-remote-data/src/lib/remote-data/model/data-status.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/model/remote-data.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/model/remote-data-provider.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/state/remote-data.state.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/state/selectors.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/actions/remote-data-action-type.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/actions/load-remote-data.action.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/actions/register-loaded-remote-data.action.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/guards/remote-data-loading.guard.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/components/ngssm-remote-data-reload-button/ngssm-remote-data-reload-button.component.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/components/ngssm-remote-data-reload-button/ngssm-remote-data-reload-button.component.html","../../../projects/ngssm-remote-data/src/lib/remote-data/components/ngssm-caches-display-button/ngssm-caches-display-button.component.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/components/ngssm-caches-display-button/ngssm-caches-display-button.component.html","../../../projects/ngssm-remote-data/src/lib/remote-data/components/ngssm-caches/ngssm-caches.component.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/components/ngssm-caches/ngssm-caches.component.html","../../../projects/ngssm-remote-data/src/lib/remote-data/effects/caches-display.effect.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/effects/remote-data-loading.effect.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/reducers/remote-data.reducer.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/remote-data-state-initializer.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/provide-ngssm-remote-data.ts","../../../projects/ngssm-remote-data/src/lib/remote-data/public-api.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-call/register-remote-call.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-call/remote-call.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-call/ngssm-remote-call.state.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-call/ngssm-remote-call-state-initializer.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-call/reducers/remote-call.reducer.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-call/actions.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-call/reducers/remote-call-setter.reducer.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-call/provide-ngssm-remote-call.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-call/selectors.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-call/remote-call-result-processor.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-call/ngssm-remote-call-error/ngssm-remote-call-error.component.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-call/ngssm-remote-call-error/ngssm-remote-call-error.component.html","../../../projects/ngssm-remote-data/src/public-api.ts","../../../projects/ngssm-remote-data/src/ngssm-remote-data.ts"],"sourcesContent":["export enum DataStatus {\n none = 'None',\n loading = 'Loading',\n loaded = 'Loaded',\n notFound = 'NotFound',\n error = 'Error'\n}\n","import { DataStatus } from './data-status';\nimport { RemoteCallError } from './remote-call-error';\nimport { RemoteDataGetterParams } from './remote-data-getter-params';\n\nexport interface RemoteData<TData = unknown, TGetterParams = unknown> {\n status: DataStatus;\n data?: TData;\n timestamp?: Date;\n message?: string;\n error?: RemoteCallError;\n getterParams?: RemoteDataGetterParams<TGetterParams>;\n}\n\nexport const getDefaultRemoteData = <T>(defaultValue?: T, defaultStatus: DataStatus = DataStatus.none): RemoteData<T> => ({\n status: defaultStatus,\n data: defaultValue\n});\n","import { EnvironmentProviders, InjectionToken, Type, makeEnvironmentProviders } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { RemoteDataGetterParams } from './remote-data-getter-params';\n\nexport interface RemoteDataProvider<TData = unknown, TValue = unknown> {\n readonly remoteDataKey: string;\n readonly cacheDurationInSeconds?: number;\n\n get(params?: RemoteDataGetterParams<TValue>): Observable<TData>;\n}\n\nexport const NGSSM_REMOTE_DATA_PROVIDER = new InjectionToken<RemoteDataProvider>('NGSSM_REMOTE_DATA_PROVIDER');\n\nexport const provideRemoteDataProviders = (...providers: Type<RemoteDataProvider>[]): EnvironmentProviders => {\n return makeEnvironmentProviders(providers.map((provider) => ({ provide: NGSSM_REMOTE_DATA_PROVIDER, useClass: provider, multi: true })));\n};\n\nexport type RemoteDataLoadingFunc<TData = unknown, TValue = unknown> = (params?: RemoteDataGetterParams<TValue>) => Observable<TData>;\n\nexport const provideRemoteDataFunc = <TData = unknown, TValue = unknown>(\n remoteDataKey: string,\n remoteDataLoadingFunc: RemoteDataLoadingFunc<TData, TValue>,\n cacheDurationInSeconds?: number\n): EnvironmentProviders => {\n return makeEnvironmentProviders([\n {\n provide: NGSSM_REMOTE_DATA_PROVIDER,\n useFactory: () => {\n const provider: RemoteDataProvider<TData, TValue> = {\n remoteDataKey,\n cacheDurationInSeconds,\n get: remoteDataLoadingFunc\n };\n return provider;\n },\n multi: true\n }\n ]);\n};\n","import update, { Spec } from 'immutability-helper';\n\nimport { NgSsmFeatureState, State } from 'ngssm-store';\n\nimport { RemoteData } from '../model';\n\nexport const selectRemoteDataState = (state: State): RemoteDataState =>\n state[RemoteDataStateSpecification.featureStateKey] as RemoteDataState;\n\nexport const updateRemoteDataState = (state: State, command: Spec<RemoteDataState, never>): State =>\n update(state, {\n [RemoteDataStateSpecification.featureStateKey]: command\n });\n\nexport type RemoteDataState = Record<string, RemoteData<unknown>>;\n\n@NgSsmFeatureState({\n featureStateKey: RemoteDataStateSpecification.featureStateKey,\n initialState: RemoteDataStateSpecification.initialState\n})\nexport class RemoteDataStateSpecification {\n public static readonly featureStateKey = 'remote-data-state';\n public static readonly initialState: RemoteDataState = {};\n}\n","import { State } from 'ngssm-store';\n\nimport { selectRemoteDataState } from './remote-data.state';\nimport { RemoteData } from '../model';\n\nexport const selectRemoteData = <TData = unknown>(state: State, remoteDataKey: string): RemoteData<TData> | undefined =>\n selectRemoteDataState(state)[remoteDataKey] as RemoteData<TData>;\n","export enum RemoteDataActionType {\n loadRemoteData = '[RemoteDataActionType] loadRemoteData',\n registerLoadedRemoteData = '[RemoteDataActionType] registerLoadedRemoteData',\n displayCaches = '[RemoteDataActionType] displayCaches',\n closeCachesComponent = '[RemoteDataActionType] closeCachesComponent'\n}\n","import { Action } from 'ngssm-store';\n\nimport { ReloadParams } from '../model';\nimport { RemoteDataActionType } from './remote-data-action-type';\n\nexport class LoadRemoteDataAction<TValue = unknown> implements Action {\n public readonly type: string = RemoteDataActionType.loadRemoteData;\n\n constructor(\n public readonly remoteDataKey: string,\n public readonly params?: ReloadParams<TValue>\n ) {}\n}\n","import { Action } from 'ngssm-store';\n\nimport { DataStatus, RemoteCallError } from '../model';\nimport { RemoteDataActionType } from './remote-data-action-type';\n\nexport class RegisterLoadedRemoteDataAction<T = unknown> implements Action {\n public readonly type: string = RemoteDataActionType.registerLoadedRemoteData;\n\n constructor(\n public readonly remoteDataKey: string,\n public readonly status: DataStatus,\n public readonly data: T,\n public readonly message?: string,\n public readonly remoteCallError?: RemoteCallError\n ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport { Store } from 'ngssm-store';\n\nimport { LoadRemoteDataAction } from '../actions';\nimport { ReloadParams } from '../model';\n\nexport interface RemoteDataLoadingGuardItem {\n remoteDataKey: string;\n forceReload?: boolean;\n}\n\nexport interface RemoteDataLoadingGuardParameters {\n remoteDataItems: RemoteDataLoadingGuardItem[];\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RemoteDataLoadingGuard {\n private readonly store = inject(Store);\n\n public canActivate(route: ActivatedRouteSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n const parameters = route.data as RemoteDataLoadingGuardParameters;\n (parameters?.remoteDataItems ?? []).forEach((item) => {\n this.store.dispatchAction(new LoadRemoteDataAction(item.remoteDataKey, { forceReload: item.forceReload === true }));\n });\n\n return true;\n }\n}\n\nexport const ngssmReloadRemoteData = <TData = unknown>(\n remoteDataKey: string,\n params: ReloadParams<TData> = { forceReload: true }\n): (() => boolean) => {\n return () => {\n inject(Store).dispatchAction(new LoadRemoteDataAction(remoteDataKey, params));\n return true;\n };\n};\n","import { Component, ChangeDetectionStrategy, signal, input, inject, effect } from '@angular/core';\nimport { DatePipe } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { createSignal, Store } from 'ngssm-store';\n\nimport { LoadRemoteDataAction } from '../../actions';\nimport { selectRemoteDataState } from '../../state';\nimport { DataStatus } from '../../model';\n\nconst datePipe = new DatePipe('en-US');\n\n@Component({\n selector: 'ngssm-remote-data-reload-button',\n imports: [MatIconModule, MatButtonModule, MatTooltipModule, MatProgressSpinnerModule],\n templateUrl: './ngssm-remote-data-reload-button.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmRemoteDataReloadButtonComponent {\n public readonly tooltipMessage = signal<string>('');\n public readonly disabled = signal<boolean>(true);\n public readonly inLoadingStatus = signal<boolean>(false);\n\n public actionTypes = input<string[]>([]);\n public remoteDataKeys = input<string[]>([]);\n\n private readonly store = inject(Store);\n private readonly remoteDataState = createSignal((state) => selectRemoteDataState(state));\n\n constructor() {\n effect(() => {\n const remoteDataState = this.remoteDataState();\n const keys = this.remoteDataKeys();\n\n this.inLoadingStatus.set(keys.findIndex((v) => remoteDataState[v]?.status === DataStatus.loading) !== -1);\n this.disabled.set(this.inLoadingStatus() === true || keys.findIndex((v) => !!remoteDataState[v]) === -1);\n let timestamp: Date | undefined;\n keys.forEach((key) => {\n const keyTimestamp = remoteDataState[key]?.timestamp;\n if (keyTimestamp) {\n if (!timestamp || timestamp.getTime() > keyTimestamp.getTime()) {\n timestamp = keyTimestamp;\n }\n }\n });\n\n let tooltiMessage = 'Reload data.';\n if (timestamp) {\n tooltiMessage = [tooltiMessage, `Loaded at ${datePipe.transform(timestamp, 'mediumTime')}`].join('\\n');\n }\n this.tooltipMessage.set(tooltiMessage);\n });\n }\n\n public reload(): void {\n this.remoteDataKeys().forEach((key) =>\n this.store.dispatchAction(new LoadRemoteDataAction(key, { forceReload: true, keepStoredGetterParams: true }))\n );\n this.actionTypes().forEach((type) => this.store.dispatchActionType(type));\n }\n}\n","<button\n mat-icon-button\n color=\"primary\"\n (click)=\"reload()\"\n [matTooltip]=\"tooltipMessage()\"\n [disabled]=\"disabled() === true\"\n id=\"reloadButton\">\n @if (inLoadingStatus()) {\n <mat-spinner [diameter]=\"24\" id=\"loadingSpinner\"></mat-spinner>\n } @else {\n <mat-icon class=\"fa-solid fa-rotate-right\"></mat-icon>\n }\n</button>\n","import { Component, ChangeDetectionStrategy, inject } from '@angular/core';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { Store } from 'ngssm-store';\n\nimport { RemoteDataActionType } from '../../actions';\n\n@Component({\n selector: 'ngssm-caches-display-button',\n imports: [MatButtonModule, MatIconModule, MatTooltipModule],\n templateUrl: './ngssm-caches-display-button.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmCachesDisplayButtonComponent {\n private readonly store = inject(Store);\n\n public displayCaches(): void {\n this.store.dispatchActionType(RemoteDataActionType.displayCaches);\n }\n}\n","<button mat-icon-button matTooltip=\"Display caches\" (click)=\"displayCaches()\">\n <mat-icon class=\"fa-solid fa-cloud-bolt\"></mat-icon>\n</button>\n","import { Component, ChangeDetectionStrategy, inject } from '@angular/core';\n\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { createSignal, Store } from 'ngssm-store';\n\nimport { RemoteDataActionType, LoadRemoteDataAction } from '../../actions';\nimport { DataStatus, RemoteData } from '../../model';\nimport { selectRemoteDataState } from '../../state';\n\ninterface Cache {\n key: string;\n value: RemoteData;\n}\n\n@Component({\n selector: 'ngssm-caches',\n imports: [MatDialogModule, MatButtonModule, MatTableModule, MatIconModule, MatProgressSpinnerModule],\n templateUrl: './ngssm-caches.component.html',\n styleUrls: ['./ngssm-caches.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmCachesComponent {\n public readonly caches = createSignal<Cache[]>((state) => {\n const remoteDataState = selectRemoteDataState(state);\n return Object.keys(remoteDataState).map((key) => ({\n key,\n value: remoteDataState[key]\n }));\n });\n\n public readonly dataStatus = DataStatus;\n\n private readonly store = inject(Store);\n\n public close(): void {\n this.store.dispatchActionType(RemoteDataActionType.closeCachesComponent);\n }\n\n public reloadCache(cache: Cache): void {\n this.store.dispatchAction(new LoadRemoteDataAction(cache.key, { forceReload: true, keepStoredGetterParams: true }));\n }\n}\n","<h1 mat-dialog-title>List of caches</h1>\n<mat-dialog-content class=\"flex-column-stretch fxFlex\">\n <mat-table [dataSource]=\"caches()\" class=\"fxFlex\">\n <ng-container matColumnDef=\"actions\">\n <mat-header-cell *matHeaderCellDef> </mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n <button\n mat-icon-button\n [disabled]=\"element.value.status === dataStatus.loading\"\n (click)=\"reloadCache(element)\"\n color=\"primary\"\n id=\"reload_{{ element.key }}\">\n <mat-icon class=\"fa-solid fa-rotate-right\"></mat-icon>\n </button>\n </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"key\">\n <mat-header-cell *matHeaderCellDef> Key </mat-header-cell>\n <mat-cell *matCellDef=\"let element\"> {{ element.key }} </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"status\">\n <mat-header-cell *matHeaderCellDef> Status </mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n @switch (element.value.status) {\n @case (dataStatus.none) {\n <mat-icon class=\"fa-solid fa-minus\"></mat-icon>\n }\n @case (dataStatus.loaded) {\n <mat-icon class=\"fa-solid fa-check\" color=\"primary\"></mat-icon>\n }\n @case (dataStatus.error) {\n <mat-icon class=\"fa-solid fa-xmark\" color=\"warn\"></mat-icon>\n }\n @case (dataStatus.notFound) {\n <mat-icon class=\"fa-solid fa-xmark\" color=\"warn\"></mat-icon>\n }\n @case (dataStatus.loading) {\n <mat-spinner [diameter]=\"20\"></mat-spinner>\n }\n }\n </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"timestamp\">\n <mat-header-cell *matHeaderCellDef> Timestamp </mat-header-cell>\n <mat-cell *matCellDef=\"let element\"> {{ element.value.timestamp }} </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"['actions', 'status', 'key', 'timestamp']; sticky: true\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: ['actions', 'status', 'key', 'timestamp']\"></mat-row>\n </mat-table>\n</mat-dialog-content>\n<mat-dialog-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button (click)=\"close()\" id=\"closeButton\">Close</button>\n</mat-dialog-actions>\n","import { Injectable, inject } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\n\nimport { Effect, State, Action, ActionDispatcher } from 'ngssm-store';\nimport { RemoteDataActionType } from '../actions';\nimport { NgssmCachesComponent } from '../components';\n\n@Injectable()\nexport class CachesDisplayEffect implements Effect {\n public readonly processedActions: string[] = [RemoteDataActionType.displayCaches, RemoteDataActionType.closeCachesComponent];\n\n private readonly matDialog = inject(MatDialog);\n\n private dialog: MatDialogRef<NgssmCachesComponent> | undefined;\n\n public processAction(actiondispatcher: ActionDispatcher, state: State, action: Action): void {\n switch (action.type) {\n case RemoteDataActionType.displayCaches: {\n this.dialog = this.matDialog.open(NgssmCachesComponent, {\n disableClose: true\n });\n\n break;\n }\n\n case RemoteDataActionType.closeCachesComponent: {\n this.dialog?.close();\n this.dialog = undefined;\n\n break;\n }\n }\n }\n}\n","import { EnvironmentInjector, Injectable, runInInjectionContext, inject } from '@angular/core';\n\nimport { Effect, State, Action, ActionDispatcher } from 'ngssm-store';\nimport { NgssmNotifierService } from 'ngssm-toolkit';\n\nimport { LoadRemoteDataAction, RegisterLoadedRemoteDataAction, RemoteDataActionType } from '../actions';\nimport { DataStatus, RemoteDataProvider, NGSSM_REMOTE_DATA_PROVIDER } from '../model';\nimport { selectRemoteDataState } from '../state';\n\n@Injectable()\nexport class RemoteDataLoadingEffect implements Effect {\n public readonly processedActions: string[] = [RemoteDataActionType.loadRemoteData];\n\n private readonly remoteDataProviders: RemoteDataProvider[] | null = inject(NGSSM_REMOTE_DATA_PROVIDER, {\n optional: true\n }) as unknown as RemoteDataProvider[];\n private readonly notifierService = inject(NgssmNotifierService);\n private readonly injector = inject(EnvironmentInjector);\n\n private readonly remoteDataProvidersPerKey: Map<string, RemoteDataProvider>;\n\n constructor() {\n this.remoteDataProvidersPerKey = new Map<string, RemoteDataProvider>((this.remoteDataProviders ?? []).map((r) => [r.remoteDataKey, r]));\n }\n\n public processAction(actiondispatcher: ActionDispatcher, state: State, action: Action): void {\n const loadRemoteDataAction = action as LoadRemoteDataAction;\n const item = selectRemoteDataState(state)[loadRemoteDataAction.remoteDataKey];\n const provider = this.remoteDataProvidersPerKey.get(loadRemoteDataAction.remoteDataKey);\n\n if (!item || !provider || item.status !== DataStatus.loading) {\n return;\n }\n\n runInInjectionContext(this.injector, () => {\n provider.get(item.getterParams).subscribe({\n next: (value) => {\n actiondispatcher.dispatchAction(new RegisterLoadedRemoteDataAction(loadRemoteDataAction.remoteDataKey, DataStatus.loaded, value));\n if (item.getterParams?.callbackAction) {\n actiondispatcher.dispatchActionType(item.getterParams.callbackAction);\n }\n },\n error: (error) => {\n console.error(`Unable to load data for '${loadRemoteDataAction.remoteDataKey}'`, error);\n if (item.getterParams?.errorNotificationMessage) {\n this.notifierService.notifyError(item.getterParams.errorNotificationMessage(error?.error));\n }\n\n actiondispatcher.dispatchAction(\n new RegisterLoadedRemoteDataAction(loadRemoteDataAction.remoteDataKey, DataStatus.error, undefined, error?.error)\n );\n }\n });\n });\n }\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { LoadRemoteDataAction, RegisterLoadedRemoteDataAction, RemoteDataActionType } from '../actions';\nimport { DataStatus, RemoteDataProvider, NGSSM_REMOTE_DATA_PROVIDER } from '../model';\nimport { selectRemoteDataState, updateRemoteDataState } from '../state';\n\n@Injectable()\nexport class RemoteDataReducer implements Reducer {\n public readonly processedActions: string[] = [RemoteDataActionType.loadRemoteData, RemoteDataActionType.registerLoadedRemoteData];\n\n private readonly remoteDataProviders: RemoteDataProvider[] | null = inject(NGSSM_REMOTE_DATA_PROVIDER, {\n optional: true\n }) as unknown as RemoteDataProvider[];\n\n private readonly remoteDataProvidersPerKey: Map<string, RemoteDataProvider>;\n\n constructor() {\n this.remoteDataProvidersPerKey = new Map<string, RemoteDataProvider>((this.remoteDataProviders ?? []).map((r) => [r.remoteDataKey, r]));\n }\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case RemoteDataActionType.loadRemoteData: {\n const loadRemoteDataAction = action as LoadRemoteDataAction;\n const item = selectRemoteDataState(state)[loadRemoteDataAction.remoteDataKey];\n if (!item) {\n return state;\n }\n\n const provider = this.remoteDataProvidersPerKey.get(loadRemoteDataAction.remoteDataKey);\n if (!provider) {\n return state;\n }\n\n if (\n !provider.cacheDurationInSeconds ||\n loadRemoteDataAction.params?.forceReload === true ||\n item.status === DataStatus.none ||\n item.status === DataStatus.error ||\n item.status === DataStatus.notFound ||\n !item.timestamp ||\n new Date().getTime() - item.timestamp.getTime() >= 1000 * provider.cacheDurationInSeconds\n ) {\n return updateRemoteDataState(state, {\n [loadRemoteDataAction.remoteDataKey]: {\n status: { $set: DataStatus.loading },\n getterParams: {\n $apply: (value) => {\n if (!loadRemoteDataAction.params || loadRemoteDataAction.params.keepStoredGetterParams !== true) {\n return loadRemoteDataAction.params?.params;\n }\n\n return value;\n }\n }\n }\n });\n }\n\n break;\n }\n\n case RemoteDataActionType.registerLoadedRemoteData: {\n const registerLoadedRemoteDataAction = action as RegisterLoadedRemoteDataAction;\n if (this.remoteDataProvidersPerKey.has(registerLoadedRemoteDataAction.remoteDataKey)) {\n return updateRemoteDataState(state, {\n [registerLoadedRemoteDataAction.remoteDataKey]: {\n status: { $set: registerLoadedRemoteDataAction.status },\n data: { $set: registerLoadedRemoteDataAction.data },\n timestamp: { $set: new Date() },\n message: { $set: registerLoadedRemoteDataAction.message },\n error: { $set: registerLoadedRemoteDataAction.remoteCallError }\n }\n });\n }\n\n break;\n }\n }\n\n return state;\n }\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport { State, StateInitializer } from 'ngssm-store';\n\nimport { DataStatus, RemoteDataProvider, NGSSM_REMOTE_DATA_PROVIDER } from './model';\nimport { updateRemoteDataState } from './state';\n\n@Injectable()\nexport class RemoteDataStateInitializer implements StateInitializer {\n private readonly remoteDataProviders: RemoteDataProvider[] | null = inject(NGSSM_REMOTE_DATA_PROVIDER, {\n optional: true\n }) as unknown as RemoteDataProvider[];\n\n public initializeState(state: State): State {\n const tempState = state;\n return (this.remoteDataProviders ?? []).reduce(\n (s, provider) => updateRemoteDataState(s, { [provider.remoteDataKey]: { $set: { status: DataStatus.none } } }),\n tempState\n );\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport { NGSSM_STATE_INITIALIZER, provideEffects, provideReducer } from 'ngssm-store';\n\nimport { CachesDisplayEffect, RemoteDataLoadingEffect } from './effects';\nimport { RemoteDataReducer } from './reducers/remote-data.reducer';\nimport { RemoteDataStateInitializer } from './remote-data-state-initializer';\n\nexport const provideNgssmRemoteData = (): EnvironmentProviders => {\n return makeEnvironmentProviders([\n provideReducer(RemoteDataReducer),\n provideEffects(CachesDisplayEffect, RemoteDataLoadingEffect),\n { provide: NGSSM_STATE_INITIALIZER, useClass: RemoteDataStateInitializer, multi: true }\n ]);\n};\n","/*\n * Public API Surface of ngssm-remote-data\n */\n\nexport * from './model';\nexport * from './state';\nexport * from './actions';\nexport * from './guards';\nexport * from './components';\nexport * from './provide-ngssm-remote-data';\n","import { InjectionToken, Provider } from '@angular/core';\n\nimport { Action } from 'ngssm-store';\n\nimport { RemoteCall } from './remote-call';\n\n/**\n * Represents an action that encapsulates the result of a remote call.\n *\n * This action is typically dispatched when a remote call completes,\n * carrying both the action type and the associated remote call data.\n *\n * @remarks\n * Implements the `Action` interface.\n *\n * @param type - The type of the action.\n * @param remoteCall - The remote call instance containing the result details.\n */\nexport class NgssmRemoteCallResultAction implements Action {\n constructor(\n public readonly type: string,\n public readonly remoteCall: RemoteCall\n ) {}\n}\n\n// Configuration for a remote call, including its identifier and associated action types.\nexport interface RemoteCallConfig {\n id: string; // Unique identifier for the remote call\n triggeredActionTypes: string[]; // Action types that trigger the remote call\n resultActionTypes: string[]; // Action derived from NgssmRemoteCallResultAction that will notify end of call\n}\n\n/**\n * Injection token for providing NGSSM remote call configuration.\n * Used to register and inject RemoteCallConfig objects in Angular's dependency injection system.\n */\nexport const NGSSM_REMOTE_CALL_CONFIG = new InjectionToken<RemoteCallConfig>('NGSSM_REMOTE_CALL_CONFIG');\n\n/**\n * Provides the configuration for NGSSM remote calls as an Angular provider.\n *\n * @param config - The remote call configuration object to be provided.\n * @returns An Angular provider object that supplies the given configuration for NGSSM remote calls.\n *\n * @remarks\n * This function is intended to be used in Angular module providers to register\n * multiple remote call configurations using the `multi: true` option.\n */\nexport const provideNgssmRemoteCallConfig = (config: RemoteCallConfig): Provider => ({\n provide: NGSSM_REMOTE_CALL_CONFIG,\n useValue: config,\n multi: true\n});\n","import { HttpErrorResponse } from '@angular/common/http';\n\n// Represents the possible statuses of a remote call.\nexport enum RemoteCallStatus {\n none = 'None', // No call has been made yet\n inProgress = 'In progress', // The remote call is currently in progress\n done = 'Done', // The remote call completed successfully\n ko = 'Ko' // The remote call failed\n}\n\n/**\n * Describes the state and result of a remote call, including error information if applicable.\n *\n * Note that the property error is only here to ensure compatibility with previous versions. It will be removed in a future release.\n * Only the processRemoteCallError helper sets this property.\n * The service RemoteCallResultProcessor which must be used instead of the helper does not set this property.\n */\nexport interface RemoteCall<TErrorType = unknown> {\n status: RemoteCallStatus; // The current status of the remote call\n httpErrorResponse?: HttpErrorResponse; // Optional HTTP error response if the call failed\n message?: string; // Optional message describing the result or error\n error?: TErrorType; // Error property of HttpErrorResponse => to avoid too many impacts on code using this.\n}\n\n/**\n * Returns a default RemoteCall object with the specified status (defaults to 'none').\n * @param status The status to set for the remote call.\n * @returns A RemoteCall object with the given status.\n */\nexport const getDefaultRemoteCall = (status: RemoteCallStatus = RemoteCallStatus.none): RemoteCall => ({ status });\n","import update, { Spec } from 'immutability-helper';\n\nimport { NgSsmFeatureState, State } from 'ngssm-store';\n\nimport { RemoteCall } from './remote-call';\n\nexport const selectNgssmRemoteCallState = (state: State): NgssmRemoteCallState =>\n state[NgssmRemoteCallStateSpecification.featureStateKey] as NgssmRemoteCallState;\n\nexport const updateNgssmRemoteCallState = (state: State, command: Spec<NgssmRemoteCallState, never>): State =>\n update(state, {\n [NgssmRemoteCallStateSpecification.featureStateKey]: command\n });\n\nexport interface NgssmRemoteCallState {\n remoteCalls: Record<string, RemoteCall>;\n}\n\n@NgSsmFeatureState({\n featureStateKey: NgssmRemoteCallStateSpecification.featureStateKey,\n initialState: NgssmRemoteCallStateSpecification.initialState\n})\nexport class NgssmRemoteCallStateSpecification {\n public static readonly featureStateKey = 'ngssm-remote-call-state';\n public static readonly initialState: NgssmRemoteCallState = {\n remoteCalls: {}\n };\n}\n","import { inject, Injectable } from '@angular/core';\n\nimport { State, StateInitializer } from 'ngssm-store';\n\nimport { NGSSM_REMOTE_CALL_CONFIG, RemoteCallConfig } from './register-remote-call';\nimport { RemoteCallStatus } from './remote-call';\nimport { updateNgssmRemoteCallState } from './ngssm-remote-call.state';\n\n@Injectable()\nexport class NgssmRemoteCallStateInitializer implements StateInitializer {\n private readonly remoteCallConfigs: RemoteCallConfig[] | null = inject(NGSSM_REMOTE_CALL_CONFIG, {\n optional: true\n }) as unknown as RemoteCallConfig[];\n\n public initializeState(state: State): State {\n const tempState = state;\n return (this.remoteCallConfigs ?? []).reduce(\n (s, config) => updateNgssmRemoteCallState(s, { remoteCalls: { [config.id]: { $set: { status: RemoteCallStatus.none } } } }),\n tempState\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { NGSSM_REMOTE_CALL_CONFIG, NgssmRemoteCallResultAction, RemoteCallConfig } from '../register-remote-call';\nimport { getDefaultRemoteCall, RemoteCallStatus } from '../remote-call';\nimport { updateNgssmRemoteCallState } from '../ngssm-remote-call.state';\n\n@Injectable()\nexport class RemoteCallReducer implements Reducer {\n public readonly processedActions: string[] = [];\n\n private readonly remoteCallConfigs: RemoteCallConfig[] | null = inject(NGSSM_REMOTE_CALL_CONFIG, {\n optional: true\n }) as unknown as RemoteCallConfig[];\n\n constructor() {\n (this.remoteCallConfigs ?? []).forEach((c) => this.processedActions.push(...[...c.triggeredActionTypes, ...c.resultActionTypes]));\n }\n\n public updateState(state: State, action: Action): State {\n const configs = (this.remoteCallConfigs ?? []).filter(\n (c) => c.triggeredActionTypes.includes(action.type) || c.resultActionTypes.includes(action.type)\n );\n let output = state;\n configs.forEach((config) => {\n if (config.triggeredActionTypes.includes(action.type)) {\n output = updateNgssmRemoteCallState(output, {\n remoteCalls: {\n [config.id]: { $set: getDefaultRemoteCall(RemoteCallStatus.inProgress) }\n }\n });\n } else {\n const ngssmRemoteCallResultAction = action as NgssmRemoteCallResultAction;\n output = updateNgssmRemoteCallState(output, {\n remoteCalls: {\n [config.id]: { $set: ngssmRemoteCallResultAction.remoteCall }\n }\n });\n }\n });\n\n return output;\n }\n}\n","import { Action } from 'ngssm-store';\n\nimport { RemoteCall } from './remote-call';\n\nexport enum NgssmRemoteCallActionType {\n setRemoteCall = '[NgssmRemoteCallActionType] setRemoteCall'\n}\n\nexport class SetRemoteCallAction implements Action {\n public readonly type: string = NgssmRemoteCallActionType.setRemoteCall;\n\n constructor(\n public readonly remoteCallId: string,\n public readonly remoteCall: RemoteCall\n ) {}\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { NgssmRemoteCallActionType, SetRemoteCallAction } from '../actions';\nimport { updateNgssmRemoteCallState } from '../ngssm-remote-call.state';\n\n@Injectable()\nexport class RemoteCallSetterReducer implements Reducer {\n public readonly processedActions: string[] = [NgssmRemoteCallActionType.setRemoteCall];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmRemoteCallActionType.setRemoteCall: {\n const setRemoteCallAction = action as SetRemoteCallAction;\n return updateNgssmRemoteCallState(state, {\n remoteCalls: {\n [setRemoteCallAction.remoteCallId]: { $set: setRemoteCallAction.remoteCall }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport { NGSSM_STATE_INITIALIZER, provideReducers } from 'ngssm-store';\n\nimport { NgssmRemoteCallStateInitializer } from './ngssm-remote-call-state-initializer';\nimport { RemoteCallReducer, RemoteCallSetterReducer } from './reducers';\n\nexport const provideNgssmRemoteCall = (): EnvironmentProviders => {\n return makeEnvironmentProviders([\n { provide: NGSSM_STATE_INITIALIZER, useClass: NgssmRemoteCallStateInitializer, multi: true },\n provideReducers(RemoteCallSetterReducer, RemoteCallReducer)\n ]);\n};\n","import { State } from 'ngssm-store';\n\nimport { getDefaultRemoteCall, RemoteCall, RemoteCallStatus } from './remote-call';\nimport { selectNgssmRemoteCallState } from './ngssm-remote-call.state';\n\nexport const selectRemoteCall = (state: State, id: string): RemoteCall =>\n selectNgssmRemoteCallState(state).remoteCalls[id] ?? getDefaultRemoteCall();\n\n/**\n * Returns true if the specified remote call is currently in progress, false otherwise.\n * @param state The global application state.\n * @param remoteCallId The unique id of the remote call.\n */\nexport const isNgssmRemoteCallInProgress = (state: State, remoteCallId: string): boolean =>\n selectRemoteCall(state, remoteCallId)?.status === RemoteCallStatus.inProgress;\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable, Injector, inject } from '@angular/core';\n\nimport { ActionDispatcher, Logger, Store } from 'ngssm-store';\nimport { NgssmNotifierService } from 'ngssm-toolkit';\n\nimport { SetRemoteCallAction } from './actions';\nimport { RemoteCallStatus } from './remote-call';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RemoteCallResultProcessor {\n private readonly logger = inject(Logger);\n\n // Inject Injector instead of Store because Effects are injected into Store and this class may be used by Effects\n private readonly injector = inject(Injector);\n private readonly notifier = inject(NgssmNotifierService);\n\n public processRemoteCallError(remoteCallId: string, error: HttpErrorResponse, errorMessage: string): void {\n this.logger.error(errorMessage, error);\n this.notifier.notifyError(`${errorMessage}: ${error.message}`);\n this.injector\n .get(Store)\n .dispatchAction(\n new SetRemoteCallAction(remoteCallId, { status: RemoteCallStatus.ko, httpErrorResponse: error, message: errorMessage })\n );\n }\n\n public processRemoteCallSuccess(remoteCallId: string, message: string): void {\n this.logger.information(message);\n this.notifier.notifySuccess(message);\n this.injector.get(Store).dispatchAction(new SetRemoteCallAction(remoteCallId, { status: RemoteCallStatus.done }));\n }\n}\n\n/**\n * Helper method to process http error.\n *\n * Use instead the service RemoteCallResultProcessor.\n *\n * @param error The http error response.\n * @param errorMessage The custom error message.\n * @param remoteCallId The remote call identifier.\n * @param actionDispatcher The action dispatcher.\n * @param logger The logger.\n * @param notifier The message notifier.\n */\nexport const processRemoteCallError = (\n error: HttpErrorResponse,\n errorMessage: string,\n remoteCallId: string,\n actionDispatcher: ActionDispatcher,\n logger: Logger,\n notifier: NgssmNotifierService\n): void => {\n logger.error(errorMessage, error);\n notifier.notifyError(`${errorMessage}: ${error.error?.title}`);\n actionDispatcher.dispatchAction(new SetRemoteCallAction(remoteCallId, { status: RemoteCallStatus.ko, error: error.error }));\n};\n","import { Component, ChangeDetectionStrategy, signal, input, effect } from '@angular/core';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { createSignal } from 'ngssm-store';\n\nimport { RemoteCall, RemoteCallStatus } from '../remote-call';\nimport { selectNgssmRemoteCallState } from '../ngssm-remote-call.state';\n\n@Component({\n selector: 'ngssm-remote-call-error',\n imports: [MatButtonModule, MatIconModule],\n templateUrl: './ngssm-remote-call-error.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ngssm-remote-call-error'\n }\n})\nexport class NgssmRemoteCallErrorComponent {\n public readonly remoteCallId = input<string>('');\n\n public readonly errorContainerRendered = signal<boolean>(false);\n public readonly errorDescription = signal<string>('');\n\n private readonly remoteCalls = createSignal((state) => selectNgssmRemoteCallState(state).remoteCalls);\n\n constructor() {\n effect(() => {\n const id = this.remoteCallId();\n const remoteCall: RemoteCall = this.remoteCalls()[id];\n this.errorContainerRendered.set(remoteCall?.status === RemoteCallStatus.ko);\n const description: string =\n remoteCall?.status !== RemoteCallStatus.ko\n ? ''\n : remoteCall.message\n ? remoteCall.message\n : remoteCall.httpErrorResponse\n ? JSON.stringify(remoteCall.httpErrorResponse, null, 2)\n : remoteCall.error\n ? JSON.stringify(remoteCall.error, null, 2)\n : 'No error description provided!';\n this.errorDescription.set(description);\n });\n }\n}\n","@if (errorContainerRendered()) {\n <div class=\"ngssm-remote-call-error-container\">\n {{ errorDescription() }}\n\n <button mat-icon-button color=\"warn\" class=\"ngssm-remote-call-error-close-button\" (click)=\"errorContainerRendered.set(false)\">\n <mat-icon class=\"fa-solid fa-square-xmark\"></mat-icon>\n </button>\n </div>\n}\n","/*\n * Public API Surface of ngssm-remote-data\n */\n\nexport * from './lib/remote-data/public-api';\nexport * from './lib/ngssm-remote-call/public-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1","i3","i4","i5"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngssm-remote-data",
3
- "version": "21.1.0",
3
+ "version": "21.1.2",
4
4
  "description": "NgSsm - Utilities to manage data loaded from remote services with the store.",
5
5
  "author": "Lion Marc",
6
6
  "license": "MIT",