ngssm-remote-data 14.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +3 -0
  2. package/esm2020/lib/actions/index.mjs +4 -0
  3. package/esm2020/lib/actions/load-remote-data.action.mjs +9 -0
  4. package/esm2020/lib/actions/register-loaded-remote-data.action.mjs +11 -0
  5. package/esm2020/lib/actions/remote-data-action-type.mjs +6 -0
  6. package/esm2020/lib/data-status.mjs +9 -0
  7. package/esm2020/lib/effects/remote-data-loading.effect.mjs +44 -0
  8. package/esm2020/lib/guards/index.mjs +2 -0
  9. package/esm2020/lib/guards/remote-data-loading.guard.mjs +25 -0
  10. package/esm2020/lib/ngssm-remote-data.module.mjs +29 -0
  11. package/esm2020/lib/reducers/remote-data.reducer.mjs +64 -0
  12. package/esm2020/lib/remote-data-provider.mjs +3 -0
  13. package/esm2020/lib/remote-data-state-initializer.mjs +25 -0
  14. package/esm2020/lib/remote-data.mjs +6 -0
  15. package/esm2020/lib/state/index.mjs +3 -0
  16. package/esm2020/lib/state/remote-data.state.mjs +20 -0
  17. package/esm2020/lib/state/selectors.mjs +3 -0
  18. package/esm2020/ngssm-remote-data.mjs +5 -0
  19. package/esm2020/public-api.mjs +11 -0
  20. package/fesm2015/ngssm-remote-data.mjs +241 -0
  21. package/fesm2015/ngssm-remote-data.mjs.map +1 -0
  22. package/fesm2020/ngssm-remote-data.mjs +233 -0
  23. package/fesm2020/ngssm-remote-data.mjs.map +1 -0
  24. package/index.d.ts +5 -0
  25. package/lib/actions/index.d.ts +3 -0
  26. package/lib/actions/load-remote-data.action.d.ts +7 -0
  27. package/lib/actions/register-loaded-remote-data.action.d.ts +10 -0
  28. package/lib/actions/remote-data-action-type.d.ts +4 -0
  29. package/lib/data-status.d.ts +7 -0
  30. package/lib/effects/remote-data-loading.effect.d.ts +13 -0
  31. package/lib/guards/index.d.ts +1 -0
  32. package/lib/guards/remote-data-loading.guard.d.ts +18 -0
  33. package/lib/ngssm-remote-data.module.d.ts +6 -0
  34. package/lib/reducers/remote-data.reducer.d.ts +13 -0
  35. package/lib/remote-data-provider.d.ts +8 -0
  36. package/lib/remote-data-state-initializer.d.ts +10 -0
  37. package/lib/remote-data.d.ts +8 -0
  38. package/lib/state/index.d.ts +2 -0
  39. package/lib/state/remote-data.state.d.ts +12 -0
  40. package/lib/state/selectors.d.ts +2 -0
  41. package/package.json +40 -0
  42. package/public-api.d.ts +7 -0
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # ngssm-remote-data
2
+
3
+ This library provides tools to faciliate the management by the store of data loaded from remote services.
@@ -0,0 +1,4 @@
1
+ export * from './remote-data-action-type';
2
+ export * from './load-remote-data.action';
3
+ export * from './register-loaded-remote-data.action';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS1yZW1vdGUtZGF0YS9zcmMvbGliL2FjdGlvbnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsc0NBQXNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3JlbW90ZS1kYXRhLWFjdGlvbi10eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vbG9hZC1yZW1vdGUtZGF0YS5hY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9yZWdpc3Rlci1sb2FkZWQtcmVtb3RlLWRhdGEuYWN0aW9uJztcbiJdfQ==
@@ -0,0 +1,9 @@
1
+ import { RemoteDataActionType } from './remote-data-action-type';
2
+ export class LoadRemoteDataAction {
3
+ constructor(remoteDataKey, forceReload) {
4
+ this.remoteDataKey = remoteDataKey;
5
+ this.forceReload = forceReload;
6
+ this.type = RemoteDataActionType.loadRemoteData;
7
+ }
8
+ }
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC1yZW1vdGUtZGF0YS5hY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS1yZW1vdGUtZGF0YS9zcmMvbGliL2FjdGlvbnMvbG9hZC1yZW1vdGUtZGF0YS5hY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFakUsTUFBTSxPQUFPLG9CQUFvQjtJQUcvQixZQUE0QixhQUFxQixFQUFrQixXQUFvQjtRQUEzRCxrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQUFrQixnQkFBVyxHQUFYLFdBQVcsQ0FBUztRQUZ2RSxTQUFJLEdBQVcsb0JBQW9CLENBQUMsY0FBYyxDQUFDO0lBRXVCLENBQUM7Q0FDNUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb24gfSBmcm9tICduZ3NzbS1zdG9yZSc7XG5cbmltcG9ydCB7IFJlbW90ZURhdGFBY3Rpb25UeXBlIH0gZnJvbSAnLi9yZW1vdGUtZGF0YS1hY3Rpb24tdHlwZSc7XG5cbmV4cG9ydCBjbGFzcyBMb2FkUmVtb3RlRGF0YUFjdGlvbiBpbXBsZW1lbnRzIEFjdGlvbiB7XG4gIHB1YmxpYyByZWFkb25seSB0eXBlOiBzdHJpbmcgPSBSZW1vdGVEYXRhQWN0aW9uVHlwZS5sb2FkUmVtb3RlRGF0YTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgcmVtb3RlRGF0YUtleTogc3RyaW5nLCBwdWJsaWMgcmVhZG9ubHkgZm9yY2VSZWxvYWQ6IGJvb2xlYW4pIHt9XG59XG4iXX0=
@@ -0,0 +1,11 @@
1
+ import { RemoteDataActionType } from './remote-data-action-type';
2
+ export class RegisterLoadedRemoteDataAction {
3
+ constructor(remoteDataKey, status, data, message) {
4
+ this.remoteDataKey = remoteDataKey;
5
+ this.status = status;
6
+ this.data = data;
7
+ this.message = message;
8
+ this.type = RemoteDataActionType.registerLoadedRemoteData;
9
+ }
10
+ }
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXItbG9hZGVkLXJlbW90ZS1kYXRhLmFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nc3NtLXJlbW90ZS1kYXRhL3NyYy9saWIvYWN0aW9ucy9yZWdpc3Rlci1sb2FkZWQtcmVtb3RlLWRhdGEuYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRWpFLE1BQU0sT0FBTyw4QkFBOEI7SUFHekMsWUFDa0IsYUFBcUIsRUFDckIsTUFBa0IsRUFDbEIsSUFBUyxFQUNULE9BQWdCO1FBSGhCLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVk7UUFDbEIsU0FBSSxHQUFKLElBQUksQ0FBSztRQUNULFlBQU8sR0FBUCxPQUFPLENBQVM7UUFObEIsU0FBSSxHQUFXLG9CQUFvQixDQUFDLHdCQUF3QixDQUFDO0lBTzFFLENBQUM7Q0FDTCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGlvbiB9IGZyb20gJ25nc3NtLXN0b3JlJztcblxuaW1wb3J0IHsgRGF0YVN0YXR1cyB9IGZyb20gJy4uL2RhdGEtc3RhdHVzJztcbmltcG9ydCB7IFJlbW90ZURhdGFBY3Rpb25UeXBlIH0gZnJvbSAnLi9yZW1vdGUtZGF0YS1hY3Rpb24tdHlwZSc7XG5cbmV4cG9ydCBjbGFzcyBSZWdpc3RlckxvYWRlZFJlbW90ZURhdGFBY3Rpb24gaW1wbGVtZW50cyBBY3Rpb24ge1xuICBwdWJsaWMgcmVhZG9ubHkgdHlwZTogc3RyaW5nID0gUmVtb3RlRGF0YUFjdGlvblR5cGUucmVnaXN0ZXJMb2FkZWRSZW1vdGVEYXRhO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSByZW1vdGVEYXRhS2V5OiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IHN0YXR1czogRGF0YVN0YXR1cyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGF0YTogYW55LFxuICAgIHB1YmxpYyByZWFkb25seSBtZXNzYWdlPzogc3RyaW5nXG4gICkge31cbn1cbiJdfQ==
@@ -0,0 +1,6 @@
1
+ export var RemoteDataActionType;
2
+ (function (RemoteDataActionType) {
3
+ RemoteDataActionType["loadRemoteData"] = "[RemoteDataActionType] loadRemoteData";
4
+ RemoteDataActionType["registerLoadedRemoteData"] = "[RemoteDataActionType] registerLoadedRemoteData";
5
+ })(RemoteDataActionType || (RemoteDataActionType = {}));
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWRhdGEtYWN0aW9uLXR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS1yZW1vdGUtZGF0YS9zcmMvbGliL2FjdGlvbnMvcmVtb3RlLWRhdGEtYWN0aW9uLXR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksb0JBR1g7QUFIRCxXQUFZLG9CQUFvQjtJQUM5QixnRkFBd0QsQ0FBQTtJQUN4RCxvR0FBNEUsQ0FBQTtBQUM5RSxDQUFDLEVBSFcsb0JBQW9CLEtBQXBCLG9CQUFvQixRQUcvQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIFJlbW90ZURhdGFBY3Rpb25UeXBlIHtcbiAgbG9hZFJlbW90ZURhdGEgPSAnW1JlbW90ZURhdGFBY3Rpb25UeXBlXSBsb2FkUmVtb3RlRGF0YScsXG4gIHJlZ2lzdGVyTG9hZGVkUmVtb3RlRGF0YSA9ICdbUmVtb3RlRGF0YUFjdGlvblR5cGVdIHJlZ2lzdGVyTG9hZGVkUmVtb3RlRGF0YSdcbn1cbiJdfQ==
@@ -0,0 +1,9 @@
1
+ export var DataStatus;
2
+ (function (DataStatus) {
3
+ DataStatus["none"] = "None";
4
+ DataStatus["loading"] = "Loading";
5
+ DataStatus["loaded"] = "Loaded";
6
+ DataStatus["notFound"] = "NotFound";
7
+ DataStatus["error"] = "Error";
8
+ })(DataStatus || (DataStatus = {}));
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zdGF0dXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS1yZW1vdGUtZGF0YS9zcmMvbGliL2RhdGEtc3RhdHVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLFVBTVg7QUFORCxXQUFZLFVBQVU7SUFDcEIsMkJBQWEsQ0FBQTtJQUNiLGlDQUFtQixDQUFBO0lBQ25CLCtCQUFpQixDQUFBO0lBQ2pCLG1DQUFxQixDQUFBO0lBQ3JCLDZCQUFlLENBQUE7QUFDakIsQ0FBQyxFQU5XLFVBQVUsS0FBVixVQUFVLFFBTXJCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gRGF0YVN0YXR1cyB7XG4gIG5vbmUgPSAnTm9uZScsXG4gIGxvYWRpbmcgPSAnTG9hZGluZycsXG4gIGxvYWRlZCA9ICdMb2FkZWQnLFxuICBub3RGb3VuZCA9ICdOb3RGb3VuZCcsXG4gIGVycm9yID0gJ0Vycm9yJ1xufVxuIl19
@@ -0,0 +1,44 @@
1
+ import { Inject, Injectable, Optional } from '@angular/core';
2
+ import { NGSSM_EFFECT } from 'ngssm-store';
3
+ import { RegisterLoadedRemoteDataAction, RemoteDataActionType } from '../actions';
4
+ import { DataStatus } from '../data-status';
5
+ import { NGSSM_REMOTE_DATA_PROVIDER } from '../remote-data-provider';
6
+ import { selectRemoteDataState } from '../state';
7
+ import * as i0 from "@angular/core";
8
+ export class RemoteDataLoadingEffect {
9
+ constructor(remoteDataProviders) {
10
+ this.processedActions = [RemoteDataActionType.loadRemoteData];
11
+ this.remoteDataProvidersPerKey = new Map((remoteDataProviders ?? []).map((r) => [r.remoteDataKey, r]));
12
+ }
13
+ processAction(store, state, action) {
14
+ const loadRemoteDataAction = action;
15
+ const item = selectRemoteDataState(state)[loadRemoteDataAction.remoteDataKey];
16
+ const provider = this.remoteDataProvidersPerKey.get(loadRemoteDataAction.remoteDataKey);
17
+ if (!item || !provider || item.status !== DataStatus.loading) {
18
+ return;
19
+ }
20
+ provider.get().subscribe({
21
+ next: (value) => store.dispatchAction(new RegisterLoadedRemoteDataAction(loadRemoteDataAction.remoteDataKey, DataStatus.loaded, value)),
22
+ error: (error) => {
23
+ console.error(`Unable to load data for '${loadRemoteDataAction.remoteDataKey}'`, error);
24
+ store.dispatchAction(new RegisterLoadedRemoteDataAction(loadRemoteDataAction.remoteDataKey, DataStatus.error, undefined));
25
+ }
26
+ });
27
+ }
28
+ }
29
+ RemoteDataLoadingEffect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataLoadingEffect, deps: [{ token: NGSSM_REMOTE_DATA_PROVIDER, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
30
+ RemoteDataLoadingEffect.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataLoadingEffect });
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataLoadingEffect, decorators: [{
32
+ type: Injectable
33
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
34
+ type: Inject,
35
+ args: [NGSSM_REMOTE_DATA_PROVIDER]
36
+ }, {
37
+ type: Optional
38
+ }] }]; } });
39
+ export const remoteDataLoadingEffectProvider = {
40
+ provide: NGSSM_EFFECT,
41
+ useClass: RemoteDataLoadingEffect,
42
+ multi: true
43
+ };
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWRhdGEtbG9hZGluZy5lZmZlY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS1yZW1vdGUtZGF0YS9zcmMvbGliL2VmZmVjdHMvcmVtb3RlLWRhdGEtbG9hZGluZy5lZmZlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE9BQU8sRUFBZ0MsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXpFLE9BQU8sRUFBd0IsOEJBQThCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDeEcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBc0IsMEJBQTBCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBR2pELE1BQU0sT0FBTyx1QkFBdUI7SUFLbEMsWUFBNEQsbUJBQXlDO1FBRnJGLHFCQUFnQixHQUFhLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLENBQUM7UUFHakYsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksR0FBRyxDQUE2QixDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNySSxDQUFDO0lBRU0sYUFBYSxDQUFDLEtBQVksRUFBRSxLQUFZLEVBQUUsTUFBYztRQUM3RCxNQUFNLG9CQUFvQixHQUFHLE1BQThCLENBQUM7UUFDNUQsTUFBTSxJQUFJLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV4RixJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLE9BQU8sRUFBRTtZQUM1RCxPQUFPO1NBQ1I7UUFFRCxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO1lBQ3ZCLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ2QsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLDhCQUE4QixDQUFDLG9CQUFvQixDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hILEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLG9CQUFvQixDQUFDLGFBQWEsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN4RixLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksOEJBQThCLENBQUMsb0JBQW9CLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUM1SCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7b0hBMUJVLHVCQUF1QixrQkFLZCwwQkFBMEI7d0hBTG5DLHVCQUF1QjsyRkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVOzswQkFNSSxNQUFNOzJCQUFDLDBCQUEwQjs7MEJBQUcsUUFBUTs7QUF3QjNELE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFhO0lBQ3ZELE9BQU8sRUFBRSxZQUFZO0lBQ3JCLFFBQVEsRUFBRSx1QkFBdUI7SUFDakMsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRWZmZWN0LCBTdG9yZSwgU3RhdGUsIEFjdGlvbiwgTkdTU01fRUZGRUNUIH0gZnJvbSAnbmdzc20tc3RvcmUnO1xuXG5pbXBvcnQgeyBMb2FkUmVtb3RlRGF0YUFjdGlvbiwgUmVnaXN0ZXJMb2FkZWRSZW1vdGVEYXRhQWN0aW9uLCBSZW1vdGVEYXRhQWN0aW9uVHlwZSB9IGZyb20gJy4uL2FjdGlvbnMnO1xuaW1wb3J0IHsgRGF0YVN0YXR1cyB9IGZyb20gJy4uL2RhdGEtc3RhdHVzJztcbmltcG9ydCB7IFJlbW90ZURhdGFQcm92aWRlciwgTkdTU01fUkVNT1RFX0RBVEFfUFJPVklERVIgfSBmcm9tICcuLi9yZW1vdGUtZGF0YS1wcm92aWRlcic7XG5pbXBvcnQgeyBzZWxlY3RSZW1vdGVEYXRhU3RhdGUgfSBmcm9tICcuLi9zdGF0ZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZW1vdGVEYXRhTG9hZGluZ0VmZmVjdCBpbXBsZW1lbnRzIEVmZmVjdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVtb3RlRGF0YVByb3ZpZGVyc1BlcktleTogTWFwPHN0cmluZywgUmVtb3RlRGF0YVByb3ZpZGVyPjtcblxuICBwdWJsaWMgcmVhZG9ubHkgcHJvY2Vzc2VkQWN0aW9uczogc3RyaW5nW10gPSBbUmVtb3RlRGF0YUFjdGlvblR5cGUubG9hZFJlbW90ZURhdGFdO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoTkdTU01fUkVNT1RFX0RBVEFfUFJPVklERVIpIEBPcHRpb25hbCgpIHJlbW90ZURhdGFQcm92aWRlcnM6IFJlbW90ZURhdGFQcm92aWRlcltdKSB7XG4gICAgdGhpcy5yZW1vdGVEYXRhUHJvdmlkZXJzUGVyS2V5ID0gbmV3IE1hcDxzdHJpbmcsIFJlbW90ZURhdGFQcm92aWRlcj4oKHJlbW90ZURhdGFQcm92aWRlcnMgPz8gW10pLm1hcCgocikgPT4gW3IucmVtb3RlRGF0YUtleSwgcl0pKTtcbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzQWN0aW9uKHN0b3JlOiBTdG9yZSwgc3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGxvYWRSZW1vdGVEYXRhQWN0aW9uID0gYWN0aW9uIGFzIExvYWRSZW1vdGVEYXRhQWN0aW9uO1xuICAgIGNvbnN0IGl0ZW0gPSBzZWxlY3RSZW1vdGVEYXRhU3RhdGUoc3RhdGUpW2xvYWRSZW1vdGVEYXRhQWN0aW9uLnJlbW90ZURhdGFLZXldO1xuICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5yZW1vdGVEYXRhUHJvdmlkZXJzUGVyS2V5LmdldChsb2FkUmVtb3RlRGF0YUFjdGlvbi5yZW1vdGVEYXRhS2V5KTtcblxuICAgIGlmICghaXRlbSB8fCAhcHJvdmlkZXIgfHwgaXRlbS5zdGF0dXMgIT09IERhdGFTdGF0dXMubG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByb3ZpZGVyLmdldCgpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAodmFsdWUpID0+XG4gICAgICAgIHN0b3JlLmRpc3BhdGNoQWN0aW9uKG5ldyBSZWdpc3RlckxvYWRlZFJlbW90ZURhdGFBY3Rpb24obG9hZFJlbW90ZURhdGFBY3Rpb24ucmVtb3RlRGF0YUtleSwgRGF0YVN0YXR1cy5sb2FkZWQsIHZhbHVlKSksXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFVuYWJsZSB0byBsb2FkIGRhdGEgZm9yICcke2xvYWRSZW1vdGVEYXRhQWN0aW9uLnJlbW90ZURhdGFLZXl9J2AsIGVycm9yKTtcbiAgICAgICAgc3RvcmUuZGlzcGF0Y2hBY3Rpb24obmV3IFJlZ2lzdGVyTG9hZGVkUmVtb3RlRGF0YUFjdGlvbihsb2FkUmVtb3RlRGF0YUFjdGlvbi5yZW1vdGVEYXRhS2V5LCBEYXRhU3RhdHVzLmVycm9yLCB1bmRlZmluZWQpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcmVtb3RlRGF0YUxvYWRpbmdFZmZlY3RQcm92aWRlcjogUHJvdmlkZXIgPSB7XG4gIHByb3ZpZGU6IE5HU1NNX0VGRkVDVCxcbiAgdXNlQ2xhc3M6IFJlbW90ZURhdGFMb2FkaW5nRWZmZWN0LFxuICBtdWx0aTogdHJ1ZVxufTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './remote-data-loading.guard';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS1yZW1vdGUtZGF0YS9zcmMvbGliL2d1YXJkcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDZCQUE2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9yZW1vdGUtZGF0YS1sb2FkaW5nLmd1YXJkJztcbiJdfQ==
@@ -0,0 +1,25 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { LoadRemoteDataAction } from '../actions';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "ngssm-store";
5
+ export class RemoteDataLoadingGuard {
6
+ constructor(store) {
7
+ this.store = store;
8
+ }
9
+ canActivate(route, state) {
10
+ const parameters = route.data;
11
+ (parameters?.remoteDataItems ?? []).forEach((item) => {
12
+ this.store.dispatchAction(new LoadRemoteDataAction(item.remoteDataKey, item.forceReload === true));
13
+ });
14
+ return true;
15
+ }
16
+ }
17
+ RemoteDataLoadingGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataLoadingGuard, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable });
18
+ RemoteDataLoadingGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataLoadingGuard, providedIn: 'root' });
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataLoadingGuard, decorators: [{
20
+ type: Injectable,
21
+ args: [{
22
+ providedIn: 'root'
23
+ }]
24
+ }], ctorParameters: function () { return [{ type: i1.Store }]; } });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWRhdGEtbG9hZGluZy5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nc3NtLXJlbW90ZS1kYXRhL3NyYy9saWIvZ3VhcmRzL3JlbW90ZS1kYXRhLWxvYWRpbmcuZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU0zQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxZQUFZLENBQUM7OztBQWNsRCxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQW9CLEtBQVk7UUFBWixVQUFLLEdBQUwsS0FBSyxDQUFPO0lBQUcsQ0FBQztJQUU3QixXQUFXLENBQ2hCLEtBQTZCLEVBQzdCLEtBQTBCO1FBRTFCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUF3QyxDQUFDO1FBQ2xFLENBQUMsVUFBVSxFQUFFLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNuRCxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3JHLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzttSEFiVSxzQkFBc0I7dUhBQXRCLHNCQUFzQixjQUZyQixNQUFNOzJGQUVQLHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBDYW5BY3RpdmF0ZSwgUm91dGVyU3RhdGVTbmFwc2hvdCwgVXJsVHJlZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnbmdzc20tc3RvcmUnO1xuXG5pbXBvcnQgeyBMb2FkUmVtb3RlRGF0YUFjdGlvbiB9IGZyb20gJy4uL2FjdGlvbnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlbW90ZURhdGFMb2FkaW5nR3VhcmRJdGVtIHtcbiAgcmVtb3RlRGF0YUtleTogc3RyaW5nO1xuICBmb3JjZVJlbG9hZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVtb3RlRGF0YUxvYWRpbmdHdWFyZFBhcmFtZXRlcnMge1xuICByZW1vdGVEYXRhSXRlbXM6IFJlbW90ZURhdGFMb2FkaW5nR3VhcmRJdGVtW107XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFJlbW90ZURhdGFMb2FkaW5nR3VhcmQgaW1wbGVtZW50cyBDYW5BY3RpdmF0ZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RvcmU6IFN0b3JlKSB7fVxuXG4gIHB1YmxpYyBjYW5BY3RpdmF0ZShcbiAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdFxuICApOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBVcmxUcmVlPiB8IFByb21pc2U8Ym9vbGVhbiB8IFVybFRyZWU+IHwgYm9vbGVhbiB8IFVybFRyZWUge1xuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSByb3V0ZS5kYXRhIGFzIFJlbW90ZURhdGFMb2FkaW5nR3VhcmRQYXJhbWV0ZXJzO1xuICAgIChwYXJhbWV0ZXJzPy5yZW1vdGVEYXRhSXRlbXMgPz8gW10pLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2hBY3Rpb24obmV3IExvYWRSZW1vdGVEYXRhQWN0aW9uKGl0ZW0ucmVtb3RlRGF0YUtleSwgaXRlbS5mb3JjZVJlbG9hZCA9PT0gdHJ1ZSkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,29 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { NGSSM_STATE_INITIALIZER } from 'ngssm-store';
3
+ import { remoteDataLoadingEffectProvider } from './effects/remote-data-loading.effect';
4
+ import { remoteDataReducerProvider } from './reducers/remote-data.reducer';
5
+ import { RemoteDataStateInitializer } from './remote-data-state-initializer';
6
+ import * as i0 from "@angular/core";
7
+ export class NgssmRemoteDataModule {
8
+ }
9
+ NgssmRemoteDataModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: NgssmRemoteDataModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
+ NgssmRemoteDataModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.2", ngImport: i0, type: NgssmRemoteDataModule });
11
+ NgssmRemoteDataModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: NgssmRemoteDataModule, providers: [
12
+ remoteDataReducerProvider,
13
+ remoteDataLoadingEffectProvider,
14
+ { provide: NGSSM_STATE_INITIALIZER, useClass: RemoteDataStateInitializer, multi: true }
15
+ ] });
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: NgssmRemoteDataModule, decorators: [{
17
+ type: NgModule,
18
+ args: [{
19
+ declarations: [],
20
+ imports: [],
21
+ exports: [],
22
+ providers: [
23
+ remoteDataReducerProvider,
24
+ remoteDataLoadingEffectProvider,
25
+ { provide: NGSSM_STATE_INITIALIZER, useClass: RemoteDataStateInitializer, multi: true }
26
+ ]
27
+ }]
28
+ }] });
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdzc20tcmVtb3RlLWRhdGEubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdzc20tcmVtb3RlLWRhdGEvc3JjL2xpYi9uZ3NzbS1yZW1vdGUtZGF0YS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdEQsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0saUNBQWlDLENBQUM7O0FBWTdFLE1BQU0sT0FBTyxxQkFBcUI7O2tIQUFyQixxQkFBcUI7bUhBQXJCLHFCQUFxQjttSEFBckIscUJBQXFCLGFBTnJCO1FBQ1QseUJBQXlCO1FBQ3pCLCtCQUErQjtRQUMvQixFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsMEJBQTBCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtLQUN4RjsyRkFFVSxxQkFBcUI7a0JBVmpDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLE9BQU8sRUFBRSxFQUFFO29CQUNYLE9BQU8sRUFBRSxFQUFFO29CQUNYLFNBQVMsRUFBRTt3QkFDVCx5QkFBeUI7d0JBQ3pCLCtCQUErQjt3QkFDL0IsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLDBCQUEwQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7cUJBQ3hGO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTkdTU01fU1RBVEVfSU5JVElBTElaRVIgfSBmcm9tICduZ3NzbS1zdG9yZSc7XG5cbmltcG9ydCB7IHJlbW90ZURhdGFMb2FkaW5nRWZmZWN0UHJvdmlkZXIgfSBmcm9tICcuL2VmZmVjdHMvcmVtb3RlLWRhdGEtbG9hZGluZy5lZmZlY3QnO1xuaW1wb3J0IHsgcmVtb3RlRGF0YVJlZHVjZXJQcm92aWRlciB9IGZyb20gJy4vcmVkdWNlcnMvcmVtb3RlLWRhdGEucmVkdWNlcic7XG5pbXBvcnQgeyBSZW1vdGVEYXRhU3RhdGVJbml0aWFsaXplciB9IGZyb20gJy4vcmVtb3RlLWRhdGEtc3RhdGUtaW5pdGlhbGl6ZXInO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtdLFxuICBpbXBvcnRzOiBbXSxcbiAgZXhwb3J0czogW10sXG4gIHByb3ZpZGVyczogW1xuICAgIHJlbW90ZURhdGFSZWR1Y2VyUHJvdmlkZXIsXG4gICAgcmVtb3RlRGF0YUxvYWRpbmdFZmZlY3RQcm92aWRlcixcbiAgICB7IHByb3ZpZGU6IE5HU1NNX1NUQVRFX0lOSVRJQUxJWkVSLCB1c2VDbGFzczogUmVtb3RlRGF0YVN0YXRlSW5pdGlhbGl6ZXIsIG11bHRpOiB0cnVlIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3NzbVJlbW90ZURhdGFNb2R1bGUge31cbiJdfQ==
@@ -0,0 +1,64 @@
1
+ import { Inject, Injectable, Optional } from '@angular/core';
2
+ import { NGSSM_REDUCER } from 'ngssm-store';
3
+ import { RemoteDataActionType } from '../actions';
4
+ import { DataStatus } from '../data-status';
5
+ import { NGSSM_REMOTE_DATA_PROVIDER } from '../remote-data-provider';
6
+ import { selectRemoteDataState, updateRemoteDataState } from '../state';
7
+ import * as i0 from "@angular/core";
8
+ export class RemoteDataReducer {
9
+ constructor(remoteDataProviders) {
10
+ this.processedActions = [RemoteDataActionType.loadRemoteData, RemoteDataActionType.registerLoadedRemoteData];
11
+ this.remoteDataProvidersPerKey = new Map((remoteDataProviders ?? []).map((r) => [r.remoteDataKey, r]));
12
+ }
13
+ updateState(state, action) {
14
+ switch (action.type) {
15
+ case RemoteDataActionType.loadRemoteData:
16
+ const loadRemoteDataAction = action;
17
+ const item = selectRemoteDataState(state)[loadRemoteDataAction.remoteDataKey];
18
+ const provider = this.remoteDataProvidersPerKey.get(loadRemoteDataAction.remoteDataKey);
19
+ if (!provider ||
20
+ loadRemoteDataAction.forceReload ||
21
+ item.status === DataStatus.none ||
22
+ item.status === DataStatus.error ||
23
+ !item.timestamp ||
24
+ new Date().getTime() - item.timestamp.getTime() >= 1000 * provider.cacheDurationInSeconds) {
25
+ return updateRemoteDataState(state, {
26
+ [loadRemoteDataAction.remoteDataKey]: {
27
+ status: { $set: DataStatus.loading }
28
+ }
29
+ });
30
+ }
31
+ break;
32
+ case RemoteDataActionType.registerLoadedRemoteData:
33
+ const registerLoadedRemoteDataAction = action;
34
+ if (this.remoteDataProvidersPerKey.has(registerLoadedRemoteDataAction.remoteDataKey)) {
35
+ return updateRemoteDataState(state, {
36
+ [registerLoadedRemoteDataAction.remoteDataKey]: {
37
+ status: { $set: registerLoadedRemoteDataAction.status },
38
+ data: { $set: registerLoadedRemoteDataAction.data },
39
+ timestamp: { $set: new Date() },
40
+ message: { $set: registerLoadedRemoteDataAction.message }
41
+ }
42
+ });
43
+ }
44
+ break;
45
+ }
46
+ return state;
47
+ }
48
+ }
49
+ RemoteDataReducer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataReducer, deps: [{ token: NGSSM_REMOTE_DATA_PROVIDER, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
50
+ RemoteDataReducer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataReducer });
51
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataReducer, decorators: [{
52
+ type: Injectable
53
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
54
+ type: Inject,
55
+ args: [NGSSM_REMOTE_DATA_PROVIDER]
56
+ }, {
57
+ type: Optional
58
+ }] }]; } });
59
+ export const remoteDataReducerProvider = {
60
+ provide: NGSSM_REDUCER,
61
+ useClass: RemoteDataReducer,
62
+ multi: true
63
+ };
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWRhdGEucmVkdWNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nc3NtLXJlbW90ZS1kYXRhL3NyYy9saWIvcmVkdWNlcnMvcmVtb3RlLWRhdGEucmVkdWNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQVksTUFBTSxlQUFlLENBQUM7QUFFdkUsT0FBTyxFQUFrQixhQUFhLEVBQVUsTUFBTSxhQUFhLENBQUM7QUFFcEUsT0FBTyxFQUF3RCxvQkFBb0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN4RyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFzQiwwQkFBMEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7QUFHeEUsTUFBTSxPQUFPLGlCQUFpQjtJQUs1QixZQUE0RCxtQkFBeUM7UUFGckYscUJBQWdCLEdBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLEVBQUUsb0JBQW9CLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUdoSSxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxHQUFHLENBQTZCLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JJLENBQUM7SUFFTSxXQUFXLENBQUMsS0FBWSxFQUFFLE1BQWM7UUFDN0MsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQ25CLEtBQUssb0JBQW9CLENBQUMsY0FBYztnQkFDdEMsTUFBTSxvQkFBb0IsR0FBRyxNQUE4QixDQUFDO2dCQUM1RCxNQUFNLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDOUUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFeEYsSUFDRSxDQUFDLFFBQVE7b0JBQ1Qsb0JBQW9CLENBQUMsV0FBVztvQkFDaEMsSUFBSSxDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUMsSUFBSTtvQkFDL0IsSUFBSSxDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUMsS0FBSztvQkFDaEMsQ0FBQyxJQUFJLENBQUMsU0FBUztvQkFDZixJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxzQkFBc0IsRUFDekY7b0JBQ0EsT0FBTyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUU7d0JBQ2xDLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLEVBQUU7NEJBQ3BDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsT0FBTyxFQUFFO3lCQUNyQztxQkFDRixDQUFDLENBQUM7aUJBQ0o7Z0JBRUQsTUFBTTtZQUVSLEtBQUssb0JBQW9CLENBQUMsd0JBQXdCO2dCQUNoRCxNQUFNLDhCQUE4QixHQUFHLE1BQXdDLENBQUM7Z0JBQ2hGLElBQUksSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxhQUFhLENBQUMsRUFBRTtvQkFDcEYsT0FBTyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUU7d0JBQ2xDLENBQUMsOEJBQThCLENBQUMsYUFBYSxDQUFDLEVBQUU7NEJBQzlDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSw4QkFBOEIsQ0FBQyxNQUFNLEVBQUU7NEJBQ3ZELElBQUksRUFBRSxFQUFFLElBQUksRUFBRSw4QkFBOEIsQ0FBQyxJQUFJLEVBQUU7NEJBQ25ELFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFOzRCQUMvQixPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsOEJBQThCLENBQUMsT0FBTyxFQUFFO3lCQUMxRDtxQkFDRixDQUFDLENBQUM7aUJBQ0o7Z0JBRUQsTUFBTTtTQUNUO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzs4R0FsRFUsaUJBQWlCLGtCQUtSLDBCQUEwQjtrSEFMbkMsaUJBQWlCOzJGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVU7OzBCQU1JLE1BQU07MkJBQUMsMEJBQTBCOzswQkFBRyxRQUFROztBQWdEM0QsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQWE7SUFDakQsT0FBTyxFQUFFLGFBQWE7SUFDdEIsUUFBUSxFQUFFLGlCQUFpQjtJQUMzQixLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsLCBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBSZWR1Y2VyLCBTdGF0ZSwgTkdTU01fUkVEVUNFUiwgQWN0aW9uIH0gZnJvbSAnbmdzc20tc3RvcmUnO1xuXG5pbXBvcnQgeyBMb2FkUmVtb3RlRGF0YUFjdGlvbiwgUmVnaXN0ZXJMb2FkZWRSZW1vdGVEYXRhQWN0aW9uLCBSZW1vdGVEYXRhQWN0aW9uVHlwZSB9IGZyb20gJy4uL2FjdGlvbnMnO1xuaW1wb3J0IHsgRGF0YVN0YXR1cyB9IGZyb20gJy4uL2RhdGEtc3RhdHVzJztcbmltcG9ydCB7IFJlbW90ZURhdGFQcm92aWRlciwgTkdTU01fUkVNT1RFX0RBVEFfUFJPVklERVIgfSBmcm9tICcuLi9yZW1vdGUtZGF0YS1wcm92aWRlcic7XG5pbXBvcnQgeyBzZWxlY3RSZW1vdGVEYXRhU3RhdGUsIHVwZGF0ZVJlbW90ZURhdGFTdGF0ZSB9IGZyb20gJy4uL3N0YXRlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJlbW90ZURhdGFSZWR1Y2VyIGltcGxlbWVudHMgUmVkdWNlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVtb3RlRGF0YVByb3ZpZGVyc1BlcktleTogTWFwPHN0cmluZywgUmVtb3RlRGF0YVByb3ZpZGVyPjtcblxuICBwdWJsaWMgcmVhZG9ubHkgcHJvY2Vzc2VkQWN0aW9uczogc3RyaW5nW10gPSBbUmVtb3RlRGF0YUFjdGlvblR5cGUubG9hZFJlbW90ZURhdGEsIFJlbW90ZURhdGFBY3Rpb25UeXBlLnJlZ2lzdGVyTG9hZGVkUmVtb3RlRGF0YV07XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChOR1NTTV9SRU1PVEVfREFUQV9QUk9WSURFUikgQE9wdGlvbmFsKCkgcmVtb3RlRGF0YVByb3ZpZGVyczogUmVtb3RlRGF0YVByb3ZpZGVyW10pIHtcbiAgICB0aGlzLnJlbW90ZURhdGFQcm92aWRlcnNQZXJLZXkgPSBuZXcgTWFwPHN0cmluZywgUmVtb3RlRGF0YVByb3ZpZGVyPigocmVtb3RlRGF0YVByb3ZpZGVycyA/PyBbXSkubWFwKChyKSA9PiBbci5yZW1vdGVEYXRhS2V5LCByXSkpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVN0YXRlKHN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb24pOiBTdGF0ZSB7XG4gICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgY2FzZSBSZW1vdGVEYXRhQWN0aW9uVHlwZS5sb2FkUmVtb3RlRGF0YTpcbiAgICAgICAgY29uc3QgbG9hZFJlbW90ZURhdGFBY3Rpb24gPSBhY3Rpb24gYXMgTG9hZFJlbW90ZURhdGFBY3Rpb247XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBzZWxlY3RSZW1vdGVEYXRhU3RhdGUoc3RhdGUpW2xvYWRSZW1vdGVEYXRhQWN0aW9uLnJlbW90ZURhdGFLZXldO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMucmVtb3RlRGF0YVByb3ZpZGVyc1BlcktleS5nZXQobG9hZFJlbW90ZURhdGFBY3Rpb24ucmVtb3RlRGF0YUtleSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFwcm92aWRlciB8fFxuICAgICAgICAgIGxvYWRSZW1vdGVEYXRhQWN0aW9uLmZvcmNlUmVsb2FkIHx8XG4gICAgICAgICAgaXRlbS5zdGF0dXMgPT09IERhdGFTdGF0dXMubm9uZSB8fFxuICAgICAgICAgIGl0ZW0uc3RhdHVzID09PSBEYXRhU3RhdHVzLmVycm9yIHx8XG4gICAgICAgICAgIWl0ZW0udGltZXN0YW1wIHx8XG4gICAgICAgICAgbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBpdGVtLnRpbWVzdGFtcC5nZXRUaW1lKCkgPj0gMTAwMCAqIHByb3ZpZGVyLmNhY2hlRHVyYXRpb25JblNlY29uZHNcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVJlbW90ZURhdGFTdGF0ZShzdGF0ZSwge1xuICAgICAgICAgICAgW2xvYWRSZW1vdGVEYXRhQWN0aW9uLnJlbW90ZURhdGFLZXldOiB7XG4gICAgICAgICAgICAgIHN0YXR1czogeyAkc2V0OiBEYXRhU3RhdHVzLmxvYWRpbmcgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUmVtb3RlRGF0YUFjdGlvblR5cGUucmVnaXN0ZXJMb2FkZWRSZW1vdGVEYXRhOlxuICAgICAgICBjb25zdCByZWdpc3RlckxvYWRlZFJlbW90ZURhdGFBY3Rpb24gPSBhY3Rpb24gYXMgUmVnaXN0ZXJMb2FkZWRSZW1vdGVEYXRhQWN0aW9uO1xuICAgICAgICBpZiAodGhpcy5yZW1vdGVEYXRhUHJvdmlkZXJzUGVyS2V5LmhhcyhyZWdpc3RlckxvYWRlZFJlbW90ZURhdGFBY3Rpb24ucmVtb3RlRGF0YUtleSkpIHtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlUmVtb3RlRGF0YVN0YXRlKHN0YXRlLCB7XG4gICAgICAgICAgICBbcmVnaXN0ZXJMb2FkZWRSZW1vdGVEYXRhQWN0aW9uLnJlbW90ZURhdGFLZXldOiB7XG4gICAgICAgICAgICAgIHN0YXR1czogeyAkc2V0OiByZWdpc3RlckxvYWRlZFJlbW90ZURhdGFBY3Rpb24uc3RhdHVzIH0sXG4gICAgICAgICAgICAgIGRhdGE6IHsgJHNldDogcmVnaXN0ZXJMb2FkZWRSZW1vdGVEYXRhQWN0aW9uLmRhdGEgfSxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiB7ICRzZXQ6IG5ldyBEYXRlKCkgfSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogeyAkc2V0OiByZWdpc3RlckxvYWRlZFJlbW90ZURhdGFBY3Rpb24ubWVzc2FnZSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHJlbW90ZURhdGFSZWR1Y2VyUHJvdmlkZXI6IFByb3ZpZGVyID0ge1xuICBwcm92aWRlOiBOR1NTTV9SRURVQ0VSLFxuICB1c2VDbGFzczogUmVtb3RlRGF0YVJlZHVjZXIsXG4gIG11bHRpOiB0cnVlXG59O1xuIl19
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const NGSSM_REMOTE_DATA_PROVIDER = new InjectionToken('NGSSM_REMOTE_DATA_PROVIDER');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWRhdGEtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS1yZW1vdGUtZGF0YS9zcmMvbGliL3JlbW90ZS1kYXRhLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFVL0MsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxjQUFjLENBQXFCLDRCQUE0QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlbW90ZURhdGFQcm92aWRlciB7XG4gIHJlYWRvbmx5IHJlbW90ZURhdGFLZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgY2FjaGVEdXJhdGlvbkluU2Vjb25kczogbnVtYmVyO1xuXG4gIGdldCgpOiBPYnNlcnZhYmxlPGFueT47XG59XG5cbmV4cG9ydCBjb25zdCBOR1NTTV9SRU1PVEVfREFUQV9QUk9WSURFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxSZW1vdGVEYXRhUHJvdmlkZXI+KCdOR1NTTV9SRU1PVEVfREFUQV9QUk9WSURFUicpO1xuIl19
@@ -0,0 +1,25 @@
1
+ import { Inject, Injectable, Optional } from '@angular/core';
2
+ import { DataStatus } from './data-status';
3
+ import { NGSSM_REMOTE_DATA_PROVIDER } from './remote-data-provider';
4
+ import { updateRemoteDataState } from './state';
5
+ import * as i0 from "@angular/core";
6
+ export class RemoteDataStateInitializer {
7
+ constructor(remoteDataProviders) {
8
+ this.remoteDataProviders = remoteDataProviders;
9
+ }
10
+ initializeState(state) {
11
+ let tempState = state;
12
+ return (this.remoteDataProviders ?? []).reduce((s, provider) => updateRemoteDataState(s, { [provider.remoteDataKey]: { $set: { status: DataStatus.none } } }), tempState);
13
+ }
14
+ }
15
+ RemoteDataStateInitializer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataStateInitializer, deps: [{ token: NGSSM_REMOTE_DATA_PROVIDER, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
16
+ RemoteDataStateInitializer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataStateInitializer });
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataStateInitializer, decorators: [{
18
+ type: Injectable
19
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
20
+ type: Inject,
21
+ args: [NGSSM_REMOTE_DATA_PROVIDER]
22
+ }, {
23
+ type: Optional
24
+ }] }]; } });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWRhdGEtc3RhdGUtaW5pdGlhbGl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS1yZW1vdGUtZGF0YS9zcmMvbGliL3JlbW90ZS1kYXRhLXN0YXRlLWluaXRpYWxpemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUk3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBc0IsMEJBQTBCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBR2hELE1BQU0sT0FBTywwQkFBMEI7SUFDckMsWUFBb0UsbUJBQXlDO1FBQXpDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBc0I7SUFBRyxDQUFDO0lBRTFHLGVBQWUsQ0FBQyxLQUFZO1FBQ2pDLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FDNUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQzlHLFNBQVMsQ0FDVixDQUFDO0lBQ0osQ0FBQzs7dUhBVFUsMEJBQTBCLGtCQUNqQiwwQkFBMEI7MkhBRG5DLDBCQUEwQjsyRkFBMUIsMEJBQTBCO2tCQUR0QyxVQUFVOzswQkFFSSxNQUFNOzJCQUFDLDBCQUEwQjs7MEJBQUcsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU3RhdGUsIFN0YXRlSW5pdGlhbGl6ZXIgfSBmcm9tICduZ3NzbS1zdG9yZSc7XG5cbmltcG9ydCB7IERhdGFTdGF0dXMgfSBmcm9tICcuL2RhdGEtc3RhdHVzJztcbmltcG9ydCB7IFJlbW90ZURhdGFQcm92aWRlciwgTkdTU01fUkVNT1RFX0RBVEFfUFJPVklERVIgfSBmcm9tICcuL3JlbW90ZS1kYXRhLXByb3ZpZGVyJztcbmltcG9ydCB7IHVwZGF0ZVJlbW90ZURhdGFTdGF0ZSB9IGZyb20gJy4vc3RhdGUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUmVtb3RlRGF0YVN0YXRlSW5pdGlhbGl6ZXIgaW1wbGVtZW50cyBTdGF0ZUluaXRpYWxpemVyIHtcbiAgY29uc3RydWN0b3IoQEluamVjdChOR1NTTV9SRU1PVEVfREFUQV9QUk9WSURFUikgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZW1vdGVEYXRhUHJvdmlkZXJzOiBSZW1vdGVEYXRhUHJvdmlkZXJbXSkge31cblxuICBwdWJsaWMgaW5pdGlhbGl6ZVN0YXRlKHN0YXRlOiBTdGF0ZSk6IFN0YXRlIHtcbiAgICBsZXQgdGVtcFN0YXRlID0gc3RhdGU7XG4gICAgcmV0dXJuICh0aGlzLnJlbW90ZURhdGFQcm92aWRlcnMgPz8gW10pLnJlZHVjZShcbiAgICAgIChzLCBwcm92aWRlcikgPT4gdXBkYXRlUmVtb3RlRGF0YVN0YXRlKHMsIHsgW3Byb3ZpZGVyLnJlbW90ZURhdGFLZXldOiB7ICRzZXQ6IHsgc3RhdHVzOiBEYXRhU3RhdHVzLm5vbmUgfSB9IH0pLFxuICAgICAgdGVtcFN0YXRlXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,6 @@
1
+ import { DataStatus } from './data-status';
2
+ export const getDefaultRemoteData = (defaultValue) => ({
3
+ status: DataStatus.none,
4
+ data: defaultValue
5
+ });
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS1yZW1vdGUtZGF0YS9zcmMvbGliL3JlbW90ZS1kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFTM0MsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBSSxZQUFnQixFQUFpQixFQUFFLENBQUMsQ0FBQztJQUMzRSxNQUFNLEVBQUUsVUFBVSxDQUFDLElBQUk7SUFDdkIsSUFBSSxFQUFFLFlBQVk7Q0FDbkIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVN0YXR1cyB9IGZyb20gJy4vZGF0YS1zdGF0dXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlbW90ZURhdGE8VD4ge1xuICBzdGF0dXM6IERhdGFTdGF0dXM7XG4gIGRhdGE/OiBUO1xuICB0aW1lc3RhbXA/OiBEYXRlO1xuICBtZXNzYWdlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdFJlbW90ZURhdGEgPSA8VD4oZGVmYXVsdFZhbHVlPzogVCk6IFJlbW90ZURhdGE8VD4gPT4gKHtcbiAgc3RhdHVzOiBEYXRhU3RhdHVzLm5vbmUsXG4gIGRhdGE6IGRlZmF1bHRWYWx1ZVxufSk7XG4iXX0=
@@ -0,0 +1,3 @@
1
+ export * from './remote-data.state';
2
+ export * from './selectors';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS1yZW1vdGUtZGF0YS9zcmMvbGliL3N0YXRlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3JlbW90ZS1kYXRhLnN0YXRlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VsZWN0b3JzJztcbiJdfQ==
@@ -0,0 +1,20 @@
1
+ var RemoteDataStateSpecification_1;
2
+ import { __decorate } from "tslib";
3
+ import update from 'immutability-helper';
4
+ import { NgSsmFeatureState } from 'ngssm-store';
5
+ export const selectRemoteDataState = (state) => state[RemoteDataStateSpecification.featureStateKey];
6
+ export const updateRemoteDataState = (state, command) => update(state, {
7
+ [RemoteDataStateSpecification.featureStateKey]: command
8
+ });
9
+ let RemoteDataStateSpecification = RemoteDataStateSpecification_1 = class RemoteDataStateSpecification {
10
+ };
11
+ RemoteDataStateSpecification.featureStateKey = 'remote-data-state';
12
+ RemoteDataStateSpecification.initialState = {};
13
+ RemoteDataStateSpecification = RemoteDataStateSpecification_1 = __decorate([
14
+ NgSsmFeatureState({
15
+ featureStateKey: RemoteDataStateSpecification_1.featureStateKey,
16
+ initialState: RemoteDataStateSpecification_1.initialState
17
+ })
18
+ ], RemoteDataStateSpecification);
19
+ export { RemoteDataStateSpecification };
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWRhdGEuc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS1yZW1vdGUtZGF0YS9zcmMvbGliL3N0YXRlL3JlbW90ZS1kYXRhLnN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxNQUFnQixNQUFNLHFCQUFxQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxpQkFBaUIsRUFBUyxNQUFNLGFBQWEsQ0FBQztBQUl2RCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEtBQVksRUFBbUIsRUFBRSxDQUNyRSxLQUFLLENBQUMsNEJBQTRCLENBQUMsZUFBZSxDQUFvQixDQUFDO0FBRXpFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsS0FBWSxFQUFFLE9BQXFDLEVBQVMsRUFBRSxDQUNsRyxNQUFNLENBQUMsS0FBSyxFQUFFO0lBQ1osQ0FBQyw0QkFBNEIsQ0FBQyxlQUFlLENBQUMsRUFBRSxPQUFPO0NBQ3hELENBQUMsQ0FBQztBQVVFLElBQU0sNEJBQTRCLG9DQUFsQyxNQUFNLDRCQUE0Qjs7QUFDaEIsNENBQWUsR0FBRyxtQkFBbUIsQ0FBQztBQUN0Qyx5Q0FBWSxHQUFvQixFQUFFLENBQUM7QUFGL0MsNEJBQTRCO0lBSnhDLGlCQUFpQixDQUFDO1FBQ2pCLGVBQWUsRUFBRSw4QkFBNEIsQ0FBQyxlQUFlO1FBQzdELFlBQVksRUFBRSw4QkFBNEIsQ0FBQyxZQUFZO0tBQ3hELENBQUM7R0FDVyw0QkFBNEIsQ0FHeEM7U0FIWSw0QkFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdXBkYXRlLCB7IFNwZWMgfSBmcm9tICdpbW11dGFiaWxpdHktaGVscGVyJztcblxuaW1wb3J0IHsgTmdTc21GZWF0dXJlU3RhdGUsIFN0YXRlIH0gZnJvbSAnbmdzc20tc3RvcmUnO1xuXG5pbXBvcnQgeyBSZW1vdGVEYXRhIH0gZnJvbSAnLi4vcmVtb3RlLWRhdGEnO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0UmVtb3RlRGF0YVN0YXRlID0gKHN0YXRlOiBTdGF0ZSk6IFJlbW90ZURhdGFTdGF0ZSA9PlxuICBzdGF0ZVtSZW1vdGVEYXRhU3RhdGVTcGVjaWZpY2F0aW9uLmZlYXR1cmVTdGF0ZUtleV0gYXMgUmVtb3RlRGF0YVN0YXRlO1xuXG5leHBvcnQgY29uc3QgdXBkYXRlUmVtb3RlRGF0YVN0YXRlID0gKHN0YXRlOiBTdGF0ZSwgY29tbWFuZDogU3BlYzxSZW1vdGVEYXRhU3RhdGUsIG5ldmVyPik6IFN0YXRlID0+XG4gIHVwZGF0ZShzdGF0ZSwge1xuICAgIFtSZW1vdGVEYXRhU3RhdGVTcGVjaWZpY2F0aW9uLmZlYXR1cmVTdGF0ZUtleV06IGNvbW1hbmRcbiAgfSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVtb3RlRGF0YVN0YXRlIHtcbiAgW2tleTogc3RyaW5nXTogUmVtb3RlRGF0YTxhbnk+O1xufVxuXG5ATmdTc21GZWF0dXJlU3RhdGUoe1xuICBmZWF0dXJlU3RhdGVLZXk6IFJlbW90ZURhdGFTdGF0ZVNwZWNpZmljYXRpb24uZmVhdHVyZVN0YXRlS2V5LFxuICBpbml0aWFsU3RhdGU6IFJlbW90ZURhdGFTdGF0ZVNwZWNpZmljYXRpb24uaW5pdGlhbFN0YXRlXG59KVxuZXhwb3J0IGNsYXNzIFJlbW90ZURhdGFTdGF0ZVNwZWNpZmljYXRpb24ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGZlYXR1cmVTdGF0ZUtleSA9ICdyZW1vdGUtZGF0YS1zdGF0ZSc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgaW5pdGlhbFN0YXRlOiBSZW1vdGVEYXRhU3RhdGUgPSB7fTtcbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ import { selectRemoteDataState } from './remote-data.state';
2
+ export const selectRemoteData = (state, remoteDataKey) => selectRemoteDataState(state)[remoteDataKey];
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdzc20tcmVtb3RlLWRhdGEvc3JjL2xpYi9zdGF0ZS9zZWxlY3RvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFNUQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxLQUFZLEVBQUUsYUFBcUIsRUFBRSxFQUFFLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGF0ZSB9IGZyb20gJ25nc3NtLXN0b3JlJztcblxuaW1wb3J0IHsgc2VsZWN0UmVtb3RlRGF0YVN0YXRlIH0gZnJvbSAnLi9yZW1vdGUtZGF0YS5zdGF0ZSc7XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RSZW1vdGVEYXRhID0gKHN0YXRlOiBTdGF0ZSwgcmVtb3RlRGF0YUtleTogc3RyaW5nKSA9PiBzZWxlY3RSZW1vdGVEYXRhU3RhdGUoc3RhdGUpW3JlbW90ZURhdGFLZXldO1xuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdzc20tcmVtb3RlLWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS1yZW1vdGUtZGF0YS9zcmMvbmdzc20tcmVtb3RlLWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,11 @@
1
+ /*
2
+ * Public API Surface of ngssm-remote-data
3
+ */
4
+ export * from './lib/ngssm-remote-data.module';
5
+ export * from './lib/data-status';
6
+ export * from './lib/remote-data';
7
+ export * from './lib/state';
8
+ export * from './lib/actions';
9
+ export * from './lib/remote-data-provider';
10
+ export * from './lib/guards';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25nc3NtLXJlbW90ZS1kYXRhL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygbmdzc20tcmVtb3RlLWRhdGFcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9uZ3NzbS1yZW1vdGUtZGF0YS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0YS1zdGF0dXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVtb3RlLWRhdGEnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3RhdGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYWN0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yZW1vdGUtZGF0YS1wcm92aWRlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9ndWFyZHMnO1xuIl19
@@ -0,0 +1,241 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, Injectable, Inject, Optional, NgModule } from '@angular/core';
3
+ import * as i1 from 'ngssm-store';
4
+ import { NgSsmFeatureState, NGSSM_EFFECT, NGSSM_REDUCER, NGSSM_STATE_INITIALIZER } from 'ngssm-store';
5
+ import { __decorate } from 'tslib';
6
+ import update from 'immutability-helper';
7
+
8
+ var RemoteDataActionType;
9
+ (function (RemoteDataActionType) {
10
+ RemoteDataActionType["loadRemoteData"] = "[RemoteDataActionType] loadRemoteData";
11
+ RemoteDataActionType["registerLoadedRemoteData"] = "[RemoteDataActionType] registerLoadedRemoteData";
12
+ })(RemoteDataActionType || (RemoteDataActionType = {}));
13
+
14
+ class LoadRemoteDataAction {
15
+ constructor(remoteDataKey, forceReload) {
16
+ this.remoteDataKey = remoteDataKey;
17
+ this.forceReload = forceReload;
18
+ this.type = RemoteDataActionType.loadRemoteData;
19
+ }
20
+ }
21
+
22
+ class RegisterLoadedRemoteDataAction {
23
+ constructor(remoteDataKey, status, data, message) {
24
+ this.remoteDataKey = remoteDataKey;
25
+ this.status = status;
26
+ this.data = data;
27
+ this.message = message;
28
+ this.type = RemoteDataActionType.registerLoadedRemoteData;
29
+ }
30
+ }
31
+
32
+ var DataStatus;
33
+ (function (DataStatus) {
34
+ DataStatus["none"] = "None";
35
+ DataStatus["loading"] = "Loading";
36
+ DataStatus["loaded"] = "Loaded";
37
+ DataStatus["notFound"] = "NotFound";
38
+ DataStatus["error"] = "Error";
39
+ })(DataStatus || (DataStatus = {}));
40
+
41
+ const NGSSM_REMOTE_DATA_PROVIDER = new InjectionToken('NGSSM_REMOTE_DATA_PROVIDER');
42
+
43
+ var RemoteDataStateSpecification_1;
44
+ const selectRemoteDataState = (state) => state[RemoteDataStateSpecification.featureStateKey];
45
+ const updateRemoteDataState = (state, command) => update(state, {
46
+ [RemoteDataStateSpecification.featureStateKey]: command
47
+ });
48
+ let RemoteDataStateSpecification = RemoteDataStateSpecification_1 = class RemoteDataStateSpecification {
49
+ };
50
+ RemoteDataStateSpecification.featureStateKey = 'remote-data-state';
51
+ RemoteDataStateSpecification.initialState = {};
52
+ RemoteDataStateSpecification = RemoteDataStateSpecification_1 = __decorate([
53
+ NgSsmFeatureState({
54
+ featureStateKey: RemoteDataStateSpecification_1.featureStateKey,
55
+ initialState: RemoteDataStateSpecification_1.initialState
56
+ })
57
+ ], RemoteDataStateSpecification);
58
+
59
+ const selectRemoteData = (state, remoteDataKey) => selectRemoteDataState(state)[remoteDataKey];
60
+
61
+ class RemoteDataLoadingEffect {
62
+ constructor(remoteDataProviders) {
63
+ this.processedActions = [RemoteDataActionType.loadRemoteData];
64
+ this.remoteDataProvidersPerKey = new Map((remoteDataProviders !== null && remoteDataProviders !== void 0 ? remoteDataProviders : []).map((r) => [r.remoteDataKey, r]));
65
+ }
66
+ processAction(store, state, action) {
67
+ const loadRemoteDataAction = action;
68
+ const item = selectRemoteDataState(state)[loadRemoteDataAction.remoteDataKey];
69
+ const provider = this.remoteDataProvidersPerKey.get(loadRemoteDataAction.remoteDataKey);
70
+ if (!item || !provider || item.status !== DataStatus.loading) {
71
+ return;
72
+ }
73
+ provider.get().subscribe({
74
+ next: (value) => store.dispatchAction(new RegisterLoadedRemoteDataAction(loadRemoteDataAction.remoteDataKey, DataStatus.loaded, value)),
75
+ error: (error) => {
76
+ console.error(`Unable to load data for '${loadRemoteDataAction.remoteDataKey}'`, error);
77
+ store.dispatchAction(new RegisterLoadedRemoteDataAction(loadRemoteDataAction.remoteDataKey, DataStatus.error, undefined));
78
+ }
79
+ });
80
+ }
81
+ }
82
+ RemoteDataLoadingEffect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataLoadingEffect, deps: [{ token: NGSSM_REMOTE_DATA_PROVIDER, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
83
+ RemoteDataLoadingEffect.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataLoadingEffect });
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataLoadingEffect, decorators: [{
85
+ type: Injectable
86
+ }], ctorParameters: function () {
87
+ return [{ type: undefined, decorators: [{
88
+ type: Inject,
89
+ args: [NGSSM_REMOTE_DATA_PROVIDER]
90
+ }, {
91
+ type: Optional
92
+ }] }];
93
+ } });
94
+ const remoteDataLoadingEffectProvider = {
95
+ provide: NGSSM_EFFECT,
96
+ useClass: RemoteDataLoadingEffect,
97
+ multi: true
98
+ };
99
+
100
+ class RemoteDataReducer {
101
+ constructor(remoteDataProviders) {
102
+ this.processedActions = [RemoteDataActionType.loadRemoteData, RemoteDataActionType.registerLoadedRemoteData];
103
+ this.remoteDataProvidersPerKey = new Map((remoteDataProviders !== null && remoteDataProviders !== void 0 ? remoteDataProviders : []).map((r) => [r.remoteDataKey, r]));
104
+ }
105
+ updateState(state, action) {
106
+ switch (action.type) {
107
+ case RemoteDataActionType.loadRemoteData:
108
+ const loadRemoteDataAction = action;
109
+ const item = selectRemoteDataState(state)[loadRemoteDataAction.remoteDataKey];
110
+ const provider = this.remoteDataProvidersPerKey.get(loadRemoteDataAction.remoteDataKey);
111
+ if (!provider ||
112
+ loadRemoteDataAction.forceReload ||
113
+ item.status === DataStatus.none ||
114
+ item.status === DataStatus.error ||
115
+ !item.timestamp ||
116
+ new Date().getTime() - item.timestamp.getTime() >= 1000 * provider.cacheDurationInSeconds) {
117
+ return updateRemoteDataState(state, {
118
+ [loadRemoteDataAction.remoteDataKey]: {
119
+ status: { $set: DataStatus.loading }
120
+ }
121
+ });
122
+ }
123
+ break;
124
+ case RemoteDataActionType.registerLoadedRemoteData:
125
+ const registerLoadedRemoteDataAction = action;
126
+ if (this.remoteDataProvidersPerKey.has(registerLoadedRemoteDataAction.remoteDataKey)) {
127
+ return updateRemoteDataState(state, {
128
+ [registerLoadedRemoteDataAction.remoteDataKey]: {
129
+ status: { $set: registerLoadedRemoteDataAction.status },
130
+ data: { $set: registerLoadedRemoteDataAction.data },
131
+ timestamp: { $set: new Date() },
132
+ message: { $set: registerLoadedRemoteDataAction.message }
133
+ }
134
+ });
135
+ }
136
+ break;
137
+ }
138
+ return state;
139
+ }
140
+ }
141
+ RemoteDataReducer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataReducer, deps: [{ token: NGSSM_REMOTE_DATA_PROVIDER, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
142
+ RemoteDataReducer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataReducer });
143
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataReducer, decorators: [{
144
+ type: Injectable
145
+ }], ctorParameters: function () {
146
+ return [{ type: undefined, decorators: [{
147
+ type: Inject,
148
+ args: [NGSSM_REMOTE_DATA_PROVIDER]
149
+ }, {
150
+ type: Optional
151
+ }] }];
152
+ } });
153
+ const remoteDataReducerProvider = {
154
+ provide: NGSSM_REDUCER,
155
+ useClass: RemoteDataReducer,
156
+ multi: true
157
+ };
158
+
159
+ class RemoteDataStateInitializer {
160
+ constructor(remoteDataProviders) {
161
+ this.remoteDataProviders = remoteDataProviders;
162
+ }
163
+ initializeState(state) {
164
+ var _a;
165
+ let tempState = state;
166
+ return ((_a = this.remoteDataProviders) !== null && _a !== void 0 ? _a : []).reduce((s, provider) => updateRemoteDataState(s, { [provider.remoteDataKey]: { $set: { status: DataStatus.none } } }), tempState);
167
+ }
168
+ }
169
+ RemoteDataStateInitializer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataStateInitializer, deps: [{ token: NGSSM_REMOTE_DATA_PROVIDER, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
170
+ RemoteDataStateInitializer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataStateInitializer });
171
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataStateInitializer, decorators: [{
172
+ type: Injectable
173
+ }], ctorParameters: function () {
174
+ return [{ type: undefined, decorators: [{
175
+ type: Inject,
176
+ args: [NGSSM_REMOTE_DATA_PROVIDER]
177
+ }, {
178
+ type: Optional
179
+ }] }];
180
+ } });
181
+
182
+ class NgssmRemoteDataModule {
183
+ }
184
+ NgssmRemoteDataModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: NgssmRemoteDataModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
185
+ NgssmRemoteDataModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.2", ngImport: i0, type: NgssmRemoteDataModule });
186
+ NgssmRemoteDataModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: NgssmRemoteDataModule, providers: [
187
+ remoteDataReducerProvider,
188
+ remoteDataLoadingEffectProvider,
189
+ { provide: NGSSM_STATE_INITIALIZER, useClass: RemoteDataStateInitializer, multi: true }
190
+ ] });
191
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: NgssmRemoteDataModule, decorators: [{
192
+ type: NgModule,
193
+ args: [{
194
+ declarations: [],
195
+ imports: [],
196
+ exports: [],
197
+ providers: [
198
+ remoteDataReducerProvider,
199
+ remoteDataLoadingEffectProvider,
200
+ { provide: NGSSM_STATE_INITIALIZER, useClass: RemoteDataStateInitializer, multi: true }
201
+ ]
202
+ }]
203
+ }] });
204
+
205
+ const getDefaultRemoteData = (defaultValue) => ({
206
+ status: DataStatus.none,
207
+ data: defaultValue
208
+ });
209
+
210
+ class RemoteDataLoadingGuard {
211
+ constructor(store) {
212
+ this.store = store;
213
+ }
214
+ canActivate(route, state) {
215
+ var _a;
216
+ const parameters = route.data;
217
+ ((_a = parameters === null || parameters === void 0 ? void 0 : parameters.remoteDataItems) !== null && _a !== void 0 ? _a : []).forEach((item) => {
218
+ this.store.dispatchAction(new LoadRemoteDataAction(item.remoteDataKey, item.forceReload === true));
219
+ });
220
+ return true;
221
+ }
222
+ }
223
+ RemoteDataLoadingGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataLoadingGuard, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable });
224
+ RemoteDataLoadingGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataLoadingGuard, providedIn: 'root' });
225
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataLoadingGuard, decorators: [{
226
+ type: Injectable,
227
+ args: [{
228
+ providedIn: 'root'
229
+ }]
230
+ }], ctorParameters: function () { return [{ type: i1.Store }]; } });
231
+
232
+ /*
233
+ * Public API Surface of ngssm-remote-data
234
+ */
235
+
236
+ /**
237
+ * Generated bundle index. Do not edit.
238
+ */
239
+
240
+ export { DataStatus, LoadRemoteDataAction, NGSSM_REMOTE_DATA_PROVIDER, NgssmRemoteDataModule, RegisterLoadedRemoteDataAction, RemoteDataActionType, RemoteDataLoadingGuard, RemoteDataStateSpecification, getDefaultRemoteData, selectRemoteData, selectRemoteDataState, updateRemoteDataState };
241
+ //# sourceMappingURL=ngssm-remote-data.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngssm-remote-data.mjs","sources":["../../../projects/ngssm-remote-data/src/lib/actions/remote-data-action-type.ts","../../../projects/ngssm-remote-data/src/lib/actions/load-remote-data.action.ts","../../../projects/ngssm-remote-data/src/lib/actions/register-loaded-remote-data.action.ts","../../../projects/ngssm-remote-data/src/lib/data-status.ts","../../../projects/ngssm-remote-data/src/lib/remote-data-provider.ts","../../../projects/ngssm-remote-data/src/lib/state/remote-data.state.ts","../../../projects/ngssm-remote-data/src/lib/state/selectors.ts","../../../projects/ngssm-remote-data/src/lib/effects/remote-data-loading.effect.ts","../../../projects/ngssm-remote-data/src/lib/reducers/remote-data.reducer.ts","../../../projects/ngssm-remote-data/src/lib/remote-data-state-initializer.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-data.module.ts","../../../projects/ngssm-remote-data/src/lib/remote-data.ts","../../../projects/ngssm-remote-data/src/lib/guards/remote-data-loading.guard.ts","../../../projects/ngssm-remote-data/src/public-api.ts","../../../projects/ngssm-remote-data/src/ngssm-remote-data.ts"],"sourcesContent":["export enum RemoteDataActionType {\n loadRemoteData = '[RemoteDataActionType] loadRemoteData',\n registerLoadedRemoteData = '[RemoteDataActionType] registerLoadedRemoteData'\n}\n","import { Action } from 'ngssm-store';\n\nimport { RemoteDataActionType } from './remote-data-action-type';\n\nexport class LoadRemoteDataAction implements Action {\n public readonly type: string = RemoteDataActionType.loadRemoteData;\n\n constructor(public readonly remoteDataKey: string, public readonly forceReload: boolean) {}\n}\n","import { Action } from 'ngssm-store';\n\nimport { DataStatus } from '../data-status';\nimport { RemoteDataActionType } from './remote-data-action-type';\n\nexport class RegisterLoadedRemoteDataAction implements Action {\n public readonly type: string = RemoteDataActionType.registerLoadedRemoteData;\n\n constructor(\n public readonly remoteDataKey: string,\n public readonly status: DataStatus,\n public readonly data: any,\n public readonly message?: string\n ) {}\n}\n","export enum DataStatus {\n none = 'None',\n loading = 'Loading',\n loaded = 'Loaded',\n notFound = 'NotFound',\n error = 'Error'\n}\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport interface RemoteDataProvider {\n readonly remoteDataKey: string;\n readonly cacheDurationInSeconds: number;\n\n get(): Observable<any>;\n}\n\nexport const NGSSM_REMOTE_DATA_PROVIDER = new InjectionToken<RemoteDataProvider>('NGSSM_REMOTE_DATA_PROVIDER');\n","import update, { Spec } from 'immutability-helper';\n\nimport { NgSsmFeatureState, State } from 'ngssm-store';\n\nimport { RemoteData } from '../remote-data';\n\nexport const selectRemoteDataState = (state: State): RemoteDataState =>\n state[RemoteDataStateSpecification.featureStateKey] as RemoteDataState;\n\nexport const updateRemoteDataState = (state: State, command: Spec<RemoteDataState, never>): State =>\n update(state, {\n [RemoteDataStateSpecification.featureStateKey]: command\n });\n\nexport interface RemoteDataState {\n [key: string]: RemoteData<any>;\n}\n\n@NgSsmFeatureState({\n featureStateKey: RemoteDataStateSpecification.featureStateKey,\n initialState: RemoteDataStateSpecification.initialState\n})\nexport class RemoteDataStateSpecification {\n public static readonly featureStateKey = 'remote-data-state';\n public static readonly initialState: RemoteDataState = {};\n}\n","import { State } from 'ngssm-store';\n\nimport { selectRemoteDataState } from './remote-data.state';\n\nexport const selectRemoteData = (state: State, remoteDataKey: string) => selectRemoteDataState(state)[remoteDataKey];\n","import { Inject, Injectable, Optional, Provider } from '@angular/core';\n\nimport { Effect, Store, State, Action, NGSSM_EFFECT } from 'ngssm-store';\n\nimport { LoadRemoteDataAction, RegisterLoadedRemoteDataAction, RemoteDataActionType } from '../actions';\nimport { DataStatus } from '../data-status';\nimport { RemoteDataProvider, NGSSM_REMOTE_DATA_PROVIDER } from '../remote-data-provider';\nimport { selectRemoteDataState } from '../state';\n\n@Injectable()\nexport class RemoteDataLoadingEffect implements Effect {\n private readonly remoteDataProvidersPerKey: Map<string, RemoteDataProvider>;\n\n public readonly processedActions: string[] = [RemoteDataActionType.loadRemoteData];\n\n constructor(@Inject(NGSSM_REMOTE_DATA_PROVIDER) @Optional() remoteDataProviders: RemoteDataProvider[]) {\n this.remoteDataProvidersPerKey = new Map<string, RemoteDataProvider>((remoteDataProviders ?? []).map((r) => [r.remoteDataKey, r]));\n }\n\n public processAction(store: Store, state: State, action: Action): void {\n const loadRemoteDataAction = action as LoadRemoteDataAction;\n const item = selectRemoteDataState(state)[loadRemoteDataAction.remoteDataKey];\n const provider = this.remoteDataProvidersPerKey.get(loadRemoteDataAction.remoteDataKey);\n\n if (!item || !provider || item.status !== DataStatus.loading) {\n return;\n }\n\n provider.get().subscribe({\n next: (value) =>\n store.dispatchAction(new RegisterLoadedRemoteDataAction(loadRemoteDataAction.remoteDataKey, DataStatus.loaded, value)),\n error: (error) => {\n console.error(`Unable to load data for '${loadRemoteDataAction.remoteDataKey}'`, error);\n store.dispatchAction(new RegisterLoadedRemoteDataAction(loadRemoteDataAction.remoteDataKey, DataStatus.error, undefined));\n }\n });\n }\n}\n\nexport const remoteDataLoadingEffectProvider: Provider = {\n provide: NGSSM_EFFECT,\n useClass: RemoteDataLoadingEffect,\n multi: true\n};\n","import { Inject, Injectable, Optional, Provider } from '@angular/core';\n\nimport { Reducer, State, NGSSM_REDUCER, Action } from 'ngssm-store';\n\nimport { LoadRemoteDataAction, RegisterLoadedRemoteDataAction, RemoteDataActionType } from '../actions';\nimport { DataStatus } from '../data-status';\nimport { RemoteDataProvider, NGSSM_REMOTE_DATA_PROVIDER } from '../remote-data-provider';\nimport { selectRemoteDataState, updateRemoteDataState } from '../state';\n\n@Injectable()\nexport class RemoteDataReducer implements Reducer {\n private readonly remoteDataProvidersPerKey: Map<string, RemoteDataProvider>;\n\n public readonly processedActions: string[] = [RemoteDataActionType.loadRemoteData, RemoteDataActionType.registerLoadedRemoteData];\n\n constructor(@Inject(NGSSM_REMOTE_DATA_PROVIDER) @Optional() remoteDataProviders: RemoteDataProvider[]) {\n this.remoteDataProvidersPerKey = new Map<string, RemoteDataProvider>((remoteDataProviders ?? []).map((r) => [r.remoteDataKey, r]));\n }\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case RemoteDataActionType.loadRemoteData:\n const loadRemoteDataAction = action as LoadRemoteDataAction;\n const item = selectRemoteDataState(state)[loadRemoteDataAction.remoteDataKey];\n const provider = this.remoteDataProvidersPerKey.get(loadRemoteDataAction.remoteDataKey);\n\n if (\n !provider ||\n loadRemoteDataAction.forceReload ||\n item.status === DataStatus.none ||\n item.status === DataStatus.error ||\n !item.timestamp ||\n new Date().getTime() - item.timestamp.getTime() >= 1000 * provider.cacheDurationInSeconds\n ) {\n return updateRemoteDataState(state, {\n [loadRemoteDataAction.remoteDataKey]: {\n status: { $set: DataStatus.loading }\n }\n });\n }\n\n break;\n\n case RemoteDataActionType.registerLoadedRemoteData:\n const registerLoadedRemoteDataAction = action as RegisterLoadedRemoteDataAction;\n if (this.remoteDataProvidersPerKey.has(registerLoadedRemoteDataAction.remoteDataKey)) {\n return updateRemoteDataState(state, {\n [registerLoadedRemoteDataAction.remoteDataKey]: {\n status: { $set: registerLoadedRemoteDataAction.status },\n data: { $set: registerLoadedRemoteDataAction.data },\n timestamp: { $set: new Date() },\n message: { $set: registerLoadedRemoteDataAction.message }\n }\n });\n }\n\n break;\n }\n\n return state;\n }\n}\n\nexport const remoteDataReducerProvider: Provider = {\n provide: NGSSM_REDUCER,\n useClass: RemoteDataReducer,\n multi: true\n};\n","import { Inject, Injectable, Optional } from '@angular/core';\n\nimport { State, StateInitializer } from 'ngssm-store';\n\nimport { DataStatus } from './data-status';\nimport { RemoteDataProvider, NGSSM_REMOTE_DATA_PROVIDER } from './remote-data-provider';\nimport { updateRemoteDataState } from './state';\n\n@Injectable()\nexport class RemoteDataStateInitializer implements StateInitializer {\n constructor(@Inject(NGSSM_REMOTE_DATA_PROVIDER) @Optional() private remoteDataProviders: RemoteDataProvider[]) {}\n\n public initializeState(state: State): State {\n let tempState = state;\n return (this.remoteDataProviders ?? []).reduce(\n (s, provider) => updateRemoteDataState(s, { [provider.remoteDataKey]: { $set: { status: DataStatus.none } } }),\n tempState\n );\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { NGSSM_STATE_INITIALIZER } from 'ngssm-store';\n\nimport { remoteDataLoadingEffectProvider } from './effects/remote-data-loading.effect';\nimport { remoteDataReducerProvider } from './reducers/remote-data.reducer';\nimport { RemoteDataStateInitializer } from './remote-data-state-initializer';\n\n@NgModule({\n declarations: [],\n imports: [],\n exports: [],\n providers: [\n remoteDataReducerProvider,\n remoteDataLoadingEffectProvider,\n { provide: NGSSM_STATE_INITIALIZER, useClass: RemoteDataStateInitializer, multi: true }\n ]\n})\nexport class NgssmRemoteDataModule {}\n","import { DataStatus } from './data-status';\n\nexport interface RemoteData<T> {\n status: DataStatus;\n data?: T;\n timestamp?: Date;\n message?: string;\n}\n\nexport const getDefaultRemoteData = <T>(defaultValue?: T): RemoteData<T> => ({\n status: DataStatus.none,\n data: defaultValue\n});\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport { Store } from 'ngssm-store';\n\nimport { LoadRemoteDataAction } from '../actions';\n\nexport interface RemoteDataLoadingGuardItem {\n remoteDataKey: string;\n forceReload?: boolean;\n}\n\nexport interface RemoteDataLoadingGuardParameters {\n remoteDataItems: RemoteDataLoadingGuardItem[];\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RemoteDataLoadingGuard implements CanActivate {\n constructor(private store: Store) {}\n\n public canActivate(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n const parameters = route.data as RemoteDataLoadingGuardParameters;\n (parameters?.remoteDataItems ?? []).forEach((item) => {\n this.store.dispatchAction(new LoadRemoteDataAction(item.remoteDataKey, item.forceReload === true));\n });\n\n return true;\n }\n}\n","/*\n * Public API Surface of ngssm-remote-data\n */\n\nexport * from './lib/ngssm-remote-data.module';\nexport * from './lib/data-status';\nexport * from './lib/remote-data';\nexport * from './lib/state';\nexport * from './lib/actions';\nexport * from './lib/remote-data-provider';\nexport * from './lib/guards';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,233 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, Injectable, Inject, Optional, NgModule } from '@angular/core';
3
+ import * as i1 from 'ngssm-store';
4
+ import { NgSsmFeatureState, NGSSM_EFFECT, NGSSM_REDUCER, NGSSM_STATE_INITIALIZER } from 'ngssm-store';
5
+ import { __decorate } from 'tslib';
6
+ import update from 'immutability-helper';
7
+
8
+ var RemoteDataActionType;
9
+ (function (RemoteDataActionType) {
10
+ RemoteDataActionType["loadRemoteData"] = "[RemoteDataActionType] loadRemoteData";
11
+ RemoteDataActionType["registerLoadedRemoteData"] = "[RemoteDataActionType] registerLoadedRemoteData";
12
+ })(RemoteDataActionType || (RemoteDataActionType = {}));
13
+
14
+ class LoadRemoteDataAction {
15
+ constructor(remoteDataKey, forceReload) {
16
+ this.remoteDataKey = remoteDataKey;
17
+ this.forceReload = forceReload;
18
+ this.type = RemoteDataActionType.loadRemoteData;
19
+ }
20
+ }
21
+
22
+ class RegisterLoadedRemoteDataAction {
23
+ constructor(remoteDataKey, status, data, message) {
24
+ this.remoteDataKey = remoteDataKey;
25
+ this.status = status;
26
+ this.data = data;
27
+ this.message = message;
28
+ this.type = RemoteDataActionType.registerLoadedRemoteData;
29
+ }
30
+ }
31
+
32
+ var DataStatus;
33
+ (function (DataStatus) {
34
+ DataStatus["none"] = "None";
35
+ DataStatus["loading"] = "Loading";
36
+ DataStatus["loaded"] = "Loaded";
37
+ DataStatus["notFound"] = "NotFound";
38
+ DataStatus["error"] = "Error";
39
+ })(DataStatus || (DataStatus = {}));
40
+
41
+ const NGSSM_REMOTE_DATA_PROVIDER = new InjectionToken('NGSSM_REMOTE_DATA_PROVIDER');
42
+
43
+ var RemoteDataStateSpecification_1;
44
+ const selectRemoteDataState = (state) => state[RemoteDataStateSpecification.featureStateKey];
45
+ const updateRemoteDataState = (state, command) => update(state, {
46
+ [RemoteDataStateSpecification.featureStateKey]: command
47
+ });
48
+ let RemoteDataStateSpecification = RemoteDataStateSpecification_1 = class RemoteDataStateSpecification {
49
+ };
50
+ RemoteDataStateSpecification.featureStateKey = 'remote-data-state';
51
+ RemoteDataStateSpecification.initialState = {};
52
+ RemoteDataStateSpecification = RemoteDataStateSpecification_1 = __decorate([
53
+ NgSsmFeatureState({
54
+ featureStateKey: RemoteDataStateSpecification_1.featureStateKey,
55
+ initialState: RemoteDataStateSpecification_1.initialState
56
+ })
57
+ ], RemoteDataStateSpecification);
58
+
59
+ const selectRemoteData = (state, remoteDataKey) => selectRemoteDataState(state)[remoteDataKey];
60
+
61
+ class RemoteDataLoadingEffect {
62
+ constructor(remoteDataProviders) {
63
+ this.processedActions = [RemoteDataActionType.loadRemoteData];
64
+ this.remoteDataProvidersPerKey = new Map((remoteDataProviders ?? []).map((r) => [r.remoteDataKey, r]));
65
+ }
66
+ processAction(store, state, action) {
67
+ const loadRemoteDataAction = action;
68
+ const item = selectRemoteDataState(state)[loadRemoteDataAction.remoteDataKey];
69
+ const provider = this.remoteDataProvidersPerKey.get(loadRemoteDataAction.remoteDataKey);
70
+ if (!item || !provider || item.status !== DataStatus.loading) {
71
+ return;
72
+ }
73
+ provider.get().subscribe({
74
+ next: (value) => store.dispatchAction(new RegisterLoadedRemoteDataAction(loadRemoteDataAction.remoteDataKey, DataStatus.loaded, value)),
75
+ error: (error) => {
76
+ console.error(`Unable to load data for '${loadRemoteDataAction.remoteDataKey}'`, error);
77
+ store.dispatchAction(new RegisterLoadedRemoteDataAction(loadRemoteDataAction.remoteDataKey, DataStatus.error, undefined));
78
+ }
79
+ });
80
+ }
81
+ }
82
+ RemoteDataLoadingEffect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataLoadingEffect, deps: [{ token: NGSSM_REMOTE_DATA_PROVIDER, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
83
+ RemoteDataLoadingEffect.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataLoadingEffect });
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataLoadingEffect, decorators: [{
85
+ type: Injectable
86
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
87
+ type: Inject,
88
+ args: [NGSSM_REMOTE_DATA_PROVIDER]
89
+ }, {
90
+ type: Optional
91
+ }] }]; } });
92
+ const remoteDataLoadingEffectProvider = {
93
+ provide: NGSSM_EFFECT,
94
+ useClass: RemoteDataLoadingEffect,
95
+ multi: true
96
+ };
97
+
98
+ class RemoteDataReducer {
99
+ constructor(remoteDataProviders) {
100
+ this.processedActions = [RemoteDataActionType.loadRemoteData, RemoteDataActionType.registerLoadedRemoteData];
101
+ this.remoteDataProvidersPerKey = new Map((remoteDataProviders ?? []).map((r) => [r.remoteDataKey, r]));
102
+ }
103
+ updateState(state, action) {
104
+ switch (action.type) {
105
+ case RemoteDataActionType.loadRemoteData:
106
+ const loadRemoteDataAction = action;
107
+ const item = selectRemoteDataState(state)[loadRemoteDataAction.remoteDataKey];
108
+ const provider = this.remoteDataProvidersPerKey.get(loadRemoteDataAction.remoteDataKey);
109
+ if (!provider ||
110
+ loadRemoteDataAction.forceReload ||
111
+ item.status === DataStatus.none ||
112
+ item.status === DataStatus.error ||
113
+ !item.timestamp ||
114
+ new Date().getTime() - item.timestamp.getTime() >= 1000 * provider.cacheDurationInSeconds) {
115
+ return updateRemoteDataState(state, {
116
+ [loadRemoteDataAction.remoteDataKey]: {
117
+ status: { $set: DataStatus.loading }
118
+ }
119
+ });
120
+ }
121
+ break;
122
+ case RemoteDataActionType.registerLoadedRemoteData:
123
+ const registerLoadedRemoteDataAction = action;
124
+ if (this.remoteDataProvidersPerKey.has(registerLoadedRemoteDataAction.remoteDataKey)) {
125
+ return updateRemoteDataState(state, {
126
+ [registerLoadedRemoteDataAction.remoteDataKey]: {
127
+ status: { $set: registerLoadedRemoteDataAction.status },
128
+ data: { $set: registerLoadedRemoteDataAction.data },
129
+ timestamp: { $set: new Date() },
130
+ message: { $set: registerLoadedRemoteDataAction.message }
131
+ }
132
+ });
133
+ }
134
+ break;
135
+ }
136
+ return state;
137
+ }
138
+ }
139
+ RemoteDataReducer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataReducer, deps: [{ token: NGSSM_REMOTE_DATA_PROVIDER, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
140
+ RemoteDataReducer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataReducer });
141
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataReducer, decorators: [{
142
+ type: Injectable
143
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
144
+ type: Inject,
145
+ args: [NGSSM_REMOTE_DATA_PROVIDER]
146
+ }, {
147
+ type: Optional
148
+ }] }]; } });
149
+ const remoteDataReducerProvider = {
150
+ provide: NGSSM_REDUCER,
151
+ useClass: RemoteDataReducer,
152
+ multi: true
153
+ };
154
+
155
+ class RemoteDataStateInitializer {
156
+ constructor(remoteDataProviders) {
157
+ this.remoteDataProviders = remoteDataProviders;
158
+ }
159
+ initializeState(state) {
160
+ let tempState = state;
161
+ return (this.remoteDataProviders ?? []).reduce((s, provider) => updateRemoteDataState(s, { [provider.remoteDataKey]: { $set: { status: DataStatus.none } } }), tempState);
162
+ }
163
+ }
164
+ RemoteDataStateInitializer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataStateInitializer, deps: [{ token: NGSSM_REMOTE_DATA_PROVIDER, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
165
+ RemoteDataStateInitializer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataStateInitializer });
166
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataStateInitializer, decorators: [{
167
+ type: Injectable
168
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
169
+ type: Inject,
170
+ args: [NGSSM_REMOTE_DATA_PROVIDER]
171
+ }, {
172
+ type: Optional
173
+ }] }]; } });
174
+
175
+ class NgssmRemoteDataModule {
176
+ }
177
+ NgssmRemoteDataModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: NgssmRemoteDataModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
178
+ NgssmRemoteDataModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.2", ngImport: i0, type: NgssmRemoteDataModule });
179
+ NgssmRemoteDataModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: NgssmRemoteDataModule, providers: [
180
+ remoteDataReducerProvider,
181
+ remoteDataLoadingEffectProvider,
182
+ { provide: NGSSM_STATE_INITIALIZER, useClass: RemoteDataStateInitializer, multi: true }
183
+ ] });
184
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: NgssmRemoteDataModule, decorators: [{
185
+ type: NgModule,
186
+ args: [{
187
+ declarations: [],
188
+ imports: [],
189
+ exports: [],
190
+ providers: [
191
+ remoteDataReducerProvider,
192
+ remoteDataLoadingEffectProvider,
193
+ { provide: NGSSM_STATE_INITIALIZER, useClass: RemoteDataStateInitializer, multi: true }
194
+ ]
195
+ }]
196
+ }] });
197
+
198
+ const getDefaultRemoteData = (defaultValue) => ({
199
+ status: DataStatus.none,
200
+ data: defaultValue
201
+ });
202
+
203
+ class RemoteDataLoadingGuard {
204
+ constructor(store) {
205
+ this.store = store;
206
+ }
207
+ canActivate(route, state) {
208
+ const parameters = route.data;
209
+ (parameters?.remoteDataItems ?? []).forEach((item) => {
210
+ this.store.dispatchAction(new LoadRemoteDataAction(item.remoteDataKey, item.forceReload === true));
211
+ });
212
+ return true;
213
+ }
214
+ }
215
+ RemoteDataLoadingGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataLoadingGuard, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable });
216
+ RemoteDataLoadingGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataLoadingGuard, providedIn: 'root' });
217
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: RemoteDataLoadingGuard, decorators: [{
218
+ type: Injectable,
219
+ args: [{
220
+ providedIn: 'root'
221
+ }]
222
+ }], ctorParameters: function () { return [{ type: i1.Store }]; } });
223
+
224
+ /*
225
+ * Public API Surface of ngssm-remote-data
226
+ */
227
+
228
+ /**
229
+ * Generated bundle index. Do not edit.
230
+ */
231
+
232
+ export { DataStatus, LoadRemoteDataAction, NGSSM_REMOTE_DATA_PROVIDER, NgssmRemoteDataModule, RegisterLoadedRemoteDataAction, RemoteDataActionType, RemoteDataLoadingGuard, RemoteDataStateSpecification, getDefaultRemoteData, selectRemoteData, selectRemoteDataState, updateRemoteDataState };
233
+ //# sourceMappingURL=ngssm-remote-data.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngssm-remote-data.mjs","sources":["../../../projects/ngssm-remote-data/src/lib/actions/remote-data-action-type.ts","../../../projects/ngssm-remote-data/src/lib/actions/load-remote-data.action.ts","../../../projects/ngssm-remote-data/src/lib/actions/register-loaded-remote-data.action.ts","../../../projects/ngssm-remote-data/src/lib/data-status.ts","../../../projects/ngssm-remote-data/src/lib/remote-data-provider.ts","../../../projects/ngssm-remote-data/src/lib/state/remote-data.state.ts","../../../projects/ngssm-remote-data/src/lib/state/selectors.ts","../../../projects/ngssm-remote-data/src/lib/effects/remote-data-loading.effect.ts","../../../projects/ngssm-remote-data/src/lib/reducers/remote-data.reducer.ts","../../../projects/ngssm-remote-data/src/lib/remote-data-state-initializer.ts","../../../projects/ngssm-remote-data/src/lib/ngssm-remote-data.module.ts","../../../projects/ngssm-remote-data/src/lib/remote-data.ts","../../../projects/ngssm-remote-data/src/lib/guards/remote-data-loading.guard.ts","../../../projects/ngssm-remote-data/src/public-api.ts","../../../projects/ngssm-remote-data/src/ngssm-remote-data.ts"],"sourcesContent":["export enum RemoteDataActionType {\n loadRemoteData = '[RemoteDataActionType] loadRemoteData',\n registerLoadedRemoteData = '[RemoteDataActionType] registerLoadedRemoteData'\n}\n","import { Action } from 'ngssm-store';\n\nimport { RemoteDataActionType } from './remote-data-action-type';\n\nexport class LoadRemoteDataAction implements Action {\n public readonly type: string = RemoteDataActionType.loadRemoteData;\n\n constructor(public readonly remoteDataKey: string, public readonly forceReload: boolean) {}\n}\n","import { Action } from 'ngssm-store';\n\nimport { DataStatus } from '../data-status';\nimport { RemoteDataActionType } from './remote-data-action-type';\n\nexport class RegisterLoadedRemoteDataAction implements Action {\n public readonly type: string = RemoteDataActionType.registerLoadedRemoteData;\n\n constructor(\n public readonly remoteDataKey: string,\n public readonly status: DataStatus,\n public readonly data: any,\n public readonly message?: string\n ) {}\n}\n","export enum DataStatus {\n none = 'None',\n loading = 'Loading',\n loaded = 'Loaded',\n notFound = 'NotFound',\n error = 'Error'\n}\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport interface RemoteDataProvider {\n readonly remoteDataKey: string;\n readonly cacheDurationInSeconds: number;\n\n get(): Observable<any>;\n}\n\nexport const NGSSM_REMOTE_DATA_PROVIDER = new InjectionToken<RemoteDataProvider>('NGSSM_REMOTE_DATA_PROVIDER');\n","import update, { Spec } from 'immutability-helper';\n\nimport { NgSsmFeatureState, State } from 'ngssm-store';\n\nimport { RemoteData } from '../remote-data';\n\nexport const selectRemoteDataState = (state: State): RemoteDataState =>\n state[RemoteDataStateSpecification.featureStateKey] as RemoteDataState;\n\nexport const updateRemoteDataState = (state: State, command: Spec<RemoteDataState, never>): State =>\n update(state, {\n [RemoteDataStateSpecification.featureStateKey]: command\n });\n\nexport interface RemoteDataState {\n [key: string]: RemoteData<any>;\n}\n\n@NgSsmFeatureState({\n featureStateKey: RemoteDataStateSpecification.featureStateKey,\n initialState: RemoteDataStateSpecification.initialState\n})\nexport class RemoteDataStateSpecification {\n public static readonly featureStateKey = 'remote-data-state';\n public static readonly initialState: RemoteDataState = {};\n}\n","import { State } from 'ngssm-store';\n\nimport { selectRemoteDataState } from './remote-data.state';\n\nexport const selectRemoteData = (state: State, remoteDataKey: string) => selectRemoteDataState(state)[remoteDataKey];\n","import { Inject, Injectable, Optional, Provider } from '@angular/core';\n\nimport { Effect, Store, State, Action, NGSSM_EFFECT } from 'ngssm-store';\n\nimport { LoadRemoteDataAction, RegisterLoadedRemoteDataAction, RemoteDataActionType } from '../actions';\nimport { DataStatus } from '../data-status';\nimport { RemoteDataProvider, NGSSM_REMOTE_DATA_PROVIDER } from '../remote-data-provider';\nimport { selectRemoteDataState } from '../state';\n\n@Injectable()\nexport class RemoteDataLoadingEffect implements Effect {\n private readonly remoteDataProvidersPerKey: Map<string, RemoteDataProvider>;\n\n public readonly processedActions: string[] = [RemoteDataActionType.loadRemoteData];\n\n constructor(@Inject(NGSSM_REMOTE_DATA_PROVIDER) @Optional() remoteDataProviders: RemoteDataProvider[]) {\n this.remoteDataProvidersPerKey = new Map<string, RemoteDataProvider>((remoteDataProviders ?? []).map((r) => [r.remoteDataKey, r]));\n }\n\n public processAction(store: Store, state: State, action: Action): void {\n const loadRemoteDataAction = action as LoadRemoteDataAction;\n const item = selectRemoteDataState(state)[loadRemoteDataAction.remoteDataKey];\n const provider = this.remoteDataProvidersPerKey.get(loadRemoteDataAction.remoteDataKey);\n\n if (!item || !provider || item.status !== DataStatus.loading) {\n return;\n }\n\n provider.get().subscribe({\n next: (value) =>\n store.dispatchAction(new RegisterLoadedRemoteDataAction(loadRemoteDataAction.remoteDataKey, DataStatus.loaded, value)),\n error: (error) => {\n console.error(`Unable to load data for '${loadRemoteDataAction.remoteDataKey}'`, error);\n store.dispatchAction(new RegisterLoadedRemoteDataAction(loadRemoteDataAction.remoteDataKey, DataStatus.error, undefined));\n }\n });\n }\n}\n\nexport const remoteDataLoadingEffectProvider: Provider = {\n provide: NGSSM_EFFECT,\n useClass: RemoteDataLoadingEffect,\n multi: true\n};\n","import { Inject, Injectable, Optional, Provider } from '@angular/core';\n\nimport { Reducer, State, NGSSM_REDUCER, Action } from 'ngssm-store';\n\nimport { LoadRemoteDataAction, RegisterLoadedRemoteDataAction, RemoteDataActionType } from '../actions';\nimport { DataStatus } from '../data-status';\nimport { RemoteDataProvider, NGSSM_REMOTE_DATA_PROVIDER } from '../remote-data-provider';\nimport { selectRemoteDataState, updateRemoteDataState } from '../state';\n\n@Injectable()\nexport class RemoteDataReducer implements Reducer {\n private readonly remoteDataProvidersPerKey: Map<string, RemoteDataProvider>;\n\n public readonly processedActions: string[] = [RemoteDataActionType.loadRemoteData, RemoteDataActionType.registerLoadedRemoteData];\n\n constructor(@Inject(NGSSM_REMOTE_DATA_PROVIDER) @Optional() remoteDataProviders: RemoteDataProvider[]) {\n this.remoteDataProvidersPerKey = new Map<string, RemoteDataProvider>((remoteDataProviders ?? []).map((r) => [r.remoteDataKey, r]));\n }\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case RemoteDataActionType.loadRemoteData:\n const loadRemoteDataAction = action as LoadRemoteDataAction;\n const item = selectRemoteDataState(state)[loadRemoteDataAction.remoteDataKey];\n const provider = this.remoteDataProvidersPerKey.get(loadRemoteDataAction.remoteDataKey);\n\n if (\n !provider ||\n loadRemoteDataAction.forceReload ||\n item.status === DataStatus.none ||\n item.status === DataStatus.error ||\n !item.timestamp ||\n new Date().getTime() - item.timestamp.getTime() >= 1000 * provider.cacheDurationInSeconds\n ) {\n return updateRemoteDataState(state, {\n [loadRemoteDataAction.remoteDataKey]: {\n status: { $set: DataStatus.loading }\n }\n });\n }\n\n break;\n\n case RemoteDataActionType.registerLoadedRemoteData:\n const registerLoadedRemoteDataAction = action as RegisterLoadedRemoteDataAction;\n if (this.remoteDataProvidersPerKey.has(registerLoadedRemoteDataAction.remoteDataKey)) {\n return updateRemoteDataState(state, {\n [registerLoadedRemoteDataAction.remoteDataKey]: {\n status: { $set: registerLoadedRemoteDataAction.status },\n data: { $set: registerLoadedRemoteDataAction.data },\n timestamp: { $set: new Date() },\n message: { $set: registerLoadedRemoteDataAction.message }\n }\n });\n }\n\n break;\n }\n\n return state;\n }\n}\n\nexport const remoteDataReducerProvider: Provider = {\n provide: NGSSM_REDUCER,\n useClass: RemoteDataReducer,\n multi: true\n};\n","import { Inject, Injectable, Optional } from '@angular/core';\n\nimport { State, StateInitializer } from 'ngssm-store';\n\nimport { DataStatus } from './data-status';\nimport { RemoteDataProvider, NGSSM_REMOTE_DATA_PROVIDER } from './remote-data-provider';\nimport { updateRemoteDataState } from './state';\n\n@Injectable()\nexport class RemoteDataStateInitializer implements StateInitializer {\n constructor(@Inject(NGSSM_REMOTE_DATA_PROVIDER) @Optional() private remoteDataProviders: RemoteDataProvider[]) {}\n\n public initializeState(state: State): State {\n let tempState = state;\n return (this.remoteDataProviders ?? []).reduce(\n (s, provider) => updateRemoteDataState(s, { [provider.remoteDataKey]: { $set: { status: DataStatus.none } } }),\n tempState\n );\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { NGSSM_STATE_INITIALIZER } from 'ngssm-store';\n\nimport { remoteDataLoadingEffectProvider } from './effects/remote-data-loading.effect';\nimport { remoteDataReducerProvider } from './reducers/remote-data.reducer';\nimport { RemoteDataStateInitializer } from './remote-data-state-initializer';\n\n@NgModule({\n declarations: [],\n imports: [],\n exports: [],\n providers: [\n remoteDataReducerProvider,\n remoteDataLoadingEffectProvider,\n { provide: NGSSM_STATE_INITIALIZER, useClass: RemoteDataStateInitializer, multi: true }\n ]\n})\nexport class NgssmRemoteDataModule {}\n","import { DataStatus } from './data-status';\n\nexport interface RemoteData<T> {\n status: DataStatus;\n data?: T;\n timestamp?: Date;\n message?: string;\n}\n\nexport const getDefaultRemoteData = <T>(defaultValue?: T): RemoteData<T> => ({\n status: DataStatus.none,\n data: defaultValue\n});\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport { Store } from 'ngssm-store';\n\nimport { LoadRemoteDataAction } from '../actions';\n\nexport interface RemoteDataLoadingGuardItem {\n remoteDataKey: string;\n forceReload?: boolean;\n}\n\nexport interface RemoteDataLoadingGuardParameters {\n remoteDataItems: RemoteDataLoadingGuardItem[];\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RemoteDataLoadingGuard implements CanActivate {\n constructor(private store: Store) {}\n\n public canActivate(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n const parameters = route.data as RemoteDataLoadingGuardParameters;\n (parameters?.remoteDataItems ?? []).forEach((item) => {\n this.store.dispatchAction(new LoadRemoteDataAction(item.remoteDataKey, item.forceReload === true));\n });\n\n return true;\n }\n}\n","/*\n * Public API Surface of ngssm-remote-data\n */\n\nexport * from './lib/ngssm-remote-data.module';\nexport * from './lib/data-status';\nexport * from './lib/remote-data';\nexport * from './lib/state';\nexport * from './lib/actions';\nexport * from './lib/remote-data-provider';\nexport * from './lib/guards';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="ngssm-remote-data" />
5
+ export * from './public-api';
@@ -0,0 +1,3 @@
1
+ export * from './remote-data-action-type';
2
+ export * from './load-remote-data.action';
3
+ export * from './register-loaded-remote-data.action';
@@ -0,0 +1,7 @@
1
+ import { Action } from 'ngssm-store';
2
+ export declare class LoadRemoteDataAction implements Action {
3
+ readonly remoteDataKey: string;
4
+ readonly forceReload: boolean;
5
+ readonly type: string;
6
+ constructor(remoteDataKey: string, forceReload: boolean);
7
+ }
@@ -0,0 +1,10 @@
1
+ import { Action } from 'ngssm-store';
2
+ import { DataStatus } from '../data-status';
3
+ export declare class RegisterLoadedRemoteDataAction implements Action {
4
+ readonly remoteDataKey: string;
5
+ readonly status: DataStatus;
6
+ readonly data: any;
7
+ readonly message?: string | undefined;
8
+ readonly type: string;
9
+ constructor(remoteDataKey: string, status: DataStatus, data: any, message?: string | undefined);
10
+ }
@@ -0,0 +1,4 @@
1
+ export declare enum RemoteDataActionType {
2
+ loadRemoteData = "[RemoteDataActionType] loadRemoteData",
3
+ registerLoadedRemoteData = "[RemoteDataActionType] registerLoadedRemoteData"
4
+ }
@@ -0,0 +1,7 @@
1
+ export declare enum DataStatus {
2
+ none = "None",
3
+ loading = "Loading",
4
+ loaded = "Loaded",
5
+ notFound = "NotFound",
6
+ error = "Error"
7
+ }
@@ -0,0 +1,13 @@
1
+ import { Provider } from '@angular/core';
2
+ import { Effect, Store, State, Action } from 'ngssm-store';
3
+ import { RemoteDataProvider } from '../remote-data-provider';
4
+ import * as i0 from "@angular/core";
5
+ export declare class RemoteDataLoadingEffect implements Effect {
6
+ private readonly remoteDataProvidersPerKey;
7
+ readonly processedActions: string[];
8
+ constructor(remoteDataProviders: RemoteDataProvider[]);
9
+ processAction(store: Store, state: State, action: Action): void;
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<RemoteDataLoadingEffect, [{ optional: true; }]>;
11
+ static ɵprov: i0.ɵɵInjectableDeclaration<RemoteDataLoadingEffect>;
12
+ }
13
+ export declare const remoteDataLoadingEffectProvider: Provider;
@@ -0,0 +1 @@
1
+ export * from './remote-data-loading.guard';
@@ -0,0 +1,18 @@
1
+ import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot, UrlTree } from '@angular/router';
2
+ import { Observable } from 'rxjs';
3
+ import { Store } from 'ngssm-store';
4
+ import * as i0 from "@angular/core";
5
+ export interface RemoteDataLoadingGuardItem {
6
+ remoteDataKey: string;
7
+ forceReload?: boolean;
8
+ }
9
+ export interface RemoteDataLoadingGuardParameters {
10
+ remoteDataItems: RemoteDataLoadingGuardItem[];
11
+ }
12
+ export declare class RemoteDataLoadingGuard implements CanActivate {
13
+ private store;
14
+ constructor(store: Store);
15
+ canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree;
16
+ static ɵfac: i0.ɵɵFactoryDeclaration<RemoteDataLoadingGuard, never>;
17
+ static ɵprov: i0.ɵɵInjectableDeclaration<RemoteDataLoadingGuard>;
18
+ }
@@ -0,0 +1,6 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class NgssmRemoteDataModule {
3
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgssmRemoteDataModule, never>;
4
+ static ɵmod: i0.ɵɵNgModuleDeclaration<NgssmRemoteDataModule, never, never, never>;
5
+ static ɵinj: i0.ɵɵInjectorDeclaration<NgssmRemoteDataModule>;
6
+ }
@@ -0,0 +1,13 @@
1
+ import { Provider } from '@angular/core';
2
+ import { Reducer, State, Action } from 'ngssm-store';
3
+ import { RemoteDataProvider } from '../remote-data-provider';
4
+ import * as i0 from "@angular/core";
5
+ export declare class RemoteDataReducer implements Reducer {
6
+ private readonly remoteDataProvidersPerKey;
7
+ readonly processedActions: string[];
8
+ constructor(remoteDataProviders: RemoteDataProvider[]);
9
+ updateState(state: State, action: Action): State;
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<RemoteDataReducer, [{ optional: true; }]>;
11
+ static ɵprov: i0.ɵɵInjectableDeclaration<RemoteDataReducer>;
12
+ }
13
+ export declare const remoteDataReducerProvider: Provider;
@@ -0,0 +1,8 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ export interface RemoteDataProvider {
4
+ readonly remoteDataKey: string;
5
+ readonly cacheDurationInSeconds: number;
6
+ get(): Observable<any>;
7
+ }
8
+ export declare const NGSSM_REMOTE_DATA_PROVIDER: InjectionToken<RemoteDataProvider>;
@@ -0,0 +1,10 @@
1
+ import { State, StateInitializer } from 'ngssm-store';
2
+ import { RemoteDataProvider } from './remote-data-provider';
3
+ import * as i0 from "@angular/core";
4
+ export declare class RemoteDataStateInitializer implements StateInitializer {
5
+ private remoteDataProviders;
6
+ constructor(remoteDataProviders: RemoteDataProvider[]);
7
+ initializeState(state: State): State;
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<RemoteDataStateInitializer, [{ optional: true; }]>;
9
+ static ɵprov: i0.ɵɵInjectableDeclaration<RemoteDataStateInitializer>;
10
+ }
@@ -0,0 +1,8 @@
1
+ import { DataStatus } from './data-status';
2
+ export interface RemoteData<T> {
3
+ status: DataStatus;
4
+ data?: T;
5
+ timestamp?: Date;
6
+ message?: string;
7
+ }
8
+ export declare const getDefaultRemoteData: <T>(defaultValue?: T | undefined) => RemoteData<T>;
@@ -0,0 +1,2 @@
1
+ export * from './remote-data.state';
2
+ export * from './selectors';
@@ -0,0 +1,12 @@
1
+ import { Spec } from 'immutability-helper';
2
+ import { State } from 'ngssm-store';
3
+ import { RemoteData } from '../remote-data';
4
+ export declare const selectRemoteDataState: (state: State) => RemoteDataState;
5
+ export declare const updateRemoteDataState: (state: State, command: Spec<RemoteDataState, never>) => State;
6
+ export interface RemoteDataState {
7
+ [key: string]: RemoteData<any>;
8
+ }
9
+ export declare class RemoteDataStateSpecification {
10
+ static readonly featureStateKey = "remote-data-state";
11
+ static readonly initialState: RemoteDataState;
12
+ }
@@ -0,0 +1,2 @@
1
+ import { State } from 'ngssm-store';
2
+ export declare const selectRemoteData: (state: State, remoteDataKey: string) => import("ngssm-remote-data").RemoteData<any>;
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "ngssm-remote-data",
3
+ "version": "14.0.0",
4
+ "description": "NgSsm - Utilities to manage data loaded from remote services with the store.",
5
+ "author": "Lion Marc",
6
+ "license": "MIT",
7
+ "peerDependencies": {
8
+ "@angular/common": "^14.2.0",
9
+ "@angular/core": "^14.2.0",
10
+ "ngssm-store": "14.0.0"
11
+ },
12
+ "dependencies": {
13
+ "tslib": "^2.3.0"
14
+ },
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "https://github.com/LionMarc/ng-simple-state-management",
18
+ "directory": "projects/ngssm-remote-data"
19
+ },
20
+ "module": "fesm2015/ngssm-remote-data.mjs",
21
+ "es2020": "fesm2020/ngssm-remote-data.mjs",
22
+ "esm2020": "esm2020/ngssm-remote-data.mjs",
23
+ "fesm2020": "fesm2020/ngssm-remote-data.mjs",
24
+ "fesm2015": "fesm2015/ngssm-remote-data.mjs",
25
+ "typings": "index.d.ts",
26
+ "exports": {
27
+ "./package.json": {
28
+ "default": "./package.json"
29
+ },
30
+ ".": {
31
+ "types": "./index.d.ts",
32
+ "esm2020": "./esm2020/ngssm-remote-data.mjs",
33
+ "es2020": "./fesm2020/ngssm-remote-data.mjs",
34
+ "es2015": "./fesm2015/ngssm-remote-data.mjs",
35
+ "node": "./fesm2015/ngssm-remote-data.mjs",
36
+ "default": "./fesm2020/ngssm-remote-data.mjs"
37
+ }
38
+ },
39
+ "sideEffects": false
40
+ }
@@ -0,0 +1,7 @@
1
+ export * from './lib/ngssm-remote-data.module';
2
+ export * from './lib/data-status';
3
+ export * from './lib/remote-data';
4
+ export * from './lib/state';
5
+ export * from './lib/actions';
6
+ export * from './lib/remote-data-provider';
7
+ export * from './lib/guards';