ngssm-data 20.3.8 → 20.3.9
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.
|
@@ -281,10 +281,10 @@ class NgssmDataSourceValueSetter {
|
|
|
281
281
|
throw new Error(`Data source '${datasourceKey}' is not initialized.`);
|
|
282
282
|
}
|
|
283
283
|
}
|
|
284
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
285
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
284
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmDataSourceValueSetter, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
285
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmDataSourceValueSetter }); }
|
|
286
286
|
}
|
|
287
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
287
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmDataSourceValueSetter, decorators: [{
|
|
288
288
|
type: Injectable
|
|
289
289
|
}] });
|
|
290
290
|
const ngssmDataSourceValueSetter = () => TestBed.inject(NgssmDataSourceValueSetter);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngssm-data-testing.mjs","sources":["../../../projects/ngssm-data/testing/src/ngssm-data-source-value-setter.ts","../../../projects/ngssm-data/testing/src/provide-ngssm-data-testing.ts","../../../projects/ngssm-data/testing/ngssm-data-testing.ts"],"sourcesContent":["import { HttpErrorResponse } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { TestBed } from '@angular/core/testing';\nimport { NgssmDataSourceValueStatus, selectNgssmDataSourceValue, updateNgssmDataState } from 'ngssm-data';\n\nimport { Store } from 'ngssm-store';\nimport { StoreMock } from 'ngssm-store/testing';\n\n/**\n * Utility service for setting and updating data source values, status, parameters, and additional properties\n * in the StoreMock during tests.\n *\n * Provides methods to:\n * - apply direct updates to a data source value (status, value, parameter),\n * - manage additional properties (set value/status and set per-property http errors),\n * - set/clear overall parameter validity (parameterIsValid) or partial validity entries\n * (parameterPartialValidity map) for per-field validation,\n * - mark a data source value as outdated (valueOutdated flag) when parameters change,\n * - set a top-level httpErrorResponse on the data source value (setDataSourceError).\n *\n * All methods return the NgssmDataSourceValueSetter instance for fluent chaining.\n */\n@Injectable()\nexport class NgssmDataSourceValueSetter {\n public readonly store = inject(Store) as unknown as StoreMock;\n\n /**\n * Sets the status of a data source in the StoreMock.\n * Throws an error if the data source is not found.\n * @param datasourceKey The key of the data source.\n * @param status The new status to set.\n * @returns The NgssmDataSourceValueSetter instance for chaining.\n */\n public setDataSourceStatus(datasourceKey: string, status: NgssmDataSourceValueStatus): NgssmDataSourceValueSetter {\n this.checkDataSource(datasourceKey);\n this.store.stateValue = updateNgssmDataState(this.store.stateValue, {\n dataSourceValues: {\n [datasourceKey]: {\n status: { $set: status }\n }\n }\n });\n\n return this;\n }\n\n /**\n * Sets the value of a data source in the StoreMock.\n * Throws an error if the data source is not found.\n * @param datasourceKey The key of the data source.\n * @param value The value to set.\n * @returns The NgssmDataSourceValueSetter instance for chaining.\n */\n public setDataSourceValue<T>(datasourceKey: string, value?: T): NgssmDataSourceValueSetter {\n this.checkDataSource(datasourceKey);\n this.store.stateValue = updateNgssmDataState(this.store.stateValue, {\n dataSourceValues: {\n [datasourceKey]: {\n value: { $set: value }\n }\n }\n });\n\n return this;\n }\n\n /**\n * Sets the parameter of a data source in the StoreMock.\n * Throws an error if the data source is not found.\n * @param datasourceKey The key of the data source.\n * @param value The parameter value to set.\n * @returns The NgssmDataSourceValueSetter instance for chaining.\n */\n public setDataSourceParameter<T>(datasourceKey: string, value?: T): NgssmDataSourceValueSetter {\n this.checkDataSource(datasourceKey);\n this.store.stateValue = updateNgssmDataState(this.store.stateValue, {\n dataSourceValues: {\n [datasourceKey]: {\n parameter: { $set: value }\n }\n }\n });\n\n return this;\n }\n\n /**\n * Sets or clears the top-level HTTP error response for a data source in the StoreMock.\n *\n * This is useful in tests to simulate an error that occurred while loading the main data source value.\n * The method ensures the data source is initialized and updates the data source's httpErrorResponse\n * field with the provided HttpErrorResponse or clears it when undefined is passed.\n *\n * @param datasourceKey The key of the data source to update.\n * @param error Optional HttpErrorResponse to set; pass undefined to clear the error.\n * @returns The NgssmDataSourceValueSetter instance for chaining.\n */\n public setDataSourceError(datasourceKey: string, error?: HttpErrorResponse): NgssmDataSourceValueSetter {\n this.checkDataSource(datasourceKey);\n this.store.stateValue = updateNgssmDataState(this.store.stateValue, {\n dataSourceValues: {\n [datasourceKey]: {\n httpErrorResponse: { $set: error }\n }\n }\n });\n\n return this;\n }\n\n /**\n * Sets an additional property for a data source in the StoreMock.\n * Throws an error if the data source is not found.\n * @param datasourceKey The key of the data source.\n * @param additionalProperty The name of the additional property.\n * @param value The value to set for the additional property.\n * @param status The status to set for the additional property (defaults to loaded).\n * @returns The NgssmDataSourceValueSetter instance for chaining.\n */\n public setAdditionalProperty<T>(\n datasourceKey: string,\n additionalProperty: string,\n value?: T,\n status: NgssmDataSourceValueStatus = NgssmDataSourceValueStatus.loaded\n ): NgssmDataSourceValueSetter {\n this.checkDataSource(datasourceKey);\n this.store.stateValue = updateNgssmDataState(this.store.stateValue, {\n dataSourceValues: {\n [datasourceKey]: {\n additionalProperties: {\n [additionalProperty]: {\n $set: {\n value,\n status\n }\n }\n }\n }\n }\n });\n\n return this;\n }\n\n /**\n * Sets the HTTP error response for a specific additional property of a data source in the StoreMock.\n *\n * Use this in tests to simulate a failure when loading an additional property (e.g. row detail).\n * Ensures the data source is initialized and sets or clears the additional property's httpErrorResponse.\n *\n * @param datasourceKey The key of the data source that owns the additional property.\n * @param additionalProperty The name of the additional property to update.\n * @param error Optional HttpErrorResponse to set; pass undefined to clear the error.\n * @returns The NgssmDataSourceValueSetter instance for chaining.\n */\n public setAdditionalPropertyError(\n datasourceKey: string,\n additionalProperty: string,\n error?: HttpErrorResponse\n ): NgssmDataSourceValueSetter {\n this.checkDataSource(datasourceKey);\n this.store.stateValue = updateNgssmDataState(this.store.stateValue, {\n dataSourceValues: {\n [datasourceKey]: {\n additionalProperties: {\n [additionalProperty]: {\n httpErrorResponse: { $set: error }\n }\n }\n }\n }\n });\n\n return this;\n }\n\n /**\n * Sets the validity of a data source parameter.\n *\n * If partialKey is provided, the method updates the parameterPartialValidity map for the\n * specified data source (creating the map if it does not exist) and sets the boolean validity\n * for that partial key. If partialKey is not provided, the method updates the overall\n * parameterIsValid boolean for the data source.\n *\n * This method returns the NgssmDataSourceValueSetter for chaining.\n *\n * @param dataSourceKey The key of the data source whose parameter validity should be updated.\n * @param isValid True when the (partial) parameter is valid, false otherwise.\n * @param partialKey Optional identifier of a parameter sub-field to set partial validity for.\n */\n public setParameterValidity(dataSourceKey: string, isValid: boolean, partialKey?: string): NgssmDataSourceValueSetter {\n // Ensure the data source is initialized before updating validity\n this.checkDataSource(dataSourceKey);\n\n if (partialKey) {\n if (selectNgssmDataSourceValue(this.store.stateValue, dataSourceKey)?.parameterPartialValidity) {\n this.store.stateValue = updateNgssmDataState(this.store.stateValue, {\n dataSourceValues: {\n [dataSourceKey]: {\n parameterPartialValidity: {\n [partialKey]: { $set: isValid }\n }\n }\n }\n });\n } else {\n this.store.stateValue = updateNgssmDataState(this.store.stateValue, {\n dataSourceValues: {\n [dataSourceKey]: {\n parameterPartialValidity: {\n $set: {\n [partialKey]: isValid\n }\n }\n }\n }\n });\n }\n } else {\n this.store.stateValue = updateNgssmDataState(this.store.stateValue, {\n dataSourceValues: {\n [dataSourceKey]: {\n parameterIsValid: {\n $set: isValid\n }\n }\n }\n });\n }\n\n return this;\n }\n\n /**\n * Clears parameter validity information for a data source.\n *\n * If partialKey is provided, removes the partial validity entry for that key (if present).\n * If partialKey is not provided, resets the overall parameterIsValid flag to undefined.\n *\n * Returns the NgssmDataSourceValueSetter instance to allow method chaining.\n *\n * @param dataSourceKey The key of the data source whose parameter validity should be cleared.\n * @param partialKey Optional identifier of a parameter sub-field to clear partial validity for.\n */\n public clearParameterValidity(dataSourceKey: string, partialKey?: string): NgssmDataSourceValueSetter {\n // Ensure the data source is initialized before clearing validity\n this.checkDataSource(dataSourceKey);\n\n if (partialKey) {\n if (selectNgssmDataSourceValue(this.store.stateValue, dataSourceKey)?.parameterPartialValidity) {\n this.store.stateValue = updateNgssmDataState(this.store.stateValue, {\n dataSourceValues: {\n [dataSourceKey]: {\n parameterPartialValidity: { $unset: [partialKey] }\n }\n }\n });\n }\n } else {\n this.store.stateValue = updateNgssmDataState(this.store.stateValue, {\n dataSourceValues: {\n [dataSourceKey]: {\n parameterIsValid: {\n $set: undefined\n }\n }\n }\n });\n }\n\n return this;\n }\n\n /**\n * Sets or clears the \"valueOutdated\" flag for a data source.\n *\n * The flag indicates that the current stored value is outdated relative to its parameter\n * (for example, the parameter has changed and the value should be reloaded).\n *\n * @param dataSourceKey The key of the data source to update.\n * @param outdated True to mark the value as outdated, false to mark it as up-to-date.\n * @returns The NgssmDataSourceValueSetter instance for chaining.\n */\n public setOutdatedValueFlag(dataSourceKey: string, outdated: boolean): NgssmDataSourceValueSetter {\n // Ensure the data source is initialized before updating the outdated flag\n this.checkDataSource(dataSourceKey);\n\n this.store.stateValue = updateNgssmDataState(this.store.stateValue, {\n dataSourceValues: {\n [dataSourceKey]: {\n valueOutdated: {\n $set: outdated\n }\n }\n }\n });\n\n return this;\n }\n\n /**\n * Checks if the specified data source is initialized in the StoreMock.\n * Throws an error if the data source is not found.\n * @param datasourceKey The key of the data source to check.\n */\n public checkDataSource(datasourceKey: string) {\n const dataSourceValue = selectNgssmDataSourceValue(this.store.stateValue, datasourceKey);\n if (!dataSourceValue) {\n throw new Error(`Data source '${datasourceKey}' is not initialized.`);\n }\n }\n}\n\nexport const ngssmDataSourceValueSetter = () => TestBed.inject(NgssmDataSourceValueSetter);\n","import { EnvironmentProviders, inject, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';\n\nimport {\n NGSSM_DATA_SOURCE,\n NgssmDataSource,\n NgssmDataSourceValueStatus,\n NgssmDataStateSpecification,\n updateNgssmDataState\n} from 'ngssm-data';\nimport { Logger, Store } from 'ngssm-store';\nimport { StoreMock } from 'ngssm-store/testing';\n\nimport { NgssmDataSourceValueSetter } from './ngssm-data-source-value-setter';\n\nexport const ngssmDataStateAndSourcesInitializer = () => {\n const logger = inject(Logger);\n logger.information('[ngssm-data-testing] Initialization of state and sources');\n const store = inject(Store);\n if (!(store instanceof StoreMock)) {\n throw new Error('StoreMock is not registered.');\n }\n\n store.stateValue = {\n ...store.stateValue,\n [NgssmDataStateSpecification.featureStateKey]: NgssmDataStateSpecification.initialState\n };\n\n const dataSources = (inject(NGSSM_DATA_SOURCE, { optional: true }) as unknown as NgssmDataSource[]) ?? [];\n store.stateValue = dataSources.reduce((previous, current) => {\n return updateNgssmDataState(previous, {\n dataSourceValues: {\n [current.key]: {\n $set: {\n status: NgssmDataSourceValueStatus.none,\n additionalProperties: {}\n }\n }\n }\n });\n }, store.stateValue);\n};\n\nexport const provideNgssmDataTesting = (): EnvironmentProviders => {\n return makeEnvironmentProviders([provideAppInitializer(ngssmDataStateAndSourcesInitializer), NgssmDataSourceValueSetter]);\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;AAQA;;;;;;;;;;;;;AAaG;MAEU,0BAA0B,CAAA;AADvC,IAAA,WAAA,GAAA;AAEkB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAyB;AA+R9D,IAAA;AA7RC;;;;;;AAMG;IACI,mBAAmB,CAAC,aAAqB,EAAE,MAAkC,EAAA;AAClF,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;AACnC,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AAClE,YAAA,gBAAgB,EAAE;gBAChB,CAAC,aAAa,GAAG;AACf,oBAAA,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM;AACvB;AACF;AACF,SAAA,CAAC;AAEF,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;AAMG;IACI,kBAAkB,CAAI,aAAqB,EAAE,KAAS,EAAA;AAC3D,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;AACnC,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AAClE,YAAA,gBAAgB,EAAE;gBAChB,CAAC,aAAa,GAAG;AACf,oBAAA,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK;AACrB;AACF;AACF,SAAA,CAAC;AAEF,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;AAMG;IACI,sBAAsB,CAAI,aAAqB,EAAE,KAAS,EAAA;AAC/D,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;AACnC,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AAClE,YAAA,gBAAgB,EAAE;gBAChB,CAAC,aAAa,GAAG;AACf,oBAAA,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK;AACzB;AACF;AACF,SAAA,CAAC;AAEF,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;;;;;AAUG;IACI,kBAAkB,CAAC,aAAqB,EAAE,KAAyB,EAAA;AACxE,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;AACnC,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AAClE,YAAA,gBAAgB,EAAE;gBAChB,CAAC,aAAa,GAAG;AACf,oBAAA,iBAAiB,EAAE,EAAE,IAAI,EAAE,KAAK;AACjC;AACF;AACF,SAAA,CAAC;AAEF,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;;;AAQG;IACI,qBAAqB,CAC1B,aAAqB,EACrB,kBAA0B,EAC1B,KAAS,EACT,MAAA,GAAqC,0BAA0B,CAAC,MAAM,EAAA;AAEtE,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;AACnC,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AAClE,YAAA,gBAAgB,EAAE;gBAChB,CAAC,aAAa,GAAG;AACf,oBAAA,oBAAoB,EAAE;wBACpB,CAAC,kBAAkB,GAAG;AACpB,4BAAA,IAAI,EAAE;gCACJ,KAAK;gCACL;AACD;AACF;AACF;AACF;AACF;AACF,SAAA,CAAC;AAEF,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;;;;;AAUG;AACI,IAAA,0BAA0B,CAC/B,aAAqB,EACrB,kBAA0B,EAC1B,KAAyB,EAAA;AAEzB,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;AACnC,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AAClE,YAAA,gBAAgB,EAAE;gBAChB,CAAC,aAAa,GAAG;AACf,oBAAA,oBAAoB,EAAE;wBACpB,CAAC,kBAAkB,GAAG;AACpB,4BAAA,iBAAiB,EAAE,EAAE,IAAI,EAAE,KAAK;AACjC;AACF;AACF;AACF;AACF,SAAA,CAAC;AAEF,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;;;;;;;;AAaG;AACI,IAAA,oBAAoB,CAAC,aAAqB,EAAE,OAAgB,EAAE,UAAmB,EAAA;;AAEtF,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;QAEnC,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,wBAAwB,EAAE;AAC9F,gBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AAClE,oBAAA,gBAAgB,EAAE;wBAChB,CAAC,aAAa,GAAG;AACf,4BAAA,wBAAwB,EAAE;AACxB,gCAAA,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,OAAO;AAC9B;AACF;AACF;AACF,iBAAA,CAAC;YACJ;iBAAO;AACL,gBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AAClE,oBAAA,gBAAgB,EAAE;wBAChB,CAAC,aAAa,GAAG;AACf,4BAAA,wBAAwB,EAAE;AACxB,gCAAA,IAAI,EAAE;oCACJ,CAAC,UAAU,GAAG;AACf;AACF;AACF;AACF;AACF,iBAAA,CAAC;YACJ;QACF;aAAO;AACL,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AAClE,gBAAA,gBAAgB,EAAE;oBAChB,CAAC,aAAa,GAAG;AACf,wBAAA,gBAAgB,EAAE;AAChB,4BAAA,IAAI,EAAE;AACP;AACF;AACF;AACF,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;;;;;AAUG;IACI,sBAAsB,CAAC,aAAqB,EAAE,UAAmB,EAAA;;AAEtE,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;QAEnC,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,wBAAwB,EAAE;AAC9F,gBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AAClE,oBAAA,gBAAgB,EAAE;wBAChB,CAAC,aAAa,GAAG;AACf,4BAAA,wBAAwB,EAAE,EAAE,MAAM,EAAE,CAAC,UAAU,CAAC;AACjD;AACF;AACF,iBAAA,CAAC;YACJ;QACF;aAAO;AACL,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AAClE,gBAAA,gBAAgB,EAAE;oBAChB,CAAC,aAAa,GAAG;AACf,wBAAA,gBAAgB,EAAE;AAChB,4BAAA,IAAI,EAAE;AACP;AACF;AACF;AACF,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;;;;AASG;IACI,oBAAoB,CAAC,aAAqB,EAAE,QAAiB,EAAA;;AAElE,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;AAEnC,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AAClE,YAAA,gBAAgB,EAAE;gBAChB,CAAC,aAAa,GAAG;AACf,oBAAA,aAAa,EAAE;AACb,wBAAA,IAAI,EAAE;AACP;AACF;AACF;AACF,SAAA,CAAC;AAEF,QAAA,OAAO,IAAI;IACb;AAEA;;;;AAIG;AACI,IAAA,eAAe,CAAC,aAAqB,EAAA;AAC1C,QAAA,MAAM,eAAe,GAAG,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC;QACxF,IAAI,CAAC,eAAe,EAAE;AACpB,YAAA,MAAM,IAAI,KAAK,CAAC,gBAAgB,aAAa,CAAA,qBAAA,CAAuB,CAAC;QACvE;IACF;8GA/RW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA1B,0BAA0B,EAAA,CAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC;;AAmSM,MAAM,0BAA0B,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,0BAA0B;;AC3SlF,MAAM,mCAAmC,GAAG,MAAK;AACtD,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC7B,IAAA,MAAM,CAAC,WAAW,CAAC,0DAA0D,CAAC;AAC9E,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAC3B,IAAA,IAAI,EAAE,KAAK,YAAY,SAAS,CAAC,EAAE;AACjC,QAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;IACjD;IAEA,KAAK,CAAC,UAAU,GAAG;QACjB,GAAG,KAAK,CAAC,UAAU;AACnB,QAAA,CAAC,2BAA2B,CAAC,eAAe,GAAG,2BAA2B,CAAC;KAC5E;AAED,IAAA,MAAM,WAAW,GAAI,MAAM,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAkC,IAAI,EAAE;AACzG,IAAA,KAAK,CAAC,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,OAAO,KAAI;QAC1D,OAAO,oBAAoB,CAAC,QAAQ,EAAE;AACpC,YAAA,gBAAgB,EAAE;AAChB,gBAAA,CAAC,OAAO,CAAC,GAAG,GAAG;AACb,oBAAA,IAAI,EAAE;wBACJ,MAAM,EAAE,0BAA0B,CAAC,IAAI;AACvC,wBAAA,oBAAoB,EAAE;AACvB;AACF;AACF;AACF,SAAA,CAAC;AACJ,IAAA,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC;AACtB;AAEO,MAAM,uBAAuB,GAAG,MAA2B;IAChE,OAAO,wBAAwB,CAAC,CAAC,qBAAqB,CAAC,mCAAmC,CAAC,EAAE,0BAA0B,CAAC,CAAC;AAC3H;;AC5CA;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"ngssm-data-testing.mjs","sources":["../../../projects/ngssm-data/testing/src/ngssm-data-source-value-setter.ts","../../../projects/ngssm-data/testing/src/provide-ngssm-data-testing.ts","../../../projects/ngssm-data/testing/ngssm-data-testing.ts"],"sourcesContent":["import { HttpErrorResponse } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { TestBed } from '@angular/core/testing';\nimport { NgssmDataSourceValueStatus, selectNgssmDataSourceValue, updateNgssmDataState } from 'ngssm-data';\n\nimport { Store } from 'ngssm-store';\nimport { StoreMock } from 'ngssm-store/testing';\n\n/**\n * Utility service for setting and updating data source values, status, parameters, and additional properties\n * in the StoreMock during tests.\n *\n * Provides methods to:\n * - apply direct updates to a data source value (status, value, parameter),\n * - manage additional properties (set value/status and set per-property http errors),\n * - set/clear overall parameter validity (parameterIsValid) or partial validity entries\n * (parameterPartialValidity map) for per-field validation,\n * - mark a data source value as outdated (valueOutdated flag) when parameters change,\n * - set a top-level httpErrorResponse on the data source value (setDataSourceError).\n *\n * All methods return the NgssmDataSourceValueSetter instance for fluent chaining.\n */\n@Injectable()\nexport class NgssmDataSourceValueSetter {\n public readonly store = inject(Store) as unknown as StoreMock;\n\n /**\n * Sets the status of a data source in the StoreMock.\n * Throws an error if the data source is not found.\n * @param datasourceKey The key of the data source.\n * @param status The new status to set.\n * @returns The NgssmDataSourceValueSetter instance for chaining.\n */\n public setDataSourceStatus(datasourceKey: string, status: NgssmDataSourceValueStatus): NgssmDataSourceValueSetter {\n this.checkDataSource(datasourceKey);\n this.store.stateValue = updateNgssmDataState(this.store.stateValue, {\n dataSourceValues: {\n [datasourceKey]: {\n status: { $set: status }\n }\n }\n });\n\n return this;\n }\n\n /**\n * Sets the value of a data source in the StoreMock.\n * Throws an error if the data source is not found.\n * @param datasourceKey The key of the data source.\n * @param value The value to set.\n * @returns The NgssmDataSourceValueSetter instance for chaining.\n */\n public setDataSourceValue<T>(datasourceKey: string, value?: T): NgssmDataSourceValueSetter {\n this.checkDataSource(datasourceKey);\n this.store.stateValue = updateNgssmDataState(this.store.stateValue, {\n dataSourceValues: {\n [datasourceKey]: {\n value: { $set: value }\n }\n }\n });\n\n return this;\n }\n\n /**\n * Sets the parameter of a data source in the StoreMock.\n * Throws an error if the data source is not found.\n * @param datasourceKey The key of the data source.\n * @param value The parameter value to set.\n * @returns The NgssmDataSourceValueSetter instance for chaining.\n */\n public setDataSourceParameter<T>(datasourceKey: string, value?: T): NgssmDataSourceValueSetter {\n this.checkDataSource(datasourceKey);\n this.store.stateValue = updateNgssmDataState(this.store.stateValue, {\n dataSourceValues: {\n [datasourceKey]: {\n parameter: { $set: value }\n }\n }\n });\n\n return this;\n }\n\n /**\n * Sets or clears the top-level HTTP error response for a data source in the StoreMock.\n *\n * This is useful in tests to simulate an error that occurred while loading the main data source value.\n * The method ensures the data source is initialized and updates the data source's httpErrorResponse\n * field with the provided HttpErrorResponse or clears it when undefined is passed.\n *\n * @param datasourceKey The key of the data source to update.\n * @param error Optional HttpErrorResponse to set; pass undefined to clear the error.\n * @returns The NgssmDataSourceValueSetter instance for chaining.\n */\n public setDataSourceError(datasourceKey: string, error?: HttpErrorResponse): NgssmDataSourceValueSetter {\n this.checkDataSource(datasourceKey);\n this.store.stateValue = updateNgssmDataState(this.store.stateValue, {\n dataSourceValues: {\n [datasourceKey]: {\n httpErrorResponse: { $set: error }\n }\n }\n });\n\n return this;\n }\n\n /**\n * Sets an additional property for a data source in the StoreMock.\n * Throws an error if the data source is not found.\n * @param datasourceKey The key of the data source.\n * @param additionalProperty The name of the additional property.\n * @param value The value to set for the additional property.\n * @param status The status to set for the additional property (defaults to loaded).\n * @returns The NgssmDataSourceValueSetter instance for chaining.\n */\n public setAdditionalProperty<T>(\n datasourceKey: string,\n additionalProperty: string,\n value?: T,\n status: NgssmDataSourceValueStatus = NgssmDataSourceValueStatus.loaded\n ): NgssmDataSourceValueSetter {\n this.checkDataSource(datasourceKey);\n this.store.stateValue = updateNgssmDataState(this.store.stateValue, {\n dataSourceValues: {\n [datasourceKey]: {\n additionalProperties: {\n [additionalProperty]: {\n $set: {\n value,\n status\n }\n }\n }\n }\n }\n });\n\n return this;\n }\n\n /**\n * Sets the HTTP error response for a specific additional property of a data source in the StoreMock.\n *\n * Use this in tests to simulate a failure when loading an additional property (e.g. row detail).\n * Ensures the data source is initialized and sets or clears the additional property's httpErrorResponse.\n *\n * @param datasourceKey The key of the data source that owns the additional property.\n * @param additionalProperty The name of the additional property to update.\n * @param error Optional HttpErrorResponse to set; pass undefined to clear the error.\n * @returns The NgssmDataSourceValueSetter instance for chaining.\n */\n public setAdditionalPropertyError(\n datasourceKey: string,\n additionalProperty: string,\n error?: HttpErrorResponse\n ): NgssmDataSourceValueSetter {\n this.checkDataSource(datasourceKey);\n this.store.stateValue = updateNgssmDataState(this.store.stateValue, {\n dataSourceValues: {\n [datasourceKey]: {\n additionalProperties: {\n [additionalProperty]: {\n httpErrorResponse: { $set: error }\n }\n }\n }\n }\n });\n\n return this;\n }\n\n /**\n * Sets the validity of a data source parameter.\n *\n * If partialKey is provided, the method updates the parameterPartialValidity map for the\n * specified data source (creating the map if it does not exist) and sets the boolean validity\n * for that partial key. If partialKey is not provided, the method updates the overall\n * parameterIsValid boolean for the data source.\n *\n * This method returns the NgssmDataSourceValueSetter for chaining.\n *\n * @param dataSourceKey The key of the data source whose parameter validity should be updated.\n * @param isValid True when the (partial) parameter is valid, false otherwise.\n * @param partialKey Optional identifier of a parameter sub-field to set partial validity for.\n */\n public setParameterValidity(dataSourceKey: string, isValid: boolean, partialKey?: string): NgssmDataSourceValueSetter {\n // Ensure the data source is initialized before updating validity\n this.checkDataSource(dataSourceKey);\n\n if (partialKey) {\n if (selectNgssmDataSourceValue(this.store.stateValue, dataSourceKey)?.parameterPartialValidity) {\n this.store.stateValue = updateNgssmDataState(this.store.stateValue, {\n dataSourceValues: {\n [dataSourceKey]: {\n parameterPartialValidity: {\n [partialKey]: { $set: isValid }\n }\n }\n }\n });\n } else {\n this.store.stateValue = updateNgssmDataState(this.store.stateValue, {\n dataSourceValues: {\n [dataSourceKey]: {\n parameterPartialValidity: {\n $set: {\n [partialKey]: isValid\n }\n }\n }\n }\n });\n }\n } else {\n this.store.stateValue = updateNgssmDataState(this.store.stateValue, {\n dataSourceValues: {\n [dataSourceKey]: {\n parameterIsValid: {\n $set: isValid\n }\n }\n }\n });\n }\n\n return this;\n }\n\n /**\n * Clears parameter validity information for a data source.\n *\n * If partialKey is provided, removes the partial validity entry for that key (if present).\n * If partialKey is not provided, resets the overall parameterIsValid flag to undefined.\n *\n * Returns the NgssmDataSourceValueSetter instance to allow method chaining.\n *\n * @param dataSourceKey The key of the data source whose parameter validity should be cleared.\n * @param partialKey Optional identifier of a parameter sub-field to clear partial validity for.\n */\n public clearParameterValidity(dataSourceKey: string, partialKey?: string): NgssmDataSourceValueSetter {\n // Ensure the data source is initialized before clearing validity\n this.checkDataSource(dataSourceKey);\n\n if (partialKey) {\n if (selectNgssmDataSourceValue(this.store.stateValue, dataSourceKey)?.parameterPartialValidity) {\n this.store.stateValue = updateNgssmDataState(this.store.stateValue, {\n dataSourceValues: {\n [dataSourceKey]: {\n parameterPartialValidity: { $unset: [partialKey] }\n }\n }\n });\n }\n } else {\n this.store.stateValue = updateNgssmDataState(this.store.stateValue, {\n dataSourceValues: {\n [dataSourceKey]: {\n parameterIsValid: {\n $set: undefined\n }\n }\n }\n });\n }\n\n return this;\n }\n\n /**\n * Sets or clears the \"valueOutdated\" flag for a data source.\n *\n * The flag indicates that the current stored value is outdated relative to its parameter\n * (for example, the parameter has changed and the value should be reloaded).\n *\n * @param dataSourceKey The key of the data source to update.\n * @param outdated True to mark the value as outdated, false to mark it as up-to-date.\n * @returns The NgssmDataSourceValueSetter instance for chaining.\n */\n public setOutdatedValueFlag(dataSourceKey: string, outdated: boolean): NgssmDataSourceValueSetter {\n // Ensure the data source is initialized before updating the outdated flag\n this.checkDataSource(dataSourceKey);\n\n this.store.stateValue = updateNgssmDataState(this.store.stateValue, {\n dataSourceValues: {\n [dataSourceKey]: {\n valueOutdated: {\n $set: outdated\n }\n }\n }\n });\n\n return this;\n }\n\n /**\n * Checks if the specified data source is initialized in the StoreMock.\n * Throws an error if the data source is not found.\n * @param datasourceKey The key of the data source to check.\n */\n public checkDataSource(datasourceKey: string) {\n const dataSourceValue = selectNgssmDataSourceValue(this.store.stateValue, datasourceKey);\n if (!dataSourceValue) {\n throw new Error(`Data source '${datasourceKey}' is not initialized.`);\n }\n }\n}\n\nexport const ngssmDataSourceValueSetter = () => TestBed.inject(NgssmDataSourceValueSetter);\n","import { EnvironmentProviders, inject, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';\n\nimport {\n NGSSM_DATA_SOURCE,\n NgssmDataSource,\n NgssmDataSourceValueStatus,\n NgssmDataStateSpecification,\n updateNgssmDataState\n} from 'ngssm-data';\nimport { Logger, Store } from 'ngssm-store';\nimport { StoreMock } from 'ngssm-store/testing';\n\nimport { NgssmDataSourceValueSetter } from './ngssm-data-source-value-setter';\n\nexport const ngssmDataStateAndSourcesInitializer = () => {\n const logger = inject(Logger);\n logger.information('[ngssm-data-testing] Initialization of state and sources');\n const store = inject(Store);\n if (!(store instanceof StoreMock)) {\n throw new Error('StoreMock is not registered.');\n }\n\n store.stateValue = {\n ...store.stateValue,\n [NgssmDataStateSpecification.featureStateKey]: NgssmDataStateSpecification.initialState\n };\n\n const dataSources = (inject(NGSSM_DATA_SOURCE, { optional: true }) as unknown as NgssmDataSource[]) ?? [];\n store.stateValue = dataSources.reduce((previous, current) => {\n return updateNgssmDataState(previous, {\n dataSourceValues: {\n [current.key]: {\n $set: {\n status: NgssmDataSourceValueStatus.none,\n additionalProperties: {}\n }\n }\n }\n });\n }, store.stateValue);\n};\n\nexport const provideNgssmDataTesting = (): EnvironmentProviders => {\n return makeEnvironmentProviders([provideAppInitializer(ngssmDataStateAndSourcesInitializer), NgssmDataSourceValueSetter]);\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
package/fesm2022/ngssm-data.mjs
CHANGED
|
@@ -326,10 +326,10 @@ class DataSourcesRegistrationReducer {
|
|
|
326
326
|
}
|
|
327
327
|
return state;
|
|
328
328
|
}
|
|
329
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
330
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
329
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataSourcesRegistrationReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
330
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataSourcesRegistrationReducer }); }
|
|
331
331
|
}
|
|
332
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
332
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataSourcesRegistrationReducer, decorators: [{
|
|
333
333
|
type: Injectable
|
|
334
334
|
}] });
|
|
335
335
|
|
|
@@ -388,10 +388,10 @@ class DataSourceValueReducer {
|
|
|
388
388
|
}
|
|
389
389
|
return state;
|
|
390
390
|
}
|
|
391
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
392
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
391
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataSourceValueReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
392
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataSourceValueReducer }); }
|
|
393
393
|
}
|
|
394
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
394
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataSourceValueReducer, decorators: [{
|
|
395
395
|
type: Injectable
|
|
396
396
|
}] });
|
|
397
397
|
|
|
@@ -488,10 +488,10 @@ class LoadDataSourceValueReducer {
|
|
|
488
488
|
}
|
|
489
489
|
return state;
|
|
490
490
|
}
|
|
491
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
492
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
491
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: LoadDataSourceValueReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
492
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: LoadDataSourceValueReducer }); }
|
|
493
493
|
}
|
|
494
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
494
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: LoadDataSourceValueReducer, decorators: [{
|
|
495
495
|
type: Injectable
|
|
496
496
|
}] });
|
|
497
497
|
|
|
@@ -560,10 +560,10 @@ class DataSourceAdditionalPropertyValueReducer {
|
|
|
560
560
|
}
|
|
561
561
|
return state;
|
|
562
562
|
}
|
|
563
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
564
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
563
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataSourceAdditionalPropertyValueReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
564
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataSourceAdditionalPropertyValueReducer }); }
|
|
565
565
|
}
|
|
566
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
566
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataSourceAdditionalPropertyValueReducer, decorators: [{
|
|
567
567
|
type: Injectable
|
|
568
568
|
}] });
|
|
569
569
|
|
|
@@ -693,10 +693,10 @@ class DataSourceParameterReducer {
|
|
|
693
693
|
}
|
|
694
694
|
});
|
|
695
695
|
}
|
|
696
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
697
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
696
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataSourceParameterReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
697
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataSourceParameterReducer }); }
|
|
698
698
|
}
|
|
699
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
699
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataSourceParameterReducer, decorators: [{
|
|
700
700
|
type: Injectable
|
|
701
701
|
}] });
|
|
702
702
|
|
|
@@ -754,10 +754,10 @@ class DataLoadingEffect {
|
|
|
754
754
|
}
|
|
755
755
|
}
|
|
756
756
|
}
|
|
757
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
758
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
757
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataLoadingEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
758
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataLoadingEffect }); }
|
|
759
759
|
}
|
|
760
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
760
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataLoadingEffect, decorators: [{
|
|
761
761
|
type: Injectable
|
|
762
762
|
}] });
|
|
763
763
|
|
|
@@ -893,10 +893,10 @@ class IsNgssmDataSourceValueStatusPipe {
|
|
|
893
893
|
const itemStatus = selectNgssmDataSourceValue(value, key).status;
|
|
894
894
|
return expectedStatuses.includes(itemStatus);
|
|
895
895
|
}
|
|
896
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
897
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.
|
|
896
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: IsNgssmDataSourceValueStatusPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
897
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.10", ngImport: i0, type: IsNgssmDataSourceValueStatusPipe, isStandalone: true, name: "isNgssmDataSourceValueStatus" }); }
|
|
898
898
|
}
|
|
899
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
899
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: IsNgssmDataSourceValueStatusPipe, decorators: [{
|
|
900
900
|
type: Pipe,
|
|
901
901
|
args: [{
|
|
902
902
|
name: 'isNgssmDataSourceValueStatus'
|
|
@@ -934,10 +934,10 @@ class NgssmAutoReloadComponent {
|
|
|
934
934
|
this.timerId = undefined;
|
|
935
935
|
}
|
|
936
936
|
}
|
|
937
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
938
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
937
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmAutoReloadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
938
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.10", 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 }); }
|
|
939
939
|
}
|
|
940
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
940
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmAutoReloadComponent, decorators: [{
|
|
941
941
|
type: Component,
|
|
942
942
|
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>" }]
|
|
943
943
|
}], ctorParameters: () => [], propDecorators: { autoReloadAction: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoReloadAction", required: false }] }] } });
|
|
@@ -995,10 +995,10 @@ class NgssmDataReloadButtonComponent {
|
|
|
995
995
|
}
|
|
996
996
|
this.dataSourceKeys().forEach((key) => this.store.dispatchAction(new NgssmLoadDataSourceValueAction(key, { forceReload: true, keepAdditionalProperties: this.keepAdditionalProperties() })));
|
|
997
997
|
}
|
|
998
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
999
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
998
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmDataReloadButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
999
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.10", 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 }); }
|
|
1000
1000
|
}
|
|
1001
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
1001
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmDataReloadButtonComponent, decorators: [{
|
|
1002
1002
|
type: Component,
|
|
1003
1003
|
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" }]
|
|
1004
1004
|
}], ctorParameters: () => [], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], keepAdditionalProperties: [{ type: i0.Input, args: [{ isSignal: true, alias: "keepAdditionalProperties", required: false }] }], buttonIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonIcon", required: false }] }], autoReloadEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoReloadEnabled", required: false }] }], dataSourceKeys: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSourceKeys", required: false }] }] } });
|
|
@@ -1028,10 +1028,10 @@ class NgssmScopedDataSourceDirective {
|
|
|
1028
1028
|
this.isInitialized = true;
|
|
1029
1029
|
return value;
|
|
1030
1030
|
}
|
|
1031
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
1032
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.
|
|
1031
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmScopedDataSourceDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
1032
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.10", type: NgssmScopedDataSourceDirective, isStandalone: true, selector: "[ngssmScopedDataSource]", inputs: { ngssmScopedDataSource: { classPropertyName: "ngssmScopedDataSource", publicName: "ngssmScopedDataSource", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
|
|
1033
1033
|
}
|
|
1034
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
1034
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmScopedDataSourceDirective, decorators: [{
|
|
1035
1035
|
type: Directive,
|
|
1036
1036
|
args: [{
|
|
1037
1037
|
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/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/reducers/data-source-additional-property-value.reducer.ts","../../../projects/ngssm-data/src/lib/ngssm-data/selectors.ts","../../../projects/ngssm-data/src/lib/ngssm-data/reducers/data-source-parameter.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 { HttpErrorResponse } from '@angular/common/http';\n\nimport { 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 public readonly httpErrorResponse?: HttpErrorResponse\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\n/**\n * Action to update part (partial) of a data source parameter.\n *\n * This action carries a Partial<TParameter> that will be merged with the existing parameter\n * for the specified data source key. By default, updating the parameter will mark the data\n * source value as outdated so it can be reloaded; set doNotUpdateValueOutdated to true to\n * avoid changing the valueOutdated flag when dispatching this action.\n *\n * The update of the parameter in state is made with a shallow merge. So be carefull with\n * the parameter value set in action.\n *\n * @template TParameter Type of the parameter object for the data source.\n * @param key The data source key whose parameter should be updated.\n * @param parameter Partial parameter to merge into the existing parameter.\n * @param doNotUpdateValueOutdated Optional flag to prevent marking the value as outdated.\n */\nexport class NgssmUpdateDataSourceParameterAction<TParameter = unknown> extends NgssmDataSourceValueAction {\n constructor(\n key: string,\n public readonly parameter: Partial<TParameter>,\n public readonly doNotUpdateValueOutdated?: boolean\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\n/**\n * Action used to set the validity state of a data source parameter.\n *\n * This action updates the overall parameter validity for the specified data source.\n * Optionally a partial validity key can be provided to indicate which sub-field or\n * portion of the parameter the validity refers to (useful when validating parameter\n * objects field-by-field).\n *\n * @param key The data source key this validity applies to.\n * @param isValid True when the parameter (or partial parameter) is valid, false otherwise.\n * @param partialValidityKey Optional identifier for partial validity (e.g. the parameter field name). If set, the global validity is not modified.\n */\nexport class NgssmSetDataSourceParameterValidityAction extends NgssmDataSourceValueAction {\n constructor(\n key: string,\n public readonly isValid: boolean,\n public readonly partialValidityKey?: string\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/**\n * Function signature for loading a data source value.\n * - state: the current global application state.\n * - dataSourceKey: the unique key of the data source being loaded.\n * - parameter: optional parameter passed to the loader.\n *\n * Must return an Observable that emits the requested data.\n */\nexport type NgssmDataLoading<TData = unknown, TParameter = unknown> = (\n state: State,\n dataSourceKey: string,\n parameter?: TParameter\n) => Observable<TData>;\n\n/**\n * Function signature for loading an additional property of a data source (e.g. row detail).\n * - state: the current global application state.\n * - dataSourceKey: the unique key of the data source.\n * - additionalProperty: the name of the additional property to load.\n *\n * Must return an Observable that emits the requested additional property data.\n */\nexport type NgssmAdditionalPropertyLoading<TData = unknown> = (\n state: State,\n dataSourceKey: string,\n additionalProperty: string\n) => Observable<TData>;\n\n/**\n * Describes a data source and its optional behaviours.\n *\n * - key: unique identifier for the data source.\n * - dataLifetimeInSeconds: optional TTL for cached data (seconds).\n * - dataLoadingFunc: required function that loads the main data.\n * - additionalPropertyLoadingFunc: optional function to load named additional properties independently.\n * - initialParameter: optional parameter used initially when registering the data source.\n * - initialParameterInvalid: flag indicating the initial parameter should be considered invalid.\n * - linkedToDataSource: if specified, this data source is reloaded when the target source is updated.\n * - linkedDataSources: list of other data sources to reload when this source is updated.\n * - dependsOnDataSource: optional dependency key; when loading this source, the dependency will be loaded first.\n */\nexport interface NgssmDataSource<TData = unknown, TParameter = unknown, TAdditionalProperty = unknown> {\n key: string;\n dataLifetimeInSeconds?: number;\n dataLoadingFunc: NgssmDataLoading<TData, TParameter>;\n additionalPropertyLoadingFunc?: NgssmAdditionalPropertyLoading<TAdditionalProperty>;\n initialParameter?: TParameter;\n initialParameterInvalid?: boolean;\n linkedToDataSource?: string;\n linkedDataSources?: string[];\n dependsOnDataSource?: string;\n}\n\n/**\n * Injection token used to register data sources via DI.\n * Provide one or several NgssmDataSource objects using this token (multi: true).\n */\nexport const NGSSM_DATA_SOURCE = new InjectionToken<NgssmDataSource>('NGSSM_DATA_SOURCE');\n\n/**\n * Options accepted when providing a data source via provideNgssmDataSource.\n * See individual properties for behaviour.\n */\nexport interface NgssmDataSourceProvideOptions<TParameter = unknown, TAdditionalProperty = unknown> {\n dataLifetimeInSeconds?: number;\n initialParameter?: TParameter;\n initialParameterInvalid?: boolean;\n additionalPropertyLoadingFunc?: NgssmAdditionalPropertyLoading<TAdditionalProperty>;\n linkedToDataSource?: string;\n linkedDataSources?: string[];\n dependsOnDataSource?: string;\n}\n\n/**\n * Helper function to register a data source in Angular's environment providers.\n * Use provideNgssmData() at app startup to pick up data sources registered via this helper.\n */\nexport const provideNgssmDataSource = <TData = unknown, TParameter = unknown, TAdditionalProperty = unknown>(\n key: string,\n loadingFunc: NgssmDataLoading<TData, TParameter>,\n options?: NgssmDataSourceProvideOptions<TParameter, TAdditionalProperty>\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/**\n * Guard / initializer helper that dispatches a NgssmLoadDataSourceValueAction for the given key.\n * Returns a function suitable for use in Router canActivate (or app initializers) that always returns true.\n */\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';\nimport { DateTime } from 'luxon';\n\n/**\n * Enum describing the lifecycle status of a data source value.\n * - none: No value has been requested or initialized.\n * - notRegistered: The requested data source is not registered.\n * - loading: A load operation for the data source is currently in progress.\n * - loaded: The data source loaded successfully and a value is available.\n * - error: The last load attempt failed.\n */\nexport enum NgssmDataSourceValueStatus {\n none = 'none',\n notRegistered = 'notRegistered',\n loading = 'loading',\n loaded = 'loaded',\n error = 'error'\n}\n\n/**\n * Represents the status and optional metadata for an additional property of a data source.\n * Additional properties are values related to the main data source value that may be loaded independently\n * (for example, a row detail).\n *\n * @template TProperty Type of the additional property's value.\n * @property status Current load status of the additional property.\n * @property value Optional value of the additional property.\n * @property lastLoadingDate Optional timestamp of the last successful load (luxon DateTime).\n * @property httpErrorResponse Optional HTTP error returned during the last load attempt.\n */\nexport interface NgssmDataSourceAdditionalPropertyValue<TProperty = unknown> {\n status: NgssmDataSourceValueStatus;\n value?: TProperty;\n lastLoadingDate?: DateTime;\n httpErrorResponse?: HttpErrorResponse;\n}\n\n/**\n * Represents the stored value and metadata for a data source.\n *\n * @template TData Type of the data source value.\n * @template TParameter Type of the parameter used to load the data source.\n * @property status Current load status of the data source.\n * @property value Optional value returned by the data source loader.\n * @property parameter Optional parameter used when loading the data source.\n * @property lastLoadingDate Optional timestamp of the last successful load (luxon DateTime).\n * @property dataLifetimeInSeconds Optional TTL for cached data, in seconds.\n * @property additionalProperties Map of additional property values (see NgssmDataSourceAdditionalPropertyValue).\n * @property parameterIsValid Optional flag indicating if the current parameter is valid.\n * @property parameterPartialValidity Optional map storing partial validity of parameter sub-fields (e.g. { fieldA: true, fieldB: false }).\n * @property httpErrorResponse Optional HTTP error returned during the last load attempt.\n * @property valueOutdated Optional flag indicating that the parameter changed and the value is now outdated.\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\n /**\n * Map storing partial validity information for the parameter.\n * Key is a parameter field name (or any identifier) and value is boolean validity.\n * Undefined when no partial validation data is present.\n */\n parameterPartialValidity?: Record<string, boolean>;\n\n httpErrorResponse?: HttpErrorResponse;\n\n // Parameter has been updated but not value\n valueOutdated?: boolean;\n}\n\n/**\n * Types and helper for automatic reload intervals of a data source value.\n * - NgssmDataSourceValueAutoReloadType: allowed string values for auto-reload selection.\n * - getNgssmDataSourceValueAutoReloadTypes: returns a list of label/value pairs usable for UI selects.\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\nexport const isNgssmDataSourceValueParameterValid = (dataSourceValue: NgssmDataSourceValue): boolean => {\n if (dataSourceValue.parameterIsValid === true) {\n return true;\n }\n\n if (dataSourceValue.parameterIsValid === false) {\n return false;\n }\n\n if (dataSourceValue.parameterPartialValidity) {\n let isValid = true;\n Object.values(dataSourceValue.parameterPartialValidity).forEach((isPartialValid) => {\n isValid = isValid && isPartialValid;\n });\n return isValid;\n }\n\n return true;\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 { Injectable } from '@angular/core';\n\nimport { DateTime } from 'luxon';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { NgssmClearDataSourceValueAction, NgssmDataActionType, NgssmSetDataSourceValueAction } from '../actions';\nimport { selectNgssmDataState, updateNgssmDataState } from '../state';\nimport { NgssmDataSourceValueStatus } from '../model';\n\n@Injectable()\nexport class DataSourceValueReducer implements Reducer {\n public readonly processedActions: string[] = [NgssmDataActionType.setDataSourceValue, NgssmDataActionType.clearDataSourceValue];\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 // leave parameterPartialValidity as-is on value set (no change here)\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 // clear partial validity when parameter is cleared\n parameterPartialValidity: { $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 // ensure partial-validity cleared when value is cleared\n parameterPartialValidity: { $set: undefined }\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 { Injectable } from '@angular/core';\n\nimport { DateTime } from 'luxon';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport {\n NgssmDataActionType,\n NgssmLoadDataSourceAdditionalPropertyValueAction,\n NgssmSetDataSourceAdditionalPropertyValueAction\n} from '../actions';\nimport { selectNgssmDataState, updateNgssmDataState } from '../state';\nimport { NgssmDataSourceValueStatus } from '../model';\n\n@Injectable()\nexport class DataSourceAdditionalPropertyValueReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmDataActionType.loadDataSourceAdditionalPropertyValue,\n NgssmDataActionType.setDataSourceAdditionalPropertyValue\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\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 httpErrorResponse: ngssmSetDataSourceAdditionalPropertyValueAction.httpErrorResponse\n }\n }\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { State } from 'ngssm-store';\n\nimport {\n isNgssmDataSourceValueParameterValid,\n NgssmDataSourceAdditionalPropertyValue,\n NgssmDataSourceValue,\n NgssmDataSourceValueStatus\n} 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\n/**\n * Determines whether the parameter for the specified data source should be considered valid.\n *\n * Rules:\n * - If parameterIsValid is explicitly true or false on the data source value, that value is returned.\n * - Otherwise, if parameterPartialValidity map exists, the function returns true only if all\n * partial entries are true (logical AND).\n * - If no explicit validity information is present, the parameter is considered valid (returns true).\n *\n * @param state The global application state.\n * @param dataSourceKey The key of the data source to check.\n * @returns True when the parameter (or all partial parameter entries) is valid, false otherwise.\n */\nexport const isNgssmDataSourceParameterValid = (state: State, dataSourceKey: string): boolean => {\n const dataSource = selectNgssmDataSourceValue(state, dataSourceKey);\n if (!dataSource) {\n return true;\n }\n\n return isNgssmDataSourceValueParameterValid(dataSource);\n};\n","import { Injectable } from '@angular/core';\n\nimport update from 'immutability-helper';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport {\n NgssmDataActionType,\n NgssmSetDataSourceParameterAction,\n NgssmSetDataSourceParameterValidityAction,\n NgssmUpdateDataSourceParameterAction\n} from '../actions';\nimport { updateNgssmDataState } from '../state';\nimport { selectNgssmDataSourceValue } from '../selectors';\n\n@Injectable()\nexport class DataSourceParameterReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmDataActionType.setDataSourceParameter,\n NgssmDataActionType.updateDataSourceParameter,\n NgssmDataActionType.setDataSourceParameterValidity\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\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 // leave parameterPartialValidity as-is on value set (no change here)\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\n const updatedState = updateNgssmDataState(state, {\n dataSourceValues: {\n [ngssmUpdateDataSourceParameterAction.key]: {\n parameter: { $set: newParameter }\n }\n }\n });\n\n if (ngssmUpdateDataSourceParameterAction.doNotUpdateValueOutdated === true) {\n return updatedState;\n }\n\n return updateNgssmDataState(updatedState, {\n dataSourceValues: {\n [ngssmUpdateDataSourceParameterAction.key]: {\n valueOutdated: { $set: true }\n }\n }\n });\n }\n\n case NgssmDataActionType.setDataSourceParameterValidity: {\n const ngssmSetDataSourceParameterValidityAction = action as NgssmSetDataSourceParameterValidityAction;\n if (ngssmSetDataSourceParameterValidityAction.partialValidityKey) {\n return this.setPartialValidity(\n state,\n ngssmSetDataSourceParameterValidityAction.key,\n ngssmSetDataSourceParameterValidityAction.isValid,\n ngssmSetDataSourceParameterValidityAction.partialValidityKey\n );\n }\n\n return this.setGlobalValidity(\n state,\n ngssmSetDataSourceParameterValidityAction.key,\n ngssmSetDataSourceParameterValidityAction.isValid\n );\n }\n }\n\n return state;\n }\n\n private setGlobalValidity(state: State, key: string, isValid: boolean): State {\n return updateNgssmDataState(state, {\n dataSourceValues: {\n [key]: {\n parameterIsValid: { $set: isValid }\n }\n }\n });\n }\n\n private setPartialValidity(state: State, key: string, isValid: boolean, partialKey: string): State {\n if (selectNgssmDataSourceValue(state, key)?.parameterPartialValidity) {\n return updateNgssmDataState(state, {\n dataSourceValues: {\n [key]: {\n parameterPartialValidity: {\n [partialKey]: { $set: isValid }\n }\n }\n }\n });\n }\n\n return updateNgssmDataState(state, {\n dataSourceValues: {\n [key]: {\n parameterPartialValidity: {\n $set: {\n [partialKey]: isValid\n }\n }\n }\n }\n });\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(\n key,\n property,\n NgssmDataSourceValueStatus.error,\n undefined,\n ngssmLoadDataSourceAdditionalPropertyValueAction.postLoadingAction,\n error\n )\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 {\n DataSourceAdditionalPropertyValueReducer,\n DataSourceParameterReducer,\n DataSourceValueReducer,\n DataSourcesRegistrationReducer,\n LoadDataSourceValueReducer\n} 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(\n DataSourcesRegistrationReducer,\n DataSourceValueReducer,\n LoadDataSourceValueReducer,\n DataSourceAdditionalPropertyValueReducer,\n DataSourceParameterReducer\n ),\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 { isNgssmDataSourceValueParameterValid, 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 =\n keys.findIndex((key) => values[key] && isNgssmDataSourceValueParameterValid(values[key]) === 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' | 'parameter';\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 case 'parameter':\n return {\n key,\n value: computed(() => selectNgssmDataSourceValue<T>(store.state(), key)?.parameter ?? 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/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/reducers/data-source-additional-property-value.reducer.ts","../../../projects/ngssm-data/src/lib/ngssm-data/selectors.ts","../../../projects/ngssm-data/src/lib/ngssm-data/reducers/data-source-parameter.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 { HttpErrorResponse } from '@angular/common/http';\n\nimport { 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 public readonly httpErrorResponse?: HttpErrorResponse\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\n/**\n * Action to update part (partial) of a data source parameter.\n *\n * This action carries a Partial<TParameter> that will be merged with the existing parameter\n * for the specified data source key. By default, updating the parameter will mark the data\n * source value as outdated so it can be reloaded; set doNotUpdateValueOutdated to true to\n * avoid changing the valueOutdated flag when dispatching this action.\n *\n * The update of the parameter in state is made with a shallow merge. So be carefull with\n * the parameter value set in action.\n *\n * @template TParameter Type of the parameter object for the data source.\n * @param key The data source key whose parameter should be updated.\n * @param parameter Partial parameter to merge into the existing parameter.\n * @param doNotUpdateValueOutdated Optional flag to prevent marking the value as outdated.\n */\nexport class NgssmUpdateDataSourceParameterAction<TParameter = unknown> extends NgssmDataSourceValueAction {\n constructor(\n key: string,\n public readonly parameter: Partial<TParameter>,\n public readonly doNotUpdateValueOutdated?: boolean\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\n/**\n * Action used to set the validity state of a data source parameter.\n *\n * This action updates the overall parameter validity for the specified data source.\n * Optionally a partial validity key can be provided to indicate which sub-field or\n * portion of the parameter the validity refers to (useful when validating parameter\n * objects field-by-field).\n *\n * @param key The data source key this validity applies to.\n * @param isValid True when the parameter (or partial parameter) is valid, false otherwise.\n * @param partialValidityKey Optional identifier for partial validity (e.g. the parameter field name). If set, the global validity is not modified.\n */\nexport class NgssmSetDataSourceParameterValidityAction extends NgssmDataSourceValueAction {\n constructor(\n key: string,\n public readonly isValid: boolean,\n public readonly partialValidityKey?: string\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/**\n * Function signature for loading a data source value.\n * - state: the current global application state.\n * - dataSourceKey: the unique key of the data source being loaded.\n * - parameter: optional parameter passed to the loader.\n *\n * Must return an Observable that emits the requested data.\n */\nexport type NgssmDataLoading<TData = unknown, TParameter = unknown> = (\n state: State,\n dataSourceKey: string,\n parameter?: TParameter\n) => Observable<TData>;\n\n/**\n * Function signature for loading an additional property of a data source (e.g. row detail).\n * - state: the current global application state.\n * - dataSourceKey: the unique key of the data source.\n * - additionalProperty: the name of the additional property to load.\n *\n * Must return an Observable that emits the requested additional property data.\n */\nexport type NgssmAdditionalPropertyLoading<TData = unknown> = (\n state: State,\n dataSourceKey: string,\n additionalProperty: string\n) => Observable<TData>;\n\n/**\n * Describes a data source and its optional behaviours.\n *\n * - key: unique identifier for the data source.\n * - dataLifetimeInSeconds: optional TTL for cached data (seconds).\n * - dataLoadingFunc: required function that loads the main data.\n * - additionalPropertyLoadingFunc: optional function to load named additional properties independently.\n * - initialParameter: optional parameter used initially when registering the data source.\n * - initialParameterInvalid: flag indicating the initial parameter should be considered invalid.\n * - linkedToDataSource: if specified, this data source is reloaded when the target source is updated.\n * - linkedDataSources: list of other data sources to reload when this source is updated.\n * - dependsOnDataSource: optional dependency key; when loading this source, the dependency will be loaded first.\n */\nexport interface NgssmDataSource<TData = unknown, TParameter = unknown, TAdditionalProperty = unknown> {\n key: string;\n dataLifetimeInSeconds?: number;\n dataLoadingFunc: NgssmDataLoading<TData, TParameter>;\n additionalPropertyLoadingFunc?: NgssmAdditionalPropertyLoading<TAdditionalProperty>;\n initialParameter?: TParameter;\n initialParameterInvalid?: boolean;\n linkedToDataSource?: string;\n linkedDataSources?: string[];\n dependsOnDataSource?: string;\n}\n\n/**\n * Injection token used to register data sources via DI.\n * Provide one or several NgssmDataSource objects using this token (multi: true).\n */\nexport const NGSSM_DATA_SOURCE = new InjectionToken<NgssmDataSource>('NGSSM_DATA_SOURCE');\n\n/**\n * Options accepted when providing a data source via provideNgssmDataSource.\n * See individual properties for behaviour.\n */\nexport interface NgssmDataSourceProvideOptions<TParameter = unknown, TAdditionalProperty = unknown> {\n dataLifetimeInSeconds?: number;\n initialParameter?: TParameter;\n initialParameterInvalid?: boolean;\n additionalPropertyLoadingFunc?: NgssmAdditionalPropertyLoading<TAdditionalProperty>;\n linkedToDataSource?: string;\n linkedDataSources?: string[];\n dependsOnDataSource?: string;\n}\n\n/**\n * Helper function to register a data source in Angular's environment providers.\n * Use provideNgssmData() at app startup to pick up data sources registered via this helper.\n */\nexport const provideNgssmDataSource = <TData = unknown, TParameter = unknown, TAdditionalProperty = unknown>(\n key: string,\n loadingFunc: NgssmDataLoading<TData, TParameter>,\n options?: NgssmDataSourceProvideOptions<TParameter, TAdditionalProperty>\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/**\n * Guard / initializer helper that dispatches a NgssmLoadDataSourceValueAction for the given key.\n * Returns a function suitable for use in Router canActivate (or app initializers) that always returns true.\n */\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';\nimport { DateTime } from 'luxon';\n\n/**\n * Enum describing the lifecycle status of a data source value.\n * - none: No value has been requested or initialized.\n * - notRegistered: The requested data source is not registered.\n * - loading: A load operation for the data source is currently in progress.\n * - loaded: The data source loaded successfully and a value is available.\n * - error: The last load attempt failed.\n */\nexport enum NgssmDataSourceValueStatus {\n none = 'none',\n notRegistered = 'notRegistered',\n loading = 'loading',\n loaded = 'loaded',\n error = 'error'\n}\n\n/**\n * Represents the status and optional metadata for an additional property of a data source.\n * Additional properties are values related to the main data source value that may be loaded independently\n * (for example, a row detail).\n *\n * @template TProperty Type of the additional property's value.\n * @property status Current load status of the additional property.\n * @property value Optional value of the additional property.\n * @property lastLoadingDate Optional timestamp of the last successful load (luxon DateTime).\n * @property httpErrorResponse Optional HTTP error returned during the last load attempt.\n */\nexport interface NgssmDataSourceAdditionalPropertyValue<TProperty = unknown> {\n status: NgssmDataSourceValueStatus;\n value?: TProperty;\n lastLoadingDate?: DateTime;\n httpErrorResponse?: HttpErrorResponse;\n}\n\n/**\n * Represents the stored value and metadata for a data source.\n *\n * @template TData Type of the data source value.\n * @template TParameter Type of the parameter used to load the data source.\n * @property status Current load status of the data source.\n * @property value Optional value returned by the data source loader.\n * @property parameter Optional parameter used when loading the data source.\n * @property lastLoadingDate Optional timestamp of the last successful load (luxon DateTime).\n * @property dataLifetimeInSeconds Optional TTL for cached data, in seconds.\n * @property additionalProperties Map of additional property values (see NgssmDataSourceAdditionalPropertyValue).\n * @property parameterIsValid Optional flag indicating if the current parameter is valid.\n * @property parameterPartialValidity Optional map storing partial validity of parameter sub-fields (e.g. { fieldA: true, fieldB: false }).\n * @property httpErrorResponse Optional HTTP error returned during the last load attempt.\n * @property valueOutdated Optional flag indicating that the parameter changed and the value is now outdated.\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\n /**\n * Map storing partial validity information for the parameter.\n * Key is a parameter field name (or any identifier) and value is boolean validity.\n * Undefined when no partial validation data is present.\n */\n parameterPartialValidity?: Record<string, boolean>;\n\n httpErrorResponse?: HttpErrorResponse;\n\n // Parameter has been updated but not value\n valueOutdated?: boolean;\n}\n\n/**\n * Types and helper for automatic reload intervals of a data source value.\n * - NgssmDataSourceValueAutoReloadType: allowed string values for auto-reload selection.\n * - getNgssmDataSourceValueAutoReloadTypes: returns a list of label/value pairs usable for UI selects.\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\nexport const isNgssmDataSourceValueParameterValid = (dataSourceValue: NgssmDataSourceValue): boolean => {\n if (dataSourceValue.parameterIsValid === true) {\n return true;\n }\n\n if (dataSourceValue.parameterIsValid === false) {\n return false;\n }\n\n if (dataSourceValue.parameterPartialValidity) {\n let isValid = true;\n Object.values(dataSourceValue.parameterPartialValidity).forEach((isPartialValid) => {\n isValid = isValid && isPartialValid;\n });\n return isValid;\n }\n\n return true;\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 { Injectable } from '@angular/core';\n\nimport { DateTime } from 'luxon';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { NgssmClearDataSourceValueAction, NgssmDataActionType, NgssmSetDataSourceValueAction } from '../actions';\nimport { selectNgssmDataState, updateNgssmDataState } from '../state';\nimport { NgssmDataSourceValueStatus } from '../model';\n\n@Injectable()\nexport class DataSourceValueReducer implements Reducer {\n public readonly processedActions: string[] = [NgssmDataActionType.setDataSourceValue, NgssmDataActionType.clearDataSourceValue];\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 // leave parameterPartialValidity as-is on value set (no change here)\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 // clear partial validity when parameter is cleared\n parameterPartialValidity: { $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 // ensure partial-validity cleared when value is cleared\n parameterPartialValidity: { $set: undefined }\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 { Injectable } from '@angular/core';\n\nimport { DateTime } from 'luxon';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport {\n NgssmDataActionType,\n NgssmLoadDataSourceAdditionalPropertyValueAction,\n NgssmSetDataSourceAdditionalPropertyValueAction\n} from '../actions';\nimport { selectNgssmDataState, updateNgssmDataState } from '../state';\nimport { NgssmDataSourceValueStatus } from '../model';\n\n@Injectable()\nexport class DataSourceAdditionalPropertyValueReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmDataActionType.loadDataSourceAdditionalPropertyValue,\n NgssmDataActionType.setDataSourceAdditionalPropertyValue\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\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 httpErrorResponse: ngssmSetDataSourceAdditionalPropertyValueAction.httpErrorResponse\n }\n }\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { State } from 'ngssm-store';\n\nimport {\n isNgssmDataSourceValueParameterValid,\n NgssmDataSourceAdditionalPropertyValue,\n NgssmDataSourceValue,\n NgssmDataSourceValueStatus\n} 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\n/**\n * Determines whether the parameter for the specified data source should be considered valid.\n *\n * Rules:\n * - If parameterIsValid is explicitly true or false on the data source value, that value is returned.\n * - Otherwise, if parameterPartialValidity map exists, the function returns true only if all\n * partial entries are true (logical AND).\n * - If no explicit validity information is present, the parameter is considered valid (returns true).\n *\n * @param state The global application state.\n * @param dataSourceKey The key of the data source to check.\n * @returns True when the parameter (or all partial parameter entries) is valid, false otherwise.\n */\nexport const isNgssmDataSourceParameterValid = (state: State, dataSourceKey: string): boolean => {\n const dataSource = selectNgssmDataSourceValue(state, dataSourceKey);\n if (!dataSource) {\n return true;\n }\n\n return isNgssmDataSourceValueParameterValid(dataSource);\n};\n","import { Injectable } from '@angular/core';\n\nimport update from 'immutability-helper';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport {\n NgssmDataActionType,\n NgssmSetDataSourceParameterAction,\n NgssmSetDataSourceParameterValidityAction,\n NgssmUpdateDataSourceParameterAction\n} from '../actions';\nimport { updateNgssmDataState } from '../state';\nimport { selectNgssmDataSourceValue } from '../selectors';\n\n@Injectable()\nexport class DataSourceParameterReducer implements Reducer {\n public readonly processedActions: string[] = [\n NgssmDataActionType.setDataSourceParameter,\n NgssmDataActionType.updateDataSourceParameter,\n NgssmDataActionType.setDataSourceParameterValidity\n ];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\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 // leave parameterPartialValidity as-is on value set (no change here)\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\n const updatedState = updateNgssmDataState(state, {\n dataSourceValues: {\n [ngssmUpdateDataSourceParameterAction.key]: {\n parameter: { $set: newParameter }\n }\n }\n });\n\n if (ngssmUpdateDataSourceParameterAction.doNotUpdateValueOutdated === true) {\n return updatedState;\n }\n\n return updateNgssmDataState(updatedState, {\n dataSourceValues: {\n [ngssmUpdateDataSourceParameterAction.key]: {\n valueOutdated: { $set: true }\n }\n }\n });\n }\n\n case NgssmDataActionType.setDataSourceParameterValidity: {\n const ngssmSetDataSourceParameterValidityAction = action as NgssmSetDataSourceParameterValidityAction;\n if (ngssmSetDataSourceParameterValidityAction.partialValidityKey) {\n return this.setPartialValidity(\n state,\n ngssmSetDataSourceParameterValidityAction.key,\n ngssmSetDataSourceParameterValidityAction.isValid,\n ngssmSetDataSourceParameterValidityAction.partialValidityKey\n );\n }\n\n return this.setGlobalValidity(\n state,\n ngssmSetDataSourceParameterValidityAction.key,\n ngssmSetDataSourceParameterValidityAction.isValid\n );\n }\n }\n\n return state;\n }\n\n private setGlobalValidity(state: State, key: string, isValid: boolean): State {\n return updateNgssmDataState(state, {\n dataSourceValues: {\n [key]: {\n parameterIsValid: { $set: isValid }\n }\n }\n });\n }\n\n private setPartialValidity(state: State, key: string, isValid: boolean, partialKey: string): State {\n if (selectNgssmDataSourceValue(state, key)?.parameterPartialValidity) {\n return updateNgssmDataState(state, {\n dataSourceValues: {\n [key]: {\n parameterPartialValidity: {\n [partialKey]: { $set: isValid }\n }\n }\n }\n });\n }\n\n return updateNgssmDataState(state, {\n dataSourceValues: {\n [key]: {\n parameterPartialValidity: {\n $set: {\n [partialKey]: isValid\n }\n }\n }\n }\n });\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(\n key,\n property,\n NgssmDataSourceValueStatus.error,\n undefined,\n ngssmLoadDataSourceAdditionalPropertyValueAction.postLoadingAction,\n error\n )\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 {\n DataSourceAdditionalPropertyValueReducer,\n DataSourceParameterReducer,\n DataSourceValueReducer,\n DataSourcesRegistrationReducer,\n LoadDataSourceValueReducer\n} 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(\n DataSourcesRegistrationReducer,\n DataSourceValueReducer,\n LoadDataSourceValueReducer,\n DataSourceAdditionalPropertyValueReducer,\n DataSourceParameterReducer\n ),\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 { isNgssmDataSourceValueParameterValid, 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 =\n keys.findIndex((key) => values[key] && isNgssmDataSourceValueParameterValid(values[key]) === 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' | 'parameter';\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 case 'parameter':\n return {\n key,\n value: computed(() => selectNgssmDataSourceValue<T>(store.state(), key)?.parameter ?? 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