@ngdux/list 4.0.0 → 5.0.1

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.
@@ -1,19 +1,18 @@
1
1
  import { RequestState, getDefaultRequestOptions, DEFAULT_PAGE } from '@ngdux/data-model-common';
2
2
  export { RequestState } from '@ngdux/data-model-common';
3
3
  import * as i0 from '@angular/core';
4
- import { InjectionToken, Inject, Injectable, Optional, NgModule } from '@angular/core';
4
+ import { InjectionToken, Inject, Injectable, Optional, NgModule, inject } from '@angular/core';
5
5
  import * as i1 from '@ngrx/store';
6
- import { createAction, props, createReducer, on, createSelector, createFeatureSelector, select, Store } from '@ngrx/store';
6
+ import { createAction, props, createReducer, on, createSelector, createFeatureSelector, select, Store, provideState } from '@ngrx/store';
7
7
  import * as i1$1 from '@ngdux/store-common';
8
- import { createLoadingStateActionHandlers, createRequestStateActionHandlers, getLastPageNumber } from '@ngdux/store-common';
8
+ import { getLastPageNumber, createLoadingStateActionHandlers, createRequestStateActionHandlers } from '@ngdux/store-common';
9
9
  import { createEntityAdapter } from '@ngrx/entity';
10
10
  import * as i2 from '@ngrx/effects';
11
- import { createEffect, ofType, Actions } from '@ngrx/effects';
11
+ import { createEffect, ofType, Actions, provideEffects } from '@ngrx/effects';
12
12
  import { __decorate, __param, __metadata } from 'tslib';
13
- import { of } from 'rxjs';
13
+ import { of, map as map$1, withLatestFrom as withLatestFrom$1, filter as filter$1, switchMap as switchMap$1, catchError as catchError$1, exhaustMap as exhaustMap$1, tap as tap$1 } from 'rxjs';
14
14
  import { map, withLatestFrom, filter, switchMap, catchError, exhaustMap, tap } from 'rxjs/operators';
15
15
 
16
- /* eslint-disable @typescript-eslint/ban-types */
17
16
  const LIST_FEATURE_KEY = new InjectionToken('LIST_FEATURE_KEY');
18
17
  const LIST_FEATURE_KEYS = new InjectionToken('LIST_FEATURE_KEYS');
19
18
  const LIST_SERVICES = new InjectionToken('LIST_SERVICES');
@@ -291,16 +290,19 @@ class ListStateService {
291
290
  getFeatureSelectors(featureKey) {
292
291
  return this.selectors[featureKey];
293
292
  }
294
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ListStateService, deps: [{ token: i1.ReducerManager }, { token: LIST_FEATURE_KEYS }], target: i0.ɵɵFactoryTarget.Injectable }); }
295
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ListStateService }); }
293
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: ListStateService, deps: [{ token: i1.ReducerManager }, { token: LIST_FEATURE_KEYS }], target: i0.ɵɵFactoryTarget.Injectable }); }
294
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: ListStateService }); }
296
295
  }
297
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ListStateService, decorators: [{
296
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: ListStateService, decorators: [{
298
297
  type: Injectable
299
298
  }], ctorParameters: () => [{ type: i1.ReducerManager }, { type: undefined, decorators: [{
300
299
  type: Inject,
301
300
  args: [LIST_FEATURE_KEYS]
302
301
  }] }] });
303
302
 
303
+ /**
304
+ * @deprecated This class is deprecated and will be removed in a future release. Please use `createListEffects` instead.
305
+ */
304
306
  class AbstractListEffects {
305
307
  constructor(actions$, store, service, listActions, listSelectors, notificationService) {
306
308
  this.actions$ = actions$;
@@ -374,13 +376,16 @@ class NotificationServicePlaceholder {
374
376
  console.log(data.title, data.message);
375
377
  return of(true);
376
378
  }
377
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: NotificationServicePlaceholder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
378
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: NotificationServicePlaceholder }); }
379
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: NotificationServicePlaceholder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
380
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: NotificationServicePlaceholder }); }
379
381
  }
380
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: NotificationServicePlaceholder, decorators: [{
382
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: NotificationServicePlaceholder, decorators: [{
381
383
  type: Injectable
382
384
  }] });
383
385
 
386
+ /**
387
+ * @deprecated This NgModule is deprecated and will be removed in a future release. Use `provideListState` and `createListState` instead to set up your list state in a more modular way.
388
+ */
384
389
  class NgduxListStateModule {
385
390
  constructor(registerEffectsService, actions$, store, listStateService, featureKeys, services, notificationServices) {
386
391
  featureKeys.forEach((featureKey, index) => {
@@ -401,11 +406,11 @@ class NgduxListStateModule {
401
406
  ]
402
407
  };
403
408
  }
404
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: NgduxListStateModule, deps: [{ token: i1$1.RegisterEffectsService }, { token: i2.Actions }, { token: i1.Store }, { token: ListStateService }, { token: LIST_FEATURE_KEYS }, { token: LIST_SERVICES }, { token: LIST_NOTIFICATION_SERVICES }], target: i0.ɵɵFactoryTarget.NgModule }); }
405
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: NgduxListStateModule }); }
406
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: NgduxListStateModule, providers: [ListStateService] }); }
409
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: NgduxListStateModule, deps: [{ token: i1$1.RegisterEffectsService }, { token: i2.Actions }, { token: i1.Store }, { token: ListStateService }, { token: LIST_FEATURE_KEYS }, { token: LIST_SERVICES }, { token: LIST_NOTIFICATION_SERVICES }], target: i0.ɵɵFactoryTarget.NgModule }); }
410
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.4", ngImport: i0, type: NgduxListStateModule }); }
411
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: NgduxListStateModule, providers: [ListStateService] }); }
407
412
  }
408
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: NgduxListStateModule, decorators: [{
413
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: NgduxListStateModule, decorators: [{
409
414
  type: NgModule,
410
415
  args: [{
411
416
  providers: [ListStateService]
@@ -421,6 +426,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
421
426
  args: [LIST_NOTIFICATION_SERVICES]
422
427
  }] }] });
423
428
 
429
+ /**
430
+ * @deprecated This class is deprecated and will be removed in a future release.
431
+ */
424
432
  class AbstractListReducerManager {
425
433
  constructor(reducerManager, featureKey) {
426
434
  this.reducerManager = reducerManager;
@@ -447,16 +455,19 @@ class AbstractListReducerManager {
447
455
  const getState = createFeatureSelector(this.featureKey);
448
456
  return createListSelectors(this.entityAdapter, getState);
449
457
  }
450
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AbstractListReducerManager, deps: [{ token: i1.ReducerManager }, { token: LIST_FEATURE_KEY }], target: i0.ɵɵFactoryTarget.Injectable }); }
451
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AbstractListReducerManager }); }
458
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: AbstractListReducerManager, deps: [{ token: i1.ReducerManager }, { token: LIST_FEATURE_KEY }], target: i0.ɵɵFactoryTarget.Injectable }); }
459
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: AbstractListReducerManager }); }
452
460
  }
453
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AbstractListReducerManager, decorators: [{
461
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: AbstractListReducerManager, decorators: [{
454
462
  type: Injectable
455
463
  }], ctorParameters: () => [{ type: i1.ReducerManager }, { type: undefined, decorators: [{
456
464
  type: Inject,
457
465
  args: [LIST_FEATURE_KEY]
458
466
  }] }] });
459
467
 
