ngssm-data 20.2.5 → 20.2.6

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.
@@ -56,10 +56,10 @@ class NgssmDataSourceValueSetter {
56
56
  });
57
57
  return this;
58
58
  }
59
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgssmDataSourceValueSetter, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
60
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgssmDataSourceValueSetter }); }
59
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.2", ngImport: i0, type: NgssmDataSourceValueSetter, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
60
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.2", ngImport: i0, type: NgssmDataSourceValueSetter }); }
61
61
  }
62
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgssmDataSourceValueSetter, decorators: [{
62
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.2", ngImport: i0, type: NgssmDataSourceValueSetter, decorators: [{
63
63
  type: Injectable
64
64
  }] });
65
65
  const ngssmDataSourceValueSetter = () => TestBed.inject(NgssmDataSourceValueSetter);
@@ -265,10 +265,10 @@ class DataSourcesRegistrationReducer {
265
265
  }
266
266
  return state;
267
267
  }
268
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: DataSourcesRegistrationReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
269
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: DataSourcesRegistrationReducer }); }
268
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.2", ngImport: i0, type: DataSourcesRegistrationReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
269
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.2", ngImport: i0, type: DataSourcesRegistrationReducer }); }
270
270
  }
271
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: DataSourcesRegistrationReducer, decorators: [{
271
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.2", ngImport: i0, type: DataSourcesRegistrationReducer, decorators: [{
272
272
  type: Injectable
273
273
  }] });
274
274
 
@@ -435,10 +435,10 @@ class DataSourceValueReducer {
435
435
  }
436
436
  return state;
437
437
  }
438
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: DataSourceValueReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
439
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: DataSourceValueReducer }); }
438
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.2", ngImport: i0, type: DataSourceValueReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
439
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.2", ngImport: i0, type: DataSourceValueReducer }); }
440
440
  }
441
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: DataSourceValueReducer, decorators: [{
441
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.2", ngImport: i0, type: DataSourceValueReducer, decorators: [{
442
442
  type: Injectable
443
443
  }] });
444
444
 
@@ -535,10 +535,10 @@ class LoadDataSourceValueReducer {
535
535
  }
536
536
  return state;
537
537
  }
538
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: LoadDataSourceValueReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
539
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: LoadDataSourceValueReducer }); }
538
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.2", ngImport: i0, type: LoadDataSourceValueReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
539
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.2", ngImport: i0, type: LoadDataSourceValueReducer }); }
540
540
  }
541
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: LoadDataSourceValueReducer, decorators: [{
541
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.2", ngImport: i0, type: LoadDataSourceValueReducer, decorators: [{
542
542
  type: Injectable
543
543
  }] });
544
544
 
@@ -596,10 +596,10 @@ class DataLoadingEffect {
596
596
  }
597
597
  }
598
598
  }
599
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: DataLoadingEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
600
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: DataLoadingEffect }); }
599
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.2", ngImport: i0, type: DataLoadingEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
600
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.2", ngImport: i0, type: DataLoadingEffect }); }
601
601
  }
602
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: DataLoadingEffect, decorators: [{
602
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.2", ngImport: i0, type: DataLoadingEffect, decorators: [{
603
603
  type: Injectable
604
604
  }] });
605
605
 
@@ -670,7 +670,6 @@ const dataSourcesLinkerInitializer = async () => {
670
670
  * @returns void
671
671
  */
672
672
  const loadDataSourceWithDependencyEffect = (state, action) => {
673
- const logger = inject(Logger);
674
673
  const ngssmLoadDataSourceValueAction = action;
675
674
  const dataSourceValue = selectNgssmDataSourceValue(state, ngssmLoadDataSourceValueAction.key);
676
675
  // We only take into account source with a dependency not already loaded. In that case, the status must not be loading.
@@ -678,10 +677,10 @@ const loadDataSourceWithDependencyEffect = (state, action) => {
678
677
  return;
679
678
  }
680
679
  const dataSource = selectNgssmDataState(state).dataSources[ngssmLoadDataSourceValueAction.key];
681
- // Should not happen. But, just in case...
682
680
  const dependency = dataSource.dependsOnDataSource;
683
681
  if (!dependency) {
684
- logger.error(`Data source ${ngssmLoadDataSourceValueAction.key} depends on no other data source!`);
682
+ // Date source is already loaded and has no dependency.
683
+ // This is the usual case with data source with a lifetime not null and reloaded without being forced when a page is opened.
685
684
  return;
686
685
  }
687
686
  const store = inject(Store);
@@ -736,10 +735,10 @@ class IsNgssmDataSourceValueStatusPipe {
736
735
  const itemStatus = selectNgssmDataSourceValue(value, key).status;
737
736
  return expectedStatuses.includes(itemStatus);
738
737
  }
739
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: IsNgssmDataSourceValueStatusPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
740
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.0", ngImport: i0, type: IsNgssmDataSourceValueStatusPipe, isStandalone: true, name: "isNgssmDataSourceValueStatus" }); }
738
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.2", ngImport: i0, type: IsNgssmDataSourceValueStatusPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
739
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.2", ngImport: i0, type: IsNgssmDataSourceValueStatusPipe, isStandalone: true, name: "isNgssmDataSourceValueStatus" }); }
741
740
  }
742
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: IsNgssmDataSourceValueStatusPipe, decorators: [{
741
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.2", ngImport: i0, type: IsNgssmDataSourceValueStatusPipe, decorators: [{
743
742
  type: Pipe,
744
743
  args: [{
745
744
  name: 'isNgssmDataSourceValueStatus'
@@ -777,10 +776,10 @@ class NgssmAutoReloadComponent {
777
776
  this.timerId = undefined;
778
777
  }
779
778
  }
780
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgssmAutoReloadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
781
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.0", type: NgssmAutoReloadComponent, isStandalone: true, selector: "ngssm-auto-reload", inputs: { autoReloadAction: { classPropertyName: "autoReloadAction", publicName: "autoReloadAction", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<mat-form-field>\n <mat-label>Select auto reload period</mat-label>\n <mat-select [formControl]=\"reloadTypeControl\">\n @for (option of reloadTypes; track option.value){\n <mat-option [value]=\"option.value\">\n {{option.label}}\n </mat-option>\n }\n </mat-select>\n</mat-form-field>", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
779
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.2", ngImport: i0, type: NgssmAutoReloadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
780
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.2", type: NgssmAutoReloadComponent, isStandalone: true, selector: "ngssm-auto-reload", inputs: { autoReloadAction: { classPropertyName: "autoReloadAction", publicName: "autoReloadAction", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<mat-form-field>\n <mat-label>Select auto reload period</mat-label>\n <mat-select [formControl]=\"reloadTypeControl\">\n @for (option of reloadTypes; track option.value){\n <mat-option [value]=\"option.value\">\n {{option.label}}\n </mat-option>\n }\n </mat-select>\n</mat-form-field>", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
782
781
  }
783
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgssmAutoReloadComponent, decorators: [{
782
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.2", ngImport: i0, type: NgssmAutoReloadComponent, decorators: [{
784
783
  type: Component,
785
784
  args: [{ selector: 'ngssm-auto-reload', imports: [ReactiveFormsModule, MatFormField, MatLabel, MatSelect, MatOption], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-form-field>\n <mat-label>Select auto reload period</mat-label>\n <mat-select [formControl]=\"reloadTypeControl\">\n @for (option of reloadTypes; track option.value){\n <mat-option [value]=\"option.value\">\n {{option.label}}\n </mat-option>\n }\n </mat-select>\n</mat-form-field>" }]
786
785
  }], ctorParameters: () => [] });
@@ -838,10 +837,10 @@ class NgssmDataReloadButtonComponent {
838
837
  }
839
838
  this.dataSourceKeys().forEach((key) => this.store.dispatchAction(new NgssmLoadDataSourceValueAction(key, { forceReload: true, keepAdditionalProperties: this.keepAdditionalProperties() })));
840
839
  }
841
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgssmDataReloadButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
842
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.0", type: NgssmDataReloadButtonComponent, isStandalone: true, selector: "ngssm-data-reload-button", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, keepAdditionalProperties: { classPropertyName: "keepAdditionalProperties", publicName: "keepAdditionalProperties", isSignal: true, isRequired: false, transformFunction: null }, buttonIcon: { classPropertyName: "buttonIcon", publicName: "buttonIcon", isSignal: true, isRequired: false, transformFunction: null }, autoReloadEnabled: { classPropertyName: "autoReloadEnabled", publicName: "autoReloadEnabled", isSignal: true, isRequired: false, transformFunction: null }, dataSourceKeys: { classPropertyName: "dataSourceKeys", publicName: "dataSourceKeys", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex-row-center\">\n @if (label(); as buttonLabel) {\n <button\n mat-stroked-button\n [color]=\"color()\"\n class=\"mat-{{color()}}\"\n (click)=\"reload()\"\n [matTooltip]=\"tooltipMessage()\"\n [disabled]=\"buttonDisabled() === true\"\n id=\"reloadButton\">\n <div class=\"flex-row-center\">\n @if (loadInProgress()) {\n <mat-spinner [diameter]=\"24\" id=\"loadingSpinner\"></mat-spinner>\n } @else {\n <mat-icon [ngClass]=\"buttonIcon()\" [color]=\"color()\"></mat-icon>\n }\n\n <span style=\"width: 0.5rem\"></span>\n\n {{ buttonLabel }}\n </div>\n </button>\n } @else {\n <button\n mat-icon-button\n [color]=\"color()\"\n class=\"mat-{{color()}}\"\n (click)=\"reload()\"\n [matTooltip]=\"tooltipMessage()\"\n [disabled]=\"buttonDisabled() === true\"\n id=\"reloadButton\">\n @if (loadInProgress()) {\n <mat-spinner [diameter]=\"24\" id=\"loadingSpinner\"></mat-spinner>\n } @else {\n <mat-icon [ngClass]=\"buttonIcon()\" [color]=\"color()\"></mat-icon>\n }\n </button>\n }\n\n @if (autoReloadEnabled()) {\n <ngssm-auto-reload class=\"with-margin-left-8\" [autoReloadAction]=\"reloadAction\"></ngssm-auto-reload>\n }\n</div>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: 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: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: NgssmAutoReloadComponent, selector: "ngssm-auto-reload", inputs: ["autoReloadAction"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
840
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.2", ngImport: i0, type: NgssmDataReloadButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
841
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.2", type: NgssmDataReloadButtonComponent, isStandalone: true, selector: "ngssm-data-reload-button", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, keepAdditionalProperties: { classPropertyName: "keepAdditionalProperties", publicName: "keepAdditionalProperties", isSignal: true, isRequired: false, transformFunction: null }, buttonIcon: { classPropertyName: "buttonIcon", publicName: "buttonIcon", isSignal: true, isRequired: false, transformFunction: null }, autoReloadEnabled: { classPropertyName: "autoReloadEnabled", publicName: "autoReloadEnabled", isSignal: true, isRequired: false, transformFunction: null }, dataSourceKeys: { classPropertyName: "dataSourceKeys", publicName: "dataSourceKeys", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex-row-center\">\n @if (label(); as buttonLabel) {\n <button\n mat-stroked-button\n [color]=\"color()\"\n class=\"mat-{{color()}}\"\n (click)=\"reload()\"\n [matTooltip]=\"tooltipMessage()\"\n [disabled]=\"buttonDisabled() === true\"\n id=\"reloadButton\">\n <div class=\"flex-row-center\">\n @if (loadInProgress()) {\n <mat-spinner [diameter]=\"24\" id=\"loadingSpinner\"></mat-spinner>\n } @else {\n <mat-icon [ngClass]=\"buttonIcon()\" [color]=\"color()\"></mat-icon>\n }\n\n <span style=\"width: 0.5rem\"></span>\n\n {{ buttonLabel }}\n </div>\n </button>\n } @else {\n <button\n mat-icon-button\n [color]=\"color()\"\n class=\"mat-{{color()}}\"\n (click)=\"reload()\"\n [matTooltip]=\"tooltipMessage()\"\n [disabled]=\"buttonDisabled() === true\"\n id=\"reloadButton\">\n @if (loadInProgress()) {\n <mat-spinner [diameter]=\"24\" id=\"loadingSpinner\"></mat-spinner>\n } @else {\n <mat-icon [ngClass]=\"buttonIcon()\" [color]=\"color()\"></mat-icon>\n }\n </button>\n }\n\n @if (autoReloadEnabled()) {\n <ngssm-auto-reload class=\"with-margin-left-8\" [autoReloadAction]=\"reloadAction\"></ngssm-auto-reload>\n }\n</div>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: 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: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: NgssmAutoReloadComponent, selector: "ngssm-auto-reload", inputs: ["autoReloadAction"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
843
842
  }
844
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgssmDataReloadButtonComponent, decorators: [{
843
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.2", ngImport: i0, type: NgssmDataReloadButtonComponent, decorators: [{
845
844
  type: Component,
846
845
  args: [{ selector: 'ngssm-data-reload-button', imports: [NgClass, MatButton, MatIconButton, MatTooltip, MatIcon, MatProgressSpinner, NgssmAutoReloadComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex-row-center\">\n @if (label(); as buttonLabel) {\n <button\n mat-stroked-button\n [color]=\"color()\"\n class=\"mat-{{color()}}\"\n (click)=\"reload()\"\n [matTooltip]=\"tooltipMessage()\"\n [disabled]=\"buttonDisabled() === true\"\n id=\"reloadButton\">\n <div class=\"flex-row-center\">\n @if (loadInProgress()) {\n <mat-spinner [diameter]=\"24\" id=\"loadingSpinner\"></mat-spinner>\n } @else {\n <mat-icon [ngClass]=\"buttonIcon()\" [color]=\"color()\"></mat-icon>\n }\n\n <span style=\"width: 0.5rem\"></span>\n\n {{ buttonLabel }}\n </div>\n </button>\n } @else {\n <button\n mat-icon-button\n [color]=\"color()\"\n class=\"mat-{{color()}}\"\n (click)=\"reload()\"\n [matTooltip]=\"tooltipMessage()\"\n [disabled]=\"buttonDisabled() === true\"\n id=\"reloadButton\">\n @if (loadInProgress()) {\n <mat-spinner [diameter]=\"24\" id=\"loadingSpinner\"></mat-spinner>\n } @else {\n <mat-icon [ngClass]=\"buttonIcon()\" [color]=\"color()\"></mat-icon>\n }\n </button>\n }\n\n @if (autoReloadEnabled()) {\n <ngssm-auto-reload class=\"with-margin-left-8\" [autoReloadAction]=\"reloadAction\"></ngssm-auto-reload>\n }\n</div>\n" }]
847
846
  }], ctorParameters: () => [] });
@@ -871,10 +870,10 @@ class NgssmScopedDataSourceDirective {
871
870
  this.isInitialized = true;
872
871
  return value;
873
872
  }
874
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgssmScopedDataSourceDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
875
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.0", type: NgssmScopedDataSourceDirective, isStandalone: true, selector: "[ngssmScopedDataSource]", inputs: { ngssmScopedDataSource: { classPropertyName: "ngssmScopedDataSource", publicName: "ngssmScopedDataSource", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
873
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.2", ngImport: i0, type: NgssmScopedDataSourceDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
874
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.2", type: NgssmScopedDataSourceDirective, isStandalone: true, selector: "[ngssmScopedDataSource]", inputs: { ngssmScopedDataSource: { classPropertyName: "ngssmScopedDataSource", publicName: "ngssmScopedDataSource", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
876
875
  }
877
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgssmScopedDataSourceDirective, decorators: [{
876
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.2", ngImport: i0, type: NgssmScopedDataSourceDirective, decorators: [{
878
877
  type: Directive,
879
878
  args: [{
880
879
  selector: '[ngssmScopedDataSource]'
@@ -1 +1 @@
1
- {"version":3,"file":"ngssm-data.mjs","sources":["../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-data-action-type.ts","../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-data-source-value.action.ts","../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-load-data-source-value.action.ts","../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-set-data-source-value.action.ts","../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-register-data-sources.action.ts","../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-clear-data-source-value.action.ts","../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-set-data-source-parameter.action.ts","../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-load-data-source-additional-property-value.action.ts","../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-set-data-source-additional-property-value.action.ts","../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-register-data-source.action.ts","../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-unregister-data-source.action.ts","../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-update-data-source-parameter.action.ts","../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-set-data-source-parameter-validity.action.ts","../../../projects/ngssm-data/src/lib/ngssm-data/model/ngssm-data-source.ts","../../../projects/ngssm-data/src/lib/ngssm-data/model/ngssm-data-source-value.ts","../../../projects/ngssm-data/src/lib/ngssm-data/state/ngssm-data.state.ts","../../../projects/ngssm-data/src/lib/ngssm-data/reducers/data-sources-registration.reducer.ts","../../../projects/ngssm-data/src/lib/ngssm-data/selectors.ts","../../../projects/ngssm-data/src/lib/ngssm-data/reducers/data-source-value.reducer.ts","../../../projects/ngssm-data/src/lib/ngssm-data/reducers/load-data-source-value.reducer.ts","../../../projects/ngssm-data/src/lib/ngssm-data/effects/data-loading.effect.ts","../../../projects/ngssm-data/src/lib/ngssm-data/post-loading-action-executor.ts","../../../projects/ngssm-data/src/lib/ngssm-data/data-sources-linker.ts","../../../projects/ngssm-data/src/lib/ngssm-data/data-source-with-dependency.ts","../../../projects/ngssm-data/src/lib/ngssm-data/provide-ngssm-data.ts","../../../projects/ngssm-data/src/lib/ngssm-data/components/is-ngssm-data-source-value-status.pipe.ts","../../../projects/ngssm-data/src/lib/ngssm-data/components/ngssm-auto-reload/ngssm-auto-reload.component.ts","../../../projects/ngssm-data/src/lib/ngssm-data/components/ngssm-auto-reload/ngssm-auto-reload.component.html","../../../projects/ngssm-data/src/lib/ngssm-data/components/ngssm-data-reload-button/ngssm-data-reload-button.component.ts","../../../projects/ngssm-data/src/lib/ngssm-data/components/ngssm-data-reload-button/ngssm-data-reload-button.component.html","../../../projects/ngssm-data/src/lib/ngssm-data/components/ngssm-scoped-data-source.directive.ts","../../../projects/ngssm-data/src/lib/ngssm-data/data-source-signal.ts","../../../projects/ngssm-data/src/lib/ngssm-data/post-loading-helpers.ts","../../../projects/ngssm-data/src/public-api.ts","../../../projects/ngssm-data/src/ngssm-data.ts"],"sourcesContent":["export enum NgssmDataActionType {\n // Used by the library to initialize all the data sources provided by the application\n registerDataSources = '[NgssmDataActionType] registerDataSources',\n\n // Could be used by the application to register or unregister a data source.\n // This can be used, for example, to limit the lifetime of a data source to the lifetime of a component\n registerDataSource = '[NgssmDataActionType] registerDataSource',\n unregisterDataSource = '[NgssmDataActionType] unregisterDataSource',\n\n // Used to call the loading method to get the value for the data source\n loadDataSourceValue = '[NgssmDataActionType] loadDataSourceValue',\n\n // Update the parameter used by the loading method, if one is required\n setDataSourceParameter = '[NgssmDataActionType] setDataSourceParameter',\n\n // Used to partially update the parameter. Usefull when creating a search component with multiple search criteria.\n updateDataSourceParameter = '[NgssmDataActionType] updateDataSourceParameter',\n\n // Update only the validity of the parameter. Usefull in case of a partial update of the parameter.\n setDataSourceParameterValidity = '[NgssmDataActionType] setDataSourceParameterValidity',\n\n // Clear the stored value associated to a data source\n clearDataSourceValue = '[NgssmDataActionType] clearDataSourceValue',\n\n // Store the value for a given data source\n setDataSourceValue = '[NgssmDataActionType] setDataSourceValue',\n\n // Call the loading method to get the value for an additional property of the data source\n loadDataSourceAdditionalPropertyValue = '[NgssmDataActionType] loadDataSourceAdditionalPropertyValue',\n\n // Store the value for an additional property of the data source\n setDataSourceAdditionalPropertyValue = '[NgssmDataActionType] setDataSourceAdditionalPropertyValue'\n}\n","import { Action } from 'ngssm-store';\n\nexport class NgssmDataSourceValueAction implements Action {\n constructor(\n public readonly type: string,\n public readonly key: string\n ) {}\n}\n","import { NgssmDataSourceValueAction } from './ngssm-data-source-value.action';\nimport { NgssmDataActionType } from './ngssm-data-action-type';\nimport { NgssmLoadDataSourceOptions } from '../model';\n\nexport class NgssmLoadDataSourceValueAction<TParameter = unknown> extends NgssmDataSourceValueAction {\n constructor(\n key: string,\n public readonly options?: NgssmLoadDataSourceOptions<TParameter>\n ) {\n super(NgssmDataActionType.loadDataSourceValue, key);\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\n\nimport { NgssmDataSourceValueAction } from './ngssm-data-source-value.action';\nimport { NgssmDataActionType } from './ngssm-data-action-type';\nimport { NgssmDataSourceValueStatus } from '../model';\n\nexport class NgssmSetDataSourceValueAction<TData = unknown> extends NgssmDataSourceValueAction {\n constructor(\n key: string,\n public readonly status: NgssmDataSourceValueStatus,\n public readonly value?: TData,\n public readonly httpErrorResponse?: HttpErrorResponse\n ) {\n super(NgssmDataActionType.setDataSourceValue, key);\n }\n}\n","import { Action } from 'ngssm-store';\n\nimport { NgssmDataActionType } from './ngssm-data-action-type';\nimport { NgssmDataSource } from '../model';\n\nexport class NgssmRegisterDataSourcesAction implements Action {\n public readonly type: string = NgssmDataActionType.registerDataSources;\n\n constructor(public readonly dataSources: NgssmDataSource[]) {}\n}\n","import { NgssmDataSourceValueAction } from './ngssm-data-source-value.action';\nimport { NgssmDataActionType } from './ngssm-data-action-type';\n\nexport class NgssmClearDataSourceValueAction extends NgssmDataSourceValueAction {\n constructor(\n key: string,\n public readonly clearParameter = false\n ) {\n super(NgssmDataActionType.clearDataSourceValue, key);\n }\n}\n","import { NgssmDataActionType } from './ngssm-data-action-type';\nimport { NgssmDataSourceValueAction } from './ngssm-data-source-value.action';\n\nexport class NgssmSetDataSourceParameterAction<TParameter = unknown> extends NgssmDataSourceValueAction {\n constructor(\n key: string,\n public readonly parameter?: TParameter,\n public readonly parameterIsValid?: boolean,\n public readonly doNotMarkParameterAsModified?: boolean\n ) {\n super(NgssmDataActionType.setDataSourceParameter, key);\n }\n}\n","import { NgssmDataSourceValueAction } from './ngssm-data-source-value.action';\nimport { NgssmDataActionType } from './ngssm-data-action-type';\n\nexport class NgssmLoadDataSourceAdditionalPropertyValueAction extends NgssmDataSourceValueAction {\n constructor(\n key: string,\n public readonly property: string,\n public readonly forceReload?: boolean,\n public readonly postLoadingAction?: () => void\n ) {\n super(NgssmDataActionType.loadDataSourceAdditionalPropertyValue, key);\n }\n}\n","import { NgssmDataSourceValueAction } from './ngssm-data-source-value.action';\nimport { NgssmDataSourceValueStatus } from '../model';\nimport { NgssmDataActionType } from './ngssm-data-action-type';\n\nexport class NgssmSetDataSourceAdditionalPropertyValueAction<TProperty = unknown> extends NgssmDataSourceValueAction {\n constructor(\n key: string,\n public readonly property: string,\n public readonly status: NgssmDataSourceValueStatus,\n public readonly value?: TProperty,\n public readonly postLoadingAction?: () => void\n ) {\n super(NgssmDataActionType.setDataSourceAdditionalPropertyValue, key);\n }\n}\n","import { Action } from 'ngssm-store';\n\nimport { NgssmDataActionType } from './ngssm-data-action-type';\nimport { NgssmDataSource } from '../model';\n\nexport class NgssmRegisterDataSourceAction implements Action {\n public readonly type: string = NgssmDataActionType.registerDataSource;\n\n constructor(public readonly dataSource: NgssmDataSource) {}\n}\n","import { Action } from 'ngssm-store';\nimport { NgssmDataActionType } from './ngssm-data-action-type';\n\nexport class NgssmUnregisterDataSourceAction implements Action {\n public readonly type: string = NgssmDataActionType.unregisterDataSource;\n\n constructor(public readonly dataSourceKey: string) {}\n}\n","import { NgssmDataActionType } from './ngssm-data-action-type';\nimport { NgssmDataSourceValueAction } from './ngssm-data-source-value.action';\n\nexport class NgssmUpdateDataSourceParameterAction<TParameter = unknown> extends NgssmDataSourceValueAction {\n constructor(\n key: string,\n public readonly parameter: Partial<TParameter>\n ) {\n super(NgssmDataActionType.updateDataSourceParameter, key);\n }\n}\n","import { NgssmDataSourceValueAction } from './ngssm-data-source-value.action';\nimport { NgssmDataActionType } from './ngssm-data-action-type';\n\nexport class NgssmSetDataSourceParameterValidityAction extends NgssmDataSourceValueAction {\n constructor(\n key: string,\n public readonly isValid: boolean\n ) {\n super(NgssmDataActionType.setDataSourceParameterValidity, key);\n }\n}\n","import { EnvironmentProviders, InjectionToken, inject, makeEnvironmentProviders } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { State, Store } from 'ngssm-store';\nimport { NgssmLoadDataSourceValueAction } from '../actions';\n\n// Type definition for a function that loads data\nexport type NgssmDataLoading<TData = unknown, TParameter = unknown> = (\n state: State,\n dataSourceKey: string,\n parameter?: TParameter\n) => Observable<TData>;\n\n// Type definition for a function that loads additional properties\nexport type NgssmAdditionalPropertyLoading<TData = unknown> = (\n state: State,\n dataSourceKey: string,\n additionalProperty: string\n) => Observable<TData>;\n\n// Interface defining the structure of a data source\n// Be careful when using linkedToDataSource or linkedDataSources because no check is done to validate that there is no\n// circular dependencies (A => B => C => A, for example).\nexport interface NgssmDataSource<TData = unknown, TParameter = unknown, TAdditionalProperty = unknown> {\n key: string; // Unique identifier for the data source\n dataLifetimeInSeconds?: number; // Optional lifetime for cached data\n dataLoadingFunc: NgssmDataLoading<TData, TParameter>; // Function to load data\n additionalPropertyLoadingFunc?: NgssmAdditionalPropertyLoading<TAdditionalProperty>; // Optional function to load additional properties\n initialParameter?: TParameter; // Optional initial parameter for the data source\n initialParameterInvalid?: boolean; // Flag indicating if the initial parameter is invalid,\n linkedToDataSource?: string; // If target data source valued is updated, a reload is made for this data source. This is used to force updating this data source.\n linkedDataSources?: string[]; // If current source is updated, all the linked data sources are reloaded. This is used to force updating the other data sources.\n dependsOnDataSource?: string; // When loading the current data source, if the dependency source is not loaded, it is first loaded before loading the current one.\n}\n\n// Injection token for registering data sources\nexport const NGSSM_DATA_SOURCE = new InjectionToken<NgssmDataSource>('NGSSM_DATA_SOURCE');\n\n// Optional parameters when registering a data source\nexport interface NgssmDataSourceProvideOptions<TParameter = unknown, TAdditionalProperty = unknown> {\n dataLifetimeInSeconds?: number; // Optional data lifetime\n initialParameter?: TParameter; // Optional initial parameter\n initialParameterInvalid?: boolean; // Optional flag for invalid initial parameter\n additionalPropertyLoadingFunc?: NgssmAdditionalPropertyLoading<TAdditionalProperty>; // Optional function to load additional properties,\n linkedToDataSource?: string; // If target data source valued is updated, a reload is made for this data source.\n linkedDataSources?: string[]; // If current source is updated, all the linked data sources are reloaded.\n dependsOnDataSource?: string; // When loading the current data source, if the dependency source is not loaded, it is first loaded before loading the current one.\n}\n\n// Function to provide a data source as an environment provider\nexport const provideNgssmDataSource = <TData = unknown, TParameter = unknown, TAdditionalProperty = unknown>(\n key: string, // Unique key for the data source\n loadingFunc: NgssmDataLoading<TData, TParameter>, // Function to load data\n options?: NgssmDataSourceProvideOptions<TParameter, TAdditionalProperty> // Optional configuration options\n): EnvironmentProviders => {\n return makeEnvironmentProviders([\n {\n provide: NGSSM_DATA_SOURCE,\n useFactory: () => {\n const dataSource: NgssmDataSource<TData, TParameter, TAdditionalProperty> = {\n key,\n dataLifetimeInSeconds: options?.dataLifetimeInSeconds,\n dataLoadingFunc: loadingFunc,\n additionalPropertyLoadingFunc: options?.additionalPropertyLoadingFunc\n };\n\n if (options?.initialParameter) {\n dataSource.initialParameter = options?.initialParameter;\n }\n\n if (options?.initialParameterInvalid) {\n dataSource.initialParameterInvalid = options?.initialParameterInvalid;\n }\n\n if (options?.linkedToDataSource) {\n dataSource.linkedToDataSource = options?.linkedToDataSource;\n }\n\n if (options?.linkedDataSources) {\n dataSource.linkedDataSources = options?.linkedDataSources;\n }\n\n if (options?.dependsOnDataSource) {\n dataSource.dependsOnDataSource = options?.dependsOnDataSource;\n }\n\n return dataSource;\n },\n multi: true\n }\n ]);\n};\n\n// Function to dispatch an action to load a data source value\nexport const ngssmLoadDataSourceValue = (key: string, forceReload = false): (() => boolean) => {\n return () => {\n inject(Store).dispatchAction(new NgssmLoadDataSourceValueAction(key, { forceReload }));\n return true;\n };\n};\n","import { HttpErrorResponse } from '@angular/common/http';\n\nimport { DateTime } from 'luxon';\n\nexport enum NgssmDataSourceValueStatus {\n none = 'none',\n notRegistered = 'notRegistered',\n loading = 'loading',\n loaded = 'loaded',\n error = 'error'\n}\n\nexport interface NgssmDataSourceAdditionalPropertyValue<TProperty = unknown> {\n status: NgssmDataSourceValueStatus;\n value?: TProperty;\n lastLoadingDate?: DateTime;\n}\n\nexport interface NgssmDataSourceValue<TData = unknown, TParameter = unknown> {\n status: NgssmDataSourceValueStatus;\n value?: TData;\n parameter?: TParameter;\n lastLoadingDate?: DateTime;\n dataLifetimeInSeconds?: number;\n additionalProperties: Record<string, NgssmDataSourceAdditionalPropertyValue>;\n parameterIsValid?: boolean;\n httpErrorResponse?: HttpErrorResponse;\n\n // Parameter has been updated but not value\n valueOutdated?: boolean;\n}\n\nexport type NgssmDataSourceValueAutoReloadType = 'Off' | '1min' | '5min' | '15min';\nexport const getNgssmDataSourceValueAutoReloadTypes = (): { label: string; value: NgssmDataSourceValueAutoReloadType }[] => [\n { label: 'Off', value: 'Off' },\n { label: 'Every minute', value: '1min' },\n { label: 'Every 5 minutes', value: '5min' },\n { label: 'Every 15 minutes', value: '15min' }\n];\n","import update, { Spec } from 'immutability-helper';\n\nimport { Action, NgSsmFeatureState, State } from 'ngssm-store';\nimport { NgssmDataSource, NgssmDataSourceValue } from '../model';\n\nexport const selectNgssmDataState = (state: State): NgssmDataState => state[NgssmDataStateSpecification.featureStateKey] as NgssmDataState;\n\nexport const updateNgssmDataState = (state: State, command: Spec<NgssmDataState, never>): State =>\n update(state, {\n [NgssmDataStateSpecification.featureStateKey]: command\n });\n\nexport interface NgssmDataState {\n dataSourceValues: Record<string, NgssmDataSourceValue>;\n dataSources: Record<string, NgssmDataSource>;\n delayedActions: Record<string, Action>;\n}\n\n@NgSsmFeatureState({\n featureStateKey: NgssmDataStateSpecification.featureStateKey,\n initialState: NgssmDataStateSpecification.initialState\n})\nexport class NgssmDataStateSpecification {\n public static readonly featureStateKey = 'ngssm-data-state';\n public static readonly initialState: NgssmDataState = {\n dataSourceValues: {},\n dataSources: {},\n delayedActions: {}\n };\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport {\n NgssmDataActionType,\n NgssmRegisterDataSourceAction,\n NgssmRegisterDataSourcesAction,\n NgssmUnregisterDataSourceAction\n} from '../actions';\nimport { NgssmDataSource, NgssmDataSourceValue, NgssmDataSourceValueStatus } from '../model';\nimport { selectNgssmDataState, updateNgssmDataState } from '../state';\n\n@Injectable()\nexport class DataSourcesRegistrationReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmDataActionType.registerDataSources,\n NgssmDataActionType.registerDataSource,\n NgssmDataActionType.unregisterDataSource\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmDataActionType.registerDataSources: {\n const registerDataSourcesAction = action as NgssmRegisterDataSourcesAction;\n const dataSourceValues: Record<string, NgssmDataSourceValue> = {};\n const dataSources: Record<string, NgssmDataSource> = {};\n registerDataSourcesAction.dataSources.forEach((dataSource) => {\n if (selectNgssmDataState(state).dataSources[dataSource.key]) {\n return;\n }\n\n dataSourceValues[dataSource.key] = {\n status: NgssmDataSourceValueStatus.none,\n additionalProperties: {}\n };\n\n if (dataSource.dataLifetimeInSeconds) {\n dataSourceValues[dataSource.key].dataLifetimeInSeconds = dataSource.dataLifetimeInSeconds;\n }\n\n if (dataSource.initialParameter) {\n dataSourceValues[dataSource.key].parameter = dataSource.initialParameter;\n }\n\n if (dataSource.initialParameterInvalid) {\n dataSourceValues[dataSource.key].parameterIsValid = false;\n }\n\n dataSources[dataSource.key] = dataSource;\n });\n\n return updateNgssmDataState(state, {\n dataSourceValues: { $merge: dataSourceValues },\n dataSources: { $merge: dataSources }\n });\n }\n\n case NgssmDataActionType.registerDataSource: {\n const registerDataSourceAction = action as NgssmRegisterDataSourceAction;\n return this.updateState(state, new NgssmRegisterDataSourcesAction([registerDataSourceAction.dataSource]));\n }\n\n case NgssmDataActionType.unregisterDataSource: {\n const unregisterDataSource = action as NgssmUnregisterDataSourceAction;\n return updateNgssmDataState(state, {\n dataSourceValues: { $unset: [unregisterDataSource.dataSourceKey] },\n dataSources: { $unset: [unregisterDataSource.dataSourceKey] }\n });\n }\n }\n\n return state;\n }\n}\n","import { State } from 'ngssm-store';\n\nimport { NgssmDataSourceAdditionalPropertyValue, NgssmDataSourceValue, NgssmDataSourceValueStatus } from './model';\nimport { selectNgssmDataState } from './state/ngssm-data.state';\n\nexport const selectNgssmDataSourceValue = <TDataType = unknown, TParameter = unknown>(\n state: State,\n key: string\n): NgssmDataSourceValue<TDataType, TParameter> => {\n return (selectNgssmDataState(state).dataSourceValues[key] ?? {\n status: NgssmDataSourceValueStatus.notRegistered\n }) as NgssmDataSourceValue<TDataType, TParameter>;\n};\n\nexport const selectNgssmDataSourceAdditionalPropertyValue = <TProperty = unknown>(\n state: State,\n key: string,\n property: string\n): NgssmDataSourceAdditionalPropertyValue<TProperty> => {\n return (selectNgssmDataState(state).dataSourceValues[key]?.additionalProperties[property] ?? {\n status: NgssmDataSourceValueStatus.notRegistered\n }) as NgssmDataSourceAdditionalPropertyValue<TProperty>;\n};\n\n/**\n * Returns true if the specified data source is currently loading, false otherwise.\n * @param state The global application state.\n * @param dataSourceKey The unique key of the data source.\n */\nexport const isNgssmDataSourceLoading = (state: State, dataSourceKey: string): boolean =>\n selectNgssmDataSourceValue(state, dataSourceKey)?.status === NgssmDataSourceValueStatus.loading;\n","import { Injectable } from '@angular/core';\n\nimport { DateTime } from 'luxon';\nimport update from 'immutability-helper';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport {\n NgssmClearDataSourceValueAction,\n NgssmDataActionType,\n NgssmLoadDataSourceAdditionalPropertyValueAction,\n NgssmSetDataSourceAdditionalPropertyValueAction,\n NgssmSetDataSourceParameterAction,\n NgssmSetDataSourceParameterValidityAction,\n NgssmSetDataSourceValueAction,\n NgssmUpdateDataSourceParameterAction\n} from '../actions';\nimport { selectNgssmDataState, updateNgssmDataState } from '../state';\nimport { NgssmDataSourceValueStatus } from '../model';\nimport { selectNgssmDataSourceValue } from '../selectors';\n\n@Injectable()\nexport class DataSourceValueReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmDataActionType.setDataSourceValue,\n NgssmDataActionType.clearDataSourceValue,\n NgssmDataActionType.setDataSourceParameter,\n NgssmDataActionType.loadDataSourceAdditionalPropertyValue,\n NgssmDataActionType.setDataSourceAdditionalPropertyValue,\n NgssmDataActionType.updateDataSourceParameter,\n NgssmDataActionType.setDataSourceParameterValidity\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmDataActionType.setDataSourceValue: {\n const ngssmSetDataSourceValueAction = action as NgssmSetDataSourceValueAction;\n const dataSourceValue = selectNgssmDataState(state).dataSourceValues[ngssmSetDataSourceValueAction.key];\n if (!dataSourceValue) {\n break;\n }\n\n return updateNgssmDataState(state, {\n dataSourceValues: {\n [ngssmSetDataSourceValueAction.key]: {\n status: { $set: ngssmSetDataSourceValueAction.status },\n value: { $set: ngssmSetDataSourceValueAction.value },\n lastLoadingDate: { $set: DateTime.now() },\n httpErrorResponse: { $set: ngssmSetDataSourceValueAction.httpErrorResponse }\n }\n }\n });\n }\n\n case NgssmDataActionType.clearDataSourceValue: {\n const ngssmClearDataSourceValueAction = action as NgssmClearDataSourceValueAction;\n let currentState = state;\n if (ngssmClearDataSourceValueAction.clearParameter) {\n currentState = updateNgssmDataState(state, {\n dataSourceValues: {\n [ngssmClearDataSourceValueAction.key]: {\n parameter: { $set: undefined },\n parameterIsValid: { $set: undefined }\n }\n }\n });\n }\n\n return updateNgssmDataState(currentState, {\n dataSourceValues: {\n [ngssmClearDataSourceValueAction.key]: {\n status: { $set: NgssmDataSourceValueStatus.none },\n value: { $set: undefined },\n lastLoadingDate: { $set: undefined },\n additionalProperties: { $set: {} }\n }\n }\n });\n }\n\n case NgssmDataActionType.setDataSourceParameter: {\n const ngssmSetDataSourceParameterAction = action as NgssmSetDataSourceParameterAction;\n return updateNgssmDataState(state, {\n dataSourceValues: {\n [ngssmSetDataSourceParameterAction.key]: {\n parameter: { $set: ngssmSetDataSourceParameterAction.parameter },\n parameterIsValid: { $set: ngssmSetDataSourceParameterAction.parameterIsValid },\n valueOutdated: { $set: ngssmSetDataSourceParameterAction.doNotMarkParameterAsModified === true ? false : true }\n }\n }\n });\n }\n\n case NgssmDataActionType.updateDataSourceParameter: {\n const ngssmUpdateDataSourceParameterAction = action as NgssmUpdateDataSourceParameterAction;\n const newParameter = update<object, never>(\n selectNgssmDataSourceValue(state, ngssmUpdateDataSourceParameterAction.key)?.parameter as object,\n {\n $merge: ngssmUpdateDataSourceParameterAction.parameter\n }\n );\n return updateNgssmDataState(state, {\n dataSourceValues: {\n [ngssmUpdateDataSourceParameterAction.key]: {\n parameter: { $set: newParameter },\n valueOutdated: { $set: true }\n }\n }\n });\n }\n\n case NgssmDataActionType.setDataSourceParameterValidity: {\n const ngssmSetDataSourceParameterValidityAction = action as NgssmSetDataSourceParameterValidityAction;\n return updateNgssmDataState(state, {\n dataSourceValues: {\n [ngssmSetDataSourceParameterValidityAction.key]: {\n parameterIsValid: { $set: ngssmSetDataSourceParameterValidityAction.isValid }\n }\n }\n });\n }\n\n case NgssmDataActionType.loadDataSourceAdditionalPropertyValue: {\n const ngssmLoadDataSourceAdditionalPropertyValueAction = action as NgssmLoadDataSourceAdditionalPropertyValueAction;\n const dataSourcePropertyValue =\n selectNgssmDataState(state).dataSourceValues[ngssmLoadDataSourceAdditionalPropertyValueAction.key]?.additionalProperties[\n ngssmLoadDataSourceAdditionalPropertyValueAction.property\n ];\n\n if (\n dataSourcePropertyValue?.status === NgssmDataSourceValueStatus.loaded &&\n ngssmLoadDataSourceAdditionalPropertyValueAction.forceReload !== true\n ) {\n break;\n }\n\n if (!dataSourcePropertyValue) {\n return updateNgssmDataState(state, {\n dataSourceValues: {\n [ngssmLoadDataSourceAdditionalPropertyValueAction.key]: {\n additionalProperties: {\n [ngssmLoadDataSourceAdditionalPropertyValueAction.property]: {\n $set: {\n status: NgssmDataSourceValueStatus.loading\n }\n }\n }\n }\n }\n });\n }\n\n return updateNgssmDataState(state, {\n dataSourceValues: {\n [ngssmLoadDataSourceAdditionalPropertyValueAction.key]: {\n additionalProperties: {\n [ngssmLoadDataSourceAdditionalPropertyValueAction.property]: {\n status: { $set: NgssmDataSourceValueStatus.loading }\n }\n }\n }\n }\n });\n }\n\n case NgssmDataActionType.setDataSourceAdditionalPropertyValue: {\n const ngssmSetDataSourceAdditionalPropertyValueAction = action as NgssmSetDataSourceAdditionalPropertyValueAction;\n return updateNgssmDataState(state, {\n dataSourceValues: {\n [ngssmSetDataSourceAdditionalPropertyValueAction.key]: {\n additionalProperties: {\n [ngssmSetDataSourceAdditionalPropertyValueAction.property]: {\n $set: {\n status: ngssmSetDataSourceAdditionalPropertyValueAction.status,\n value: ngssmSetDataSourceAdditionalPropertyValueAction.value,\n lastLoadingDate: DateTime.now()\n }\n }\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { DateTime } from 'luxon';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { NgssmDataActionType, NgssmLoadDataSourceValueAction } from '../actions';\nimport { selectNgssmDataState, updateNgssmDataState } from '../state';\nimport { NgssmDataSourceValueStatus } from '../model';\n\n@Injectable()\nexport class LoadDataSourceValueReducer implements Reducer {\n public readonly processedActions: string[] = [NgssmDataActionType.loadDataSourceValue];\n\n public updateState(state: State, action: Action): State {\n if (action.type !== NgssmDataActionType.loadDataSourceValue) {\n return state;\n }\n\n const loadDataSourceValue = action as NgssmLoadDataSourceValueAction;\n\n // If data source is not defined, return input state\n const dataSource = selectNgssmDataState(state).dataSources[loadDataSourceValue.key];\n if (!dataSource) {\n return state;\n }\n\n let currentState = state;\n\n // Check if source depends on another one\n if (dataSource.dependsOnDataSource) {\n const masterSourceValue = selectNgssmDataState(state).dataSourceValues[dataSource.dependsOnDataSource];\n if (masterSourceValue && masterSourceValue.status !== NgssmDataSourceValueStatus.loaded) {\n return updateNgssmDataState(state, {\n delayedActions: {\n [dataSource.dependsOnDataSource]: { $set: action }\n }\n });\n }\n\n if (selectNgssmDataState(state).delayedActions[dataSource.dependsOnDataSource] === action) {\n currentState = updateNgssmDataState(state, {\n delayedActions: { $unset: [dataSource.dependsOnDataSource] }\n });\n }\n }\n\n const dataSourceValue = selectNgssmDataState(state).dataSourceValues[loadDataSourceValue.key];\n if (!dataSourceValue) {\n return state;\n }\n\n let shouldReload = false;\n\n if (loadDataSourceValue.options?.parameter) {\n shouldReload = true;\n currentState = updateNgssmDataState(currentState, {\n dataSourceValues: {\n [loadDataSourceValue.key]: {\n parameter: { $set: loadDataSourceValue.options?.parameter.value }\n }\n }\n });\n }\n\n if (dataSourceValue.status === NgssmDataSourceValueStatus.loaded) {\n if (loadDataSourceValue.options?.forceReload === true || !dataSourceValue.dataLifetimeInSeconds || !dataSourceValue.lastLoadingDate) {\n shouldReload = true;\n } else {\n const dataLifetime = DateTime.now().diff(dataSourceValue.lastLoadingDate, 'second');\n if ((dataLifetime.toObject().seconds ?? 0) > dataSourceValue.dataLifetimeInSeconds) {\n shouldReload = true;\n }\n }\n } else {\n shouldReload = true;\n }\n\n if (dataSourceValue.parameterIsValid === false) {\n shouldReload = false;\n }\n\n if (shouldReload) {\n if (loadDataSourceValue.options?.keepAdditionalProperties !== true) {\n currentState = updateNgssmDataState(currentState, {\n dataSourceValues: {\n [loadDataSourceValue.key]: {\n additionalProperties: { $set: {} }\n }\n }\n });\n }\n\n if (loadDataSourceValue.options?.resetValue === true) {\n currentState = updateNgssmDataState(currentState, {\n dataSourceValues: {\n [loadDataSourceValue.key]: {\n value: { $set: undefined }\n }\n }\n });\n }\n\n return updateNgssmDataState(currentState, {\n dataSourceValues: {\n [loadDataSourceValue.key]: {\n status: { $set: NgssmDataSourceValueStatus.loading },\n valueOutdated: { $set: false }\n }\n }\n });\n }\n\n return state;\n }\n}\n","import { EnvironmentInjector, inject, Injectable, runInInjectionContext } from '@angular/core';\n\nimport { Effect, State, Action, Logger, ActionDispatcher } from 'ngssm-store';\n\nimport {\n NgssmDataActionType,\n NgssmDataSourceValueAction,\n NgssmLoadDataSourceAdditionalPropertyValueAction,\n NgssmSetDataSourceAdditionalPropertyValueAction,\n NgssmSetDataSourceValueAction\n} from '../actions';\nimport { selectNgssmDataState } from '../state';\nimport { NgssmDataSourceValueStatus } from '../model';\n\n@Injectable()\nexport class DataLoadingEffect implements Effect {\n private readonly injector = inject(EnvironmentInjector);\n private readonly logger = inject(Logger);\n\n public readonly processedActions: string[] = [\n NgssmDataActionType.loadDataSourceValue,\n NgssmDataActionType.loadDataSourceAdditionalPropertyValue\n ];\n\n public processAction(actiondispatcher: ActionDispatcher, state: State, action: Action): void {\n const key = (action as NgssmDataSourceValueAction).key;\n const dataSource = selectNgssmDataState(state).dataSources[key];\n if (!dataSource) {\n this.logger.error(`No data source setup for key '${key}'`);\n return;\n }\n\n const dataSourceValue = selectNgssmDataState(state).dataSourceValues[key];\n\n switch (action.type) {\n case NgssmDataActionType.loadDataSourceValue: {\n if (dataSourceValue?.status !== NgssmDataSourceValueStatus.loading) {\n this.logger.information(\n `Data source value for '${key}' is not in '${NgssmDataSourceValueStatus.loading}' status: '${dataSourceValue?.status}'`\n );\n return;\n }\n\n runInInjectionContext(this.injector, () => {\n dataSource.dataLoadingFunc(state, key, dataSourceValue.parameter).subscribe({\n next: (value) =>\n actiondispatcher.dispatchAction(new NgssmSetDataSourceValueAction(key, NgssmDataSourceValueStatus.loaded, value)),\n error: (error) => {\n this.logger.error(`Unable to load data for '${key}'`, error);\n actiondispatcher.dispatchAction(new NgssmSetDataSourceValueAction(key, NgssmDataSourceValueStatus.error, undefined, error));\n }\n });\n });\n\n break;\n }\n\n case NgssmDataActionType.loadDataSourceAdditionalPropertyValue: {\n const ngssmLoadDataSourceAdditionalPropertyValueAction = action as NgssmLoadDataSourceAdditionalPropertyValueAction;\n const property = ngssmLoadDataSourceAdditionalPropertyValueAction.property;\n if (dataSourceValue.additionalProperties[property]?.status !== NgssmDataSourceValueStatus.loading) {\n this.logger.information(\n `Data source additional property value for '${key}' and property '${property}' is not in '${NgssmDataSourceValueStatus.loading}' status: '${dataSourceValue?.status}'`\n );\n return;\n }\n\n runInInjectionContext(this.injector, () => {\n dataSource.additionalPropertyLoadingFunc?.(state, key, property).subscribe({\n next: (value) =>\n actiondispatcher.dispatchAction(\n new NgssmSetDataSourceAdditionalPropertyValueAction(\n key,\n property,\n NgssmDataSourceValueStatus.loaded,\n value,\n ngssmLoadDataSourceAdditionalPropertyValueAction.postLoadingAction\n )\n ),\n error: (error) => {\n this.logger.error(`Unable to load data for '${key}' and property '${property}'`, error);\n actiondispatcher.dispatchAction(\n new NgssmSetDataSourceAdditionalPropertyValueAction(key, property, NgssmDataSourceValueStatus.error)\n );\n }\n });\n });\n\n break;\n }\n }\n }\n}\n","import { effect, EnvironmentInjector, inject, runInInjectionContext } from '@angular/core';\n\nimport { Logger, Store } from 'ngssm-store';\n\nimport {\n NgssmDataActionType,\n NgssmLoadDataSourceAdditionalPropertyValueAction,\n NgssmSetDataSourceAdditionalPropertyValueAction\n} from './actions';\nimport { NgssmDataSourceValueStatus } from './model';\nimport { selectNgssmDataSourceAdditionalPropertyValue } from './selectors';\n\nexport const postLoadingActionExecutorInitializer = async () => {\n const injector = inject(EnvironmentInjector);\n const store = inject(Store);\n const logger = inject(Logger);\n\n effect(() => {\n const action = store.processedAction();\n if (action.type === NgssmDataActionType.loadDataSourceAdditionalPropertyValue) {\n const ngssmLoadDataSourceAdditionalPropertyValueAction = action as NgssmLoadDataSourceAdditionalPropertyValueAction;\n if (!ngssmLoadDataSourceAdditionalPropertyValueAction.postLoadingAction) {\n return;\n }\n\n const isLoaded =\n selectNgssmDataSourceAdditionalPropertyValue(\n store.state(),\n ngssmLoadDataSourceAdditionalPropertyValueAction.key,\n ngssmLoadDataSourceAdditionalPropertyValueAction.property\n )?.status === NgssmDataSourceValueStatus.loaded;\n\n if (isLoaded) {\n logger.information(`[postLoadingActionExecutor] Executing post loading action for ${action.type}`);\n runInInjectionContext(injector, ngssmLoadDataSourceAdditionalPropertyValueAction.postLoadingAction);\n }\n\n return;\n }\n\n if (action.type === NgssmDataActionType.setDataSourceAdditionalPropertyValue) {\n const ngssmSetDataSourceAdditionalPropertyValueAction = action as NgssmSetDataSourceAdditionalPropertyValueAction;\n if (!ngssmSetDataSourceAdditionalPropertyValueAction.postLoadingAction) {\n return;\n }\n\n logger.information(`[postLoadingActionExecutor] Executing post loading action for ${action.type}`);\n runInInjectionContext(injector, ngssmSetDataSourceAdditionalPropertyValueAction.postLoadingAction);\n }\n });\n\n return true;\n};\n","import { effect, inject, untracked } from '@angular/core';\n\nimport { Logger, State, Store } from 'ngssm-store';\n\nimport { NgssmSetDataSourceValueAction, NgssmDataActionType, NgssmLoadDataSourceValueAction } from './actions';\nimport { selectNgssmDataState } from './state';\n\nexport const dataSourcesLinkerInitializer = async () => {\n const store = inject(Store);\n const logger = inject(Logger);\n\n effect(() => {\n const action = store.processedAction();\n if (action.type !== NgssmDataActionType.setDataSourceValue) {\n return;\n }\n\n const setDataSourceValueAction = action as NgssmSetDataSourceValueAction;\n const state = selectNgssmDataState(untracked<State>(() => store.state())).dataSources;\n\n const linkedKeys = new Set(state[setDataSourceValueAction.key]?.linkedDataSources ?? []);\n for (const linkedKey of Object.keys(state).filter((key) => state[key].linkedToDataSource === setDataSourceValueAction.key)) {\n logger.information(`Force reload of data source'${linkedKey}' linked to '${setDataSourceValueAction.key}'`);\n linkedKeys.add(linkedKey);\n }\n\n for (const linkedKey of linkedKeys) {\n store.dispatchAction(\n new NgssmLoadDataSourceValueAction(linkedKey, {\n forceReload: true\n })\n );\n }\n });\n\n return true;\n};\n","import { effect, inject, untracked } from '@angular/core';\n\nimport { EffectFunc, State, Action, Logger, Store } from 'ngssm-store';\n\nimport { NgssmDataActionType, NgssmLoadDataSourceValueAction, NgssmSetDataSourceValueAction } from './actions';\nimport { selectNgssmDataSourceValue } from './selectors';\nimport { NgssmDataSourceValueStatus } from './model';\nimport { selectNgssmDataState } from './state';\n\n/**\n * Effect function that handles loading a data source with a dependency.\n *\n * This effect checks if the requested data source has a dependency that is not yet loaded.\n * If the data source is not currently loading and has a dependency, it dispatches an action\n * to load the dependency data source first. If the data source does not have a dependency,\n * it logs an error message.\n *\n * @param state - The current application state.\n * @param action - The action triggering the effect, expected to be of type NgssmLoadDataSourceValueAction.\n * @returns void\n */\nexport const loadDataSourceWithDependencyEffect: EffectFunc = (state: State, action: Action) => {\n const logger = inject(Logger);\n const ngssmLoadDataSourceValueAction = action as NgssmLoadDataSourceValueAction;\n const dataSourceValue = selectNgssmDataSourceValue(state, ngssmLoadDataSourceValueAction.key);\n\n // We only take into account source with a dependency not already loaded. In that case, the status must not be loading.\n if (dataSourceValue.status === NgssmDataSourceValueStatus.loading) {\n return;\n }\n\n const dataSource = selectNgssmDataState(state).dataSources[ngssmLoadDataSourceValueAction.key];\n\n // Should not happen. But, just in case...\n const dependency = dataSource.dependsOnDataSource;\n if (!dependency) {\n logger.error(`Data source ${ngssmLoadDataSourceValueAction.key} depends on no other data source!`);\n return;\n }\n\n const store = inject(Store);\n store.dispatchAction(new NgssmLoadDataSourceValueAction(dependency));\n};\n\n/**\n * Effect initializer that listens for NgssmSetDataSourceValueAction and dispatches any delayed loading actions\n * for dependent data sources. This ensures that when a data source is set, any queued actions for sources\n * waiting on this dependency are executed.\n */\nexport const dependentDataSourceLoadInitializer = async () => {\n const store = inject(Store);\n const logger = inject(Logger);\n\n effect(() => {\n const action = store.processedAction();\n if (action.type !== NgssmDataActionType.setDataSourceValue) {\n return;\n }\n\n const setDataSourceValueAction = action as NgssmSetDataSourceValueAction;\n const state = untracked<State>(() => store.state());\n\n const storedAction = selectNgssmDataState(state).delayedActions[setDataSourceValueAction.key];\n if (storedAction) {\n logger.information(`Dispatching delayed loading action for source ${(storedAction as NgssmLoadDataSourceValueAction).key}`);\n store.dispatchAction(storedAction);\n }\n });\n};\n","import { EnvironmentProviders, makeEnvironmentProviders, inject, provideAppInitializer } from '@angular/core';\n\nimport { Store, provideEffectFunc, provideEffects, provideReducers } from 'ngssm-store';\n\nimport { NGSSM_DATA_SOURCE, NgssmDataSource } from './model';\nimport { DataSourceValueReducer, DataSourcesRegistrationReducer, LoadDataSourceValueReducer } from './reducers';\nimport { DataLoadingEffect } from './effects';\nimport { NgssmDataActionType, NgssmRegisterDataSourcesAction } from './actions';\nimport { postLoadingActionExecutorInitializer } from './post-loading-action-executor';\nimport { dataSourcesLinkerInitializer } from './data-sources-linker';\nimport { dependentDataSourceLoadInitializer, loadDataSourceWithDependencyEffect } from './data-source-with-dependency';\n\nconst initDataSourceValues = () => {\n const store = inject(Store);\n const dataSources = (inject(NGSSM_DATA_SOURCE, { optional: true }) as unknown as NgssmDataSource[]) ?? [];\n if (dataSources.length > 0) {\n store.dispatchAction(new NgssmRegisterDataSourcesAction(dataSources));\n }\n};\n\nexport const provideNgssmData = (): EnvironmentProviders => {\n return makeEnvironmentProviders([\n provideAppInitializer(initDataSourceValues),\n provideAppInitializer(postLoadingActionExecutorInitializer),\n provideAppInitializer(dataSourcesLinkerInitializer),\n provideAppInitializer(dependentDataSourceLoadInitializer),\n provideReducers(DataSourcesRegistrationReducer, DataSourceValueReducer, LoadDataSourceValueReducer),\n provideEffects(DataLoadingEffect),\n provideEffectFunc(NgssmDataActionType.loadDataSourceValue, loadDataSourceWithDependencyEffect)\n ]);\n};\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { State } from 'ngssm-store';\n\nimport { NgssmDataSourceValueStatus } from '../model';\nimport { selectNgssmDataSourceValue } from '../selectors';\n\n@Pipe({\n name: 'isNgssmDataSourceValueStatus'\n})\nexport class IsNgssmDataSourceValueStatusPipe implements PipeTransform {\n public transform(value: State, ...args: string[]): boolean {\n const key = args[0];\n const expectedStatuses = args.slice(1).map((a) => a as NgssmDataSourceValueStatus);\n const itemStatus = selectNgssmDataSourceValue(value, key).status;\n return expectedStatuses.includes(itemStatus);\n }\n}\n","import { Component, ChangeDetectionStrategy, input, OnDestroy } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatOption, MatSelect } from '@angular/material/select';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\n\nimport { getNgssmDataSourceValueAutoReloadTypes, NgssmDataSourceValueAutoReloadType } from '../../model';\n\n@Component({\n selector: 'ngssm-auto-reload',\n imports: [ReactiveFormsModule, MatFormField, MatLabel, MatSelect, MatOption],\n templateUrl: './ngssm-auto-reload.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmAutoReloadComponent implements OnDestroy {\n private timerId: number | undefined;\n\n public readonly autoReloadAction = input<() => void>(() => {\n // nothing by default\n });\n\n public readonly reloadTypes = getNgssmDataSourceValueAutoReloadTypes();\n public readonly reloadTypeControl = new FormControl<NgssmDataSourceValueAutoReloadType>('Off');\n\n constructor() {\n this.reloadTypeControl.valueChanges.subscribe((v) => {\n if (v === 'Off' && this.timerId) {\n clearInterval(this.timerId);\n this.timerId = undefined;\n return;\n }\n\n let period = 60000;\n switch (v) {\n case '5min':\n period = 5 * period;\n break;\n\n case '15min':\n period = 15 * period;\n break;\n }\n\n this.timerId = setInterval(this.autoReloadAction(), period) as unknown as number;\n });\n }\n\n public ngOnDestroy(): void {\n if (this.timerId) {\n clearInterval(this.timerId);\n this.timerId = undefined;\n }\n }\n}\n","<mat-form-field>\n <mat-label>Select auto reload period</mat-label>\n <mat-select [formControl]=\"reloadTypeControl\">\n @for (option of reloadTypes; track option.value){\n <mat-option [value]=\"option.value\">\n {{option.label}}\n </mat-option>\n }\n </mat-select>\n</mat-form-field>","import { Component, ChangeDetectionStrategy, signal, input, effect, inject } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\n\nimport { DateTime } from 'luxon';\n\nimport { createSignal, Store } from 'ngssm-store';\n\nimport { selectNgssmDataState } from '../../state';\nimport { NgssmDataSourceValue, NgssmDataSourceValueStatus } from '../../model';\nimport { NgssmLoadDataSourceValueAction } from '../../actions';\nimport { NgssmAutoReloadComponent } from '../ngssm-auto-reload/ngssm-auto-reload.component';\n\n@Component({\n selector: 'ngssm-data-reload-button',\n imports: [NgClass, MatButton, MatIconButton, MatTooltip, MatIcon, MatProgressSpinner, NgssmAutoReloadComponent],\n templateUrl: './ngssm-data-reload-button.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmDataReloadButtonComponent {\n private readonly store = inject(Store);\n\n private readonly dataSourceValues = createSignal<Record<string, NgssmDataSourceValue>>(\n (state) => selectNgssmDataState(state).dataSourceValues\n );\n\n public readonly loadInProgress = signal<boolean>(false);\n public readonly buttonDisabled = signal<boolean>(true);\n public readonly tooltipMessage = signal<string>('');\n public readonly color = signal<string>('primary');\n public readonly reloadAction = () => this.reload();\n\n public label = input<string | undefined>(undefined);\n public keepAdditionalProperties = input(false);\n public buttonIcon = input<string>('fa-solid fa-rotate-right');\n public autoReloadEnabled = input(false);\n public dataSourceKeys = input<string[]>([]);\n\n constructor() {\n effect(() => {\n const values = this.dataSourceValues();\n const keys = this.dataSourceKeys();\n this.loadInProgress.set(keys.findIndex((v) => values[v]?.status === NgssmDataSourceValueStatus.loading) !== -1);\n let timestamp: DateTime | undefined;\n keys.forEach((key) => {\n const keyTimestamp = values[key]?.lastLoadingDate;\n if (keyTimestamp) {\n if (!timestamp || timestamp > keyTimestamp) {\n timestamp = keyTimestamp;\n }\n }\n });\n\n let tooltiMessage = 'Reload data.';\n if (timestamp) {\n tooltiMessage = [tooltiMessage, `Loaded at ${timestamp.toHTTP()}`].join('\\n');\n }\n this.tooltipMessage.set(tooltiMessage);\n\n if (this.loadInProgress()) {\n this.buttonDisabled.set(true);\n return;\n }\n\n const someHasAnInvalidParameter = keys.findIndex((key) => values[key]?.parameterIsValid === false) !== -1;\n if (someHasAnInvalidParameter) {\n this.buttonDisabled.set(true);\n return;\n }\n\n this.buttonDisabled.set(keys.findIndex((v) => !!values[v]) === -1);\n\n const someHasAnOutdatedValue = keys.findIndex((key) => values[key]?.valueOutdated === true) !== -1;\n this.color.set(someHasAnOutdatedValue ? 'accent' : 'primary');\n });\n }\n\n public reload(): void {\n const isDisabled = this.buttonDisabled();\n if (isDisabled) {\n return;\n }\n\n this.dataSourceKeys().forEach((key) =>\n this.store.dispatchAction(\n new NgssmLoadDataSourceValueAction(key, { forceReload: true, keepAdditionalProperties: this.keepAdditionalProperties() })\n )\n );\n }\n}\n","<div class=\"flex-row-center\">\n @if (label(); as buttonLabel) {\n <button\n mat-stroked-button\n [color]=\"color()\"\n class=\"mat-{{color()}}\"\n (click)=\"reload()\"\n [matTooltip]=\"tooltipMessage()\"\n [disabled]=\"buttonDisabled() === true\"\n id=\"reloadButton\">\n <div class=\"flex-row-center\">\n @if (loadInProgress()) {\n <mat-spinner [diameter]=\"24\" id=\"loadingSpinner\"></mat-spinner>\n } @else {\n <mat-icon [ngClass]=\"buttonIcon()\" [color]=\"color()\"></mat-icon>\n }\n\n <span style=\"width: 0.5rem\"></span>\n\n {{ buttonLabel }}\n </div>\n </button>\n } @else {\n <button\n mat-icon-button\n [color]=\"color()\"\n class=\"mat-{{color()}}\"\n (click)=\"reload()\"\n [matTooltip]=\"tooltipMessage()\"\n [disabled]=\"buttonDisabled() === true\"\n id=\"reloadButton\">\n @if (loadInProgress()) {\n <mat-spinner [diameter]=\"24\" id=\"loadingSpinner\"></mat-spinner>\n } @else {\n <mat-icon [ngClass]=\"buttonIcon()\" [color]=\"color()\"></mat-icon>\n }\n </button>\n }\n\n @if (autoReloadEnabled()) {\n <ngssm-auto-reload class=\"with-margin-left-8\" [autoReloadAction]=\"reloadAction\"></ngssm-auto-reload>\n }\n</div>\n","import { Directive, effect, inject, input, OnDestroy } from '@angular/core';\n\nimport { ACTION_DISPATCHER, ActionDispatcher } from 'ngssm-store';\n\nimport { NgssmDataSource } from '../model';\nimport { NgssmRegisterDataSourceAction, NgssmUnregisterDataSourceAction } from '../actions';\n\n@Directive({\n selector: '[ngssmScopedDataSource]'\n})\nexport class NgssmScopedDataSourceDirective implements OnDestroy {\n private readonly actionDispatcher: ActionDispatcher = inject(ACTION_DISPATCHER);\n private isInitialized = false;\n\n public readonly ngssmScopedDataSource = input.required<NgssmDataSource, NgssmDataSource>({\n transform: this.checkDataSoruce\n });\n\n constructor() {\n effect(() => {\n const dataSource = this.ngssmScopedDataSource();\n this.actionDispatcher.dispatchAction(new NgssmRegisterDataSourceAction(dataSource));\n });\n }\n\n public ngOnDestroy(): void {\n const key = this.ngssmScopedDataSource().key;\n if (key) {\n this.actionDispatcher.dispatchAction(new NgssmUnregisterDataSourceAction(key));\n }\n }\n\n private checkDataSoruce(value: NgssmDataSource): NgssmDataSource {\n if (this.isInitialized) {\n throw new Error('Data source is already set.');\n }\n\n this.isInitialized = true;\n\n return value;\n }\n}\n","import { computed, inject, Signal } from '@angular/core';\nimport { Store } from 'ngssm-store';\n\nimport { selectNgssmDataSourceValue } from './selectors';\n\nexport interface NgssmDataSourceSignal<T = unknown> {\n key: string;\n value: Signal<T>;\n}\n\nexport type NgssmDataSourceSignalType = 'value' | 'status';\n\nexport interface NgssmDataSourceSignalOptions<T = unknown> {\n type?: NgssmDataSourceSignalType;\n defaultValue?: T;\n}\n\nexport const dataSourceToSignal = <T = unknown>(key: string, options?: NgssmDataSourceSignalOptions<T>): NgssmDataSourceSignal<T> => {\n const store = inject(Store);\n\n const usedOptions = options ?? { type: 'value' };\n if (!usedOptions.type) {\n usedOptions.type = 'value';\n }\n\n switch (usedOptions.type) {\n case 'status':\n return {\n key,\n value: computed(() => selectNgssmDataSourceValue(store.state(), key)?.status ?? options?.defaultValue) as Signal<T>\n };\n\n case 'value':\n return {\n key,\n value: computed(() => selectNgssmDataSourceValue<T>(store.state(), key)?.value ?? options?.defaultValue) as Signal<T>\n };\n }\n};\n","import { Injector, effect, inject, runInInjectionContext } from '@angular/core';\n\nimport { Store } from 'ngssm-store';\n\nimport { NgssmDataSourceValueStatus } from './model';\nimport { NgssmDataActionType, NgssmSetDataSourceValueAction } from './actions';\n\n/**\n * Creates a runner function that executes a post-loading action when the specified data source's value is set.\n * The runner listens for NgssmSetDataSourceValueAction for the given dataSourceKey and invokes the provided postLoadingAction\n * with the new status. The effect is automatically destroyed after the action is processed.\n *\n * @param dataSourceKey The key of the data source to monitor.\n * @param postLoadingAction A callback to execute with the new NgssmDataSourceValueStatus. It is called in an injection context.\n * @returns A function that, when called, sets up the effect and runner.\n */\nexport const postNgssmDataSourceLoadingActionRunnerBuilder = (\n dataSourceKey: string,\n postLoadingAction: (status: NgssmDataSourceValueStatus) => void\n): (() => void) => {\n const injector = inject(Injector);\n return () => {\n runInInjectionContext(injector, () => {\n const store = inject(Store);\n const effectRef = effect(() => {\n const action = store.processedAction();\n if (action.type === NgssmDataActionType.setDataSourceValue) {\n const typedAction = action as NgssmSetDataSourceValueAction;\n if (typedAction.key === dataSourceKey) {\n runInInjectionContext(injector, () => postLoadingAction(typedAction.status));\n effectRef.destroy();\n }\n }\n });\n });\n };\n};\n","/*\n * Public API Surface of ngssm-data\n */\n\nexport * from './lib/ngssm-data/public-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngssm-data.mjs","sources":["../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-data-action-type.ts","../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-data-source-value.action.ts","../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-load-data-source-value.action.ts","../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-set-data-source-value.action.ts","../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-register-data-sources.action.ts","../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-clear-data-source-value.action.ts","../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-set-data-source-parameter.action.ts","../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-load-data-source-additional-property-value.action.ts","../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-set-data-source-additional-property-value.action.ts","../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-register-data-source.action.ts","../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-unregister-data-source.action.ts","../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-update-data-source-parameter.action.ts","../../../projects/ngssm-data/src/lib/ngssm-data/actions/ngssm-set-data-source-parameter-validity.action.ts","../../../projects/ngssm-data/src/lib/ngssm-data/model/ngssm-data-source.ts","../../../projects/ngssm-data/src/lib/ngssm-data/model/ngssm-data-source-value.ts","../../../projects/ngssm-data/src/lib/ngssm-data/state/ngssm-data.state.ts","../../../projects/ngssm-data/src/lib/ngssm-data/reducers/data-sources-registration.reducer.ts","../../../projects/ngssm-data/src/lib/ngssm-data/selectors.ts","../../../projects/ngssm-data/src/lib/ngssm-data/reducers/data-source-value.reducer.ts","../../../projects/ngssm-data/src/lib/ngssm-data/reducers/load-data-source-value.reducer.ts","../../../projects/ngssm-data/src/lib/ngssm-data/effects/data-loading.effect.ts","../../../projects/ngssm-data/src/lib/ngssm-data/post-loading-action-executor.ts","../../../projects/ngssm-data/src/lib/ngssm-data/data-sources-linker.ts","../../../projects/ngssm-data/src/lib/ngssm-data/data-source-with-dependency.ts","../../../projects/ngssm-data/src/lib/ngssm-data/provide-ngssm-data.ts","../../../projects/ngssm-data/src/lib/ngssm-data/components/is-ngssm-data-source-value-status.pipe.ts","../../../projects/ngssm-data/src/lib/ngssm-data/components/ngssm-auto-reload/ngssm-auto-reload.component.ts","../../../projects/ngssm-data/src/lib/ngssm-data/components/ngssm-auto-reload/ngssm-auto-reload.component.html","../../../projects/ngssm-data/src/lib/ngssm-data/components/ngssm-data-reload-button/ngssm-data-reload-button.component.ts","../../../projects/ngssm-data/src/lib/ngssm-data/components/ngssm-data-reload-button/ngssm-data-reload-button.component.html","../../../projects/ngssm-data/src/lib/ngssm-data/components/ngssm-scoped-data-source.directive.ts","../../../projects/ngssm-data/src/lib/ngssm-data/data-source-signal.ts","../../../projects/ngssm-data/src/lib/ngssm-data/post-loading-helpers.ts","../../../projects/ngssm-data/src/public-api.ts","../../../projects/ngssm-data/src/ngssm-data.ts"],"sourcesContent":["export enum NgssmDataActionType {\n // Used by the library to initialize all the data sources provided by the application\n registerDataSources = '[NgssmDataActionType] registerDataSources',\n\n // Could be used by the application to register or unregister a data source.\n // This can be used, for example, to limit the lifetime of a data source to the lifetime of a component\n registerDataSource = '[NgssmDataActionType] registerDataSource',\n unregisterDataSource = '[NgssmDataActionType] unregisterDataSource',\n\n // Used to call the loading method to get the value for the data source\n loadDataSourceValue = '[NgssmDataActionType] loadDataSourceValue',\n\n // Update the parameter used by the loading method, if one is required\n setDataSourceParameter = '[NgssmDataActionType] setDataSourceParameter',\n\n // Used to partially update the parameter. Usefull when creating a search component with multiple search criteria.\n updateDataSourceParameter = '[NgssmDataActionType] updateDataSourceParameter',\n\n // Update only the validity of the parameter. Usefull in case of a partial update of the parameter.\n setDataSourceParameterValidity = '[NgssmDataActionType] setDataSourceParameterValidity',\n\n // Clear the stored value associated to a data source\n clearDataSourceValue = '[NgssmDataActionType] clearDataSourceValue',\n\n // Store the value for a given data source\n setDataSourceValue = '[NgssmDataActionType] setDataSourceValue',\n\n // Call the loading method to get the value for an additional property of the data source\n loadDataSourceAdditionalPropertyValue = '[NgssmDataActionType] loadDataSourceAdditionalPropertyValue',\n\n // Store the value for an additional property of the data source\n setDataSourceAdditionalPropertyValue = '[NgssmDataActionType] setDataSourceAdditionalPropertyValue'\n}\n","import { Action } from 'ngssm-store';\n\nexport class NgssmDataSourceValueAction implements Action {\n constructor(\n public readonly type: string,\n public readonly key: string\n ) {}\n}\n","import { NgssmDataSourceValueAction } from './ngssm-data-source-value.action';\nimport { NgssmDataActionType } from './ngssm-data-action-type';\nimport { NgssmLoadDataSourceOptions } from '../model';\n\nexport class NgssmLoadDataSourceValueAction<TParameter = unknown> extends NgssmDataSourceValueAction {\n constructor(\n key: string,\n public readonly options?: NgssmLoadDataSourceOptions<TParameter>\n ) {\n super(NgssmDataActionType.loadDataSourceValue, key);\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\n\nimport { NgssmDataSourceValueAction } from './ngssm-data-source-value.action';\nimport { NgssmDataActionType } from './ngssm-data-action-type';\nimport { NgssmDataSourceValueStatus } from '../model';\n\nexport class NgssmSetDataSourceValueAction<TData = unknown> extends NgssmDataSourceValueAction {\n constructor(\n key: string,\n public readonly status: NgssmDataSourceValueStatus,\n public readonly value?: TData,\n public readonly httpErrorResponse?: HttpErrorResponse\n ) {\n super(NgssmDataActionType.setDataSourceValue, key);\n }\n}\n","import { Action } from 'ngssm-store';\n\nimport { NgssmDataActionType } from './ngssm-data-action-type';\nimport { NgssmDataSource } from '../model';\n\nexport class NgssmRegisterDataSourcesAction implements Action {\n public readonly type: string = NgssmDataActionType.registerDataSources;\n\n constructor(public readonly dataSources: NgssmDataSource[]) {}\n}\n","import { NgssmDataSourceValueAction } from './ngssm-data-source-value.action';\nimport { NgssmDataActionType } from './ngssm-data-action-type';\n\nexport class NgssmClearDataSourceValueAction extends NgssmDataSourceValueAction {\n constructor(\n key: string,\n public readonly clearParameter = false\n ) {\n super(NgssmDataActionType.clearDataSourceValue, key);\n }\n}\n","import { NgssmDataActionType } from './ngssm-data-action-type';\nimport { NgssmDataSourceValueAction } from './ngssm-data-source-value.action';\n\nexport class NgssmSetDataSourceParameterAction<TParameter = unknown> extends NgssmDataSourceValueAction {\n constructor(\n key: string,\n public readonly parameter?: TParameter,\n public readonly parameterIsValid?: boolean,\n public readonly doNotMarkParameterAsModified?: boolean\n ) {\n super(NgssmDataActionType.setDataSourceParameter, key);\n }\n}\n","import { NgssmDataSourceValueAction } from './ngssm-data-source-value.action';\nimport { NgssmDataActionType } from './ngssm-data-action-type';\n\nexport class NgssmLoadDataSourceAdditionalPropertyValueAction extends NgssmDataSourceValueAction {\n constructor(\n key: string,\n public readonly property: string,\n public readonly forceReload?: boolean,\n public readonly postLoadingAction?: () => void\n ) {\n super(NgssmDataActionType.loadDataSourceAdditionalPropertyValue, key);\n }\n}\n","import { NgssmDataSourceValueAction } from './ngssm-data-source-value.action';\nimport { NgssmDataSourceValueStatus } from '../model';\nimport { NgssmDataActionType } from './ngssm-data-action-type';\n\nexport class NgssmSetDataSourceAdditionalPropertyValueAction<TProperty = unknown> extends NgssmDataSourceValueAction {\n constructor(\n key: string,\n public readonly property: string,\n public readonly status: NgssmDataSourceValueStatus,\n public readonly value?: TProperty,\n public readonly postLoadingAction?: () => void\n ) {\n super(NgssmDataActionType.setDataSourceAdditionalPropertyValue, key);\n }\n}\n","import { Action } from 'ngssm-store';\n\nimport { NgssmDataActionType } from './ngssm-data-action-type';\nimport { NgssmDataSource } from '../model';\n\nexport class NgssmRegisterDataSourceAction implements Action {\n public readonly type: string = NgssmDataActionType.registerDataSource;\n\n constructor(public readonly dataSource: NgssmDataSource) {}\n}\n","import { Action } from 'ngssm-store';\nimport { NgssmDataActionType } from './ngssm-data-action-type';\n\nexport class NgssmUnregisterDataSourceAction implements Action {\n public readonly type: string = NgssmDataActionType.unregisterDataSource;\n\n constructor(public readonly dataSourceKey: string) {}\n}\n","import { NgssmDataActionType } from './ngssm-data-action-type';\nimport { NgssmDataSourceValueAction } from './ngssm-data-source-value.action';\n\nexport class NgssmUpdateDataSourceParameterAction<TParameter = unknown> extends NgssmDataSourceValueAction {\n constructor(\n key: string,\n public readonly parameter: Partial<TParameter>\n ) {\n super(NgssmDataActionType.updateDataSourceParameter, key);\n }\n}\n","import { NgssmDataSourceValueAction } from './ngssm-data-source-value.action';\nimport { NgssmDataActionType } from './ngssm-data-action-type';\n\nexport class NgssmSetDataSourceParameterValidityAction extends NgssmDataSourceValueAction {\n constructor(\n key: string,\n public readonly isValid: boolean\n ) {\n super(NgssmDataActionType.setDataSourceParameterValidity, key);\n }\n}\n","import { EnvironmentProviders, InjectionToken, inject, makeEnvironmentProviders } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { State, Store } from 'ngssm-store';\nimport { NgssmLoadDataSourceValueAction } from '../actions';\n\n// Type definition for a function that loads data\nexport type NgssmDataLoading<TData = unknown, TParameter = unknown> = (\n state: State,\n dataSourceKey: string,\n parameter?: TParameter\n) => Observable<TData>;\n\n// Type definition for a function that loads additional properties\nexport type NgssmAdditionalPropertyLoading<TData = unknown> = (\n state: State,\n dataSourceKey: string,\n additionalProperty: string\n) => Observable<TData>;\n\n// Interface defining the structure of a data source\n// Be careful when using linkedToDataSource or linkedDataSources because no check is done to validate that there is no\n// circular dependencies (A => B => C => A, for example).\nexport interface NgssmDataSource<TData = unknown, TParameter = unknown, TAdditionalProperty = unknown> {\n key: string; // Unique identifier for the data source\n dataLifetimeInSeconds?: number; // Optional lifetime for cached data\n dataLoadingFunc: NgssmDataLoading<TData, TParameter>; // Function to load data\n additionalPropertyLoadingFunc?: NgssmAdditionalPropertyLoading<TAdditionalProperty>; // Optional function to load additional properties\n initialParameter?: TParameter; // Optional initial parameter for the data source\n initialParameterInvalid?: boolean; // Flag indicating if the initial parameter is invalid,\n linkedToDataSource?: string; // If target data source valued is updated, a reload is made for this data source. This is used to force updating this data source.\n linkedDataSources?: string[]; // If current source is updated, all the linked data sources are reloaded. This is used to force updating the other data sources.\n dependsOnDataSource?: string; // When loading the current data source, if the dependency source is not loaded, it is first loaded before loading the current one.\n}\n\n// Injection token for registering data sources\nexport const NGSSM_DATA_SOURCE = new InjectionToken<NgssmDataSource>('NGSSM_DATA_SOURCE');\n\n// Optional parameters when registering a data source\nexport interface NgssmDataSourceProvideOptions<TParameter = unknown, TAdditionalProperty = unknown> {\n dataLifetimeInSeconds?: number; // Optional data lifetime\n initialParameter?: TParameter; // Optional initial parameter\n initialParameterInvalid?: boolean; // Optional flag for invalid initial parameter\n additionalPropertyLoadingFunc?: NgssmAdditionalPropertyLoading<TAdditionalProperty>; // Optional function to load additional properties,\n linkedToDataSource?: string; // If target data source valued is updated, a reload is made for this data source.\n linkedDataSources?: string[]; // If current source is updated, all the linked data sources are reloaded.\n dependsOnDataSource?: string; // When loading the current data source, if the dependency source is not loaded, it is first loaded before loading the current one.\n}\n\n// Function to provide a data source as an environment provider\nexport const provideNgssmDataSource = <TData = unknown, TParameter = unknown, TAdditionalProperty = unknown>(\n key: string, // Unique key for the data source\n loadingFunc: NgssmDataLoading<TData, TParameter>, // Function to load data\n options?: NgssmDataSourceProvideOptions<TParameter, TAdditionalProperty> // Optional configuration options\n): EnvironmentProviders => {\n return makeEnvironmentProviders([\n {\n provide: NGSSM_DATA_SOURCE,\n useFactory: () => {\n const dataSource: NgssmDataSource<TData, TParameter, TAdditionalProperty> = {\n key,\n dataLifetimeInSeconds: options?.dataLifetimeInSeconds,\n dataLoadingFunc: loadingFunc,\n additionalPropertyLoadingFunc: options?.additionalPropertyLoadingFunc\n };\n\n if (options?.initialParameter) {\n dataSource.initialParameter = options?.initialParameter;\n }\n\n if (options?.initialParameterInvalid) {\n dataSource.initialParameterInvalid = options?.initialParameterInvalid;\n }\n\n if (options?.linkedToDataSource) {\n dataSource.linkedToDataSource = options?.linkedToDataSource;\n }\n\n if (options?.linkedDataSources) {\n dataSource.linkedDataSources = options?.linkedDataSources;\n }\n\n if (options?.dependsOnDataSource) {\n dataSource.dependsOnDataSource = options?.dependsOnDataSource;\n }\n\n return dataSource;\n },\n multi: true\n }\n ]);\n};\n\n// Function to dispatch an action to load a data source value\nexport const ngssmLoadDataSourceValue = (key: string, forceReload = false): (() => boolean) => {\n return () => {\n inject(Store).dispatchAction(new NgssmLoadDataSourceValueAction(key, { forceReload }));\n return true;\n };\n};\n","import { HttpErrorResponse } from '@angular/common/http';\n\nimport { DateTime } from 'luxon';\n\nexport enum NgssmDataSourceValueStatus {\n none = 'none',\n notRegistered = 'notRegistered',\n loading = 'loading',\n loaded = 'loaded',\n error = 'error'\n}\n\nexport interface NgssmDataSourceAdditionalPropertyValue<TProperty = unknown> {\n status: NgssmDataSourceValueStatus;\n value?: TProperty;\n lastLoadingDate?: DateTime;\n}\n\nexport interface NgssmDataSourceValue<TData = unknown, TParameter = unknown> {\n status: NgssmDataSourceValueStatus;\n value?: TData;\n parameter?: TParameter;\n lastLoadingDate?: DateTime;\n dataLifetimeInSeconds?: number;\n additionalProperties: Record<string, NgssmDataSourceAdditionalPropertyValue>;\n parameterIsValid?: boolean;\n httpErrorResponse?: HttpErrorResponse;\n\n // Parameter has been updated but not value\n valueOutdated?: boolean;\n}\n\nexport type NgssmDataSourceValueAutoReloadType = 'Off' | '1min' | '5min' | '15min';\nexport const getNgssmDataSourceValueAutoReloadTypes = (): { label: string; value: NgssmDataSourceValueAutoReloadType }[] => [\n { label: 'Off', value: 'Off' },\n { label: 'Every minute', value: '1min' },\n { label: 'Every 5 minutes', value: '5min' },\n { label: 'Every 15 minutes', value: '15min' }\n];\n","import update, { Spec } from 'immutability-helper';\n\nimport { Action, NgSsmFeatureState, State } from 'ngssm-store';\nimport { NgssmDataSource, NgssmDataSourceValue } from '../model';\n\nexport const selectNgssmDataState = (state: State): NgssmDataState => state[NgssmDataStateSpecification.featureStateKey] as NgssmDataState;\n\nexport const updateNgssmDataState = (state: State, command: Spec<NgssmDataState, never>): State =>\n update(state, {\n [NgssmDataStateSpecification.featureStateKey]: command\n });\n\nexport interface NgssmDataState {\n dataSourceValues: Record<string, NgssmDataSourceValue>;\n dataSources: Record<string, NgssmDataSource>;\n delayedActions: Record<string, Action>;\n}\n\n@NgSsmFeatureState({\n featureStateKey: NgssmDataStateSpecification.featureStateKey,\n initialState: NgssmDataStateSpecification.initialState\n})\nexport class NgssmDataStateSpecification {\n public static readonly featureStateKey = 'ngssm-data-state';\n public static readonly initialState: NgssmDataState = {\n dataSourceValues: {},\n dataSources: {},\n delayedActions: {}\n };\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport {\n NgssmDataActionType,\n NgssmRegisterDataSourceAction,\n NgssmRegisterDataSourcesAction,\n NgssmUnregisterDataSourceAction\n} from '../actions';\nimport { NgssmDataSource, NgssmDataSourceValue, NgssmDataSourceValueStatus } from '../model';\nimport { selectNgssmDataState, updateNgssmDataState } from '../state';\n\n@Injectable()\nexport class DataSourcesRegistrationReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmDataActionType.registerDataSources,\n NgssmDataActionType.registerDataSource,\n NgssmDataActionType.unregisterDataSource\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmDataActionType.registerDataSources: {\n const registerDataSourcesAction = action as NgssmRegisterDataSourcesAction;\n const dataSourceValues: Record<string, NgssmDataSourceValue> = {};\n const dataSources: Record<string, NgssmDataSource> = {};\n registerDataSourcesAction.dataSources.forEach((dataSource) => {\n if (selectNgssmDataState(state).dataSources[dataSource.key]) {\n return;\n }\n\n dataSourceValues[dataSource.key] = {\n status: NgssmDataSourceValueStatus.none,\n additionalProperties: {}\n };\n\n if (dataSource.dataLifetimeInSeconds) {\n dataSourceValues[dataSource.key].dataLifetimeInSeconds = dataSource.dataLifetimeInSeconds;\n }\n\n if (dataSource.initialParameter) {\n dataSourceValues[dataSource.key].parameter = dataSource.initialParameter;\n }\n\n if (dataSource.initialParameterInvalid) {\n dataSourceValues[dataSource.key].parameterIsValid = false;\n }\n\n dataSources[dataSource.key] = dataSource;\n });\n\n return updateNgssmDataState(state, {\n dataSourceValues: { $merge: dataSourceValues },\n dataSources: { $merge: dataSources }\n });\n }\n\n case NgssmDataActionType.registerDataSource: {\n const registerDataSourceAction = action as NgssmRegisterDataSourceAction;\n return this.updateState(state, new NgssmRegisterDataSourcesAction([registerDataSourceAction.dataSource]));\n }\n\n case NgssmDataActionType.unregisterDataSource: {\n const unregisterDataSource = action as NgssmUnregisterDataSourceAction;\n return updateNgssmDataState(state, {\n dataSourceValues: { $unset: [unregisterDataSource.dataSourceKey] },\n dataSources: { $unset: [unregisterDataSource.dataSourceKey] }\n });\n }\n }\n\n return state;\n }\n}\n","import { State } from 'ngssm-store';\n\nimport { NgssmDataSourceAdditionalPropertyValue, NgssmDataSourceValue, NgssmDataSourceValueStatus } from './model';\nimport { selectNgssmDataState } from './state/ngssm-data.state';\n\nexport const selectNgssmDataSourceValue = <TDataType = unknown, TParameter = unknown>(\n state: State,\n key: string\n): NgssmDataSourceValue<TDataType, TParameter> => {\n return (selectNgssmDataState(state).dataSourceValues[key] ?? {\n status: NgssmDataSourceValueStatus.notRegistered\n }) as NgssmDataSourceValue<TDataType, TParameter>;\n};\n\nexport const selectNgssmDataSourceAdditionalPropertyValue = <TProperty = unknown>(\n state: State,\n key: string,\n property: string\n): NgssmDataSourceAdditionalPropertyValue<TProperty> => {\n return (selectNgssmDataState(state).dataSourceValues[key]?.additionalProperties[property] ?? {\n status: NgssmDataSourceValueStatus.notRegistered\n }) as NgssmDataSourceAdditionalPropertyValue<TProperty>;\n};\n\n/**\n * Returns true if the specified data source is currently loading, false otherwise.\n * @param state The global application state.\n * @param dataSourceKey The unique key of the data source.\n */\nexport const isNgssmDataSourceLoading = (state: State, dataSourceKey: string): boolean =>\n selectNgssmDataSourceValue(state, dataSourceKey)?.status === NgssmDataSourceValueStatus.loading;\n","import { Injectable } from '@angular/core';\n\nimport { DateTime } from 'luxon';\nimport update from 'immutability-helper';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport {\n NgssmClearDataSourceValueAction,\n NgssmDataActionType,\n NgssmLoadDataSourceAdditionalPropertyValueAction,\n NgssmSetDataSourceAdditionalPropertyValueAction,\n NgssmSetDataSourceParameterAction,\n NgssmSetDataSourceParameterValidityAction,\n NgssmSetDataSourceValueAction,\n NgssmUpdateDataSourceParameterAction\n} from '../actions';\nimport { selectNgssmDataState, updateNgssmDataState } from '../state';\nimport { NgssmDataSourceValueStatus } from '../model';\nimport { selectNgssmDataSourceValue } from '../selectors';\n\n@Injectable()\nexport class DataSourceValueReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmDataActionType.setDataSourceValue,\n NgssmDataActionType.clearDataSourceValue,\n NgssmDataActionType.setDataSourceParameter,\n NgssmDataActionType.loadDataSourceAdditionalPropertyValue,\n NgssmDataActionType.setDataSourceAdditionalPropertyValue,\n NgssmDataActionType.updateDataSourceParameter,\n NgssmDataActionType.setDataSourceParameterValidity\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case NgssmDataActionType.setDataSourceValue: {\n const ngssmSetDataSourceValueAction = action as NgssmSetDataSourceValueAction;\n const dataSourceValue = selectNgssmDataState(state).dataSourceValues[ngssmSetDataSourceValueAction.key];\n if (!dataSourceValue) {\n break;\n }\n\n return updateNgssmDataState(state, {\n dataSourceValues: {\n [ngssmSetDataSourceValueAction.key]: {\n status: { $set: ngssmSetDataSourceValueAction.status },\n value: { $set: ngssmSetDataSourceValueAction.value },\n lastLoadingDate: { $set: DateTime.now() },\n httpErrorResponse: { $set: ngssmSetDataSourceValueAction.httpErrorResponse }\n }\n }\n });\n }\n\n case NgssmDataActionType.clearDataSourceValue: {\n const ngssmClearDataSourceValueAction = action as NgssmClearDataSourceValueAction;\n let currentState = state;\n if (ngssmClearDataSourceValueAction.clearParameter) {\n currentState = updateNgssmDataState(state, {\n dataSourceValues: {\n [ngssmClearDataSourceValueAction.key]: {\n parameter: { $set: undefined },\n parameterIsValid: { $set: undefined }\n }\n }\n });\n }\n\n return updateNgssmDataState(currentState, {\n dataSourceValues: {\n [ngssmClearDataSourceValueAction.key]: {\n status: { $set: NgssmDataSourceValueStatus.none },\n value: { $set: undefined },\n lastLoadingDate: { $set: undefined },\n additionalProperties: { $set: {} }\n }\n }\n });\n }\n\n case NgssmDataActionType.setDataSourceParameter: {\n const ngssmSetDataSourceParameterAction = action as NgssmSetDataSourceParameterAction;\n return updateNgssmDataState(state, {\n dataSourceValues: {\n [ngssmSetDataSourceParameterAction.key]: {\n parameter: { $set: ngssmSetDataSourceParameterAction.parameter },\n parameterIsValid: { $set: ngssmSetDataSourceParameterAction.parameterIsValid },\n valueOutdated: { $set: ngssmSetDataSourceParameterAction.doNotMarkParameterAsModified === true ? false : true }\n }\n }\n });\n }\n\n case NgssmDataActionType.updateDataSourceParameter: {\n const ngssmUpdateDataSourceParameterAction = action as NgssmUpdateDataSourceParameterAction;\n const newParameter = update<object, never>(\n selectNgssmDataSourceValue(state, ngssmUpdateDataSourceParameterAction.key)?.parameter as object,\n {\n $merge: ngssmUpdateDataSourceParameterAction.parameter\n }\n );\n return updateNgssmDataState(state, {\n dataSourceValues: {\n [ngssmUpdateDataSourceParameterAction.key]: {\n parameter: { $set: newParameter },\n valueOutdated: { $set: true }\n }\n }\n });\n }\n\n case NgssmDataActionType.setDataSourceParameterValidity: {\n const ngssmSetDataSourceParameterValidityAction = action as NgssmSetDataSourceParameterValidityAction;\n return updateNgssmDataState(state, {\n dataSourceValues: {\n [ngssmSetDataSourceParameterValidityAction.key]: {\n parameterIsValid: { $set: ngssmSetDataSourceParameterValidityAction.isValid }\n }\n }\n });\n }\n\n case NgssmDataActionType.loadDataSourceAdditionalPropertyValue: {\n const ngssmLoadDataSourceAdditionalPropertyValueAction = action as NgssmLoadDataSourceAdditionalPropertyValueAction;\n const dataSourcePropertyValue =\n selectNgssmDataState(state).dataSourceValues[ngssmLoadDataSourceAdditionalPropertyValueAction.key]?.additionalProperties[\n ngssmLoadDataSourceAdditionalPropertyValueAction.property\n ];\n\n if (\n dataSourcePropertyValue?.status === NgssmDataSourceValueStatus.loaded &&\n ngssmLoadDataSourceAdditionalPropertyValueAction.forceReload !== true\n ) {\n break;\n }\n\n if (!dataSourcePropertyValue) {\n return updateNgssmDataState(state, {\n dataSourceValues: {\n [ngssmLoadDataSourceAdditionalPropertyValueAction.key]: {\n additionalProperties: {\n [ngssmLoadDataSourceAdditionalPropertyValueAction.property]: {\n $set: {\n status: NgssmDataSourceValueStatus.loading\n }\n }\n }\n }\n }\n });\n }\n\n return updateNgssmDataState(state, {\n dataSourceValues: {\n [ngssmLoadDataSourceAdditionalPropertyValueAction.key]: {\n additionalProperties: {\n [ngssmLoadDataSourceAdditionalPropertyValueAction.property]: {\n status: { $set: NgssmDataSourceValueStatus.loading }\n }\n }\n }\n }\n });\n }\n\n case NgssmDataActionType.setDataSourceAdditionalPropertyValue: {\n const ngssmSetDataSourceAdditionalPropertyValueAction = action as NgssmSetDataSourceAdditionalPropertyValueAction;\n return updateNgssmDataState(state, {\n dataSourceValues: {\n [ngssmSetDataSourceAdditionalPropertyValueAction.key]: {\n additionalProperties: {\n [ngssmSetDataSourceAdditionalPropertyValueAction.property]: {\n $set: {\n status: ngssmSetDataSourceAdditionalPropertyValueAction.status,\n value: ngssmSetDataSourceAdditionalPropertyValueAction.value,\n lastLoadingDate: DateTime.now()\n }\n }\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { DateTime } from 'luxon';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { NgssmDataActionType, NgssmLoadDataSourceValueAction } from '../actions';\nimport { selectNgssmDataState, updateNgssmDataState } from '../state';\nimport { NgssmDataSourceValueStatus } from '../model';\n\n@Injectable()\nexport class LoadDataSourceValueReducer implements Reducer {\n public readonly processedActions: string[] = [NgssmDataActionType.loadDataSourceValue];\n\n public updateState(state: State, action: Action): State {\n if (action.type !== NgssmDataActionType.loadDataSourceValue) {\n return state;\n }\n\n const loadDataSourceValue = action as NgssmLoadDataSourceValueAction;\n\n // If data source is not defined, return input state\n const dataSource = selectNgssmDataState(state).dataSources[loadDataSourceValue.key];\n if (!dataSource) {\n return state;\n }\n\n let currentState = state;\n\n // Check if source depends on another one\n if (dataSource.dependsOnDataSource) {\n const masterSourceValue = selectNgssmDataState(state).dataSourceValues[dataSource.dependsOnDataSource];\n if (masterSourceValue && masterSourceValue.status !== NgssmDataSourceValueStatus.loaded) {\n return updateNgssmDataState(state, {\n delayedActions: {\n [dataSource.dependsOnDataSource]: { $set: action }\n }\n });\n }\n\n if (selectNgssmDataState(state).delayedActions[dataSource.dependsOnDataSource] === action) {\n currentState = updateNgssmDataState(state, {\n delayedActions: { $unset: [dataSource.dependsOnDataSource] }\n });\n }\n }\n\n const dataSourceValue = selectNgssmDataState(state).dataSourceValues[loadDataSourceValue.key];\n if (!dataSourceValue) {\n return state;\n }\n\n let shouldReload = false;\n\n if (loadDataSourceValue.options?.parameter) {\n shouldReload = true;\n currentState = updateNgssmDataState(currentState, {\n dataSourceValues: {\n [loadDataSourceValue.key]: {\n parameter: { $set: loadDataSourceValue.options?.parameter.value }\n }\n }\n });\n }\n\n if (dataSourceValue.status === NgssmDataSourceValueStatus.loaded) {\n if (loadDataSourceValue.options?.forceReload === true || !dataSourceValue.dataLifetimeInSeconds || !dataSourceValue.lastLoadingDate) {\n shouldReload = true;\n } else {\n const dataLifetime = DateTime.now().diff(dataSourceValue.lastLoadingDate, 'second');\n if ((dataLifetime.toObject().seconds ?? 0) > dataSourceValue.dataLifetimeInSeconds) {\n shouldReload = true;\n }\n }\n } else {\n shouldReload = true;\n }\n\n if (dataSourceValue.parameterIsValid === false) {\n shouldReload = false;\n }\n\n if (shouldReload) {\n if (loadDataSourceValue.options?.keepAdditionalProperties !== true) {\n currentState = updateNgssmDataState(currentState, {\n dataSourceValues: {\n [loadDataSourceValue.key]: {\n additionalProperties: { $set: {} }\n }\n }\n });\n }\n\n if (loadDataSourceValue.options?.resetValue === true) {\n currentState = updateNgssmDataState(currentState, {\n dataSourceValues: {\n [loadDataSourceValue.key]: {\n value: { $set: undefined }\n }\n }\n });\n }\n\n return updateNgssmDataState(currentState, {\n dataSourceValues: {\n [loadDataSourceValue.key]: {\n status: { $set: NgssmDataSourceValueStatus.loading },\n valueOutdated: { $set: false }\n }\n }\n });\n }\n\n return state;\n }\n}\n","import { EnvironmentInjector, inject, Injectable, runInInjectionContext } from '@angular/core';\n\nimport { Effect, State, Action, Logger, ActionDispatcher } from 'ngssm-store';\n\nimport {\n NgssmDataActionType,\n NgssmDataSourceValueAction,\n NgssmLoadDataSourceAdditionalPropertyValueAction,\n NgssmSetDataSourceAdditionalPropertyValueAction,\n NgssmSetDataSourceValueAction\n} from '../actions';\nimport { selectNgssmDataState } from '../state';\nimport { NgssmDataSourceValueStatus } from '../model';\n\n@Injectable()\nexport class DataLoadingEffect implements Effect {\n private readonly injector = inject(EnvironmentInjector);\n private readonly logger = inject(Logger);\n\n public readonly processedActions: string[] = [\n NgssmDataActionType.loadDataSourceValue,\n NgssmDataActionType.loadDataSourceAdditionalPropertyValue\n ];\n\n public processAction(actiondispatcher: ActionDispatcher, state: State, action: Action): void {\n const key = (action as NgssmDataSourceValueAction).key;\n const dataSource = selectNgssmDataState(state).dataSources[key];\n if (!dataSource) {\n this.logger.error(`No data source setup for key '${key}'`);\n return;\n }\n\n const dataSourceValue = selectNgssmDataState(state).dataSourceValues[key];\n\n switch (action.type) {\n case NgssmDataActionType.loadDataSourceValue: {\n if (dataSourceValue?.status !== NgssmDataSourceValueStatus.loading) {\n this.logger.information(\n `Data source value for '${key}' is not in '${NgssmDataSourceValueStatus.loading}' status: '${dataSourceValue?.status}'`\n );\n return;\n }\n\n runInInjectionContext(this.injector, () => {\n dataSource.dataLoadingFunc(state, key, dataSourceValue.parameter).subscribe({\n next: (value) =>\n actiondispatcher.dispatchAction(new NgssmSetDataSourceValueAction(key, NgssmDataSourceValueStatus.loaded, value)),\n error: (error) => {\n this.logger.error(`Unable to load data for '${key}'`, error);\n actiondispatcher.dispatchAction(new NgssmSetDataSourceValueAction(key, NgssmDataSourceValueStatus.error, undefined, error));\n }\n });\n });\n\n break;\n }\n\n case NgssmDataActionType.loadDataSourceAdditionalPropertyValue: {\n const ngssmLoadDataSourceAdditionalPropertyValueAction = action as NgssmLoadDataSourceAdditionalPropertyValueAction;\n const property = ngssmLoadDataSourceAdditionalPropertyValueAction.property;\n if (dataSourceValue.additionalProperties[property]?.status !== NgssmDataSourceValueStatus.loading) {\n this.logger.information(\n `Data source additional property value for '${key}' and property '${property}' is not in '${NgssmDataSourceValueStatus.loading}' status: '${dataSourceValue?.status}'`\n );\n return;\n }\n\n runInInjectionContext(this.injector, () => {\n dataSource.additionalPropertyLoadingFunc?.(state, key, property).subscribe({\n next: (value) =>\n actiondispatcher.dispatchAction(\n new NgssmSetDataSourceAdditionalPropertyValueAction(\n key,\n property,\n NgssmDataSourceValueStatus.loaded,\n value,\n ngssmLoadDataSourceAdditionalPropertyValueAction.postLoadingAction\n )\n ),\n error: (error) => {\n this.logger.error(`Unable to load data for '${key}' and property '${property}'`, error);\n actiondispatcher.dispatchAction(\n new NgssmSetDataSourceAdditionalPropertyValueAction(key, property, NgssmDataSourceValueStatus.error)\n );\n }\n });\n });\n\n break;\n }\n }\n }\n}\n","import { effect, EnvironmentInjector, inject, runInInjectionContext } from '@angular/core';\n\nimport { Logger, Store } from 'ngssm-store';\n\nimport {\n NgssmDataActionType,\n NgssmLoadDataSourceAdditionalPropertyValueAction,\n NgssmSetDataSourceAdditionalPropertyValueAction\n} from './actions';\nimport { NgssmDataSourceValueStatus } from './model';\nimport { selectNgssmDataSourceAdditionalPropertyValue } from './selectors';\n\nexport const postLoadingActionExecutorInitializer = async () => {\n const injector = inject(EnvironmentInjector);\n const store = inject(Store);\n const logger = inject(Logger);\n\n effect(() => {\n const action = store.processedAction();\n if (action.type === NgssmDataActionType.loadDataSourceAdditionalPropertyValue) {\n const ngssmLoadDataSourceAdditionalPropertyValueAction = action as NgssmLoadDataSourceAdditionalPropertyValueAction;\n if (!ngssmLoadDataSourceAdditionalPropertyValueAction.postLoadingAction) {\n return;\n }\n\n const isLoaded =\n selectNgssmDataSourceAdditionalPropertyValue(\n store.state(),\n ngssmLoadDataSourceAdditionalPropertyValueAction.key,\n ngssmLoadDataSourceAdditionalPropertyValueAction.property\n )?.status === NgssmDataSourceValueStatus.loaded;\n\n if (isLoaded) {\n logger.information(`[postLoadingActionExecutor] Executing post loading action for ${action.type}`);\n runInInjectionContext(injector, ngssmLoadDataSourceAdditionalPropertyValueAction.postLoadingAction);\n }\n\n return;\n }\n\n if (action.type === NgssmDataActionType.setDataSourceAdditionalPropertyValue) {\n const ngssmSetDataSourceAdditionalPropertyValueAction = action as NgssmSetDataSourceAdditionalPropertyValueAction;\n if (!ngssmSetDataSourceAdditionalPropertyValueAction.postLoadingAction) {\n return;\n }\n\n logger.information(`[postLoadingActionExecutor] Executing post loading action for ${action.type}`);\n runInInjectionContext(injector, ngssmSetDataSourceAdditionalPropertyValueAction.postLoadingAction);\n }\n });\n\n return true;\n};\n","import { effect, inject, untracked } from '@angular/core';\n\nimport { Logger, State, Store } from 'ngssm-store';\n\nimport { NgssmSetDataSourceValueAction, NgssmDataActionType, NgssmLoadDataSourceValueAction } from './actions';\nimport { selectNgssmDataState } from './state';\n\nexport const dataSourcesLinkerInitializer = async () => {\n const store = inject(Store);\n const logger = inject(Logger);\n\n effect(() => {\n const action = store.processedAction();\n if (action.type !== NgssmDataActionType.setDataSourceValue) {\n return;\n }\n\n const setDataSourceValueAction = action as NgssmSetDataSourceValueAction;\n const state = selectNgssmDataState(untracked<State>(() => store.state())).dataSources;\n\n const linkedKeys = new Set(state[setDataSourceValueAction.key]?.linkedDataSources ?? []);\n for (const linkedKey of Object.keys(state).filter((key) => state[key].linkedToDataSource === setDataSourceValueAction.key)) {\n logger.information(`Force reload of data source'${linkedKey}' linked to '${setDataSourceValueAction.key}'`);\n linkedKeys.add(linkedKey);\n }\n\n for (const linkedKey of linkedKeys) {\n store.dispatchAction(\n new NgssmLoadDataSourceValueAction(linkedKey, {\n forceReload: true\n })\n );\n }\n });\n\n return true;\n};\n","import { effect, inject, untracked } from '@angular/core';\n\nimport { EffectFunc, State, Action, Logger, Store } from 'ngssm-store';\n\nimport { NgssmDataActionType, NgssmLoadDataSourceValueAction, NgssmSetDataSourceValueAction } from './actions';\nimport { selectNgssmDataSourceValue } from './selectors';\nimport { NgssmDataSourceValueStatus } from './model';\nimport { selectNgssmDataState } from './state';\n\n/**\n * Effect function that handles loading a data source with a dependency.\n *\n * This effect checks if the requested data source has a dependency that is not yet loaded.\n * If the data source is not currently loading and has a dependency, it dispatches an action\n * to load the dependency data source first. If the data source does not have a dependency,\n * it logs an error message.\n *\n * @param state - The current application state.\n * @param action - The action triggering the effect, expected to be of type NgssmLoadDataSourceValueAction.\n * @returns void\n */\nexport const loadDataSourceWithDependencyEffect: EffectFunc = (state: State, action: Action) => {\n const ngssmLoadDataSourceValueAction = action as NgssmLoadDataSourceValueAction;\n const dataSourceValue = selectNgssmDataSourceValue(state, ngssmLoadDataSourceValueAction.key);\n\n // We only take into account source with a dependency not already loaded. In that case, the status must not be loading.\n if (dataSourceValue.status === NgssmDataSourceValueStatus.loading) {\n return;\n }\n\n const dataSource = selectNgssmDataState(state).dataSources[ngssmLoadDataSourceValueAction.key];\n\n const dependency = dataSource.dependsOnDataSource;\n if (!dependency) {\n // Date source is already loaded and has no dependency.\n // This is the usual case with data source with a lifetime not null and reloaded without being forced when a page is opened.\n return;\n }\n\n const store = inject(Store);\n store.dispatchAction(new NgssmLoadDataSourceValueAction(dependency));\n};\n\n/**\n * Effect initializer that listens for NgssmSetDataSourceValueAction and dispatches any delayed loading actions\n * for dependent data sources. This ensures that when a data source is set, any queued actions for sources\n * waiting on this dependency are executed.\n */\nexport const dependentDataSourceLoadInitializer = async () => {\n const store = inject(Store);\n const logger = inject(Logger);\n\n effect(() => {\n const action = store.processedAction();\n if (action.type !== NgssmDataActionType.setDataSourceValue) {\n return;\n }\n\n const setDataSourceValueAction = action as NgssmSetDataSourceValueAction;\n const state = untracked<State>(() => store.state());\n\n const storedAction = selectNgssmDataState(state).delayedActions[setDataSourceValueAction.key];\n if (storedAction) {\n logger.information(`Dispatching delayed loading action for source ${(storedAction as NgssmLoadDataSourceValueAction).key}`);\n store.dispatchAction(storedAction);\n }\n });\n};\n","import { EnvironmentProviders, makeEnvironmentProviders, inject, provideAppInitializer } from '@angular/core';\n\nimport { Store, provideEffectFunc, provideEffects, provideReducers } from 'ngssm-store';\n\nimport { NGSSM_DATA_SOURCE, NgssmDataSource } from './model';\nimport { DataSourceValueReducer, DataSourcesRegistrationReducer, LoadDataSourceValueReducer } from './reducers';\nimport { DataLoadingEffect } from './effects';\nimport { NgssmDataActionType, NgssmRegisterDataSourcesAction } from './actions';\nimport { postLoadingActionExecutorInitializer } from './post-loading-action-executor';\nimport { dataSourcesLinkerInitializer } from './data-sources-linker';\nimport { dependentDataSourceLoadInitializer, loadDataSourceWithDependencyEffect } from './data-source-with-dependency';\n\nconst initDataSourceValues = () => {\n const store = inject(Store);\n const dataSources = (inject(NGSSM_DATA_SOURCE, { optional: true }) as unknown as NgssmDataSource[]) ?? [];\n if (dataSources.length > 0) {\n store.dispatchAction(new NgssmRegisterDataSourcesAction(dataSources));\n }\n};\n\nexport const provideNgssmData = (): EnvironmentProviders => {\n return makeEnvironmentProviders([\n provideAppInitializer(initDataSourceValues),\n provideAppInitializer(postLoadingActionExecutorInitializer),\n provideAppInitializer(dataSourcesLinkerInitializer),\n provideAppInitializer(dependentDataSourceLoadInitializer),\n provideReducers(DataSourcesRegistrationReducer, DataSourceValueReducer, LoadDataSourceValueReducer),\n provideEffects(DataLoadingEffect),\n provideEffectFunc(NgssmDataActionType.loadDataSourceValue, loadDataSourceWithDependencyEffect)\n ]);\n};\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { State } from 'ngssm-store';\n\nimport { NgssmDataSourceValueStatus } from '../model';\nimport { selectNgssmDataSourceValue } from '../selectors';\n\n@Pipe({\n name: 'isNgssmDataSourceValueStatus'\n})\nexport class IsNgssmDataSourceValueStatusPipe implements PipeTransform {\n public transform(value: State, ...args: string[]): boolean {\n const key = args[0];\n const expectedStatuses = args.slice(1).map((a) => a as NgssmDataSourceValueStatus);\n const itemStatus = selectNgssmDataSourceValue(value, key).status;\n return expectedStatuses.includes(itemStatus);\n }\n}\n","import { Component, ChangeDetectionStrategy, input, OnDestroy } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatOption, MatSelect } from '@angular/material/select';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\n\nimport { getNgssmDataSourceValueAutoReloadTypes, NgssmDataSourceValueAutoReloadType } from '../../model';\n\n@Component({\n selector: 'ngssm-auto-reload',\n imports: [ReactiveFormsModule, MatFormField, MatLabel, MatSelect, MatOption],\n templateUrl: './ngssm-auto-reload.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmAutoReloadComponent implements OnDestroy {\n private timerId: number | undefined;\n\n public readonly autoReloadAction = input<() => void>(() => {\n // nothing by default\n });\n\n public readonly reloadTypes = getNgssmDataSourceValueAutoReloadTypes();\n public readonly reloadTypeControl = new FormControl<NgssmDataSourceValueAutoReloadType>('Off');\n\n constructor() {\n this.reloadTypeControl.valueChanges.subscribe((v) => {\n if (v === 'Off' && this.timerId) {\n clearInterval(this.timerId);\n this.timerId = undefined;\n return;\n }\n\n let period = 60000;\n switch (v) {\n case '5min':\n period = 5 * period;\n break;\n\n case '15min':\n period = 15 * period;\n break;\n }\n\n this.timerId = setInterval(this.autoReloadAction(), period) as unknown as number;\n });\n }\n\n public ngOnDestroy(): void {\n if (this.timerId) {\n clearInterval(this.timerId);\n this.timerId = undefined;\n }\n }\n}\n","<mat-form-field>\n <mat-label>Select auto reload period</mat-label>\n <mat-select [formControl]=\"reloadTypeControl\">\n @for (option of reloadTypes; track option.value){\n <mat-option [value]=\"option.value\">\n {{option.label}}\n </mat-option>\n }\n </mat-select>\n</mat-form-field>","import { Component, ChangeDetectionStrategy, signal, input, effect, inject } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\n\nimport { DateTime } from 'luxon';\n\nimport { createSignal, Store } from 'ngssm-store';\n\nimport { selectNgssmDataState } from '../../state';\nimport { NgssmDataSourceValue, NgssmDataSourceValueStatus } from '../../model';\nimport { NgssmLoadDataSourceValueAction } from '../../actions';\nimport { NgssmAutoReloadComponent } from '../ngssm-auto-reload/ngssm-auto-reload.component';\n\n@Component({\n selector: 'ngssm-data-reload-button',\n imports: [NgClass, MatButton, MatIconButton, MatTooltip, MatIcon, MatProgressSpinner, NgssmAutoReloadComponent],\n templateUrl: './ngssm-data-reload-button.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmDataReloadButtonComponent {\n private readonly store = inject(Store);\n\n private readonly dataSourceValues = createSignal<Record<string, NgssmDataSourceValue>>(\n (state) => selectNgssmDataState(state).dataSourceValues\n );\n\n public readonly loadInProgress = signal<boolean>(false);\n public readonly buttonDisabled = signal<boolean>(true);\n public readonly tooltipMessage = signal<string>('');\n public readonly color = signal<string>('primary');\n public readonly reloadAction = () => this.reload();\n\n public label = input<string | undefined>(undefined);\n public keepAdditionalProperties = input(false);\n public buttonIcon = input<string>('fa-solid fa-rotate-right');\n public autoReloadEnabled = input(false);\n public dataSourceKeys = input<string[]>([]);\n\n constructor() {\n effect(() => {\n const values = this.dataSourceValues();\n const keys = this.dataSourceKeys();\n this.loadInProgress.set(keys.findIndex((v) => values[v]?.status === NgssmDataSourceValueStatus.loading) !== -1);\n let timestamp: DateTime | undefined;\n keys.forEach((key) => {\n const keyTimestamp = values[key]?.lastLoadingDate;\n if (keyTimestamp) {\n if (!timestamp || timestamp > keyTimestamp) {\n timestamp = keyTimestamp;\n }\n }\n });\n\n let tooltiMessage = 'Reload data.';\n if (timestamp) {\n tooltiMessage = [tooltiMessage, `Loaded at ${timestamp.toHTTP()}`].join('\\n');\n }\n this.tooltipMessage.set(tooltiMessage);\n\n if (this.loadInProgress()) {\n this.buttonDisabled.set(true);\n return;\n }\n\n const someHasAnInvalidParameter = keys.findIndex((key) => values[key]?.parameterIsValid === false) !== -1;\n if (someHasAnInvalidParameter) {\n this.buttonDisabled.set(true);\n return;\n }\n\n this.buttonDisabled.set(keys.findIndex((v) => !!values[v]) === -1);\n\n const someHasAnOutdatedValue = keys.findIndex((key) => values[key]?.valueOutdated === true) !== -1;\n this.color.set(someHasAnOutdatedValue ? 'accent' : 'primary');\n });\n }\n\n public reload(): void {\n const isDisabled = this.buttonDisabled();\n if (isDisabled) {\n return;\n }\n\n this.dataSourceKeys().forEach((key) =>\n this.store.dispatchAction(\n new NgssmLoadDataSourceValueAction(key, { forceReload: true, keepAdditionalProperties: this.keepAdditionalProperties() })\n )\n );\n }\n}\n","<div class=\"flex-row-center\">\n @if (label(); as buttonLabel) {\n <button\n mat-stroked-button\n [color]=\"color()\"\n class=\"mat-{{color()}}\"\n (click)=\"reload()\"\n [matTooltip]=\"tooltipMessage()\"\n [disabled]=\"buttonDisabled() === true\"\n id=\"reloadButton\">\n <div class=\"flex-row-center\">\n @if (loadInProgress()) {\n <mat-spinner [diameter]=\"24\" id=\"loadingSpinner\"></mat-spinner>\n } @else {\n <mat-icon [ngClass]=\"buttonIcon()\" [color]=\"color()\"></mat-icon>\n }\n\n <span style=\"width: 0.5rem\"></span>\n\n {{ buttonLabel }}\n </div>\n </button>\n } @else {\n <button\n mat-icon-button\n [color]=\"color()\"\n class=\"mat-{{color()}}\"\n (click)=\"reload()\"\n [matTooltip]=\"tooltipMessage()\"\n [disabled]=\"buttonDisabled() === true\"\n id=\"reloadButton\">\n @if (loadInProgress()) {\n <mat-spinner [diameter]=\"24\" id=\"loadingSpinner\"></mat-spinner>\n } @else {\n <mat-icon [ngClass]=\"buttonIcon()\" [color]=\"color()\"></mat-icon>\n }\n </button>\n }\n\n @if (autoReloadEnabled()) {\n <ngssm-auto-reload class=\"with-margin-left-8\" [autoReloadAction]=\"reloadAction\"></ngssm-auto-reload>\n }\n</div>\n","import { Directive, effect, inject, input, OnDestroy } from '@angular/core';\n\nimport { ACTION_DISPATCHER, ActionDispatcher } from 'ngssm-store';\n\nimport { NgssmDataSource } from '../model';\nimport { NgssmRegisterDataSourceAction, NgssmUnregisterDataSourceAction } from '../actions';\n\n@Directive({\n selector: '[ngssmScopedDataSource]'\n})\nexport class NgssmScopedDataSourceDirective implements OnDestroy {\n private readonly actionDispatcher: ActionDispatcher = inject(ACTION_DISPATCHER);\n private isInitialized = false;\n\n public readonly ngssmScopedDataSource = input.required<NgssmDataSource, NgssmDataSource>({\n transform: this.checkDataSoruce\n });\n\n constructor() {\n effect(() => {\n const dataSource = this.ngssmScopedDataSource();\n this.actionDispatcher.dispatchAction(new NgssmRegisterDataSourceAction(dataSource));\n });\n }\n\n public ngOnDestroy(): void {\n const key = this.ngssmScopedDataSource().key;\n if (key) {\n this.actionDispatcher.dispatchAction(new NgssmUnregisterDataSourceAction(key));\n }\n }\n\n private checkDataSoruce(value: NgssmDataSource): NgssmDataSource {\n if (this.isInitialized) {\n throw new Error('Data source is already set.');\n }\n\n this.isInitialized = true;\n\n return value;\n }\n}\n","import { computed, inject, Signal } from '@angular/core';\nimport { Store } from 'ngssm-store';\n\nimport { selectNgssmDataSourceValue } from './selectors';\n\nexport interface NgssmDataSourceSignal<T = unknown> {\n key: string;\n value: Signal<T>;\n}\n\nexport type NgssmDataSourceSignalType = 'value' | 'status';\n\nexport interface NgssmDataSourceSignalOptions<T = unknown> {\n type?: NgssmDataSourceSignalType;\n defaultValue?: T;\n}\n\nexport const dataSourceToSignal = <T = unknown>(key: string, options?: NgssmDataSourceSignalOptions<T>): NgssmDataSourceSignal<T> => {\n const store = inject(Store);\n\n const usedOptions = options ?? { type: 'value' };\n if (!usedOptions.type) {\n usedOptions.type = 'value';\n }\n\n switch (usedOptions.type) {\n case 'status':\n return {\n key,\n value: computed(() => selectNgssmDataSourceValue(store.state(), key)?.status ?? options?.defaultValue) as Signal<T>\n };\n\n case 'value':\n return {\n key,\n value: computed(() => selectNgssmDataSourceValue<T>(store.state(), key)?.value ?? options?.defaultValue) as Signal<T>\n };\n }\n};\n","import { Injector, effect, inject, runInInjectionContext } from '@angular/core';\n\nimport { Store } from 'ngssm-store';\n\nimport { NgssmDataSourceValueStatus } from './model';\nimport { NgssmDataActionType, NgssmSetDataSourceValueAction } from './actions';\n\n/**\n * Creates a runner function that executes a post-loading action when the specified data source's value is set.\n * The runner listens for NgssmSetDataSourceValueAction for the given dataSourceKey and invokes the provided postLoadingAction\n * with the new status. The effect is automatically destroyed after the action is processed.\n *\n * @param dataSourceKey The key of the data source to monitor.\n * @param postLoadingAction A callback to execute with the new NgssmDataSourceValueStatus. It is called in an injection context.\n * @returns A function that, when called, sets up the effect and runner.\n */\nexport const postNgssmDataSourceLoadingActionRunnerBuilder = (\n dataSourceKey: string,\n postLoadingAction: (status: NgssmDataSourceValueStatus) => void\n): (() => void) => {\n const injector = inject(Injector);\n return () => {\n runInInjectionContext(injector, () => {\n const store = inject(Store);\n const effectRef = effect(() => {\n const action = store.processedAction();\n if (action.type === NgssmDataActionType.setDataSourceValue) {\n const typedAction = action as NgssmSetDataSourceValueAction;\n if (typedAction.key === dataSourceKey) {\n runInInjectionContext(injector, () => postLoadingAction(typedAction.status));\n effectRef.destroy();\n }\n }\n });\n });\n };\n};\n","/*\n * Public API Surface of ngssm-data\n */\n\nexport * from './lib/ngssm-data/public-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngssm-data",
3
- "version": "20.2.5",
3
+ "version": "20.2.6",
4
4
  "description": "NgSsm - Library used to facilitate the management of data get from remote service or computed locally.",
5
5
  "author": "Lion Marc",
6
6
  "license": "MIT",