468
+ /**
469
+ * @deprecated This class is deprecated and will be removed in a future release. Please use `provideListFacade` or `createListFacade` instead.
470
+ */
460
471
  class AbstractListFacade {
461
472
  constructor(store, listActions, listSelectors) {
462
473
  this.store = store;
@@ -541,6 +552,178 @@ class AbstractListFacade {
541
552
  }
542
553
  }
543
554
 
555
+ function createListEffects(listActions, listSelectors, listService, notificationService) {
556
+ return {
557
+ reload$: createEffect((actions$ = inject(Actions)) => reloadEffect(actions$, listActions), { functional: true }),
558
+ loadFirstPage$: createEffect((actions$ = inject(Actions)) => loadFirstPageEffect(actions$, listActions), {
559
+ functional: true
560
+ }),
561
+ loadPreviousPage$: createEffect((store = inject(Store), actions$ = inject(Actions)) => loadPreviousPageEffect(store, actions$, listActions, listSelectors), { functional: true }),
562
+ loadNextPage$: createEffect((store = inject(Store), actions$ = inject(Actions)) => loadNextPageEffect(store, actions$, listActions, listSelectors), { functional: true }),
563
+ loadPage$: createEffect((store = inject(Store), actions$ = inject(Actions), service = listService()) => loadPageEffect(store, actions$, listActions, listSelectors, service), { functional: true }),
564
+ patch$: createEffect((actions$ = inject(Actions), service = listService()) => patchEffect(actions$, listActions, service), { functional: true }),
565
+ delete$: createEffect((actions$ = inject(Actions), service = listService()) => deleteEffect(actions$, listActions, service), { functional: true }),
566
+ deleteSuccess$: createEffect((actions$ = inject(Actions), service = notificationService()) => deleteSuccessEffect(actions$, listActions, service), { functional: true, dispatch: false }),
567
+ errorsHandler$: createEffect((actions$ = inject(Actions), service = notificationService()) => errorsHandlerEffect(actions$, listActions, service), { functional: true, dispatch: false })
568
+ };
569
+ }
570
+ function reloadEffect(actions$, listActions) {
571
+ return actions$.pipe(ofType(listActions.changePageSize, listActions.changeSorting, listActions.changeFiltering, listActions.changePagingOptions, listActions.changeRequestParams, listActions.initialize, listActions.reset, listActions.changePageNumber, listActions.patchSuccess, listActions.deleteSuccess), map$1(() => listActions.loadPage()));
572
+ }
573
+ function loadFirstPageEffect(actions$, listActions) {
574
+ return actions$.pipe(ofType(listActions.loadFirstPage), map$1(() => listActions.changePageNumber({ pageNumber: 1 })));
575
+ }
576
+ function loadPreviousPageEffect(store, actions$, listActions, listSelectors) {
577
+ return actions$.pipe(ofType(listActions.loadPreviousPage), withLatestFrom$1(store.pipe(select(listSelectors.getCurrentPageNumber))), filter$1(([, currentPageNumber]) => currentPageNumber > 1), map$1(([, currentPageNumber]) => listActions.changePageNumber({ pageNumber: currentPageNumber - 1 })));
578
+ }
579
+ function loadNextPageEffect(store, actions$, listActions, listSelectors) {
580
+ return actions$.pipe(ofType(listActions.loadNextPage), withLatestFrom$1(store.pipe(select(listSelectors.isLastPage)), store.pipe(select(listSelectors.getCurrentPageNumber))), filter$1(([, isLastPage]) => !isLastPage), map$1(([, , currentPageNumber]) => listActions.changePageNumber({ pageNumber: currentPageNumber + 1 })));
581
+ }
582
+ function loadPageEffect(store, actions$, listActions, listSelectors, service) {
583
+ return actions$.pipe(ofType(listActions.loadPage), withLatestFrom$1(store.pipe(select(listSelectors.getPagingOptions)), store.pipe(select(listSelectors.getSortingOptions)), store.pipe(select(listSelectors.getFilteringOptions)), store.pipe(select(listSelectors.getRequestParameters))), switchMap$1(([, pagingOptions, sortingOptions, filteringOptions, requestParameters]) => {
584
+ return service
585
+ .loadResources({
586
+ pagingOptions,
587
+ sortingOptions,
588
+ filteringOptions,
589
+ requestParameters
590
+ })
591
+ .pipe(map$1(resources => listActions.loadPageSuccess({
592
+ resources,
593
+ pagingOptions
594
+ })), catchError$1((errors) => of(listActions.loadPageFailure({ errors }))));
595
+ }));
596
+ }
597
+ function patchEffect(actions$, listActions, service) {
598
+ return actions$.pipe(ofType(listActions.patch), exhaustMap$1(action => {
599
+ if (!service.patchResources) {
600
+ throw new Error('patchResources not implement in the ListService');
601
+ }
602
+ return service.patchResources(action.resourceIds, action.resource).pipe(map$1(resources => listActions.patchSuccess({ resources })), catchError$1((errors) => of(listActions.patchFailure({ errors }))));
603
+ }));
604
+ }
605
+ function deleteEffect(actions$, listActions, service) {
606
+ return actions$.pipe(ofType(listActions.delete), exhaustMap$1(({ resourceIds }) => {
607
+ if (!service.deleteResources) {
608
+ throw new Error('deleteResources not implement in the ListService');
609
+ }
610
+ return service.deleteResources(resourceIds).pipe(map$1(() => listActions.deleteSuccess({ resourceIds })), catchError$1((errors) => of(listActions.deleteFailure({ errors }))));
611
+ }));
612
+ }
613
+ function deleteSuccessEffect(actions$, listActions, notificationService) {
614
+ return actions$.pipe(ofType(listActions.deleteSuccess), tap$1(({ resourceIds }) => {
615
+ notificationService?.onListDelete(resourceIds);
616
+ }));
617
+ }
618
+ function errorsHandlerEffect(actions$, listActions, notificationService) {
619
+ return actions$.pipe(ofType(listActions.loadPageFailure, listActions.deleteFailure, listActions.patchFailure), tap$1(({ errors }) => {
620
+ notificationService?.onListErrors(errors);
621
+ }));
622
+ }
623
+
624
+ function provideListFacade(token, listActions, listSelectors) {
625
+ return {
626
+ provide: token,
627
+ useFactory: () => createListFacade(listActions, listSelectors, inject(Store))
628
+ };
629
+ }
630
+ function createListFacade(listActions, listSelectors, store) {
631
+ const resources$ = store.pipe(select(listSelectors.getAll));
632
+ const loadingState$ = store.pipe(select(listSelectors.getLoadingState));
633
+ const requestState$ = store.pipe(select(listSelectors.getRequestState));
634
+ const errors$ = store.pipe(select(listSelectors.getErrors));
635
+ const isReady$ = store.pipe(select(listSelectors.isReady));
636
+ const areSelectedReady$ = store.pipe(select(listSelectors.areSelectedReady));
637
+ const currentPageData$ = store.pipe(select(listSelectors.getCurrentPageData));
638
+ const currentPageNumber$ = store.pipe(select(listSelectors.getCurrentPageNumber));
639
+ const filteringOptions$ = store.pipe(select(listSelectors.getFilteringOptions));
640
+ const requestParameters$ = store.pipe(select(listSelectors.getRequestParameters));
641
+ const lastPageNumber$ = store.pipe(select(listSelectors.getLastPageNumber));
642
+ const pagingOptions$ = store.pipe(select(listSelectors.getPagingOptions));
643
+ const requestOptions$ = store.pipe(select(listSelectors.getRequestOptions));
644
+ const sortingOptions$ = store.pipe(select(listSelectors.getSortingOptions));
645
+ const selectedItems$ = store.pipe(select(listSelectors.getSelectedItems));
646
+ const totalCount$ = store.pipe(select(listSelectors.getTotalCount));
647
+ return {
648
+ resources$,
649
+ loadingState$,
650
+ requestState$,
651
+ errors$,
652
+ isReady$,
653
+ areSelectedReady$,
654
+ currentPageData$,
655
+ currentPageNumber$,
656
+ filteringOptions$,
657
+ requestParameters$,
658
+ lastPageNumber$,
659
+ pagingOptions$,
660
+ requestOptions$,
661
+ sortingOptions$,
662
+ selectedItems$,
663
+ totalCount$,
664
+ setPageSize(props) {
665
+ store.dispatch(listActions.setPageSize(props));
666
+ },
667
+ setFiltering(props) {
668
+ store.dispatch(listActions.setFiltering(props));
669
+ },
670
+ setSorting(props) {
671
+ store.dispatch(listActions.setSorting(props));
672
+ },
673
+ setRequestParameters(props) {
674
+ store.dispatch(listActions.setRequestParams(props));
675
+ },
676
+ changeFiltering(props) {
677
+ store.dispatch(listActions.changeFiltering(props));
678
+ },
679
+ changePagingOptions(props) {
680
+ store.dispatch(listActions.changePagingOptions(props));
681
+ },
682
+ changePageSize(props) {
683
+ store.dispatch(listActions.changePageSize(props));
684
+ },
685
+ changePageNumber(props) {
686
+ store.dispatch(listActions.changePageNumber(props));
687
+ },
688
+ changeSelectedResources(props) {
689
+ store.dispatch(listActions.changeSelectedResources(props));
690
+ },
691
+ changeSorting(props) {
692
+ store.dispatch(listActions.changeSorting(props));
693
+ },
694
+ changeRequestParams(props) {
695
+ store.dispatch(listActions.changeRequestParams(props));
696
+ },
697
+ loadPage() {
698
+ store.dispatch(listActions.loadPage());
699
+ },
700
+ loadFirstPage() {
701
+ store.dispatch(listActions.loadFirstPage());
702
+ },
703
+ loadNextPage() {
704
+ store.dispatch(listActions.loadNextPage());
705
+ },
706
+ loadPreviousPage() {
707
+ store.dispatch(listActions.loadPreviousPage());
708
+ },
709
+ patch(props) {
710
+ store.dispatch(listActions.patch(props));
711
+ },
712
+ delete(props) {
713
+ store.dispatch(listActions.delete(props));
714
+ },
715
+ initialize() {
716
+ store.dispatch(listActions.initialize());
717
+ },
718
+ reinitialize() {
719
+ store.dispatch(listActions.reset());
720
+ },
721
+ resetRequestState() {
722
+ store.dispatch(listActions.resetRequestState());
723
+ }
724
+ };
725
+ }
726
+
544
727
  function createListState(featureName, idKey) {
545
728
  const actions = createListActions(featureName);
546
729
  const entityAdapter = createListEntityAdapter(idKey);
@@ -554,10 +737,22 @@ function createListState(featureName, idKey) {
554
737
  entityAdapter
555
738
  };
556
739
  }
740
+ function provideListState(featureKey, facadeToken, service, notificationService = (NotificationServicePlaceholder)) {
741
+ const { actions, selectors, reducer } = createListState(featureKey);
742
+ return [
743
+ provideState(featureKey, reducer),
744
+ provideListFacade(facadeToken, actions, selectors),
745
+ provideEffects([
746
+ createListEffects(actions, selectors, () => inject(service), () => inject(notificationService))
747
+ ]),
748
+ service,
749
+ notificationService
750
+ ];
751
+ }
557
752
 
558
753
  /**
559
754
  * Generated bundle index. Do not edit.
560
755
  */
561
756
 
562
- export { AbstractListEffects, AbstractListFacade, AbstractListReducerManager, LIST_FEATURE_KEY, LIST_FEATURE_KEYS, LIST_NOTIFICATION_SERVICES, LIST_SERVICES, ListStateService, NgduxListStateModule, createListActions, createListEntityAdapter, createListReducer, createListSelectors, createListState };
757
+ export { AbstractListEffects, AbstractListFacade, AbstractListReducerManager, LIST_FEATURE_KEY, LIST_FEATURE_KEYS, LIST_NOTIFICATION_SERVICES, LIST_SERVICES, ListStateService, NgduxListStateModule, createListActions, createListEntityAdapter, createListReducer, createListSelectors, createListState, provideListState };
563
758
  //# sourceMappingURL=ngdux-list.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ngdux-list.mjs","sources":["../../../../../../../libs/ngdux/util/store/list/src/lib/models/list.model.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/state-generator/list-actions.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/state-generator/list-reducer.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/state-generator/list-selectors.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/+state/state.service.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/state-generator/abstract-list-effects.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/+state/effects.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/services/list-notification-service.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/ngdux-list-state.module.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/state-generator/abstract-list-state.service.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/state-generator/abstract-list.facade.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/state-generator/list-state.ts","../../../../../../../libs/ngdux/util/store/list/src/ngdux-list.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\r\nimport { InjectionToken, Type } from '@angular/core';\r\nimport {\r\n ErrorDto,\r\n FilteringOptions,\r\n ListNotificationService,\r\n ListService,\r\n PagingOptions,\r\n RequestOptions,\r\n RequestState,\r\n SortingField\r\n} from '@ngdux/data-model-common';\r\nimport { ApiRequestState, LoadingState } from '@ngdux/store-common';\r\nimport { EntityState } from '@ngrx/entity';\r\nimport { Action, ActionCreator, MemoizedSelector } from '@ngrx/store';\r\n\r\nexport const LIST_FEATURE_KEY = new InjectionToken<string>('LIST_FEATURE_KEY');\r\nexport const LIST_FEATURE_KEYS = new InjectionToken<string>('LIST_FEATURE_KEYS');\r\nexport const LIST_SERVICES = new InjectionToken<string>('LIST_SERVICES');\r\nexport const LIST_NOTIFICATION_SERVICES = new InjectionToken<string>('LIST_NOTIFICATION_SERVICES');\r\n\r\nexport interface ListState<T, E = unknown, Params = Record<string, string>>\r\n extends EntityState<T>, RequestOptions<Params>, ApiRequestState<E>, LoadingState {\r\n selectedResourceIds: string[];\r\n lastPageNumber?: number;\r\n}\r\n\r\nexport interface ListSelectors<T, E = unknown, Params = Record<string, string>> {\r\n getAll: MemoizedSelector<object, T[]>;\r\n getRequestOptions: MemoizedSelector<object, RequestOptions>;\r\n isLastPage: MemoizedSelector<object, boolean>;\r\n getCurrentPageData: MemoizedSelector<object, T[]>;\r\n getPagingOptions: MemoizedSelector<object, PagingOptions>;\r\n getSortingOptions: MemoizedSelector<object, SortingField[]>;\r\n getFilteringOptions: MemoizedSelector<object, FilteringOptions>;\r\n getRequestParameters: MemoizedSelector<object, Params | undefined>;\r\n getCurrentPageNumber: MemoizedSelector<object, number>;\r\n getLastPageNumber: MemoizedSelector<object, number | undefined>;\r\n getLoadingState: MemoizedSelector<object, RequestState>;\r\n getSelectedResourceIds: MemoizedSelector<object, string[]>;\r\n getSelectedItems: MemoizedSelector<object, T[]>;\r\n getSelectionRecord: MemoizedSelector<object, Record<string, T>>;\r\n getRequestState: MemoizedSelector<object, RequestState>;\r\n getErrors: MemoizedSelector<object, E | undefined>;\r\n areSelectedReady: MemoizedSelector<object, boolean>;\r\n isReady: MemoizedSelector<object, boolean>;\r\n isDeleteDisabled: MemoizedSelector<object, boolean>;\r\n isCopyDisabled: MemoizedSelector<object, boolean>;\r\n getTotalCount: MemoizedSelector<object, number>;\r\n}\r\n\r\nexport interface ListActions<Entity, Error = unknown, Summary = Entity, Params = Record<string, string>> {\r\n /**\r\n * Set the page size without reloading the list\r\n */\r\n setPageSize: ActionCreator<string, (props: { pageSize: number }) => { pageSize: number } & Action<string>>;\r\n /**\r\n * Set the sorting options without reloading the list\r\n */\r\n setSorting: ActionCreator<\r\n string,\r\n (props: { sortingOptions: SortingField[] }) => { sortingOptions: SortingField[] } & Action<string>\r\n >;\r\n /**\r\n * Set the filtering options without reloading the list\r\n */\r\n setFiltering: ActionCreator<\r\n string,\r\n (props: { filteringOptions: FilteringOptions }) => { filteringOptions: FilteringOptions } & Action<string>\r\n >;\r\n /**\r\n * Set the request parameters without reloading the list\r\n */\r\n setRequestParams: ActionCreator<string, (props: { params: Params }) => { params: Params } & Action<string>>;\r\n\r\n /**\r\n * Change the paging options and reload the list\r\n */\r\n changePagingOptions: ActionCreator<\r\n string,\r\n (props: { pagingOptions: PagingOptions }) => { pagingOptions: PagingOptions } & Action<string>\r\n >;\r\n\r\n /**\r\n * Change the page number and reload the list\r\n */\r\n changePageNumber: ActionCreator<string, (props: { pageNumber: number }) => { pageNumber: number } & Action<string>>;\r\n /**\r\n * Change the page size and reload the list\r\n */\r\n changePageSize: ActionCreator<string, (props: { pageSize: number }) => { pageSize: number } & Action<string>>;\r\n /**\r\n * Change the sorting options and reload the list\r\n */\r\n changeSorting: ActionCreator<\r\n string,\r\n (props: { sortingOptions: SortingField[] }) => { sortingOptions: SortingField[] } & Action<string>\r\n >;\r\n /**\r\n * Change the filtering options and reload the list\r\n */\r\n changeFiltering: ActionCreator<\r\n string,\r\n (props: { filteringOptions: FilteringOptions }) => { filteringOptions: FilteringOptions } & Action<string>\r\n >;\r\n /**\r\n * Change the request parameters and reload the list\r\n */\r\n changeRequestParams: ActionCreator<string, (props: { params: Params }) => { params: Params } & Action<string>>;\r\n\r\n changeSelectedResources: ActionCreator<\r\n string,\r\n (props: { selectedResourceIds: string[] }) => { selectedResourceIds: string[] } & Action<string>\r\n >;\r\n loadPage: ActionCreator<string, () => Action<string>>;\r\n loadPageSuccess: ActionCreator<\r\n string,\r\n (props: {\r\n resources: Summary[];\r\n pagingOptions: PagingOptions;\r\n }) => { resources: Summary[]; pagingOptions: PagingOptions } & Action<string>\r\n >;\r\n loadPageFailure: ActionCreator<string, (props: { errors: Error }) => { errors: Error } & Action<string>>;\r\n delete: ActionCreator<string, (props: { resourceIds: string[] }) => { resourceIds: string[] } & Action<string>>;\r\n deleteSuccess: ActionCreator<\r\n string,\r\n (props: { resourceIds: string[] }) => { resourceIds: string[] } & Action<string>\r\n >;\r\n deleteFailure: ActionCreator<string, (props: { errors: Error }) => { errors: Error } & Action<string>>;\r\n patch: ActionCreator<\r\n string,\r\n (props: {\r\n resourceIds: string[];\r\n resource: Partial<Entity>;\r\n }) => { resourceIds: string[]; resource: Partial<Entity> } & Action<string>\r\n >;\r\n patchSuccess: ActionCreator<\r\n string,\r\n (props: { resources: (Entity | ErrorDto)[] }) => { resources: (Entity | ErrorDto)[] } & Action<string>\r\n >;\r\n patchFailure: ActionCreator<string, (props: { errors: Error }) => { errors: Error } & Action<string>>;\r\n loadNextPage: ActionCreator<string, () => Action<string>>;\r\n\r\n /**\r\n * Remove the current data, set the page number to 1 and deselect resources.\r\n * Keep all the rest, like filteringOptions and sortingOptions\r\n */\r\n initialize: ActionCreator<string, () => Action<string>>;\r\n /**\r\n * Reset to the initial state\r\n */\r\n reset: ActionCreator<string, () => Action<string>>;\r\n loadPreviousPage: ActionCreator<string, () => Action<string>>;\r\n loadFirstPage: ActionCreator<string, () => Action<string>>;\r\n /**\r\n * Reset the request state to idle\r\n */\r\n resetRequestState: ActionCreator<string, () => Action<string>>;\r\n}\r\n\r\nexport interface NgduxListStateModuleConfig<\r\n T extends { [key: string]: any },\r\n E,\r\n S = T,\r\n Params = Record<string, string>\r\n> {\r\n service: Type<ListService<T, S, Params>>;\r\n notificationService?: Type<ListNotificationService<E>>;\r\n}\r\n","import { ErrorDto, FilteringOptions, PagingOptions, SortingField } from '@ngdux/data-model-common';\r\nimport { createAction, props } from '@ngrx/store';\r\nimport { ListActions } from '../models/list.model';\r\n\r\nexport function createListActions<T, E, S = T, Params = Record<string, string>>(\r\n featureName: string\r\n): ListActions<T, E, S, Params> {\r\n const resetRequestState = createAction(`[${featureName} API] Reset ${featureName} Request State`);\r\n const initialize = createAction(`[${featureName} API] Initialize ${featureName}`);\r\n const reset = createAction(`[Organization ${featureName} API] Reset ${featureName}`);\r\n\r\n const loadNextPage = createAction(`[${featureName} API] Load Next ${featureName} Page`);\r\n const loadPreviousPage = createAction(`[${featureName} API] Load Previous ${featureName} Page`);\r\n const loadFirstPage = createAction(`[${featureName} API] Load First ${featureName} Page`);\r\n\r\n const setPageSize = createAction(`[${featureName} API] Set ${featureName} Page Size`, props<{ pageSize: number }>());\r\n const setSorting = createAction(\r\n `[${featureName} API] Set ${featureName} Sorting`,\r\n props<{ sortingOptions: SortingField[] }>()\r\n );\r\n const setFiltering = createAction(\r\n `[${featureName} API] Set ${featureName} Filtering`,\r\n props<{ filteringOptions: FilteringOptions }>()\r\n );\r\n const setRequestParams = createAction(\r\n `[${featureName} API] Set ${featureName} Request Params`,\r\n props<{ params: Params }>()\r\n );\r\n\r\n const changePageSize = createAction(\r\n `[${featureName} API] Change ${featureName} Page Size`,\r\n props<{ pageSize: number }>()\r\n );\r\n\r\n const changePageNumber = createAction(\r\n `[${featureName} API] Change ${featureName} Page Number`,\r\n props<{ pageNumber: number }>()\r\n );\r\n\r\n const changePagingOptions = createAction(\r\n `[${featureName} API] Change ${featureName} Page Options`,\r\n props<{ pagingOptions: PagingOptions }>()\r\n );\r\n const changeSorting = createAction(\r\n `[${featureName} API] Change ${featureName} Sorting`,\r\n props<{ sortingOptions: SortingField[] }>()\r\n );\r\n const changeFiltering = createAction(\r\n `[${featureName} API] Change ${featureName} Filtering`,\r\n props<{ filteringOptions: FilteringOptions }>()\r\n );\r\n const changeSelectedResources = createAction(\r\n `[${featureName} API] Change Selected Resources ${featureName}`,\r\n props<{ selectedResourceIds: string[] }>()\r\n );\r\n const changeRequestParams = createAction(\r\n `[${featureName} API] Change ${featureName} Request Params`,\r\n props<{ params: Params }>()\r\n );\r\n\r\n const loadPage = createAction(`[${featureName} API] Load ${featureName} Page`);\r\n const loadPageSuccess = createAction(\r\n `[${featureName} API] Load ${featureName} Page Success`,\r\n props<{ resources: S[]; pagingOptions: PagingOptions }>()\r\n );\r\n const loadPageFailure = createAction(`[${featureName} API] Load ${featureName} Page Failure`, props<{ errors: E }>());\r\n\r\n const deleteAction = createAction(`[${featureName} API] Delete ${featureName}`, props<{ resourceIds: string[] }>());\r\n const deleteSuccess = createAction(\r\n `[${featureName} API] Delete ${featureName} Success`,\r\n props<{ resourceIds: string[] }>()\r\n );\r\n const deleteFailure = createAction(`[${featureName} API] Delete ${featureName} Failure`, props<{ errors: E }>());\r\n\r\n const patch = createAction(\r\n `[${featureName} API] Patch ${featureName}`,\r\n props<{ resourceIds: string[]; resource: Partial<T> }>()\r\n );\r\n const patchSuccess = createAction(\r\n `[${featureName} API] Patch ${featureName} Success`,\r\n props<{ resources: (T | ErrorDto)[] }>()\r\n );\r\n const patchFailure = createAction(`[${featureName} API] Patch ${featureName} Failure`, props<{ errors: E }>());\r\n\r\n return {\r\n initialize,\r\n reset,\r\n setPageSize,\r\n setSorting,\r\n setFiltering,\r\n setRequestParams,\r\n changePageSize,\r\n changePageNumber,\r\n changePagingOptions,\r\n changeSorting,\r\n changeFiltering,\r\n changeRequestParams,\r\n loadPreviousPage,\r\n loadNextPage,\r\n loadFirstPage,\r\n changeSelectedResources,\r\n loadPage,\r\n loadPageSuccess,\r\n loadPageFailure,\r\n delete: deleteAction,\r\n deleteSuccess,\r\n deleteFailure,\r\n patch,\r\n patchSuccess,\r\n patchFailure,\r\n resetRequestState\r\n };\r\n}\r\n","import { DEFAULT_PAGE, getDefaultRequestOptions, RequestState } from '@ngdux/data-model-common';\r\nimport {\r\n createLoadingStateActionHandlers,\r\n createRequestStateActionHandlers,\r\n getLastPageNumber\r\n} from '@ngdux/store-common';\r\nimport { createEntityAdapter, EntityAdapter } from '@ngrx/entity';\r\nimport { ActionReducer, createReducer, on, ReducerTypes } from '@ngrx/store';\r\nimport { ActionCreator } from '@ngrx/store/src/models';\r\n\r\nimport { ListActions, ListState } from '../models/list.model';\r\n\r\nexport function createListEntityAdapter<T extends { [key: string]: any }>(idKey = 'id'): EntityAdapter<T> {\r\n return createEntityAdapter({\r\n selectId: resource => resource[idKey]\r\n });\r\n}\r\n\r\nexport function createListReducer<T, E, S = T, Params = Record<string, string>>(\r\n entityAdapter: EntityAdapter<S>,\r\n actions: ListActions<T, E, S, Params>,\r\n actionHandlers?: ReducerTypes<ListState<S, E, Params>, ActionCreator[]>[],\r\n initialListState?: { [key: string]: unknown }\r\n): ActionReducer<ListState<S, E, Params>> {\r\n const initialState: ListState<S, E, Params> = {\r\n ...createInitialListState<S, E, Params>(entityAdapter),\r\n ...initialListState\r\n };\r\n return createReducer<ListState<S, E, Params>>(\r\n initialState,\r\n ...createListActionHandlers<T, E, S, Params>(initialState, entityAdapter, actions),\r\n ...(actionHandlers || [])\r\n );\r\n}\r\n\r\nfunction createInitialListState<T, E, Params = Record<string, string>>(\r\n entityAdapter: EntityAdapter<T>\r\n): ListState<T, E, Params> {\r\n return entityAdapter.getInitialState({\r\n ...getDefaultRequestOptions<Params>(),\r\n lastPageNumber: undefined,\r\n selectedResourceIds: [],\r\n loadingState: RequestState.IDLE,\r\n requestState: RequestState.IDLE,\r\n errors: undefined\r\n });\r\n}\r\n\r\nfunction createListActionHandlers<T, E, S, Params>(\r\n initialListState: ListState<S, E, Params>,\r\n entityAdapter: EntityAdapter<S>,\r\n actions: ListActions<T, E, S, Params>\r\n): ReducerTypes<ListState<S, E, Params>, ActionCreator[]>[] {\r\n return [\r\n on(actions.reset, () => initialListState),\r\n on(actions.initialize, (state: ListState<S, E, Params>) =>\r\n entityAdapter.removeAll({\r\n ...state,\r\n selectedResourceIds: [],\r\n pagingOptions: {\r\n ...state.pagingOptions,\r\n page: DEFAULT_PAGE\r\n },\r\n requestState: RequestState.IDLE\r\n })\r\n ),\r\n on(actions.changePageSize, actions.setPageSize, (state: ListState<S, E, Params>, { pageSize }) => ({\r\n ...state,\r\n pagingOptions: { page: DEFAULT_PAGE, pageSize },\r\n lastPageNumber: undefined\r\n })),\r\n on(actions.changePageNumber, (state: ListState<S, E, Params>, { pageNumber }) => ({\r\n ...state,\r\n pagingOptions: { ...state.pagingOptions, page: pageNumber }\r\n })),\r\n on(actions.changePagingOptions, (state: ListState<S, E, Params>, { pagingOptions }) => ({\r\n ...state,\r\n pagingOptions\r\n })),\r\n on(actions.changeSorting, actions.setSorting, (state: ListState<S, E, Params>, { sortingOptions }) => ({\r\n ...state,\r\n sortingOptions,\r\n pagingOptions: { ...state.pagingOptions, page: DEFAULT_PAGE }\r\n })),\r\n on(actions.changeFiltering, actions.setFiltering, (state: ListState<S, E, Params>, { filteringOptions }) => ({\r\n ...state,\r\n filteringOptions,\r\n pagingOptions: { ...state.pagingOptions, page: DEFAULT_PAGE },\r\n lastPageNumber: undefined\r\n })),\r\n on(\r\n actions.changeRequestParams,\r\n actions.setRequestParams,\r\n (state: ListState<S, E, Params>, { params }): ListState<S, E, Params> => ({\r\n ...state,\r\n requestParameters: params,\r\n pagingOptions: { ...state.pagingOptions, page: DEFAULT_PAGE }\r\n })\r\n ),\r\n on(actions.changeSelectedResources, (state: ListState<S, E, Params>, { selectedResourceIds }) => ({\r\n ...state,\r\n selectedResourceIds\r\n })),\r\n on(actions.loadFirstPage, (state: ListState<S, E, Params>) => ({\r\n ...state,\r\n pagingOptions: { ...state.pagingOptions, page: 1 }\r\n })),\r\n on(actions.loadPageSuccess, (state: ListState<S, E, Params>, { resources, pagingOptions }) => {\r\n const lastPageNumber = getLastPageNumber(resources, pagingOptions) || state.lastPageNumber;\r\n if (lastPageNumber && pagingOptions.page > lastPageNumber) {\r\n return {\r\n ...state,\r\n pagingOptions: {\r\n ...state.pagingOptions,\r\n page: lastPageNumber\r\n },\r\n lastPageNumber,\r\n selectedResourceIds: []\r\n };\r\n }\r\n\r\n return entityAdapter.setAll(resources, {\r\n ...state,\r\n lastPageNumber,\r\n selectedResourceIds: []\r\n });\r\n }),\r\n on(actions.deleteSuccess, (state: ListState<S, E, Params>) => ({\r\n ...state,\r\n selectedResourceIds: [] as string[]\r\n })),\r\n ...createLoadingStateActionHandlers<ListState<S, E, Params>>(\r\n actions.loadPage,\r\n actions.loadPageSuccess,\r\n actions.loadPageFailure\r\n ),\r\n ...createRequestStateActionHandlers<ListState<S, E, Params>, E>(\r\n undefined,\r\n actions.delete,\r\n actions.deleteSuccess,\r\n actions.deleteFailure\r\n ),\r\n ...createRequestStateActionHandlers<ListState<S, E, Params>, E>(\r\n actions.resetRequestState,\r\n actions.patch,\r\n actions.patchSuccess,\r\n actions.patchFailure\r\n )\r\n ];\r\n}\r\n","/* eslint-disable @typescript-eslint/ban-types */\r\nimport { RequestOptions, RequestState } from '@ngdux/data-model-common';\r\nimport { EntityAdapter } from '@ngrx/entity';\r\nimport { DefaultProjectorFn, MemoizedSelector, createSelector } from '@ngrx/store';\r\nimport { ListSelectors, ListState } from '../models/list.model';\r\n\r\nexport function createListSelectors<T, E, Params = Record<string, string>>(\r\n entityAdapter: EntityAdapter<T>,\r\n getListState: MemoizedSelector<object, ListState<T, E, Params>, DefaultProjectorFn<ListState<T, E, Params>>>\r\n): ListSelectors<T, E, Params> {\r\n const getAll = createSelector(getListState, entityAdapter.getSelectors().selectAll);\r\n\r\n const getPagingOptions = createSelector(getListState, state => state.pagingOptions);\r\n\r\n const getRequestOptions = createSelector(\r\n getListState,\r\n (state): RequestOptions => ({\r\n pagingOptions: state.pagingOptions,\r\n sortingOptions: state.sortingOptions,\r\n filteringOptions: state.filteringOptions\r\n })\r\n );\r\n\r\n const getLastPageNumber = createSelector(getListState, state => state.lastPageNumber);\r\n\r\n const isLastPage = createSelector(getPagingOptions, getLastPageNumber, ({ page }, lastPageNumber) => {\r\n return lastPageNumber ? lastPageNumber <= page : false;\r\n });\r\n\r\n const getCurrentPageData = createSelector(getAll, resources => {\r\n return resources;\r\n });\r\n\r\n const getSortingOptions = createSelector(getListState, state => state.sortingOptions);\r\n\r\n const getRequestParameters = createSelector(getListState, state => state.requestParameters);\r\n\r\n const getFilteringOptions = createSelector(getListState, state => state.filteringOptions);\r\n\r\n const getCurrentPageNumber = createSelector(getPagingOptions, options => options?.page);\r\n\r\n const getSelectedResourceIds = createSelector(getListState, state => state.selectedResourceIds);\r\n\r\n const getLoadingState = createSelector(getListState, state => state.loadingState);\r\n\r\n const getSelectedItems = createSelector(\r\n getSelectedResourceIds,\r\n createSelector(getListState, entityAdapter.getSelectors().selectEntities),\r\n (selectedResourceIds, resources): T[] =>\r\n selectedResourceIds.reduce((acc, selectedResourceId): T[] => {\r\n const resource = resources[selectedResourceId];\r\n if (resource) {\r\n acc.push(resource);\r\n }\r\n return acc;\r\n }, [] as T[])\r\n );\r\n\r\n const getSelectionRecord = createSelector(\r\n getSelectedResourceIds,\r\n createSelector(getListState, entityAdapter.getSelectors().selectEntities),\r\n (selectedResourceIds, resources): Record<string, T> =>\r\n selectedResourceIds.reduce((selected, selectedResourceId) => {\r\n const resource = resources[selectedResourceId];\r\n if (resource) {\r\n selected[selectedResourceId] = resource;\r\n }\r\n return selected;\r\n }, {} as Record<string, T>)\r\n );\r\n\r\n const getRequestState = createSelector(getListState, state => state.requestState);\r\n\r\n const getErrors = createSelector(getListState, state => state.errors);\r\n\r\n const isReady = createSelector(\r\n getAll,\r\n getLoadingState,\r\n (users, loadingState) => !!users && loadingState === RequestState.SUCCESS\r\n );\r\n\r\n const areSelectedReady = createSelector(\r\n getSelectedResourceIds,\r\n getSelectionRecord,\r\n getLoadingState,\r\n (selectedResourceIds, resources, loadingState) => {\r\n return selectedResourceIds.every(resourceId => !!resources[resourceId]) && loadingState === RequestState.SUCCESS;\r\n }\r\n );\r\n\r\n const isDeleteDisabled = createSelector(getSelectedResourceIds, selectedResourceIds => !selectedResourceIds.length);\r\n\r\n const isCopyDisabled = createSelector(\r\n getSelectedResourceIds,\r\n selectedResourceIds => selectedResourceIds.length !== 1\r\n );\r\n\r\n const getTotalCount = createSelector(\r\n getPagingOptions,\r\n isLastPage,\r\n getCurrentPageData,\r\n (pagingOptions, isLastPage, currentPageData) => {\r\n if (!pagingOptions) {\r\n return 0;\r\n }\r\n\r\n if (isLastPage) {\r\n return (pagingOptions.page - 1) * pagingOptions.pageSize + currentPageData.length;\r\n }\r\n return (pagingOptions.page + 1) * pagingOptions.pageSize;\r\n }\r\n );\r\n\r\n return {\r\n getAll,\r\n getRequestOptions,\r\n isLastPage,\r\n getCurrentPageData,\r\n getPagingOptions,\r\n getSortingOptions,\r\n getFilteringOptions,\r\n getRequestParameters,\r\n getCurrentPageNumber,\r\n getLastPageNumber,\r\n getLoadingState,\r\n getSelectedResourceIds,\r\n getSelectedItems,\r\n getSelectionRecord,\r\n getRequestState,\r\n getErrors,\r\n areSelectedReady,\r\n isReady,\r\n isDeleteDisabled,\r\n isCopyDisabled,\r\n getTotalCount\r\n };\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { EntityAdapter } from '@ngrx/entity';\r\nimport { ReducerManager, createFeatureSelector } from '@ngrx/store';\r\nimport { LIST_FEATURE_KEYS, ListActions, ListSelectors, ListState } from '../models/list.model';\r\nimport { createListActions } from '../state-generator/list-actions';\r\nimport { createListEntityAdapter, createListReducer } from '../state-generator/list-reducer';\r\nimport { createListSelectors } from '../state-generator/list-selectors';\r\n\r\n@Injectable()\r\nexport class ListStateService<\r\n T extends { [key: string]: any },\r\n Error = unknown,\r\n S extends { [key: string]: any } = T,\r\n Params = Record<string, string>\r\n> {\r\n protected actions: Record<string, ListActions<T, Error, S, Params>> = {};\r\n protected selectors: Record<string, ListSelectors<S, Error, Params>> = {};\r\n private entityAdapter: EntityAdapter<S>;\r\n\r\n constructor(private readonly reducerManager: ReducerManager, @Inject(LIST_FEATURE_KEYS) featureKeys: string[]) {\r\n this.entityAdapter = this.getEntityAdapter();\r\n featureKeys.forEach(featureKey => {\r\n if (!this.actions[featureKey]) {\r\n this.actions[featureKey] = this.getActions(featureKey);\r\n this.addReducer(featureKey, this.actions[featureKey]);\r\n this.selectors[featureKey] = this.getSelectors(featureKey);\r\n }\r\n });\r\n }\r\n\r\n protected getActions(featureKey: string) {\r\n return createListActions<T, Error, S, Params>(featureKey);\r\n }\r\n\r\n private getEntityAdapter() {\r\n return createListEntityAdapter<S>();\r\n }\r\n\r\n protected addReducer(featureKey: string, actions: ListActions<T, Error, S, Params>) {\r\n const currentReducers: string[] = Object.keys(this.reducerManager.currentReducers || {});\r\n\r\n if (!currentReducers.includes(featureKey)) {\r\n const reducer = createListReducer<T, Error, S, Params>(this.entityAdapter, actions);\r\n this.reducerManager.addReducer(featureKey, reducer);\r\n }\r\n }\r\n\r\n protected getSelectors(featureKey: string) {\r\n const getState = createFeatureSelector<ListState<S, Error, Params>>(featureKey);\r\n return createListSelectors(this.entityAdapter, getState);\r\n }\r\n\r\n getFeatureActions(featureKey: string) {\r\n return this.actions[featureKey];\r\n }\r\n\r\n getFeatureSelectors(featureKey: string) {\r\n return this.selectors[featureKey];\r\n }\r\n}\r\n","import { ListNotificationService, ListService } from '@ngdux/data-model-common';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport { Store, select } from '@ngrx/store';\r\nimport { of } from 'rxjs';\r\nimport { catchError, exhaustMap, filter, map, switchMap, tap, withLatestFrom } from 'rxjs/operators';\r\n\r\nimport { ListActions, ListSelectors } from '../models/list.model';\r\n\r\nexport abstract class AbstractListEffects<T, E = unknown, S = T, Params = Record<string, string>> {\r\n reload$ = createEffect(() =>\r\n this.actions$.pipe(\r\n ofType(\r\n this.listActions.changePageSize,\r\n this.listActions.changeSorting,\r\n this.listActions.changeFiltering,\r\n this.listActions.changePagingOptions,\r\n this.listActions.changeRequestParams,\r\n this.listActions.initialize,\r\n this.listActions.reset,\r\n this.listActions.changePageNumber,\r\n this.listActions.patchSuccess,\r\n this.listActions.deleteSuccess\r\n ),\r\n map(() => this.listActions.loadPage())\r\n )\r\n );\r\n\r\n loadFirstPage$ = createEffect(() =>\r\n this.actions$.pipe(\r\n ofType(this.listActions.loadFirstPage),\r\n map(() => this.listActions.changePageNumber({ pageNumber: 1 }))\r\n )\r\n );\r\n\r\n loadPreviousPage$ = createEffect(() =>\r\n this.actions$.pipe(\r\n ofType(this.listActions.loadPreviousPage),\r\n withLatestFrom(this.store.pipe(select(this.listSelectors.getCurrentPageNumber))),\r\n filter(([, currentPageNumber]) => currentPageNumber > 1),\r\n map(([, currentPageNumber]) => this.listActions.changePageNumber({ pageNumber: currentPageNumber - 1 }))\r\n )\r\n );\r\n\r\n loadNextPage$ = createEffect(() =>\r\n this.actions$.pipe(\r\n ofType(this.listActions.loadNextPage),\r\n withLatestFrom(\r\n this.store.pipe(select(this.listSelectors.isLastPage)),\r\n this.store.pipe(select(this.listSelectors.getCurrentPageNumber))\r\n ),\r\n filter(([, isLastPage]) => !isLastPage),\r\n map(([, , currentPageNumber]) => this.listActions.changePageNumber({ pageNumber: currentPageNumber + 1 }))\r\n )\r\n );\r\n\r\n loadPage$ = createEffect(() =>\r\n this.actions$.pipe(\r\n ofType(this.listActions.loadPage),\r\n withLatestFrom(\r\n this.store.pipe(select(this.listSelectors.getPagingOptions)),\r\n this.store.pipe(select(this.listSelectors.getSortingOptions)),\r\n this.store.pipe(select(this.listSelectors.getFilteringOptions)),\r\n this.store.pipe(select(this.listSelectors.getRequestParameters))\r\n ),\r\n switchMap(([, pagingOptions, sortingOptions, filteringOptions, requestParameters]) => {\r\n return this.service\r\n .loadResources({\r\n pagingOptions,\r\n sortingOptions,\r\n filteringOptions,\r\n requestParameters\r\n })\r\n .pipe(\r\n map(resources =>\r\n this.listActions.loadPageSuccess({\r\n resources,\r\n pagingOptions\r\n })\r\n ),\r\n catchError((errors: E) => of(this.listActions.loadPageFailure({ errors })))\r\n );\r\n })\r\n )\r\n );\r\n\r\n patch$ = createEffect(() =>\r\n this.actions$.pipe(\r\n ofType(this.listActions.patch),\r\n exhaustMap(action => {\r\n if (!this.service.patchResources) {\r\n throw new Error('patchResources not implement in the ListService');\r\n }\r\n\r\n return this.service.patchResources(action.resourceIds, action.resource).pipe(\r\n map(resources => this.listActions.patchSuccess({ resources })),\r\n catchError((errors: E) => of(this.listActions.patchFailure({ errors })))\r\n );\r\n })\r\n )\r\n );\r\n\r\n delete$ = createEffect(() =>\r\n this.actions$.pipe(\r\n ofType(this.listActions.delete),\r\n exhaustMap(({ resourceIds }) => {\r\n if (!this.service.deleteResources) {\r\n throw new Error('deleteResources not implement in the ListService');\r\n }\r\n\r\n return this.service.deleteResources(resourceIds).pipe(\r\n map(() => this.listActions.deleteSuccess({ resourceIds })),\r\n catchError((errors: E) => of(this.listActions.deleteFailure({ errors })))\r\n );\r\n })\r\n )\r\n );\r\n\r\n deleteSuccess$ = createEffect(\r\n () =>\r\n this.actions$.pipe(\r\n ofType(this.listActions.deleteSuccess),\r\n tap(({ resourceIds }) => {\r\n this.notificationService?.onListDelete(resourceIds);\r\n })\r\n ),\r\n { dispatch: false }\r\n );\r\n\r\n errorsHandler$ = createEffect(\r\n () =>\r\n this.actions$.pipe(\r\n ofType(this.listActions.loadPageFailure, this.listActions.deleteFailure, this.listActions.patchFailure),\r\n tap(({ errors }) => {\r\n this.notificationService?.onListErrors(errors);\r\n })\r\n ),\r\n { dispatch: false }\r\n );\r\n\r\n protected constructor(\r\n protected readonly actions$: Actions,\r\n protected readonly store: Store,\r\n protected readonly service: ListService<T, S, Params>,\r\n protected readonly listActions: ListActions<T, E, S, Params>,\r\n protected readonly listSelectors: ListSelectors<S, E, Params>,\r\n protected readonly notificationService?: ListNotificationService<E>\r\n ) {}\r\n}\r\n","import { Optional } from '@angular/core';\r\nimport { ListNotificationService, ListService } from '@ngdux/data-model-common';\r\nimport { Actions, OnIdentifyEffects } from '@ngrx/effects';\r\nimport { Store } from '@ngrx/store';\r\nimport { AbstractListEffects } from '../state-generator/abstract-list-effects';\r\nimport { ListStateService } from './state.service';\r\n\r\nexport class ListEffects<\r\n T extends { [key: string]: any },\r\n Error = unknown,\r\n S extends { [key: string]: any } = T,\r\n Params = Record<string, string>\r\n >\r\n extends AbstractListEffects<T, Error, S, Params>\r\n implements OnIdentifyEffects\r\n{\r\n constructor(\r\n actions$: Actions,\r\n store: Store,\r\n listStateService: ListStateService<T, Error, S, Params>,\r\n private readonly featureKey: string,\r\n service: ListService<T, S, Params>,\r\n @Optional() notificationService?: ListNotificationService<Error>\r\n ) {\r\n super(\r\n actions$,\r\n store,\r\n service,\r\n listStateService.getFeatureActions(featureKey),\r\n listStateService.getFeatureSelectors(featureKey),\r\n notificationService\r\n );\r\n }\r\n\r\n ngrxOnIdentifyEffects() {\r\n return this.featureKey;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ErrorDto, ListNotificationService } from '@ngdux/data-model-common';\r\nimport { Observable, of } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class NotificationServicePlaceholder implements ListNotificationService<ErrorDto> {\r\n onListErrors(errors: ErrorDto): void {\r\n console.error('ERROR', errors);\r\n }\r\n\r\n onListDelete(ids: string[]): void {\r\n console.log(`Resources ${ids.join(', ')} have been deleted.`);\r\n }\r\n\r\n openConfirmationDialog(data: { message: string; title: string }): Observable<boolean> {\r\n console.log(data.title, data.message);\r\n\r\n return of(true);\r\n }\r\n}\r\n","import { Inject, ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { ListNotificationService, ListService } from '@ngdux/data-model-common';\r\nimport { RegisterEffectsService } from '@ngdux/store-common';\r\nimport { Actions } from '@ngrx/effects';\r\nimport { Store } from '@ngrx/store';\r\nimport { ListEffects } from './+state/effects';\r\nimport { ListStateService } from './+state/state.service';\r\nimport {\r\n LIST_FEATURE_KEYS,\r\n LIST_NOTIFICATION_SERVICES,\r\n LIST_SERVICES,\r\n NgduxListStateModuleConfig\r\n} from './models/list.model';\r\nimport { NotificationServicePlaceholder } from './services/list-notification-service';\r\n\r\n@NgModule({\r\n providers: [ListStateService]\r\n})\r\nexport class NgduxListStateModule<\r\n T extends { [key: string]: any },\r\n Error = unknown,\r\n S extends { [key: string]: any } = T,\r\n Params = Record<string, string>\r\n> {\r\n constructor(\r\n registerEffectsService: RegisterEffectsService,\r\n actions$: Actions,\r\n store: Store,\r\n listStateService: ListStateService<T, Error, S, Params>,\r\n @Inject(LIST_FEATURE_KEYS) featureKeys: string[],\r\n @Inject(LIST_SERVICES) services: ListService<T, S, Params>[],\r\n @Inject(LIST_NOTIFICATION_SERVICES) notificationServices: ListNotificationService<Error>[]\r\n ) {\r\n featureKeys.forEach((featureKey, index) => {\r\n const listEffects = new ListEffects(\r\n actions$,\r\n store,\r\n listStateService,\r\n featureKey,\r\n services[index],\r\n notificationServices[index]\r\n );\r\n registerEffectsService.registerEffects([listEffects]);\r\n });\r\n }\r\n\r\n static config<\r\n T extends { [key: string]: any },\r\n Error = unknown,\r\n S extends { [key: string]: any } = T,\r\n Params = Record<string, string>\r\n >(\r\n config: NgduxListStateModuleConfig<T, Error, S, Params>\r\n ): ModuleWithProviders<NgduxListStateModule<T, Error, S, Params>> {\r\n return {\r\n ngModule: NgduxListStateModule,\r\n providers: [\r\n { provide: LIST_SERVICES, multi: true, useClass: config.service },\r\n {\r\n provide: LIST_NOTIFICATION_SERVICES,\r\n multi: true,\r\n useClass: config.notificationService || NotificationServicePlaceholder\r\n }\r\n ]\r\n };\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { EntityAdapter } from '@ngrx/entity';\r\nimport { ReducerManager, createFeatureSelector } from '@ngrx/store';\r\nimport { LIST_FEATURE_KEY, ListActions, ListSelectors, ListState } from '../models/list.model';\r\nimport { createListActions } from './list-actions';\r\nimport { createListEntityAdapter, createListReducer } from './list-reducer';\r\nimport { createListSelectors } from './list-selectors';\r\n\r\n@Injectable()\r\nexport abstract class AbstractListReducerManager<\r\n T extends { [key: string]: any },\r\n E,\r\n S extends { [key: string]: any } = T,\r\n Params = Record<string, string>\r\n> {\r\n actions: ListActions<T, E, S, Params>;\r\n selectors: ListSelectors<S, E, Params>;\r\n private entityAdapter: EntityAdapter<S>;\r\n\r\n constructor(\r\n private readonly reducerManager: ReducerManager,\r\n @Inject(LIST_FEATURE_KEY) private readonly featureKey: string\r\n ) {\r\n this.actions = this.getActions();\r\n this.entityAdapter = this.getEntityAdapter();\r\n this.addReducer();\r\n this.selectors = this.getSelectors();\r\n }\r\n\r\n protected getActions() {\r\n return createListActions<T, E, S, Params>(this.featureKey);\r\n }\r\n\r\n private getEntityAdapter() {\r\n return createListEntityAdapter<S>();\r\n }\r\n\r\n protected addReducer() {\r\n const currentReducers: string[] = Object.keys(this.reducerManager.currentReducers || {});\r\n\r\n if (!currentReducers.includes(this.featureKey)) {\r\n const reducer = createListReducer<T, E, S, Params>(this.entityAdapter, this.actions);\r\n this.reducerManager.addReducer(this.featureKey, reducer);\r\n }\r\n }\r\n\r\n protected getSelectors() {\r\n const getState = createFeatureSelector<ListState<S, E, Params>>(this.featureKey);\r\n return createListSelectors(this.entityAdapter, getState);\r\n }\r\n}\r\n","import { ActionPayload } from '@ngdux/store-common';\r\nimport { select, Store } from '@ngrx/store';\r\nimport { ListActions, ListSelectors } from '../models/list.model';\r\n\r\nexport abstract class AbstractListFacade<T, E, S = T, Params = Record<string, string>> {\r\n readonly resources$ = this.store.pipe(select(this.listSelectors.getAll));\r\n readonly loadingState$ = this.store.pipe(select(this.listSelectors.getLoadingState));\r\n readonly requestState$ = this.store.pipe(select(this.listSelectors.getRequestState));\r\n readonly errors$ = this.store.pipe(select(this.listSelectors.getErrors));\r\n readonly isReady$ = this.store.pipe(select(this.listSelectors.isReady));\r\n readonly areSelectedReady$ = this.store.pipe(select(this.listSelectors.areSelectedReady));\r\n readonly currentPageData$ = this.store.pipe(select(this.listSelectors.getCurrentPageData));\r\n readonly currentPageNumber$ = this.store.pipe(select(this.listSelectors.getCurrentPageNumber));\r\n readonly filteringOptions$ = this.store.pipe(select(this.listSelectors.getFilteringOptions));\r\n readonly requestParameters$ = this.store.pipe(select(this.listSelectors.getRequestParameters));\r\n readonly lastPageNumber$ = this.store.pipe(select(this.listSelectors.getLastPageNumber));\r\n readonly pagingOptions$ = this.store.pipe(select(this.listSelectors.getPagingOptions));\r\n readonly requestOptions$ = this.store.pipe(select(this.listSelectors.getRequestOptions));\r\n readonly sortingOptions$ = this.store.pipe(select(this.listSelectors.getSortingOptions));\r\n readonly selectedItems$ = this.store.pipe(select(this.listSelectors.getSelectedItems));\r\n readonly totalCount$ = this.store.pipe(select(this.listSelectors.getTotalCount));\r\n\r\n constructor(\r\n protected readonly store: Store,\r\n private readonly listActions: ListActions<T, E, S, Params>,\r\n private readonly listSelectors: ListSelectors<S, E, Params>\r\n ) {}\r\n\r\n setPageSize(props: ActionPayload<ListActions<T, E, S, Params>['setPageSize']>): void {\r\n this.store.dispatch(this.listActions.setPageSize(props));\r\n }\r\n\r\n setFiltering(props: ActionPayload<ListActions<T, E, S, Params>['setFiltering']>): void {\r\n this.store.dispatch(this.listActions.setFiltering(props));\r\n }\r\n\r\n setSorting(props: ActionPayload<ListActions<T, E, S, Params>['setSorting']>): void {\r\n this.store.dispatch(this.listActions.setSorting(props));\r\n }\r\n\r\n setRequestParameters(props: ActionPayload<ListActions<T, E, S, Params>['setRequestParams']>) {\r\n this.store.dispatch(this.listActions.setRequestParams(props));\r\n }\r\n\r\n changeFiltering(props: ActionPayload<ListActions<T, E, S, Params>['changeFiltering']>): void {\r\n this.store.dispatch(this.listActions.changeFiltering(props));\r\n }\r\n\r\n changePagingOptions(props: ActionPayload<ListActions<T, E, S, Params>['changePagingOptions']>): void {\r\n this.store.dispatch(this.listActions.changePagingOptions(props));\r\n }\r\n\r\n changePageSize(props: ActionPayload<ListActions<T, E, S, Params>['changePageSize']>): void {\r\n this.store.dispatch(this.listActions.changePageSize(props));\r\n }\r\n\r\n changePageNumber(props: ActionPayload<ListActions<T, E, S, Params>['changePageNumber']>): void {\r\n this.store.dispatch(this.listActions.changePageNumber(props));\r\n }\r\n\r\n changeSelectedResources(props: ActionPayload<ListActions<T, E, S, Params>['changeSelectedResources']>): void {\r\n this.store.dispatch(this.listActions.changeSelectedResources(props));\r\n }\r\n\r\n changeSorting(props: ActionPayload<ListActions<T, E, S, Params>['changeSorting']>): void {\r\n this.store.dispatch(this.listActions.changeSorting(props));\r\n }\r\n\r\n changeRequestParams(props: ActionPayload<ListActions<T, E, S, Params>['changeRequestParams']>): void {\r\n this.store.dispatch(this.listActions.changeRequestParams(props));\r\n }\r\n\r\n loadPage(): void {\r\n this.store.dispatch(this.listActions.loadPage());\r\n }\r\n\r\n loadFirstPage(): void {\r\n this.store.dispatch(this.listActions.loadFirstPage());\r\n }\r\n\r\n loadNextPage(): void {\r\n this.store.dispatch(this.listActions.loadNextPage());\r\n }\r\n\r\n loadPreviousPage(): void {\r\n this.store.dispatch(this.listActions.loadPreviousPage());\r\n }\r\n\r\n patch(props: ActionPayload<ListActions<T, E, S, Params>['patch']>): void {\r\n this.store.dispatch(this.listActions.patch(props));\r\n }\r\n\r\n delete(props: ActionPayload<ListActions<T, E, S, Params>['delete']>): void {\r\n this.store.dispatch(this.listActions.delete(props));\r\n }\r\n\r\n initialize(): void {\r\n this.store.dispatch(this.listActions.initialize());\r\n }\r\n\r\n reinitialize(): void {\r\n this.store.dispatch(this.listActions.reset());\r\n }\r\n\r\n resetRequestState(): void {\r\n this.store.dispatch(this.listActions.resetRequestState());\r\n }\r\n}\r\n","import { Action, createFeatureSelector } from '@ngrx/store';\r\nimport { ListState } from '../models/list.model';\r\nimport { createListActions } from './list-actions';\r\nimport { createListEntityAdapter, createListReducer } from './list-reducer';\r\nimport { createListSelectors } from './list-selectors';\r\n\r\nexport function createListState<\r\n T extends { [key: string]: any },\r\n E,\r\n S extends { [key: string]: any } = T,\r\n Params = Record<string, string>\r\n>(featureName: string, idKey?: string) {\r\n const actions = createListActions<T, E, S, Params>(featureName);\r\n const entityAdapter = createListEntityAdapter<S>(idKey);\r\n const reducer = createListReducer<T, E, S, Params>(entityAdapter, actions);\r\n const getState = createFeatureSelector<ListState<S, E, Params>>(featureName);\r\n const selectors = createListSelectors<S, E, Params>(entityAdapter, getState);\r\n\r\n return {\r\n actions,\r\n reducer: (state: ListState<S, E, Params>, action: Action): ListState<S, E, Params> => reducer(state, action),\r\n selectors,\r\n entityAdapter\r\n };\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3","i4.ListStateService"],"mappings":"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"}
1
+ {"version":3,"file":"ngdux-list.mjs","sources":["../../../../../../../libs/ngdux/util/store/list/src/lib/models/list.model.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/state-generator/list-actions.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/state-generator/list-reducer.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/state-generator/list-selectors.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/+state/state.service.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/state-generator/abstract-list-effects.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/+state/effects.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/services/list-notification-service.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/ngdux-list-state.module.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/state-generator/abstract-list-state.service.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/state-generator/abstract-list.facade.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/state-generator/list-effects.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/state-generator/list-facade.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/state-generator/list-state.ts","../../../../../../../libs/ngdux/util/store/list/src/ngdux-list.ts"],"sourcesContent":["import { InjectionToken, Type } from '@angular/core';\r\nimport {\r\n ErrorDto,\r\n FilteringOptions,\r\n ListNotificationService,\r\n ListService,\r\n PagingOptions,\r\n RequestOptions,\r\n RequestState,\r\n SortingField\r\n} from '@ngdux/data-model-common';\r\nimport { ActionPayload, ApiRequestState, LoadingState } from '@ngdux/store-common';\r\nimport { EntityState } from '@ngrx/entity';\r\nimport { Action, ActionCreator, MemoizedSelector } from '@ngrx/store';\r\nimport { Observable } from 'rxjs';\r\n\r\nexport const LIST_FEATURE_KEY = new InjectionToken<string>('LIST_FEATURE_KEY');\r\nexport const LIST_FEATURE_KEYS = new InjectionToken<string>('LIST_FEATURE_KEYS');\r\nexport const LIST_SERVICES = new InjectionToken<string>('LIST_SERVICES');\r\nexport const LIST_NOTIFICATION_SERVICES = new InjectionToken<string>('LIST_NOTIFICATION_SERVICES');\r\n\r\nexport interface ListState<T, E = unknown, Params = Record<string, string>>\r\n extends EntityState<T>, RequestOptions<Params>, ApiRequestState<E>, LoadingState {\r\n selectedResourceIds: string[];\r\n lastPageNumber?: number;\r\n}\r\n\r\nexport interface ListSelectors<Summary, E = unknown, Params = Record<string, string>> {\r\n getAll: MemoizedSelector<object, Summary[]>;\r\n getRequestOptions: MemoizedSelector<object, RequestOptions>;\r\n isLastPage: MemoizedSelector<object, boolean>;\r\n getCurrentPageData: MemoizedSelector<object, Summary[]>;\r\n getPagingOptions: MemoizedSelector<object, PagingOptions>;\r\n getSortingOptions: MemoizedSelector<object, SortingField[]>;\r\n getFilteringOptions: MemoizedSelector<object, FilteringOptions>;\r\n getRequestParameters: MemoizedSelector<object, Params | undefined>;\r\n getCurrentPageNumber: MemoizedSelector<object, number>;\r\n getLastPageNumber: MemoizedSelector<object, number | undefined>;\r\n getLoadingState: MemoizedSelector<object, RequestState>;\r\n getSelectedResourceIds: MemoizedSelector<object, string[]>;\r\n getSelectedItems: MemoizedSelector<object, Summary[]>;\r\n getSelectionRecord: MemoizedSelector<object, Record<string, Summary>>;\r\n getRequestState: MemoizedSelector<object, RequestState>;\r\n getErrors: MemoizedSelector<object, E | undefined>;\r\n areSelectedReady: MemoizedSelector<object, boolean>;\r\n isReady: MemoizedSelector<object, boolean>;\r\n isDeleteDisabled: MemoizedSelector<object, boolean>;\r\n isCopyDisabled: MemoizedSelector<object, boolean>;\r\n getTotalCount: MemoizedSelector<object, number>;\r\n}\r\n\r\nexport interface ListActions<Entity, Error = unknown, Summary = Entity, Params = Record<string, string>> {\r\n /**\r\n * Set the page size without reloading the list\r\n */\r\n setPageSize: ActionCreator<string, (props: { pageSize: number }) => { pageSize: number } & Action<string>>;\r\n /**\r\n * Set the sorting options without reloading the list\r\n */\r\n setSorting: ActionCreator<\r\n string,\r\n (props: { sortingOptions: SortingField[] }) => { sortingOptions: SortingField[] } & Action<string>\r\n >;\r\n /**\r\n * Set the filtering options without reloading the list\r\n */\r\n setFiltering: ActionCreator<\r\n string,\r\n (props: { filteringOptions: FilteringOptions }) => { filteringOptions: FilteringOptions } & Action<string>\r\n >;\r\n /**\r\n * Set the request parameters without reloading the list\r\n */\r\n setRequestParams: ActionCreator<string, (props: { params: Params }) => { params: Params } & Action<string>>;\r\n\r\n /**\r\n * Change the paging options and reload the list\r\n */\r\n changePagingOptions: ActionCreator<\r\n string,\r\n (props: { pagingOptions: PagingOptions }) => { pagingOptions: PagingOptions } & Action<string>\r\n >;\r\n\r\n /**\r\n * Change the page number and reload the list\r\n */\r\n changePageNumber: ActionCreator<string, (props: { pageNumber: number }) => { pageNumber: number } & Action<string>>;\r\n /**\r\n * Change the page size and reload the list\r\n */\r\n changePageSize: ActionCreator<string, (props: { pageSize: number }) => { pageSize: number } & Action<string>>;\r\n /**\r\n * Change the sorting options and reload the list\r\n */\r\n changeSorting: ActionCreator<\r\n string,\r\n (props: { sortingOptions: SortingField[] }) => { sortingOptions: SortingField[] } & Action<string>\r\n >;\r\n /**\r\n * Change the filtering options and reload the list\r\n */\r\n changeFiltering: ActionCreator<\r\n string,\r\n (props: { filteringOptions: FilteringOptions }) => { filteringOptions: FilteringOptions } & Action<string>\r\n >;\r\n /**\r\n * Change the request parameters and reload the list\r\n */\r\n changeRequestParams: ActionCreator<string, (props: { params: Params }) => { params: Params } & Action<string>>;\r\n\r\n changeSelectedResources: ActionCreator<\r\n string,\r\n (props: { selectedResourceIds: string[] }) => { selectedResourceIds: string[] } & Action<string>\r\n >;\r\n loadPage: ActionCreator<string, () => Action<string>>;\r\n loadPageSuccess: ActionCreator<\r\n string,\r\n (props: {\r\n resources: Summary[];\r\n pagingOptions: PagingOptions;\r\n }) => { resources: Summary[]; pagingOptions: PagingOptions } & Action<string>\r\n >;\r\n loadPageFailure: ActionCreator<string, (props: { errors: Error }) => { errors: Error } & Action<string>>;\r\n delete: ActionCreator<string, (props: { resourceIds: string[] }) => { resourceIds: string[] } & Action<string>>;\r\n deleteSuccess: ActionCreator<\r\n string,\r\n (props: { resourceIds: string[] }) => { resourceIds: string[] } & Action<string>\r\n >;\r\n deleteFailure: ActionCreator<string, (props: { errors: Error }) => { errors: Error } & Action<string>>;\r\n patch: ActionCreator<\r\n string,\r\n (props: {\r\n resourceIds: string[];\r\n resource: Partial<Entity>;\r\n }) => { resourceIds: string[]; resource: Partial<Entity> } & Action<string>\r\n >;\r\n patchSuccess: ActionCreator<\r\n string,\r\n (props: { resources: (Entity | ErrorDto)[] }) => { resources: (Entity | ErrorDto)[] } & Action<string>\r\n >;\r\n patchFailure: ActionCreator<string, (props: { errors: Error }) => { errors: Error } & Action<string>>;\r\n loadNextPage: ActionCreator<string, () => Action<string>>;\r\n\r\n /**\r\n * Remove the current data, set the page number to 1 and deselect resources.\r\n * Keep all the rest, like filteringOptions and sortingOptions\r\n */\r\n initialize: ActionCreator<string, () => Action<string>>;\r\n /**\r\n * Reset to the initial state\r\n */\r\n reset: ActionCreator<string, () => Action<string>>;\r\n loadPreviousPage: ActionCreator<string, () => Action<string>>;\r\n loadFirstPage: ActionCreator<string, () => Action<string>>;\r\n /**\r\n * Reset the request state to idle\r\n */\r\n resetRequestState: ActionCreator<string, () => Action<string>>;\r\n}\r\n\r\nexport interface NgduxListStateModuleConfig<\r\n T extends { [key: string]: any },\r\n E,\r\n S = T,\r\n Params = Record<string, string>\r\n> {\r\n service: Type<ListService<T, S, Params>>;\r\n notificationService?: Type<ListNotificationService<E>>;\r\n}\r\n\r\nexport interface ListFacade<Data, Error = unknown, Summary = Data, Params = Record<string, string>> {\r\n resources$: Observable<Summary[]>;\r\n loadingState$: Observable<RequestState>;\r\n requestState$: Observable<RequestState>;\r\n errors$: Observable<Error | undefined>;\r\n isReady$: Observable<boolean>;\r\n areSelectedReady$: Observable<boolean>;\r\n currentPageData$: Observable<Summary[]>;\r\n currentPageNumber$: Observable<number>;\r\n filteringOptions$: Observable<FilteringOptions>;\r\n requestParameters$: Observable<Params | undefined>;\r\n lastPageNumber$: Observable<number | undefined>;\r\n pagingOptions$: Observable<PagingOptions>;\r\n requestOptions$: Observable<RequestOptions<Record<string, string>>>;\r\n sortingOptions$: Observable<SortingField[]>;\r\n selectedItems$: Observable<Summary[]>;\r\n totalCount$: Observable<number>;\r\n\r\n setPageSize(props: ActionPayload<ListActions<Data, Error, Summary, Params>['setPageSize']>): void;\r\n setFiltering(props: ActionPayload<ListActions<Data, Error, Summary, Params>['setFiltering']>): void;\r\n setSorting(props: ActionPayload<ListActions<Data, Error, Summary, Params>['setSorting']>): void;\r\n setRequestParameters(props: ActionPayload<ListActions<Data, Error, Summary, Params>['setRequestParams']>): void;\r\n changeFiltering(props: ActionPayload<ListActions<Data, Error, Summary, Params>['changeFiltering']>): void;\r\n changePagingOptions(props: ActionPayload<ListActions<Data, Error, Summary, Params>['changePagingOptions']>): void;\r\n changePageSize(props: ActionPayload<ListActions<Data, Error, Summary, Params>['changePageSize']>): void;\r\n changePageNumber(props: ActionPayload<ListActions<Data, Error, Summary, Params>['changePageNumber']>): void;\r\n changeSelectedResources(\r\n props: ActionPayload<ListActions<Data, Error, Summary, Params>['changeSelectedResources']>\r\n ): void;\r\n changeSorting(props: ActionPayload<ListActions<Data, Error, Summary, Params>['changeSorting']>): void;\r\n changeRequestParams(props: ActionPayload<ListActions<Data, Error, Summary, Params>['changeRequestParams']>): void;\r\n loadPage(): void;\r\n loadFirstPage(): void;\r\n loadNextPage(): void;\r\n loadPreviousPage(): void;\r\n patch(props: ActionPayload<ListActions<Data, Error, Summary, Params>['patch']>): void;\r\n delete(props: ActionPayload<ListActions<Data, Error, Summary, Params>['delete']>): void;\r\n initialize(): void;\r\n reinitialize(): void;\r\n resetRequestState(): void;\r\n}\r\n","import { ErrorDto, FilteringOptions, PagingOptions, SortingField } from '@ngdux/data-model-common';\r\nimport { createAction, props } from '@ngrx/store';\r\nimport { ListActions } from '../models/list.model';\r\n\r\nexport function createListActions<T, E, S = T, Params = Record<string, string>>(\r\n featureName: string\r\n): ListActions<T, E, S, Params> {\r\n const resetRequestState = createAction(`[${featureName} API] Reset ${featureName} Request State`);\r\n const initialize = createAction(`[${featureName} API] Initialize ${featureName}`);\r\n const reset = createAction(`[Organization ${featureName} API] Reset ${featureName}`);\r\n\r\n const loadNextPage = createAction(`[${featureName} API] Load Next ${featureName} Page`);\r\n const loadPreviousPage = createAction(`[${featureName} API] Load Previous ${featureName} Page`);\r\n const loadFirstPage = createAction(`[${featureName} API] Load First ${featureName} Page`);\r\n\r\n const setPageSize = createAction(`[${featureName} API] Set ${featureName} Page Size`, props<{ pageSize: number }>());\r\n const setSorting = createAction(\r\n `[${featureName} API] Set ${featureName} Sorting`,\r\n props<{ sortingOptions: SortingField[] }>()\r\n );\r\n const setFiltering = createAction(\r\n `[${featureName} API] Set ${featureName} Filtering`,\r\n props<{ filteringOptions: FilteringOptions }>()\r\n );\r\n const setRequestParams = createAction(\r\n `[${featureName} API] Set ${featureName} Request Params`,\r\n props<{ params: Params }>()\r\n );\r\n\r\n const changePageSize = createAction(\r\n `[${featureName} API] Change ${featureName} Page Size`,\r\n props<{ pageSize: number }>()\r\n );\r\n\r\n const changePageNumber = createAction(\r\n `[${featureName} API] Change ${featureName} Page Number`,\r\n props<{ pageNumber: number }>()\r\n );\r\n\r\n const changePagingOptions = createAction(\r\n `[${featureName} API] Change ${featureName} Page Options`,\r\n props<{ pagingOptions: PagingOptions }>()\r\n );\r\n const changeSorting = createAction(\r\n `[${featureName} API] Change ${featureName} Sorting`,\r\n props<{ sortingOptions: SortingField[] }>()\r\n );\r\n const changeFiltering = createAction(\r\n `[${featureName} API] Change ${featureName} Filtering`,\r\n props<{ filteringOptions: FilteringOptions }>()\r\n );\r\n const changeSelectedResources = createAction(\r\n `[${featureName} API] Change Selected Resources ${featureName}`,\r\n props<{ selectedResourceIds: string[] }>()\r\n );\r\n const changeRequestParams = createAction(\r\n `[${featureName} API] Change ${featureName} Request Params`,\r\n props<{ params: Params }>()\r\n );\r\n\r\n const loadPage = createAction(`[${featureName} API] Load ${featureName} Page`);\r\n const loadPageSuccess = createAction(\r\n `[${featureName} API] Load ${featureName} Page Success`,\r\n props<{ resources: S[]; pagingOptions: PagingOptions }>()\r\n );\r\n const loadPageFailure = createAction(`[${featureName} API] Load ${featureName} Page Failure`, props<{ errors: E }>());\r\n\r\n const deleteAction = createAction(`[${featureName} API] Delete ${featureName}`, props<{ resourceIds: string[] }>());\r\n const deleteSuccess = createAction(\r\n `[${featureName} API] Delete ${featureName} Success`,\r\n props<{ resourceIds: string[] }>()\r\n );\r\n const deleteFailure = createAction(`[${featureName} API] Delete ${featureName} Failure`, props<{ errors: E }>());\r\n\r\n const patch = createAction(\r\n `[${featureName} API] Patch ${featureName}`,\r\n props<{ resourceIds: string[]; resource: Partial<T> }>()\r\n );\r\n const patchSuccess = createAction(\r\n `[${featureName} API] Patch ${featureName} Success`,\r\n props<{ resources: (T | ErrorDto)[] }>()\r\n );\r\n const patchFailure = createAction(`[${featureName} API] Patch ${featureName} Failure`, props<{ errors: E }>());\r\n\r\n return {\r\n initialize,\r\n reset,\r\n setPageSize,\r\n setSorting,\r\n setFiltering,\r\n setRequestParams,\r\n changePageSize,\r\n changePageNumber,\r\n changePagingOptions,\r\n changeSorting,\r\n changeFiltering,\r\n changeRequestParams,\r\n loadPreviousPage,\r\n loadNextPage,\r\n loadFirstPage,\r\n changeSelectedResources,\r\n loadPage,\r\n loadPageSuccess,\r\n loadPageFailure,\r\n delete: deleteAction,\r\n deleteSuccess,\r\n deleteFailure,\r\n patch,\r\n patchSuccess,\r\n patchFailure,\r\n resetRequestState\r\n };\r\n}\r\n","import { DEFAULT_PAGE, getDefaultRequestOptions, RequestState } from '@ngdux/data-model-common';\r\nimport {\r\n createLoadingStateActionHandlers,\r\n createRequestStateActionHandlers,\r\n getLastPageNumber\r\n} from '@ngdux/store-common';\r\nimport { createEntityAdapter, EntityAdapter } from '@ngrx/entity';\r\nimport { ActionCreator, ActionReducer, createReducer, on, ReducerTypes } from '@ngrx/store';\r\n\r\nimport { ListActions, ListState } from '../models/list.model';\r\n\r\nexport function createListEntityAdapter<T extends { [key: string]: any }>(idKey = 'id'): EntityAdapter<T> {\r\n return createEntityAdapter({\r\n selectId: resource => resource[idKey]\r\n });\r\n}\r\n\r\nexport function createListReducer<T, E, S = T, Params = Record<string, string>>(\r\n entityAdapter: EntityAdapter<S>,\r\n actions: ListActions<T, E, S, Params>,\r\n actionHandlers?: ReducerTypes<ListState<S, E, Params>, ActionCreator[]>[],\r\n initialListState?: { [key: string]: unknown }\r\n): ActionReducer<ListState<S, E, Params>> {\r\n const initialState: ListState<S, E, Params> = {\r\n ...createInitialListState<S, E, Params>(entityAdapter),\r\n ...initialListState\r\n };\r\n return createReducer<ListState<S, E, Params>>(\r\n initialState,\r\n ...createListActionHandlers<T, E, S, Params>(initialState, entityAdapter, actions),\r\n ...(actionHandlers || [])\r\n );\r\n}\r\n\r\nfunction createInitialListState<T, E, Params = Record<string, string>>(\r\n entityAdapter: EntityAdapter<T>\r\n): ListState<T, E, Params> {\r\n return entityAdapter.getInitialState({\r\n ...getDefaultRequestOptions<Params>(),\r\n lastPageNumber: undefined,\r\n selectedResourceIds: [],\r\n loadingState: RequestState.IDLE,\r\n requestState: RequestState.IDLE,\r\n errors: undefined\r\n });\r\n}\r\n\r\nfunction createListActionHandlers<T, E, S, Params>(\r\n initialListState: ListState<S, E, Params>,\r\n entityAdapter: EntityAdapter<S>,\r\n actions: ListActions<T, E, S, Params>\r\n): ReducerTypes<ListState<S, E, Params>, ActionCreator[]>[] {\r\n return [\r\n on(actions.reset, () => initialListState),\r\n on(actions.initialize, (state: ListState<S, E, Params>) =>\r\n entityAdapter.removeAll({\r\n ...state,\r\n selectedResourceIds: [],\r\n pagingOptions: {\r\n ...state.pagingOptions,\r\n page: DEFAULT_PAGE\r\n },\r\n requestState: RequestState.IDLE\r\n })\r\n ),\r\n on(actions.changePageSize, actions.setPageSize, (state: ListState<S, E, Params>, { pageSize }) => ({\r\n ...state,\r\n pagingOptions: { page: DEFAULT_PAGE, pageSize },\r\n lastPageNumber: undefined\r\n })),\r\n on(actions.changePageNumber, (state: ListState<S, E, Params>, { pageNumber }) => ({\r\n ...state,\r\n pagingOptions: { ...state.pagingOptions, page: pageNumber }\r\n })),\r\n on(actions.changePagingOptions, (state: ListState<S, E, Params>, { pagingOptions }) => ({\r\n ...state,\r\n pagingOptions\r\n })),\r\n on(actions.changeSorting, actions.setSorting, (state: ListState<S, E, Params>, { sortingOptions }) => ({\r\n ...state,\r\n sortingOptions,\r\n pagingOptions: { ...state.pagingOptions, page: DEFAULT_PAGE }\r\n })),\r\n on(actions.changeFiltering, actions.setFiltering, (state: ListState<S, E, Params>, { filteringOptions }) => ({\r\n ...state,\r\n filteringOptions,\r\n pagingOptions: { ...state.pagingOptions, page: DEFAULT_PAGE },\r\n lastPageNumber: undefined\r\n })),\r\n on(\r\n actions.changeRequestParams,\r\n actions.setRequestParams,\r\n (state: ListState<S, E, Params>, { params }): ListState<S, E, Params> => ({\r\n ...state,\r\n requestParameters: params,\r\n pagingOptions: { ...state.pagingOptions, page: DEFAULT_PAGE }\r\n })\r\n ),\r\n on(actions.changeSelectedResources, (state: ListState<S, E, Params>, { selectedResourceIds }) => ({\r\n ...state,\r\n selectedResourceIds\r\n })),\r\n on(actions.loadFirstPage, (state: ListState<S, E, Params>) => ({\r\n ...state,\r\n pagingOptions: { ...state.pagingOptions, page: 1 }\r\n })),\r\n on(actions.loadPageSuccess, (state: ListState<S, E, Params>, { resources, pagingOptions }) => {\r\n const lastPageNumber = getLastPageNumber(resources, pagingOptions) || state.lastPageNumber;\r\n if (lastPageNumber && pagingOptions.page > lastPageNumber) {\r\n return {\r\n ...state,\r\n pagingOptions: {\r\n ...state.pagingOptions,\r\n page: lastPageNumber\r\n },\r\n lastPageNumber,\r\n selectedResourceIds: []\r\n };\r\n }\r\n\r\n return entityAdapter.setAll(resources, {\r\n ...state,\r\n lastPageNumber,\r\n selectedResourceIds: []\r\n });\r\n }),\r\n on(actions.deleteSuccess, (state: ListState<S, E, Params>) => ({\r\n ...state,\r\n selectedResourceIds: [] as string[]\r\n })),\r\n ...createLoadingStateActionHandlers<ListState<S, E, Params>>(\r\n actions.loadPage,\r\n actions.loadPageSuccess,\r\n actions.loadPageFailure\r\n ),\r\n ...createRequestStateActionHandlers<ListState<S, E, Params>, E>(\r\n undefined,\r\n actions.delete,\r\n actions.deleteSuccess,\r\n actions.deleteFailure\r\n ),\r\n ...createRequestStateActionHandlers<ListState<S, E, Params>, E>(\r\n actions.resetRequestState,\r\n actions.patch,\r\n actions.patchSuccess,\r\n actions.patchFailure\r\n )\r\n ];\r\n}\r\n","/* eslint-disable @typescript-eslint/ban-types */\r\nimport { RequestOptions, RequestState } from '@ngdux/data-model-common';\r\nimport { EntityAdapter } from '@ngrx/entity';\r\nimport { DefaultProjectorFn, MemoizedSelector, createSelector } from '@ngrx/store';\r\nimport { ListSelectors, ListState } from '../models/list.model';\r\n\r\nexport function createListSelectors<T, E, Params = Record<string, string>>(\r\n entityAdapter: EntityAdapter<T>,\r\n getListState: MemoizedSelector<object, ListState<T, E, Params>, DefaultProjectorFn<ListState<T, E, Params>>>\r\n): ListSelectors<T, E, Params> {\r\n const getAll = createSelector(getListState, entityAdapter.getSelectors().selectAll);\r\n\r\n const getPagingOptions = createSelector(getListState, state => state.pagingOptions);\r\n\r\n const getRequestOptions = createSelector(\r\n getListState,\r\n (state): RequestOptions => ({\r\n pagingOptions: state.pagingOptions,\r\n sortingOptions: state.sortingOptions,\r\n filteringOptions: state.filteringOptions\r\n })\r\n );\r\n\r\n const getLastPageNumber = createSelector(getListState, state => state.lastPageNumber);\r\n\r\n const isLastPage = createSelector(getPagingOptions, getLastPageNumber, ({ page }, lastPageNumber) => {\r\n return lastPageNumber ? lastPageNumber <= page : false;\r\n });\r\n\r\n const getCurrentPageData = createSelector(getAll, resources => {\r\n return resources;\r\n });\r\n\r\n const getSortingOptions = createSelector(getListState, state => state.sortingOptions);\r\n\r\n const getRequestParameters = createSelector(getListState, state => state.requestParameters);\r\n\r\n const getFilteringOptions = createSelector(getListState, state => state.filteringOptions);\r\n\r\n const getCurrentPageNumber = createSelector(getPagingOptions, options => options?.page);\r\n\r\n const getSelectedResourceIds = createSelector(getListState, state => state.selectedResourceIds);\r\n\r\n const getLoadingState = createSelector(getListState, state => state.loadingState);\r\n\r\n const getSelectedItems = createSelector(\r\n getSelectedResourceIds,\r\n createSelector(getListState, entityAdapter.getSelectors().selectEntities),\r\n (selectedResourceIds, resources): T[] =>\r\n selectedResourceIds.reduce((acc, selectedResourceId): T[] => {\r\n const resource = resources[selectedResourceId];\r\n if (resource) {\r\n acc.push(resource);\r\n }\r\n return acc;\r\n }, [] as T[])\r\n );\r\n\r\n const getSelectionRecord = createSelector(\r\n getSelectedResourceIds,\r\n createSelector(getListState, entityAdapter.getSelectors().selectEntities),\r\n (selectedResourceIds, resources): Record<string, T> =>\r\n selectedResourceIds.reduce((selected, selectedResourceId) => {\r\n const resource = resources[selectedResourceId];\r\n if (resource) {\r\n selected[selectedResourceId] = resource;\r\n }\r\n return selected;\r\n }, {} as Record<string, T>)\r\n );\r\n\r\n const getRequestState = createSelector(getListState, state => state.requestState);\r\n\r\n const getErrors = createSelector(getListState, state => state.errors);\r\n\r\n const isReady = createSelector(\r\n getAll,\r\n getLoadingState,\r\n (users, loadingState) => !!users && loadingState === RequestState.SUCCESS\r\n );\r\n\r\n const areSelectedReady = createSelector(\r\n getSelectedResourceIds,\r\n getSelectionRecord,\r\n getLoadingState,\r\n (selectedResourceIds, resources, loadingState) => {\r\n return selectedResourceIds.every(resourceId => !!resources[resourceId]) && loadingState === RequestState.SUCCESS;\r\n }\r\n );\r\n\r\n const isDeleteDisabled = createSelector(getSelectedResourceIds, selectedResourceIds => !selectedResourceIds.length);\r\n\r\n const isCopyDisabled = createSelector(\r\n getSelectedResourceIds,\r\n selectedResourceIds => selectedResourceIds.length !== 1\r\n );\r\n\r\n const getTotalCount = createSelector(\r\n getPagingOptions,\r\n isLastPage,\r\n getCurrentPageData,\r\n (pagingOptions, isLastPage, currentPageData) => {\r\n if (!pagingOptions) {\r\n return 0;\r\n }\r\n\r\n if (isLastPage) {\r\n return (pagingOptions.page - 1) * pagingOptions.pageSize + currentPageData.length;\r\n }\r\n return (pagingOptions.page + 1) * pagingOptions.pageSize;\r\n }\r\n );\r\n\r\n return {\r\n getAll,\r\n getRequestOptions,\r\n isLastPage,\r\n getCurrentPageData,\r\n getPagingOptions,\r\n getSortingOptions,\r\n getFilteringOptions,\r\n getRequestParameters,\r\n getCurrentPageNumber,\r\n getLastPageNumber,\r\n getLoadingState,\r\n getSelectedResourceIds,\r\n getSelectedItems,\r\n getSelectionRecord,\r\n getRequestState,\r\n getErrors,\r\n areSelectedReady,\r\n isReady,\r\n isDeleteDisabled,\r\n isCopyDisabled,\r\n getTotalCount\r\n };\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { EntityAdapter } from '@ngrx/entity';\r\nimport { ReducerManager, createFeatureSelector } from '@ngrx/store';\r\nimport { LIST_FEATURE_KEYS, ListActions, ListSelectors, ListState } from '../models/list.model';\r\nimport { createListActions } from '../state-generator/list-actions';\r\nimport { createListEntityAdapter, createListReducer } from '../state-generator/list-reducer';\r\nimport { createListSelectors } from '../state-generator/list-selectors';\r\n\r\n@Injectable()\r\nexport class ListStateService<\r\n T extends { [key: string]: any },\r\n Error = unknown,\r\n S extends { [key: string]: any } = T,\r\n Params = Record<string, string>\r\n> {\r\n protected actions: Record<string, ListActions<T, Error, S, Params>> = {};\r\n protected selectors: Record<string, ListSelectors<S, Error, Params>> = {};\r\n private entityAdapter: EntityAdapter<S>;\r\n\r\n constructor(private readonly reducerManager: ReducerManager, @Inject(LIST_FEATURE_KEYS) featureKeys: string[]) {\r\n this.entityAdapter = this.getEntityAdapter();\r\n featureKeys.forEach(featureKey => {\r\n if (!this.actions[featureKey]) {\r\n this.actions[featureKey] = this.getActions(featureKey);\r\n this.addReducer(featureKey, this.actions[featureKey]);\r\n this.selectors[featureKey] = this.getSelectors(featureKey);\r\n }\r\n });\r\n }\r\n\r\n protected getActions(featureKey: string) {\r\n return createListActions<T, Error, S, Params>(featureKey);\r\n }\r\n\r\n private getEntityAdapter() {\r\n return createListEntityAdapter<S>();\r\n }\r\n\r\n protected addReducer(featureKey: string, actions: ListActions<T, Error, S, Params>) {\r\n const currentReducers: string[] = Object.keys(this.reducerManager.currentReducers || {});\r\n\r\n if (!currentReducers.includes(featureKey)) {\r\n const reducer = createListReducer<T, Error, S, Params>(this.entityAdapter, actions);\r\n this.reducerManager.addReducer(featureKey, reducer);\r\n }\r\n }\r\n\r\n protected getSelectors(featureKey: string) {\r\n const getState = createFeatureSelector<ListState<S, Error, Params>>(featureKey);\r\n return createListSelectors(this.entityAdapter, getState);\r\n }\r\n\r\n getFeatureActions(featureKey: string) {\r\n return this.actions[featureKey];\r\n }\r\n\r\n getFeatureSelectors(featureKey: string) {\r\n return this.selectors[featureKey];\r\n }\r\n}\r\n","import { ListNotificationService, ListService } from '@ngdux/data-model-common';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport { Store, select } from '@ngrx/store';\r\nimport { of } from 'rxjs';\r\nimport { catchError, exhaustMap, filter, map, switchMap, tap, withLatestFrom } from 'rxjs/operators';\r\n\r\nimport { ListActions, ListSelectors } from '../models/list.model';\r\n\r\n/**\r\n * @deprecated This class is deprecated and will be removed in a future release. Please use `createListEffects` instead.\r\n */\r\nexport abstract class AbstractListEffects<T, E = unknown, S = T, Params = Record<string, string>> {\r\n reload$ = createEffect(() =>\r\n this.actions$.pipe(\r\n ofType(\r\n this.listActions.changePageSize,\r\n this.listActions.changeSorting,\r\n this.listActions.changeFiltering,\r\n this.listActions.changePagingOptions,\r\n this.listActions.changeRequestParams,\r\n this.listActions.initialize,\r\n this.listActions.reset,\r\n this.listActions.changePageNumber,\r\n this.listActions.patchSuccess,\r\n this.listActions.deleteSuccess\r\n ),\r\n map(() => this.listActions.loadPage())\r\n )\r\n );\r\n\r\n loadFirstPage$ = createEffect(() =>\r\n this.actions$.pipe(\r\n ofType(this.listActions.loadFirstPage),\r\n map(() => this.listActions.changePageNumber({ pageNumber: 1 }))\r\n )\r\n );\r\n\r\n loadPreviousPage$ = createEffect(() =>\r\n this.actions$.pipe(\r\n ofType(this.listActions.loadPreviousPage),\r\n withLatestFrom(this.store.pipe(select(this.listSelectors.getCurrentPageNumber))),\r\n filter(([, currentPageNumber]) => currentPageNumber > 1),\r\n map(([, currentPageNumber]) => this.listActions.changePageNumber({ pageNumber: currentPageNumber - 1 }))\r\n )\r\n );\r\n\r\n loadNextPage$ = createEffect(() =>\r\n this.actions$.pipe(\r\n ofType(this.listActions.loadNextPage),\r\n withLatestFrom(\r\n this.store.pipe(select(this.listSelectors.isLastPage)),\r\n this.store.pipe(select(this.listSelectors.getCurrentPageNumber))\r\n ),\r\n filter(([, isLastPage]) => !isLastPage),\r\n map(([, , currentPageNumber]) => this.listActions.changePageNumber({ pageNumber: currentPageNumber + 1 }))\r\n )\r\n );\r\n\r\n loadPage$ = createEffect(() =>\r\n this.actions$.pipe(\r\n ofType(this.listActions.loadPage),\r\n withLatestFrom(\r\n this.store.pipe(select(this.listSelectors.getPagingOptions)),\r\n this.store.pipe(select(this.listSelectors.getSortingOptions)),\r\n this.store.pipe(select(this.listSelectors.getFilteringOptions)),\r\n this.store.pipe(select(this.listSelectors.getRequestParameters))\r\n ),\r\n switchMap(([, pagingOptions, sortingOptions, filteringOptions, requestParameters]) => {\r\n return this.service\r\n .loadResources({\r\n pagingOptions,\r\n sortingOptions,\r\n filteringOptions,\r\n requestParameters\r\n })\r\n .pipe(\r\n map(resources =>\r\n this.listActions.loadPageSuccess({\r\n resources,\r\n pagingOptions\r\n })\r\n ),\r\n catchError((errors: E) => of(this.listActions.loadPageFailure({ errors })))\r\n );\r\n })\r\n )\r\n );\r\n\r\n patch$ = createEffect(() =>\r\n this.actions$.pipe(\r\n ofType(this.listActions.patch),\r\n exhaustMap(action => {\r\n if (!this.service.patchResources) {\r\n throw new Error('patchResources not implement in the ListService');\r\n }\r\n\r\n return this.service.patchResources(action.resourceIds, action.resource).pipe(\r\n map(resources => this.listActions.patchSuccess({ resources })),\r\n catchError((errors: E) => of(this.listActions.patchFailure({ errors })))\r\n );\r\n })\r\n )\r\n );\r\n\r\n delete$ = createEffect(() =>\r\n this.actions$.pipe(\r\n ofType(this.listActions.delete),\r\n exhaustMap(({ resourceIds }) => {\r\n if (!this.service.deleteResources) {\r\n throw new Error('deleteResources not implement in the ListService');\r\n }\r\n\r\n return this.service.deleteResources(resourceIds).pipe(\r\n map(() => this.listActions.deleteSuccess({ resourceIds })),\r\n catchError((errors: E) => of(this.listActions.deleteFailure({ errors })))\r\n );\r\n })\r\n )\r\n );\r\n\r\n deleteSuccess$ = createEffect(\r\n () =>\r\n this.actions$.pipe(\r\n ofType(this.listActions.deleteSuccess),\r\n tap(({ resourceIds }) => {\r\n this.notificationService?.onListDelete(resourceIds);\r\n })\r\n ),\r\n { dispatch: false }\r\n );\r\n\r\n errorsHandler$ = createEffect(\r\n () =>\r\n this.actions$.pipe(\r\n ofType(this.listActions.loadPageFailure, this.listActions.deleteFailure, this.listActions.patchFailure),\r\n tap(({ errors }) => {\r\n this.notificationService?.onListErrors(errors);\r\n })\r\n ),\r\n { dispatch: false }\r\n );\r\n\r\n protected constructor(\r\n protected readonly actions$: Actions,\r\n protected readonly store: Store,\r\n protected readonly service: ListService<T, S, Params>,\r\n protected readonly listActions: ListActions<T, E, S, Params>,\r\n protected readonly listSelectors: ListSelectors<S, E, Params>,\r\n protected readonly notificationService?: ListNotificationService<E>\r\n ) {}\r\n}\r\n","import { Optional } from '@angular/core';\r\nimport { ListNotificationService, ListService } from '@ngdux/data-model-common';\r\nimport { Actions, OnIdentifyEffects } from '@ngrx/effects';\r\nimport { Store } from '@ngrx/store';\r\nimport { AbstractListEffects } from '../state-generator/abstract-list-effects';\r\nimport { ListStateService } from './state.service';\r\n\r\nexport class ListEffects<\r\n T extends { [key: string]: any },\r\n Error = unknown,\r\n S extends { [key: string]: any } = T,\r\n Params = Record<string, string>\r\n >\r\n extends AbstractListEffects<T, Error, S, Params>\r\n implements OnIdentifyEffects\r\n{\r\n constructor(\r\n actions$: Actions,\r\n store: Store,\r\n listStateService: ListStateService<T, Error, S, Params>,\r\n private readonly featureKey: string,\r\n service: ListService<T, S, Params>,\r\n @Optional() notificationService?: ListNotificationService<Error>\r\n ) {\r\n super(\r\n actions$,\r\n store,\r\n service,\r\n listStateService.getFeatureActions(featureKey),\r\n listStateService.getFeatureSelectors(featureKey),\r\n notificationService\r\n );\r\n }\r\n\r\n ngrxOnIdentifyEffects() {\r\n return this.featureKey;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ListNotificationService } from '@ngdux/data-model-common';\r\nimport { Observable, of } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class NotificationServicePlaceholder<Error> implements ListNotificationService<Error> {\r\n onListErrors(errors: Error): void {\r\n console.error('ERROR', errors);\r\n }\r\n\r\n onListDelete(ids: string[]): void {\r\n console.log(`Resources ${ids.join(', ')} have been deleted.`);\r\n }\r\n\r\n openConfirmationDialog(data: { message: string; title: string }): Observable<boolean> {\r\n console.log(data.title, data.message);\r\n\r\n return of(true);\r\n }\r\n}\r\n","import { Inject, ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { ListNotificationService, ListService } from '@ngdux/data-model-common';\r\nimport { RegisterEffectsService } from '@ngdux/store-common';\r\nimport { Actions } from '@ngrx/effects';\r\nimport { Store } from '@ngrx/store';\r\nimport { ListEffects } from './+state/effects';\r\nimport { ListStateService } from './+state/state.service';\r\nimport {\r\n LIST_FEATURE_KEYS,\r\n LIST_NOTIFICATION_SERVICES,\r\n LIST_SERVICES,\r\n NgduxListStateModuleConfig\r\n} from './models/list.model';\r\nimport { NotificationServicePlaceholder } from './services/list-notification-service';\r\n\r\n/**\r\n * @deprecated This NgModule is deprecated and will be removed in a future release. Use `provideListState` and `createListState` instead to set up your list state in a more modular way.\r\n */\r\n@NgModule({\r\n providers: [ListStateService]\r\n})\r\nexport class NgduxListStateModule<\r\n T extends { [key: string]: any },\r\n Error = unknown,\r\n S extends { [key: string]: any } = T,\r\n Params = Record<string, string>\r\n> {\r\n constructor(\r\n registerEffectsService: RegisterEffectsService,\r\n actions$: Actions,\r\n store: Store,\r\n listStateService: ListStateService<T, Error, S, Params>,\r\n @Inject(LIST_FEATURE_KEYS) featureKeys: string[],\r\n @Inject(LIST_SERVICES) services: ListService<T, S, Params>[],\r\n @Inject(LIST_NOTIFICATION_SERVICES) notificationServices: ListNotificationService<Error>[]\r\n ) {\r\n featureKeys.forEach((featureKey, index) => {\r\n const listEffects = new ListEffects(\r\n actions$,\r\n store,\r\n listStateService,\r\n featureKey,\r\n services[index],\r\n notificationServices[index]\r\n );\r\n registerEffectsService.registerEffects([listEffects]);\r\n });\r\n }\r\n\r\n static config<\r\n T extends { [key: string]: any },\r\n Error = unknown,\r\n S extends { [key: string]: any } = T,\r\n Params = Record<string, string>\r\n >(\r\n config: NgduxListStateModuleConfig<T, Error, S, Params>\r\n ): ModuleWithProviders<NgduxListStateModule<T, Error, S, Params>> {\r\n return {\r\n ngModule: NgduxListStateModule,\r\n providers: [\r\n { provide: LIST_SERVICES, multi: true, useClass: config.service },\r\n {\r\n provide: LIST_NOTIFICATION_SERVICES,\r\n multi: true,\r\n useClass: config.notificationService || NotificationServicePlaceholder\r\n }\r\n ]\r\n };\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { EntityAdapter } from '@ngrx/entity';\r\nimport { ReducerManager, createFeatureSelector } from '@ngrx/store';\r\nimport { LIST_FEATURE_KEY, ListActions, ListSelectors, ListState } from '../models/list.model';\r\nimport { createListActions } from './list-actions';\r\nimport { createListEntityAdapter, createListReducer } from './list-reducer';\r\nimport { createListSelectors } from './list-selectors';\r\n\r\n/**\r\n * @deprecated This class is deprecated and will be removed in a future release.\r\n */\r\n@Injectable()\r\nexport abstract class AbstractListReducerManager<\r\n T extends { [key: string]: any },\r\n E,\r\n S extends { [key: string]: any } = T,\r\n Params = Record<string, string>\r\n> {\r\n actions: ListActions<T, E, S, Params>;\r\n selectors: ListSelectors<S, E, Params>;\r\n private entityAdapter: EntityAdapter<S>;\r\n\r\n constructor(\r\n private readonly reducerManager: ReducerManager,\r\n @Inject(LIST_FEATURE_KEY) private readonly featureKey: string\r\n ) {\r\n this.actions = this.getActions();\r\n this.entityAdapter = this.getEntityAdapter();\r\n this.addReducer();\r\n this.selectors = this.getSelectors();\r\n }\r\n\r\n protected getActions() {\r\n return createListActions<T, E, S, Params>(this.featureKey);\r\n }\r\n\r\n private getEntityAdapter() {\r\n return createListEntityAdapter<S>();\r\n }\r\n\r\n protected addReducer() {\r\n const currentReducers: string[] = Object.keys(this.reducerManager.currentReducers || {});\r\n\r\n if (!currentReducers.includes(this.featureKey)) {\r\n const reducer = createListReducer<T, E, S, Params>(this.entityAdapter, this.actions);\r\n this.reducerManager.addReducer(this.featureKey, reducer);\r\n }\r\n }\r\n\r\n protected getSelectors() {\r\n const getState = createFeatureSelector<ListState<S, E, Params>>(this.featureKey);\r\n return createListSelectors(this.entityAdapter, getState);\r\n }\r\n}\r\n","import { ActionPayload } from '@ngdux/store-common';\r\nimport { select, Store } from '@ngrx/store';\r\nimport { ListActions, ListSelectors } from '../models/list.model';\r\n\r\n/**\r\n * @deprecated This class is deprecated and will be removed in a future release. Please use `provideListFacade` or `createListFacade` instead.\r\n */\r\nexport abstract class AbstractListFacade<T, E, S = T, Params = Record<string, string>> {\r\n readonly resources$ = this.store.pipe(select(this.listSelectors.getAll));\r\n readonly loadingState$ = this.store.pipe(select(this.listSelectors.getLoadingState));\r\n readonly requestState$ = this.store.pipe(select(this.listSelectors.getRequestState));\r\n readonly errors$ = this.store.pipe(select(this.listSelectors.getErrors));\r\n readonly isReady$ = this.store.pipe(select(this.listSelectors.isReady));\r\n readonly areSelectedReady$ = this.store.pipe(select(this.listSelectors.areSelectedReady));\r\n readonly currentPageData$ = this.store.pipe(select(this.listSelectors.getCurrentPageData));\r\n readonly currentPageNumber$ = this.store.pipe(select(this.listSelectors.getCurrentPageNumber));\r\n readonly filteringOptions$ = this.store.pipe(select(this.listSelectors.getFilteringOptions));\r\n readonly requestParameters$ = this.store.pipe(select(this.listSelectors.getRequestParameters));\r\n readonly lastPageNumber$ = this.store.pipe(select(this.listSelectors.getLastPageNumber));\r\n readonly pagingOptions$ = this.store.pipe(select(this.listSelectors.getPagingOptions));\r\n readonly requestOptions$ = this.store.pipe(select(this.listSelectors.getRequestOptions));\r\n readonly sortingOptions$ = this.store.pipe(select(this.listSelectors.getSortingOptions));\r\n readonly selectedItems$ = this.store.pipe(select(this.listSelectors.getSelectedItems));\r\n readonly totalCount$ = this.store.pipe(select(this.listSelectors.getTotalCount));\r\n\r\n constructor(\r\n protected readonly store: Store,\r\n private readonly listActions: ListActions<T, E, S, Params>,\r\n private readonly listSelectors: ListSelectors<S, E, Params>\r\n ) {}\r\n\r\n setPageSize(props: ActionPayload<ListActions<T, E, S, Params>['setPageSize']>): void {\r\n this.store.dispatch(this.listActions.setPageSize(props));\r\n }\r\n\r\n setFiltering(props: ActionPayload<ListActions<T, E, S, Params>['setFiltering']>): void {\r\n this.store.dispatch(this.listActions.setFiltering(props));\r\n }\r\n\r\n setSorting(props: ActionPayload<ListActions<T, E, S, Params>['setSorting']>): void {\r\n this.store.dispatch(this.listActions.setSorting(props));\r\n }\r\n\r\n setRequestParameters(props: ActionPayload<ListActions<T, E, S, Params>['setRequestParams']>) {\r\n this.store.dispatch(this.listActions.setRequestParams(props));\r\n }\r\n\r\n changeFiltering(props: ActionPayload<ListActions<T, E, S, Params>['changeFiltering']>): void {\r\n this.store.dispatch(this.listActions.changeFiltering(props));\r\n }\r\n\r\n changePagingOptions(props: ActionPayload<ListActions<T, E, S, Params>['changePagingOptions']>): void {\r\n this.store.dispatch(this.listActions.changePagingOptions(props));\r\n }\r\n\r\n changePageSize(props: ActionPayload<ListActions<T, E, S, Params>['changePageSize']>): void {\r\n this.store.dispatch(this.listActions.changePageSize(props));\r\n }\r\n\r\n changePageNumber(props: ActionPayload<ListActions<T, E, S, Params>['changePageNumber']>): void {\r\n this.store.dispatch(this.listActions.changePageNumber(props));\r\n }\r\n\r\n changeSelectedResources(props: ActionPayload<ListActions<T, E, S, Params>['changeSelectedResources']>): void {\r\n this.store.dispatch(this.listActions.changeSelectedResources(props));\r\n }\r\n\r\n changeSorting(props: ActionPayload<ListActions<T, E, S, Params>['changeSorting']>): void {\r\n this.store.dispatch(this.listActions.changeSorting(props));\r\n }\r\n\r\n changeRequestParams(props: ActionPayload<ListActions<T, E, S, Params>['changeRequestParams']>): void {\r\n this.store.dispatch(this.listActions.changeRequestParams(props));\r\n }\r\n\r\n loadPage(): void {\r\n this.store.dispatch(this.listActions.loadPage());\r\n }\r\n\r\n loadFirstPage(): void {\r\n this.store.dispatch(this.listActions.loadFirstPage());\r\n }\r\n\r\n loadNextPage(): void {\r\n this.store.dispatch(this.listActions.loadNextPage());\r\n }\r\n\r\n loadPreviousPage(): void {\r\n this.store.dispatch(this.listActions.loadPreviousPage());\r\n }\r\n\r\n patch(props: ActionPayload<ListActions<T, E, S, Params>['patch']>): void {\r\n this.store.dispatch(this.listActions.patch(props));\r\n }\r\n\r\n delete(props: ActionPayload<ListActions<T, E, S, Params>['delete']>): void {\r\n this.store.dispatch(this.listActions.delete(props));\r\n }\r\n\r\n initialize(): void {\r\n this.store.dispatch(this.listActions.initialize());\r\n }\r\n\r\n reinitialize(): void {\r\n this.store.dispatch(this.listActions.reset());\r\n }\r\n\r\n resetRequestState(): void {\r\n this.store.dispatch(this.listActions.resetRequestState());\r\n }\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { ListNotificationService, ListService } from '@ngdux/data-model-common';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport { select, Store } from '@ngrx/store';\r\nimport { catchError, exhaustMap, filter, map, of, switchMap, tap, withLatestFrom } from 'rxjs';\r\nimport { ListActions, ListSelectors } from '../models/list.model';\r\n\r\nexport function createListEffects<Data, Error = unknown, Summary = Data, Params = Record<string, string>>(\r\n listActions: ListActions<Data, Error, Summary, Params>,\r\n listSelectors: ListSelectors<Summary, Error, Params>,\r\n listService: () => ListService<Data, Summary, Params>,\r\n notificationService: () => ListNotificationService<Error>\r\n) {\r\n return {\r\n reload$: createEffect((actions$ = inject(Actions)) => reloadEffect(actions$, listActions), { functional: true }),\r\n loadFirstPage$: createEffect((actions$ = inject(Actions)) => loadFirstPageEffect(actions$, listActions), {\r\n functional: true\r\n }),\r\n loadPreviousPage$: createEffect(\r\n (store = inject(Store), actions$ = inject(Actions)) =>\r\n loadPreviousPageEffect(store, actions$, listActions, listSelectors),\r\n { functional: true }\r\n ),\r\n loadNextPage$: createEffect(\r\n (store = inject(Store), actions$ = inject(Actions)) =>\r\n loadNextPageEffect(store, actions$, listActions, listSelectors),\r\n { functional: true }\r\n ),\r\n loadPage$: createEffect(\r\n (store = inject(Store), actions$ = inject(Actions), service = listService()) =>\r\n loadPageEffect(store, actions$, listActions, listSelectors, service),\r\n { functional: true }\r\n ),\r\n patch$: createEffect(\r\n (actions$ = inject(Actions), service = listService()) => patchEffect(actions$, listActions, service),\r\n { functional: true }\r\n ),\r\n delete$: createEffect(\r\n (actions$ = inject(Actions), service = listService()) => deleteEffect(actions$, listActions, service),\r\n { functional: true }\r\n ),\r\n deleteSuccess$: createEffect(\r\n (actions$ = inject(Actions), service = notificationService()) =>\r\n deleteSuccessEffect(actions$, listActions, service),\r\n { functional: true, dispatch: false }\r\n ),\r\n errorsHandler$: createEffect(\r\n (actions$ = inject(Actions), service = notificationService()) =>\r\n errorsHandlerEffect(actions$, listActions, service),\r\n { functional: true, dispatch: false }\r\n )\r\n };\r\n}\r\n\r\nfunction reloadEffect<Data, Error = unknown, Summary = Data, Params = Record<string, string>>(\r\n actions$: Actions,\r\n listActions: ListActions<Data, Error, Summary, Params>\r\n) {\r\n return actions$.pipe(\r\n ofType(\r\n listActions.changePageSize,\r\n listActions.changeSorting,\r\n listActions.changeFiltering,\r\n listActions.changePagingOptions,\r\n listActions.changeRequestParams,\r\n listActions.initialize,\r\n listActions.reset,\r\n listActions.changePageNumber,\r\n listActions.patchSuccess,\r\n listActions.deleteSuccess\r\n ),\r\n map(() => listActions.loadPage())\r\n );\r\n}\r\n\r\nfunction loadFirstPageEffect<Data, Error = unknown, Summary = Data, Params = Record<string, string>>(\r\n actions$: Actions,\r\n listActions: ListActions<Data, Error, Summary, Params>\r\n) {\r\n return actions$.pipe(\r\n ofType(listActions.loadFirstPage),\r\n map(() => listActions.changePageNumber({ pageNumber: 1 }))\r\n );\r\n}\r\n\r\nfunction loadPreviousPageEffect<Data, Error = unknown, Summary = Data, Params = Record<string, string>>(\r\n store: Store,\r\n actions$: Actions,\r\n listActions: ListActions<Data, Error, Summary, Params>,\r\n listSelectors: ListSelectors<Summary, Error, Params>\r\n) {\r\n return actions$.pipe(\r\n ofType(listActions.loadPreviousPage),\r\n withLatestFrom(store.pipe(select(listSelectors.getCurrentPageNumber))),\r\n filter(([, currentPageNumber]) => currentPageNumber > 1),\r\n map(([, currentPageNumber]) => listActions.changePageNumber({ pageNumber: currentPageNumber - 1 }))\r\n );\r\n}\r\n\r\nfunction loadNextPageEffect<Data, Error = unknown, Summary = Data, Params = Record<string, string>>(\r\n store: Store,\r\n actions$: Actions,\r\n listActions: ListActions<Data, Error, Summary, Params>,\r\n listSelectors: ListSelectors<Summary, Error, Params>\r\n) {\r\n return actions$.pipe(\r\n ofType(listActions.loadNextPage),\r\n withLatestFrom(\r\n store.pipe(select(listSelectors.isLastPage)),\r\n store.pipe(select(listSelectors.getCurrentPageNumber))\r\n ),\r\n filter(([, isLastPage]) => !isLastPage),\r\n map(([, , currentPageNumber]) => listActions.changePageNumber({ pageNumber: currentPageNumber + 1 }))\r\n );\r\n}\r\n\r\nfunction loadPageEffect<Data, Error = unknown, Summary = Data, Params = Record<string, string>>(\r\n store: Store,\r\n actions$: Actions,\r\n listActions: ListActions<Data, Error, Summary, Params>,\r\n listSelectors: ListSelectors<Summary, Error, Params>,\r\n service: ListService<Data, Summary, Params>\r\n) {\r\n return actions$.pipe(\r\n ofType(listActions.loadPage),\r\n withLatestFrom(\r\n store.pipe(select(listSelectors.getPagingOptions)),\r\n store.pipe(select(listSelectors.getSortingOptions)),\r\n store.pipe(select(listSelectors.getFilteringOptions)),\r\n store.pipe(select(listSelectors.getRequestParameters))\r\n ),\r\n switchMap(([, pagingOptions, sortingOptions, filteringOptions, requestParameters]) => {\r\n return service\r\n .loadResources({\r\n pagingOptions,\r\n sortingOptions,\r\n filteringOptions,\r\n requestParameters\r\n })\r\n .pipe(\r\n map(resources =>\r\n listActions.loadPageSuccess({\r\n resources,\r\n pagingOptions\r\n })\r\n ),\r\n catchError((errors: Error) => of(listActions.loadPageFailure({ errors })))\r\n );\r\n })\r\n );\r\n}\r\n\r\nfunction patchEffect<Data, Error = unknown, Summary = Data, Params = Record<string, string>>(\r\n actions$: Actions,\r\n listActions: ListActions<Data, Error, Summary, Params>,\r\n service: ListService<Data, Summary, Params>\r\n) {\r\n return actions$.pipe(\r\n ofType(listActions.patch),\r\n exhaustMap(action => {\r\n if (!service.patchResources) {\r\n throw new Error('patchResources not implement in the ListService');\r\n }\r\n\r\n return service.patchResources(action.resourceIds, action.resource).pipe(\r\n map(resources => listActions.patchSuccess({ resources })),\r\n catchError((errors: Error) => of(listActions.patchFailure({ errors })))\r\n );\r\n })\r\n );\r\n}\r\n\r\nfunction deleteEffect<Data, Error = unknown, Summary = Data, Params = Record<string, string>>(\r\n actions$: Actions,\r\n listActions: ListActions<Data, Error, Summary, Params>,\r\n service: ListService<Data, Summary, Params>\r\n) {\r\n return actions$.pipe(\r\n ofType(listActions.delete),\r\n exhaustMap(({ resourceIds }) => {\r\n if (!service.deleteResources) {\r\n throw new Error('deleteResources not implement in the ListService');\r\n }\r\n\r\n return service.deleteResources(resourceIds).pipe(\r\n map(() => listActions.deleteSuccess({ resourceIds })),\r\n catchError((errors: Error) => of(listActions.deleteFailure({ errors })))\r\n );\r\n })\r\n );\r\n}\r\n\r\nfunction deleteSuccessEffect<Data, Error = unknown, Summary = Data, Params = Record<string, string>>(\r\n actions$: Actions,\r\n listActions: ListActions<Data, Error, Summary, Params>,\r\n notificationService?: ListNotificationService<Error>\r\n) {\r\n return actions$.pipe(\r\n ofType(listActions.deleteSuccess),\r\n tap(({ resourceIds }) => {\r\n notificationService?.onListDelete(resourceIds);\r\n })\r\n );\r\n}\r\n\r\nfunction errorsHandlerEffect<Data, Error = unknown, Summary = Data, Params = Record<string, string>>(\r\n actions$: Actions,\r\n listActions: ListActions<Data, Error, Summary, Params>,\r\n notificationService?: ListNotificationService<Error>\r\n) {\r\n return actions$.pipe(\r\n ofType(listActions.loadPageFailure, listActions.deleteFailure, listActions.patchFailure),\r\n tap(({ errors }) => {\r\n notificationService?.onListErrors(errors);\r\n })\r\n );\r\n}\r\n","import { inject, InjectionToken } from '@angular/core';\r\nimport { ActionPayload } from '@ngdux/store-common';\r\nimport { select, Store } from '@ngrx/store';\r\nimport { ListActions, ListFacade, ListSelectors } from '../models/list.model';\r\n\r\nexport function provideListFacade<Data, Error = unknown, Summary = Data, Params = Record<string, string>>(\r\n token: InjectionToken<ListFacade<Data, Error, Summary, Params>>,\r\n listActions: ListActions<Data, Error, Summary, Params>,\r\n listSelectors: ListSelectors<Summary, Error, Params>\r\n) {\r\n return {\r\n provide: token,\r\n useFactory: () => createListFacade(listActions, listSelectors, inject(Store))\r\n };\r\n}\r\n\r\nexport function createListFacade<Data, Error = unknown, Summary = Data, Params = Record<string, string>>(\r\n listActions: ListActions<Data, Error, Summary, Params>,\r\n listSelectors: ListSelectors<Summary, Error, Params>,\r\n store: Store\r\n): ListFacade<Data, Error, Summary, Params> {\r\n const resources$ = store.pipe(select(listSelectors.getAll));\r\n const loadingState$ = store.pipe(select(listSelectors.getLoadingState));\r\n const requestState$ = store.pipe(select(listSelectors.getRequestState));\r\n const errors$ = store.pipe(select(listSelectors.getErrors));\r\n const isReady$ = store.pipe(select(listSelectors.isReady));\r\n const areSelectedReady$ = store.pipe(select(listSelectors.areSelectedReady));\r\n const currentPageData$ = store.pipe(select(listSelectors.getCurrentPageData));\r\n const currentPageNumber$ = store.pipe(select(listSelectors.getCurrentPageNumber));\r\n const filteringOptions$ = store.pipe(select(listSelectors.getFilteringOptions));\r\n const requestParameters$ = store.pipe(select(listSelectors.getRequestParameters));\r\n const lastPageNumber$ = store.pipe(select(listSelectors.getLastPageNumber));\r\n const pagingOptions$ = store.pipe(select(listSelectors.getPagingOptions));\r\n const requestOptions$ = store.pipe(select(listSelectors.getRequestOptions));\r\n const sortingOptions$ = store.pipe(select(listSelectors.getSortingOptions));\r\n const selectedItems$ = store.pipe(select(listSelectors.getSelectedItems));\r\n const totalCount$ = store.pipe(select(listSelectors.getTotalCount));\r\n\r\n return {\r\n resources$,\r\n loadingState$,\r\n requestState$,\r\n errors$,\r\n isReady$,\r\n areSelectedReady$,\r\n currentPageData$,\r\n currentPageNumber$,\r\n filteringOptions$,\r\n requestParameters$,\r\n lastPageNumber$,\r\n pagingOptions$,\r\n requestOptions$,\r\n sortingOptions$,\r\n selectedItems$,\r\n totalCount$,\r\n setPageSize(props: ActionPayload<ListActions<Data, Error, Summary, Params>['setPageSize']>): void {\r\n store.dispatch(listActions.setPageSize(props));\r\n },\r\n\r\n setFiltering(props: ActionPayload<ListActions<Data, Error, Summary, Params>['setFiltering']>): void {\r\n store.dispatch(listActions.setFiltering(props));\r\n },\r\n\r\n setSorting(props: ActionPayload<ListActions<Data, Error, Summary, Params>['setSorting']>): void {\r\n store.dispatch(listActions.setSorting(props));\r\n },\r\n\r\n setRequestParameters(props: ActionPayload<ListActions<Data, Error, Summary, Params>['setRequestParams']>) {\r\n store.dispatch(listActions.setRequestParams(props));\r\n },\r\n\r\n changeFiltering(props: ActionPayload<ListActions<Data, Error, Summary, Params>['changeFiltering']>): void {\r\n store.dispatch(listActions.changeFiltering(props));\r\n },\r\n changePagingOptions(props: ActionPayload<ListActions<Data, Error, Summary, Params>['changePagingOptions']>): void {\r\n store.dispatch(listActions.changePagingOptions(props));\r\n },\r\n changePageSize(props: ActionPayload<ListActions<Data, Error, Summary, Params>['changePageSize']>): void {\r\n store.dispatch(listActions.changePageSize(props));\r\n },\r\n changePageNumber(props: ActionPayload<ListActions<Data, Error, Summary, Params>['changePageNumber']>): void {\r\n store.dispatch(listActions.changePageNumber(props));\r\n },\r\n changeSelectedResources(\r\n props: ActionPayload<ListActions<Data, Error, Summary, Params>['changeSelectedResources']>\r\n ): void {\r\n store.dispatch(listActions.changeSelectedResources(props));\r\n },\r\n changeSorting(props: ActionPayload<ListActions<Data, Error, Summary, Params>['changeSorting']>): void {\r\n store.dispatch(listActions.changeSorting(props));\r\n },\r\n changeRequestParams(props: ActionPayload<ListActions<Data, Error, Summary, Params>['changeRequestParams']>): void {\r\n store.dispatch(listActions.changeRequestParams(props));\r\n },\r\n\r\n loadPage(): void {\r\n store.dispatch(listActions.loadPage());\r\n },\r\n\r\n loadFirstPage(): void {\r\n store.dispatch(listActions.loadFirstPage());\r\n },\r\n loadNextPage(): void {\r\n store.dispatch(listActions.loadNextPage());\r\n },\r\n\r\n loadPreviousPage(): void {\r\n store.dispatch(listActions.loadPreviousPage());\r\n },\r\n\r\n patch(props: ActionPayload<ListActions<Data, Error, Summary, Params>['patch']>): void {\r\n store.dispatch(listActions.patch(props));\r\n },\r\n\r\n delete(props: ActionPayload<ListActions<Data, Error, Summary, Params>['delete']>): void {\r\n store.dispatch(listActions.delete(props));\r\n },\r\n\r\n initialize(): void {\r\n store.dispatch(listActions.initialize());\r\n },\r\n\r\n reinitialize(): void {\r\n store.dispatch(listActions.reset());\r\n },\r\n resetRequestState(): void {\r\n store.dispatch(listActions.resetRequestState());\r\n }\r\n };\r\n}\r\n","import { inject, InjectionToken, ProviderToken } from '@angular/core';\r\nimport { ListNotificationService, ListService } from '@ngdux/data-model-common';\r\nimport { provideEffects } from '@ngrx/effects';\r\nimport { Action, createFeatureSelector, provideState } from '@ngrx/store';\r\nimport { ListFacade, ListState } from '../models/list.model';\r\nimport { NotificationServicePlaceholder } from '../services/list-notification-service';\r\nimport { createListActions } from './list-actions';\r\nimport { createListEffects } from './list-effects';\r\nimport { provideListFacade } from './list-facade';\r\nimport { createListEntityAdapter, createListReducer } from './list-reducer';\r\nimport { createListSelectors } from './list-selectors';\r\n\r\nexport function createListState<\r\n T extends { [key: string]: any },\r\n E,\r\n S extends { [key: string]: any } = T,\r\n Params = Record<string, string>\r\n>(featureName: string, idKey?: string) {\r\n const actions = createListActions<T, E, S, Params>(featureName);\r\n const entityAdapter = createListEntityAdapter<S>(idKey);\r\n const reducer = createListReducer<T, E, S, Params>(entityAdapter, actions);\r\n const getState = createFeatureSelector<ListState<S, E, Params>>(featureName);\r\n const selectors = createListSelectors<S, E, Params>(entityAdapter, getState);\r\n\r\n return {\r\n actions,\r\n reducer: (state: ListState<S, E, Params>, action: Action): ListState<S, E, Params> => reducer(state, action),\r\n selectors,\r\n entityAdapter\r\n };\r\n}\r\n\r\nexport function provideListState<\r\n Data extends { [key: string]: any },\r\n Error = unknown,\r\n Summary extends { [key: string]: any } = Data,\r\n Params = Record<string, string>\r\n>(\r\n featureKey: string,\r\n facadeToken: InjectionToken<ListFacade<Data, Error, Summary, Params>>,\r\n service: ProviderToken<ListService<Data, Summary, Params>>,\r\n notificationService: ProviderToken<ListNotificationService<Error>> = NotificationServicePlaceholder<Error>\r\n) {\r\n const { actions, selectors, reducer } = createListState<Data, Error, Summary, Params>(featureKey);\r\n\r\n return [\r\n provideState(featureKey, reducer),\r\n provideListFacade(facadeToken, actions, selectors),\r\n provideEffects([\r\n createListEffects(\r\n actions,\r\n selectors,\r\n () => inject(service),\r\n () => inject(notificationService)\r\n )\r\n ]),\r\n service,\r\n notificationService\r\n ];\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3","i4.ListStateService","map","withLatestFrom","filter","switchMap","catchError","exhaustMap","tap"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ngdux/list",
3
- "version": "4.0.0",
3
+ "version": "5.0.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git@github.com:allanartuso/ngdux.git",
@@ -8,21 +8,21 @@
8
8
  },
9
9
  "homepage": "https://github.com/allanartuso/ngdux/tree/master/libs/ngdux/util/store/list#readme",
10
10
  "peerDependencies": {
11
- "@ngdux/data-model-common": "^3.0.0",
12
- "@angular/core": "^17.0.0",
13
- "@ngdux/store-common": "^3.0.0",
14
- "@ngrx/entity": "^17.0.0",
15
- "@ngrx/store": "^17.0.0",
16
- "@ngrx/effects": "^17.0.0"
11
+ "@ngdux/store-common": ">=5.0.0",
12
+ "@ngdux/data-model-common": ">=5.0.0",
13
+ "@ngrx/entity": ">=21.0.0",
14
+ "@ngrx/store": ">=21.0.0",
15
+ "@angular/core": ">=21.0.0",
16
+ "@ngrx/effects": ">=21.0.0"
17
17
  },
18
18
  "module": "fesm2022/ngdux-list.mjs",
19
- "typings": "index.d.ts",
19
+ "typings": "types/ngdux-list.d.ts",
20
20
  "exports": {
21
21
  "./package.json": {
22
22
  "default": "./package.json"
23
23
  },
24
24
  ".": {
25
- "types": "./index.d.ts",
25
+ "types": "./types/ngdux-list.d.ts",
26
26
  "default": "./fesm2022/ngdux-list.mjs"
27
27
  }
28
28
  },
@@ -4,14 +4,16 @@ export { ListNotificationService, ListService, RequestOptions, RequestState } fr
4
4
  import * as _ngrx_store from '@ngrx/store';
5
5
  import { ActionCreator, Action, MemoizedSelector, ReducerManager, Store, ReducerTypes, ActionReducer, DefaultProjectorFn } from '@ngrx/store';
6
6
  import * as i0 from '@angular/core';
7
- import { InjectionToken, Type, ModuleWithProviders } from '@angular/core';
8
- import { ApiRequestState, LoadingState, RegisterEffectsService, ActionPayload } from '@ngdux/store-common';
7
+ import { InjectionToken, Type, ModuleWithProviders, ProviderToken } from '@angular/core';
8
+ import { ActionPayload, ApiRequestState, LoadingState, RegisterEffectsService } from '@ngdux/store-common';
9
9
  import * as _ngrx_entity from '@ngrx/entity';
10
10
  import { EntityState, EntityAdapter } from '@ngrx/entity';
11
+ import * as rxjs from 'rxjs';
12
+ import { Observable } from 'rxjs';
11
13
  import * as _ngrx_effects from '@ngrx/effects';
12
14
  import { Actions } from '@ngrx/effects';
13
- import * as rxjs from 'rxjs';
14
- import { ActionCreator as ActionCreator$1 } from '@ngrx/store/src/models';
15
+ import * as dist_libs_ngdux_data_model_common_types_ngdux_data_model_common from 'dist/libs/ngdux/data-model/common/types/ngdux-data-model-common';
16
+ import * as _ngdux_list from '@ngdux/list';
15
17
 
16
18
  declare const LIST_FEATURE_KEY: InjectionToken<string>;
17
19
  declare const LIST_FEATURE_KEYS: InjectionToken<string>;
@@ -21,11 +23,11 @@ interface ListState<T, E = unknown, Params = Record<string, string>> extends Ent
21
23
  selectedResourceIds: string[];
22
24
  lastPageNumber?: number;
23
25
  }
24
- interface ListSelectors<T, E = unknown, Params = Record<string, string>> {
25
- getAll: MemoizedSelector<object, T[]>;
26
+ interface ListSelectors<Summary, E = unknown, Params = Record<string, string>> {
27
+ getAll: MemoizedSelector<object, Summary[]>;
26
28
  getRequestOptions: MemoizedSelector<object, RequestOptions>;
27
29
  isLastPage: MemoizedSelector<object, boolean>;
28
- getCurrentPageData: MemoizedSelector<object, T[]>;
30
+ getCurrentPageData: MemoizedSelector<object, Summary[]>;
29
31
  getPagingOptions: MemoizedSelector<object, PagingOptions>;
30
32
  getSortingOptions: MemoizedSelector<object, SortingField[]>;
31
33
  getFilteringOptions: MemoizedSelector<object, FilteringOptions>;
@@ -34,8 +36,8 @@ interface ListSelectors<T, E = unknown, Params = Record<string, string>> {
34
36
  getLastPageNumber: MemoizedSelector<object, number | undefined>;
35
37
  getLoadingState: MemoizedSelector<object, RequestState>;
36
38
  getSelectedResourceIds: MemoizedSelector<object, string[]>;
37
- getSelectedItems: MemoizedSelector<object, T[]>;
38
- getSelectionRecord: MemoizedSelector<object, Record<string, T>>;
39
+ getSelectedItems: MemoizedSelector<object, Summary[]>;
40
+ getSelectionRecord: MemoizedSelector<object, Record<string, Summary>>;
39
41
  getRequestState: MemoizedSelector<object, RequestState>;
40
42
  getErrors: MemoizedSelector<object, E | undefined>;
41
43
  areSelectedReady: MemoizedSelector<object, boolean>;
@@ -198,6 +200,44 @@ interface NgduxListStateModuleConfig<T extends {
198
200
  service: Type<ListService<T, S, Params>>;
199
201
  notificationService?: Type<ListNotificationService<E>>;
200
202
  }
203
+ interface ListFacade<Data, Error = unknown, Summary = Data, Params = Record<string, string>> {
204
+ resources$: Observable<Summary[]>;
205
+ loadingState$: Observable<RequestState>;
206
+ requestState$: Observable<RequestState>;
207
+ errors$: Observable<Error | undefined>;
208
+ isReady$: Observable<boolean>;
209
+ areSelectedReady$: Observable<boolean>;
210
+ currentPageData$: Observable<Summary[]>;
211
+ currentPageNumber$: Observable<number>;
212
+ filteringOptions$: Observable<FilteringOptions>;
213
+ requestParameters$: Observable<Params | undefined>;
214
+ lastPageNumber$: Observable<number | undefined>;
215
+ pagingOptions$: Observable<PagingOptions>;
216
+ requestOptions$: Observable<RequestOptions<Record<string, string>>>;
217
+ sortingOptions$: Observable<SortingField[]>;
218
+ selectedItems$: Observable<Summary[]>;
219
+ totalCount$: Observable<number>;
220
+ setPageSize(props: ActionPayload<ListActions<Data, Error, Summary, Params>['setPageSize']>): void;
221
+ setFiltering(props: ActionPayload<ListActions<Data, Error, Summary, Params>['setFiltering']>): void;
222
+ setSorting(props: ActionPayload<ListActions<Data, Error, Summary, Params>['setSorting']>): void;
223
+ setRequestParameters(props: ActionPayload<ListActions<Data, Error, Summary, Params>['setRequestParams']>): void;
224
+ changeFiltering(props: ActionPayload<ListActions<Data, Error, Summary, Params>['changeFiltering']>): void;
225
+ changePagingOptions(props: ActionPayload<ListActions<Data, Error, Summary, Params>['changePagingOptions']>): void;
226
+ changePageSize(props: ActionPayload<ListActions<Data, Error, Summary, Params>['changePageSize']>): void;
227
+ changePageNumber(props: ActionPayload<ListActions<Data, Error, Summary, Params>['changePageNumber']>): void;
228
+ changeSelectedResources(props: ActionPayload<ListActions<Data, Error, Summary, Params>['changeSelectedResources']>): void;
229
+ changeSorting(props: ActionPayload<ListActions<Data, Error, Summary, Params>['changeSorting']>): void;
230
+ changeRequestParams(props: ActionPayload<ListActions<Data, Error, Summary, Params>['changeRequestParams']>): void;
231
+ loadPage(): void;
232
+ loadFirstPage(): void;
233
+ loadNextPage(): void;
234
+ loadPreviousPage(): void;
235
+ patch(props: ActionPayload<ListActions<Data, Error, Summary, Params>['patch']>): void;
236
+ delete(props: ActionPayload<ListActions<Data, Error, Summary, Params>['delete']>): void;
237
+ initialize(): void;
238
+ reinitialize(): void;
239
+ resetRequestState(): void;
240
+ }
201
241
 
202
242
  declare class ListStateService<T extends {
203
243
  [key: string]: any;
@@ -219,6 +259,9 @@ declare class ListStateService<T extends {
219
259
  static ɵprov: i0.ɵɵInjectableDeclaration<ListStateService<any, any, any, any>>;
220
260
  }
221
261
 
262
+ /**
263
+ * @deprecated This NgModule is deprecated and will be removed in a future release. Use `provideListState` and `createListState` instead to set up your list state in a more modular way.
264
+ */
222
265
  declare class NgduxListStateModule<T extends {
223
266
  [key: string]: any;
224
267
  }, Error = unknown, S extends {
@@ -235,6 +278,9 @@ declare class NgduxListStateModule<T extends {
235
278
  static ɵinj: i0.ɵɵInjectorDeclaration<NgduxListStateModule>;
236
279
  }
237
280
 
281
+ /**
282
+ * @deprecated This class is deprecated and will be removed in a future release. Please use `createListEffects` instead.
283
+ */
238
284
  declare abstract class AbstractListEffects<T, E = unknown, S = T, Params = Record<string, string>> {
239
285
  protected readonly actions$: Actions;
240
286
  protected readonly store: Store;
@@ -281,6 +327,9 @@ declare abstract class AbstractListEffects<T, E = unknown, S = T, Params = Recor
281
327
  protected constructor(actions$: Actions, store: Store, service: ListService<T, S, Params>, listActions: ListActions<T, E, S, Params>, listSelectors: ListSelectors<S, E, Params>, notificationService?: ListNotificationService<E> | undefined);
282
328
  }
283
329
 
330
+ /**
331
+ * @deprecated This class is deprecated and will be removed in a future release.
332
+ */
284
333
  declare abstract class AbstractListReducerManager<T extends {
285
334
  [key: string]: any;
286
335
  }, E, S extends {
@@ -300,24 +349,27 @@ declare abstract class AbstractListReducerManager<T extends {
300
349
  static ɵprov: i0.ɵɵInjectableDeclaration<AbstractListReducerManager<any, any, any, any>>;
301
350
  }
302
351
 
352
+ /**
353
+ * @deprecated This class is deprecated and will be removed in a future release. Please use `provideListFacade` or `createListFacade` instead.
354
+ */
303
355
  declare abstract class AbstractListFacade<T, E, S = T, Params = Record<string, string>> {
304
356
  protected readonly store: Store;
305
357
  private readonly listActions;
306
358
  private readonly listSelectors;
307
359
  readonly resources$: rxjs.Observable<S[]>;
308
- readonly loadingState$: rxjs.Observable<_ngdux_data_model_common.RequestState>;
309
- readonly requestState$: rxjs.Observable<_ngdux_data_model_common.RequestState>;
360
+ readonly loadingState$: rxjs.Observable<_ngdux_list.RequestState>;
361
+ readonly requestState$: rxjs.Observable<_ngdux_list.RequestState>;
310
362
  readonly errors$: rxjs.Observable<E | undefined>;
311
363
  readonly isReady$: rxjs.Observable<boolean>;
312
364
  readonly areSelectedReady$: rxjs.Observable<boolean>;
313
365
  readonly currentPageData$: rxjs.Observable<S[]>;
314
366
  readonly currentPageNumber$: rxjs.Observable<number>;
315
- readonly filteringOptions$: rxjs.Observable<_ngdux_data_model_common.FilteringOptions>;
367
+ readonly filteringOptions$: rxjs.Observable<dist_libs_ngdux_data_model_common_types_ngdux_data_model_common.FilteringOptions>;
316
368
  readonly requestParameters$: rxjs.Observable<Params | undefined>;
317
369
  readonly lastPageNumber$: rxjs.Observable<number | undefined>;
318
- readonly pagingOptions$: rxjs.Observable<_ngdux_data_model_common.PagingOptions>;
319
- readonly requestOptions$: rxjs.Observable<_ngdux_data_model_common.RequestOptions<Record<string, string>>>;
320
- readonly sortingOptions$: rxjs.Observable<_ngdux_data_model_common.SortingField[]>;
370
+ readonly pagingOptions$: rxjs.Observable<dist_libs_ngdux_data_model_common_types_ngdux_data_model_common.PagingOptions>;
371
+ readonly requestOptions$: rxjs.Observable<_ngdux_list.RequestOptions<Record<string, string>>>;
372
+ readonly sortingOptions$: rxjs.Observable<dist_libs_ngdux_data_model_common_types_ngdux_data_model_common.SortingField[]>;
321
373
  readonly selectedItems$: rxjs.Observable<S[]>;
322
374
  readonly totalCount$: rxjs.Observable<number>;
323
375
  constructor(store: Store, listActions: ListActions<T, E, S, Params>, listSelectors: ListSelectors<S, E, Params>);
@@ -348,7 +400,7 @@ declare function createListActions<T, E, S = T, Params = Record<string, string>>
348
400
  declare function createListEntityAdapter<T extends {
349
401
  [key: string]: any;
350
402
  }>(idKey?: string): EntityAdapter<T>;
351
- declare function createListReducer<T, E, S = T, Params = Record<string, string>>(entityAdapter: EntityAdapter<S>, actions: ListActions<T, E, S, Params>, actionHandlers?: ReducerTypes<ListState<S, E, Params>, ActionCreator$1[]>[], initialListState?: {
403
+ declare function createListReducer<T, E, S = T, Params = Record<string, string>>(entityAdapter: EntityAdapter<S>, actions: ListActions<T, E, S, Params>, actionHandlers?: ReducerTypes<ListState<S, E, Params>, ActionCreator[]>[], initialListState?: {
352
404
  [key: string]: unknown;
353
405
  }): ActionReducer<ListState<S, E, Params>>;
354
406
 
@@ -359,11 +411,19 @@ declare function createListState<T extends {
359
411
  }, E, S extends {
360
412
  [key: string]: any;
361
413
  } = T, Params = Record<string, string>>(featureName: string, idKey?: string): {
362
- actions: ListActions<T, E, S, Params>;
414
+ actions: _ngdux_list.ListActions<T, E, S, Params>;
363
415
  reducer: (state: ListState<S, E, Params>, action: Action) => ListState<S, E, Params>;
364
- selectors: ListSelectors<S, E, Params>;
416
+ selectors: _ngdux_list.ListSelectors<S, E, Params>;
365
417
  entityAdapter: _ngrx_entity.EntityAdapter<S>;
366
418
  };
419
+ declare function provideListState<Data extends {
420
+ [key: string]: any;
421
+ }, Error = unknown, Summary extends {
422
+ [key: string]: any;
423
+ } = Data, Params = Record<string, string>>(featureKey: string, facadeToken: InjectionToken<ListFacade<Data, Error, Summary, Params>>, service: ProviderToken<ListService<Data, Summary, Params>>, notificationService?: ProviderToken<ListNotificationService<Error>>): (i0.EnvironmentProviders | i0.Type<ListService<Data, Summary, Params>> | i0.AbstractType<ListService<Data, Summary, Params>> | InjectionToken<ListService<Data, Summary, Params>> | i0.Type<ListNotificationService<Error>> | i0.AbstractType<ListNotificationService<Error>> | {
424
+ provide: InjectionToken<ListFacade<Data, Error, Summary, Params>>;
425
+ useFactory: () => ListFacade<Data, Error, Summary, Params>;
426
+ })[];
367
427
 
368
- export { AbstractListEffects, AbstractListFacade, AbstractListReducerManager, LIST_FEATURE_KEY, LIST_FEATURE_KEYS, LIST_NOTIFICATION_SERVICES, LIST_SERVICES, ListStateService, NgduxListStateModule, createListActions, createListEntityAdapter, createListReducer, createListSelectors, createListState };
369
- export type { ListActions, ListSelectors, ListState, NgduxListStateModuleConfig };
428
+ export { AbstractListEffects, AbstractListFacade, AbstractListReducerManager, LIST_FEATURE_KEY, LIST_FEATURE_KEYS, LIST_NOTIFICATION_SERVICES, LIST_SERVICES, ListStateService, NgduxListStateModule, createListActions, createListEntityAdapter, createListReducer, createListSelectors, createListState, provideListState };
429
+ export type { ListActions, ListFacade, ListSelectors, ListState, NgduxListStateModuleConfig };