@ngdux/list 1.3.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/esm2022/index.mjs +12 -0
  2. package/esm2022/lib/+state/effects.mjs +22 -0
  3. package/esm2022/lib/+state/state.service.mjs +55 -0
  4. package/esm2022/lib/models/list.model.mjs +7 -0
  5. package/esm2022/lib/ngdux-list-state.module.mjs +53 -0
  6. package/esm2022/lib/services/list-notification-service.mjs +21 -0
  7. package/esm2022/lib/state-generator/abstract-list-effects.mjs +50 -0
  8. package/esm2022/lib/state-generator/abstract-list-state.service.mjs +44 -0
  9. package/esm2022/lib/state-generator/abstract-list.facade.mjs +85 -0
  10. package/esm2022/lib/state-generator/list-actions.mjs +58 -0
  11. package/esm2022/lib/state-generator/list-reducer.mjs +104 -0
  12. package/esm2022/lib/state-generator/list-selectors.mjs +80 -0
  13. package/esm2022/lib/state-generator/list-state.mjs +18 -0
  14. package/{esm2020 → esm2022}/ngdux-list.mjs +4 -4
  15. package/{fesm2020 → fesm2022}/ngdux-list.mjs +540 -432
  16. package/fesm2022/ngdux-list.mjs.map +1 -0
  17. package/index.d.ts +11 -9
  18. package/lib/+state/effects.d.ts +14 -0
  19. package/lib/+state/state.service.d.ts +22 -0
  20. package/lib/models/list.model.d.ts +191 -183
  21. package/lib/ngdux-list-state.module.d.ts +23 -0
  22. package/lib/services/list-notification-service.d.ts +13 -0
  23. package/lib/{+state → state-generator}/abstract-list-effects.d.ts +49 -61
  24. package/lib/{+state → state-generator}/abstract-list-state.service.d.ts +21 -21
  25. package/lib/{+state → state-generator}/abstract-list.facade.d.ts +45 -46
  26. package/lib/{+state → state-generator}/list-actions.d.ts +2 -2
  27. package/lib/{+state → state-generator}/list-reducer.d.ts +10 -10
  28. package/lib/state-generator/list-selectors.d.ts +4 -0
  29. package/lib/{+state → state-generator}/list-state.d.ts +12 -12
  30. package/package.json +9 -102
  31. package/esm2020/index.mjs +0 -10
  32. package/esm2020/lib/+state/abstract-list-effects.mjs +0 -71
  33. package/esm2020/lib/+state/abstract-list-state.service.mjs +0 -44
  34. package/esm2020/lib/+state/abstract-list.facade.mjs +0 -88
  35. package/esm2020/lib/+state/list-actions.mjs +0 -60
  36. package/esm2020/lib/+state/list-reducer.mjs +0 -97
  37. package/esm2020/lib/+state/list-selectors.mjs +0 -80
  38. package/esm2020/lib/+state/list-state.mjs +0 -18
  39. package/esm2020/lib/models/list.model.mjs +0 -4
  40. package/fesm2015/ngdux-list.mjs +0 -404
  41. package/fesm2015/ngdux-list.mjs.map +0 -1
  42. package/fesm2020/ngdux-list.mjs.map +0 -1
  43. package/lib/+state/list-selectors.d.ts +0 -4
@@ -1,404 +0,0 @@
1
- import { DEFAULT_REQUEST_OPTIONS, RequestState, DEFAULT_PAGE } from '@ngdux/data-model-common';
2
- export { RequestState } from '@ngdux/data-model-common';
3
- import { createEffect, ofType } from '@ngrx/effects';
4
- import * as i1 from '@ngrx/store';
5
- import { select, createAction, props, createReducer, on, createSelector, createFeatureSelector } from '@ngrx/store';
6
- import { of } from 'rxjs';
7
- import { map, withLatestFrom, filter, concatMap, catchError, exhaustMap, switchMap, tap } from 'rxjs/operators';
8
- import * as i0 from '@angular/core';
9
- import { InjectionToken, Injectable, Inject } from '@angular/core';
10
- import { getLastPageNumber, createLoadingStateActionHandlers, createRequestStateActionHandlers } from '@ngdux/store-common';
11
- import { createEntityAdapter } from '@ngrx/entity';
12
-
13
- class AbstractListEffects {
14
- constructor(actions$, store, service, listActions, listSelectors, notificationService) {
15
- this.actions$ = actions$;
16
- this.store = store;
17
- this.service = service;
18
- this.listActions = listActions;
19
- this.listSelectors = listSelectors;
20
- this.notificationService = notificationService;
21
- this.texts = {
22
- deleteConfirmationTitle: 'Delete resources',
23
- deleteConfirmationMessage: 'Are you sure to delete the selected resources?'
24
- };
25
- this.reload$ = createEffect(() => this.actions$.pipe(ofType(this.listActions.changePageSize, this.listActions.changeSorting, this.listActions.changeFiltering, this.listActions.changeRequestParams, this.listActions.initialize, this.listActions.reset, this.listActions.changePageNumber, this.listActions.patchSuccess, this.listActions.deleteSuccess), map(() => this.listActions.loadPage())));
26
- this.loadFirstPage$ = createEffect(() => this.actions$.pipe(ofType(this.listActions.loadFirstPage), map(() => this.listActions.changePageNumber({ pageNumber: 1 }))));
27
- this.loadPreviousPage$ = createEffect(() => this.actions$.pipe(ofType(this.listActions.loadPreviousPage), withLatestFrom(this.store.pipe(select(this.listSelectors.getCurrentPageNumber))), filter(([, currentPageNumber]) => currentPageNumber > 1), map(([, currentPageNumber]) => this.listActions.changePageNumber({ pageNumber: currentPageNumber - 1 }))));
28
- this.loadNextPage$ = createEffect(() => this.actions$.pipe(ofType(this.listActions.loadNextPage), withLatestFrom(this.store.pipe(select(this.listSelectors.isLastPage)), this.store.pipe(select(this.listSelectors.getCurrentPageNumber))), filter(([, isLastPage]) => !isLastPage), map(([, , currentPageNumber]) => this.listActions.changePageNumber({ pageNumber: currentPageNumber + 1 }))));
29
- this.changePagingOptions$ = createEffect(() => this.actions$.pipe(ofType(this.listActions.changePagingOptions), withLatestFrom(this.store.pipe(select(this.listSelectors.getPagingOptions))), map(([action, pagingOptions]) => {
30
- if (action.pagingOptions.pageSize !== pagingOptions.pageSize) {
31
- return this.listActions.changePageSize({ pageSize: action.pagingOptions.pageSize });
32
- }
33
- else {
34
- return this.listActions.changePageNumber({ pageNumber: action.pagingOptions.page });
35
- }
36
- })));
37
- this.loadPage$ = createEffect(() => this.actions$.pipe(ofType(this.listActions.loadPage), withLatestFrom(this.store.pipe(select(this.listSelectors.getPagingOptions)), this.store.pipe(select(this.listSelectors.getSortingOptions)), this.store.pipe(select(this.listSelectors.getFilteringOptions)), this.store.pipe(select(this.listSelectors.getRequestParameters))), concatMap(([, pagingOptions, sortingOptions, filteringOptions, requestParameters]) => {
38
- return this.service
39
- .loadResources({
40
- pagingOptions,
41
- sortingOptions,
42
- filteringOptions,
43
- requestParameters
44
- })
45
- .pipe(map(resources => this.listActions.loadPageSuccess({
46
- resources,
47
- pagingOptions
48
- })), catchError((errors) => of(this.listActions.loadPageFailure({ errors }))));
49
- })));
50
- this.patch$ = createEffect(() => this.actions$.pipe(ofType(this.listActions.patch), exhaustMap(action => {
51
- if (!this.service.patchResources) {
52
- throw new Error('patchResources not implement in the ListService');
53
- }
54
- return this.service.patchResources(action.resourceIds, action.resource).pipe(map(resources => this.listActions.patchSuccess({ resources })), catchError((errors) => of(this.listActions.patchFailure({ errors }))));
55
- })));
56
- this.showRemovalsDialog$ = createEffect(() => this.actions$.pipe(ofType(this.listActions.showRemovalsConfirmation), switchMap(() => {
57
- var _a;
58
- if ((_a = this.notificationService) === null || _a === void 0 ? void 0 : _a.openConfirmationDialog) {
59
- return this.notificationService.openConfirmationDialog({
60
- message: this.texts.deleteConfirmationMessage,
61
- title: this.texts.deleteConfirmationTitle
62
- });
63
- }
64
- return of(true);
65
- }), filter(confirmed => confirmed), withLatestFrom(this.store.pipe(select(this.listSelectors.getSelectedResourceIds))), map(([, resourceIds]) => this.listActions.delete({ resourceIds }))));
66
- this.delete$ = createEffect(() => this.actions$.pipe(ofType(this.listActions.delete), exhaustMap(({ resourceIds }) => {
67
- if (!this.service.deleteResources) {
68
- throw new Error('deleteResources not implement in the ListService');
69
- }
70
- return this.service.deleteResources(resourceIds).pipe(map(() => this.listActions.deleteSuccess({ resourceIds })), catchError((errors) => of(this.listActions.deleteFailure({ errors }))));
71
- })));
72
- this.deleteUsersSuccess$ = createEffect(() => this.actions$.pipe(ofType(this.listActions.deleteSuccess), tap(({ resourceIds }) => {
73
- var _a;
74
- (_a = this.notificationService) === null || _a === void 0 ? void 0 : _a.onListDelete(resourceIds);
75
- })), { dispatch: false });
76
- this.errorsHandler$ = createEffect(() => this.actions$.pipe(ofType(this.listActions.loadPageFailure, this.listActions.deleteFailure, this.listActions.patchFailure), tap(({ errors }) => {
77
- var _a;
78
- (_a = this.notificationService) === null || _a === void 0 ? void 0 : _a.onListErrors(errors);
79
- })), { dispatch: false });
80
- }
81
- }
82
-
83
- /* eslint-disable @typescript-eslint/ban-types */
84
- const LIST_FEATURE_KEY = new InjectionToken('LIST_FEATURE_KEY');
85
-
86
- function createListActions(featureName) {
87
- const resetRequestState = createAction(`[${featureName} Page] Reset ${featureName} Request State`);
88
- const initialize = createAction(`[${featureName} Page] Initialize ${featureName}`);
89
- const reset = createAction(`[Organization ${featureName} Page] Reset ${featureName}`);
90
- const loadNextPage = createAction(`[${featureName} Page] Load Next ${featureName} Page`);
91
- const loadPreviousPage = createAction(`[${featureName} Page] Load Previous ${featureName} Page`);
92
- const loadFirstPage = createAction(`[${featureName} Page] Load First ${featureName} Page`);
93
- const setPageSize = createAction(`[${featureName} Page] Set ${featureName} Page Size`, props());
94
- const setSorting = createAction(`[${featureName} Page] Set ${featureName} Sorting`, props());
95
- const setFiltering = createAction(`[${featureName} Page] Set ${featureName} Filtering`, props());
96
- const setRequestParams = createAction(`[${featureName} Page] Set ${featureName} Request Params`, props());
97
- const changePageSize = createAction(`[${featureName} Page] Change ${featureName} Page Size`, props());
98
- const changePageNumber = createAction(`[${featureName} Page] Change ${featureName} Page Number`, props());
99
- const changePagingOptions = createAction(`[${featureName} Page] Change ${featureName} Page Options`, props());
100
- const changeSorting = createAction(`[${featureName} Page] Change ${featureName} Sorting`, props());
101
- const changeFiltering = createAction(`[${featureName} Page] Change ${featureName} Filtering`, props());
102
- const changeSelectedResources = createAction(`[${featureName} Page] Change Selected Resources ${featureName}`, props());
103
- const changeRequestParams = createAction(`[${featureName} Page] Change ${featureName} Request Params`, props());
104
- const loadPage = createAction(`[${featureName} Page] Load ${featureName} Page`);
105
- const loadPageSuccess = createAction(`[${featureName} Page] Load ${featureName} Page Success`, props());
106
- const loadPageFailure = createAction(`[${featureName} Page] Load ${featureName} Page Failure`, props());
107
- const deleteAction = createAction(`[${featureName} Page] Delete ${featureName}`, props());
108
- const deleteSuccess = createAction(`[${featureName} Page] Delete ${featureName} Success`, props());
109
- const deleteFailure = createAction(`[${featureName} Page] Delete ${featureName} Failure`, props());
110
- const patch = createAction(`[${featureName} Page] Patch ${featureName}`, props());
111
- const patchSuccess = createAction(`[${featureName} Page] Patch ${featureName} Success`, props());
112
- const patchFailure = createAction(`[${featureName} Page] Patch ${featureName} Failure`, props());
113
- const showRemovalsConfirmation = createAction(`[${featureName} Page] Show ${featureName} Removal Confirmation`);
114
- return {
115
- initialize,
116
- reset,
117
- setPageSize,
118
- setSorting,
119
- setFiltering,
120
- setRequestParams,
121
- changePageSize,
122
- changePageNumber,
123
- changePagingOptions,
124
- changeSorting,
125
- changeFiltering,
126
- changeRequestParams,
127
- loadPreviousPage,
128
- loadNextPage,
129
- loadFirstPage,
130
- changeSelectedResources,
131
- loadPage,
132
- loadPageSuccess,
133
- loadPageFailure,
134
- delete: deleteAction,
135
- deleteSuccess,
136
- deleteFailure,
137
- patch,
138
- patchSuccess,
139
- patchFailure,
140
- resetRequestState,
141
- showRemovalsConfirmation
142
- };
143
- }
144
-
145
- function createListEntityAdapter(idKey = 'id') {
146
- return createEntityAdapter({
147
- selectId: resource => resource[idKey]
148
- });
149
- }
150
- function createListReducer(entityAdapter, actions, actionHandlers, initialListState) {
151
- const initialState = Object.assign(Object.assign({}, createInitialListState(entityAdapter)), initialListState);
152
- return createReducer(initialState, ...createListActionHandlers(initialState, entityAdapter, actions), ...(actionHandlers || []));
153
- }
154
- function createInitialListState(entityAdapter) {
155
- return entityAdapter.getInitialState(Object.assign(Object.assign({}, DEFAULT_REQUEST_OPTIONS), { lastPageNumber: undefined, selectedResourceIds: [], loadingState: RequestState.IDLE, requestState: RequestState.IDLE, errors: undefined }));
156
- }
157
- function createListActionHandlers(initialListState, entityAdapter, actions) {
158
- return [
159
- on(actions.reset, () => initialListState),
160
- on(actions.initialize, (state) => entityAdapter.removeAll(Object.assign(Object.assign({}, state), { selectedResourceIds: [], pagingOptions: Object.assign(Object.assign({}, state.pagingOptions), { page: DEFAULT_PAGE }), requestState: RequestState.IDLE }))),
161
- on(actions.changePageSize, actions.setPageSize, (state, { pageSize }) => (Object.assign(Object.assign({}, state), { pagingOptions: { page: DEFAULT_PAGE, pageSize }, lastPageNumber: undefined }))),
162
- on(actions.changePageNumber, (state, { pageNumber }) => (Object.assign(Object.assign({}, state), { pagingOptions: Object.assign(Object.assign({}, state.pagingOptions), { page: pageNumber }) }))),
163
- on(actions.changeSorting, actions.setSorting, (state, { sortingOptions }) => (Object.assign(Object.assign({}, state), { sortingOptions, pagingOptions: Object.assign(Object.assign({}, state.pagingOptions), { page: DEFAULT_PAGE }) }))),
164
- on(actions.changeFiltering, actions.setFiltering, (state, { filteringOptions }) => (Object.assign(Object.assign({}, state), { filteringOptions, pagingOptions: Object.assign(Object.assign({}, state.pagingOptions), { page: DEFAULT_PAGE }), lastPageNumber: undefined }))),
165
- on(actions.changeRequestParams, actions.setRequestParams, (state, { params }) => (Object.assign(Object.assign({}, state), { requestParameters: params, pagingOptions: Object.assign(Object.assign({}, state.pagingOptions), { page: DEFAULT_PAGE }) }))),
166
- on(actions.changeSelectedResources, (state, { selectedResourceIds }) => (Object.assign(Object.assign({}, state), { selectedResourceIds }))),
167
- on(actions.loadFirstPage, (state) => (Object.assign(Object.assign({}, state), { pagingOptions: Object.assign(Object.assign({}, state.pagingOptions), { page: 1 }) }))),
168
- on(actions.loadPageSuccess, (state, { resources, pagingOptions }) => {
169
- const lastPageNumber = getLastPageNumber(resources, pagingOptions) || state.lastPageNumber;
170
- if (lastPageNumber && pagingOptions.page > lastPageNumber) {
171
- return Object.assign(Object.assign({}, state), { pagingOptions: Object.assign(Object.assign({}, state.pagingOptions), { page: lastPageNumber }), lastPageNumber, selectedResourceIds: [] });
172
- }
173
- return entityAdapter.setAll(resources, Object.assign(Object.assign({}, state), { lastPageNumber, selectedResourceIds: [] }));
174
- }),
175
- on(actions.deleteSuccess, (state) => (Object.assign(Object.assign({}, state), { selectedResourceIds: [] }))),
176
- ...createLoadingStateActionHandlers(actions.loadPage, actions.loadPageSuccess, actions.loadPageFailure),
177
- ...createRequestStateActionHandlers(undefined, actions.delete, actions.deleteSuccess, actions.deleteFailure),
178
- ...createRequestStateActionHandlers(actions.resetRequestState, actions.patch, actions.patchSuccess, actions.patchFailure)
179
- ];
180
- }
181
-
182
- /* eslint-disable @typescript-eslint/ban-types */
183
- function createListSelectors(entityAdapter, getListState) {
184
- const getAll = createSelector(getListState, entityAdapter.getSelectors().selectAll);
185
- const getPagingOptions = createSelector(getListState, state => state.pagingOptions);
186
- const getRequestOptions = createSelector(getListState, (state) => ({
187
- pagingOptions: state.pagingOptions,
188
- sortingOptions: state.sortingOptions,
189
- filteringOptions: state.filteringOptions
190
- }));
191
- const getLastPageNumber = createSelector(getListState, state => state.lastPageNumber);
192
- const isLastPage = createSelector(getPagingOptions, getLastPageNumber, ({ page }, lastPageNumber) => {
193
- return lastPageNumber ? lastPageNumber <= page : false;
194
- });
195
- const getCurrentPageData = createSelector(getAll, resources => {
196
- return resources;
197
- });
198
- const getSortingOptions = createSelector(getListState, state => state.sortingOptions);
199
- const getRequestParameters = createSelector(getListState, state => state.requestParameters);
200
- const getFilteringOptions = createSelector(getListState, state => state.filteringOptions);
201
- const getCurrentPageNumber = createSelector(getPagingOptions, options => options === null || options === void 0 ? void 0 : options.page);
202
- const getSelectedResourceIds = createSelector(getListState, state => state.selectedResourceIds);
203
- const getLoadingState = createSelector(getListState, state => state.loadingState);
204
- const getSelectedItems = createSelector(getSelectedResourceIds, createSelector(getListState, entityAdapter.getSelectors().selectEntities), (selectedResourceIds, resources) => selectedResourceIds.reduce((acc, selectedResourceId) => {
205
- const resource = resources[selectedResourceId];
206
- if (resource) {
207
- acc.push(resource);
208
- }
209
- return acc;
210
- }, []));
211
- const getSelectionRecord = createSelector(getSelectedResourceIds, createSelector(getListState, entityAdapter.getSelectors().selectEntities), (selectedResourceIds, resources) => selectedResourceIds.reduce((selected, selectedResourceId) => {
212
- const resource = resources[selectedResourceId];
213
- if (resource) {
214
- selected[selectedResourceId] = resource;
215
- }
216
- return selected;
217
- }, {}));
218
- const getRequestState = createSelector(getListState, state => state.requestState);
219
- const getErrors = createSelector(getListState, state => state.errors);
220
- const isReady = createSelector(getAll, getLoadingState, (users, loadingState) => !!users && loadingState === RequestState.SUCCESS);
221
- const areSelectedReady = createSelector(getSelectedResourceIds, getSelectionRecord, getLoadingState, (selectedResourceIds, resources, loadingState) => {
222
- return selectedResourceIds.every(resourceId => !!resources[resourceId]) && loadingState === RequestState.SUCCESS;
223
- });
224
- const isDeleteDisabled = createSelector(getSelectedResourceIds, selectedResourceIds => !selectedResourceIds.length);
225
- const isCopyDisabled = createSelector(getSelectedResourceIds, selectedResourceIds => selectedResourceIds.length !== 1);
226
- const getTotalCount = createSelector(getPagingOptions, isLastPage, getCurrentPageData, (pagingOptions, isLastPage, currentPageData) => {
227
- if (!pagingOptions) {
228
- return 0;
229
- }
230
- if (isLastPage) {
231
- return (pagingOptions.page - 1) * pagingOptions.pageSize + currentPageData.length;
232
- }
233
- return (pagingOptions.page + 1) * pagingOptions.pageSize;
234
- });
235
- return {
236
- getAll,
237
- getRequestOptions,
238
- isLastPage,
239
- getCurrentPageData,
240
- getPagingOptions,
241
- getSortingOptions,
242
- getFilteringOptions,
243
- getRequestParameters,
244
- getCurrentPageNumber,
245
- getLastPageNumber,
246
- getLoadingState,
247
- getSelectedResourceIds,
248
- getSelectedItems,
249
- getSelectionRecord,
250
- getRequestState,
251
- getErrors,
252
- areSelectedReady,
253
- isReady,
254
- isDeleteDisabled,
255
- isCopyDisabled,
256
- getTotalCount
257
- };
258
- }
259
-
260
- class AbstractListReducerManager {
261
- constructor(reducerManager, featureKey) {
262
- this.reducerManager = reducerManager;
263
- this.featureKey = featureKey;
264
- this.actions = this.getActions();
265
- this.entityAdapter = this.getEntityAdapter();
266
- this.addReducer();
267
- this.selectors = this.getSelectors();
268
- }
269
- getActions() {
270
- return createListActions(this.featureKey);
271
- }
272
- getEntityAdapter() {
273
- return createListEntityAdapter();
274
- }
275
- addReducer() {
276
- const currentReducers = Object.keys(this.reducerManager.currentReducers || {});
277
- if (!currentReducers.includes(this.featureKey)) {
278
- const reducer = createListReducer(this.entityAdapter, this.actions);
279
- this.reducerManager.addReducer(this.featureKey, reducer);
280
- }
281
- }
282
- getSelectors() {
283
- const getState = createFeatureSelector(this.featureKey);
284
- return createListSelectors(this.entityAdapter, getState);
285
- }
286
- }
287
- AbstractListReducerManager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AbstractListReducerManager, deps: [{ token: i1.ReducerManager }, { token: LIST_FEATURE_KEY }], target: i0.ɵɵFactoryTarget.Injectable });
288
- AbstractListReducerManager.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AbstractListReducerManager });
289
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AbstractListReducerManager, decorators: [{
290
- type: Injectable
291
- }], ctorParameters: function () {
292
- return [{ type: i1.ReducerManager }, { type: undefined, decorators: [{
293
- type: Inject,
294
- args: [LIST_FEATURE_KEY]
295
- }] }];
296
- } });
297
-
298
- class AbstractListFacade {
299
- constructor(store, listActions, listSelectors) {
300
- this.store = store;
301
- this.listActions = listActions;
302
- this.listSelectors = listSelectors;
303
- this.resources$ = this.store.pipe(select(this.listSelectors.getAll));
304
- this.loadingState$ = this.store.pipe(select(this.listSelectors.getLoadingState));
305
- this.requestState$ = this.store.pipe(select(this.listSelectors.getRequestState));
306
- this.errors$ = this.store.pipe(select(this.listSelectors.getErrors));
307
- this.isReady$ = this.store.pipe(select(this.listSelectors.isReady));
308
- this.areSelectedReady$ = this.store.pipe(select(this.listSelectors.areSelectedReady));
309
- this.currentPageData$ = this.store.pipe(select(this.listSelectors.getCurrentPageData));
310
- this.currentPageNumber$ = this.store.pipe(select(this.listSelectors.getCurrentPageNumber));
311
- this.filteringOptions$ = this.store.pipe(select(this.listSelectors.getFilteringOptions));
312
- this.requestParameters$ = this.store.pipe(select(this.listSelectors.getRequestParameters));
313
- this.lastPageNumber$ = this.store.pipe(select(this.listSelectors.getLastPageNumber));
314
- this.pagingOptions$ = this.store.pipe(select(this.listSelectors.getPagingOptions));
315
- this.requestOptions$ = this.store.pipe(select(this.listSelectors.getRequestOptions));
316
- this.sortingOptions$ = this.store.pipe(select(this.listSelectors.getSortingOptions));
317
- this.selectedItems$ = this.store.pipe(select(this.listSelectors.getSelectedItems));
318
- this.totalCount$ = this.store.pipe(select(this.listSelectors.getTotalCount));
319
- }
320
- setPageSize(props) {
321
- this.store.dispatch(this.listActions.setPageSize(props));
322
- }
323
- setFiltering(props) {
324
- this.store.dispatch(this.listActions.setFiltering(props));
325
- }
326
- setSorting(props) {
327
- this.store.dispatch(this.listActions.setSorting(props));
328
- }
329
- setRequestParameters(props) {
330
- this.store.dispatch(this.listActions.setRequestParams(props));
331
- }
332
- changeFiltering(props) {
333
- this.store.dispatch(this.listActions.changeFiltering(props));
334
- }
335
- changePagingOptions(props) {
336
- this.store.dispatch(this.listActions.changePagingOptions(props));
337
- }
338
- changePageSize(props) {
339
- this.store.dispatch(this.listActions.changePageSize(props));
340
- }
341
- changePageNumber(props) {
342
- this.store.dispatch(this.listActions.changePageNumber(props));
343
- }
344
- changeSelectedResources(props) {
345
- this.store.dispatch(this.listActions.changeSelectedResources(props));
346
- }
347
- changeSorting(props) {
348
- this.store.dispatch(this.listActions.changeSorting(props));
349
- }
350
- changeRequestParams(props) {
351
- this.store.dispatch(this.listActions.changeRequestParams(props));
352
- }
353
- loadPage() {
354
- this.store.dispatch(this.listActions.loadPage());
355
- }
356
- loadFirstPage() {
357
- this.store.dispatch(this.listActions.loadFirstPage());
358
- }
359
- loadNextPage() {
360
- this.store.dispatch(this.listActions.loadNextPage());
361
- }
362
- loadPreviousPage() {
363
- this.store.dispatch(this.listActions.loadPreviousPage());
364
- }
365
- patch(props) {
366
- this.store.dispatch(this.listActions.patch(props));
367
- }
368
- delete(props) {
369
- this.store.dispatch(this.listActions.delete(props));
370
- }
371
- initialize() {
372
- this.store.dispatch(this.listActions.initialize());
373
- }
374
- reinitialize() {
375
- this.store.dispatch(this.listActions.reset());
376
- }
377
- resetRequestState() {
378
- this.store.dispatch(this.listActions.resetRequestState());
379
- }
380
- showRemovalsConfirmation() {
381
- this.store.dispatch(this.listActions.showRemovalsConfirmation());
382
- }
383
- }
384
-
385
- function createListState(featureName, idKey) {
386
- const actions = createListActions(featureName);
387
- const entityAdapter = createListEntityAdapter(idKey);
388
- const reducer = createListReducer(entityAdapter, actions);
389
- const getState = createFeatureSelector(featureName);
390
- const selectors = createListSelectors(entityAdapter, getState);
391
- return {
392
- actions,
393
- reducer: (state, action) => reducer(state, action),
394
- selectors,
395
- entityAdapter
396
- };
397
- }
398
-
399
- /**
400
- * Generated bundle index. Do not edit.
401
- */
402
-
403
- export { AbstractListEffects, AbstractListFacade, AbstractListReducerManager, LIST_FEATURE_KEY, createListActions, createListEntityAdapter, createListReducer, createListSelectors, createListState };
404
- //# sourceMappingURL=ngdux-list.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ngdux-list.mjs","sources":["../../../../../../../libs/ngdux/util/store/list/src/lib/+state/abstract-list-effects.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/models/list.model.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/+state/list-actions.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/+state/list-reducer.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/+state/list-selectors.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/+state/abstract-list-state.service.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/+state/abstract-list.facade.ts","../../../../../../../libs/ngdux/util/store/list/src/lib/+state/list-state.ts","../../../../../../../libs/ngdux/util/store/list/src/ngdux-list.ts"],"sourcesContent":["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, concatMap, 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, S = T> {\r\n texts = {\r\n deleteConfirmationTitle: 'Delete resources',\r\n deleteConfirmationMessage: 'Are you sure to delete the selected resources?'\r\n };\r\n\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.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 changePagingOptions$ = createEffect(() =>\r\n this.actions$.pipe(\r\n ofType(this.listActions.changePagingOptions),\r\n withLatestFrom(this.store.pipe(select(this.listSelectors.getPagingOptions))),\r\n map(([action, pagingOptions]) => {\r\n if (action.pagingOptions.pageSize !== pagingOptions.pageSize) {\r\n return this.listActions.changePageSize({ pageSize: action.pagingOptions.pageSize });\r\n } else {\r\n return this.listActions.changePageNumber({ pageNumber: action.pagingOptions.page });\r\n }\r\n })\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 concatMap(([, 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 showRemovalsDialog$ = createEffect(() =>\r\n this.actions$.pipe(\r\n ofType(this.listActions.showRemovalsConfirmation),\r\n switchMap(() => {\r\n if (this.notificationService?.openConfirmationDialog) {\r\n return this.notificationService.openConfirmationDialog({\r\n message: this.texts.deleteConfirmationMessage,\r\n title: this.texts.deleteConfirmationTitle\r\n });\r\n }\r\n\r\n return of(true);\r\n }),\r\n filter(confirmed => confirmed),\r\n withLatestFrom(this.store.pipe(select(this.listSelectors.getSelectedResourceIds))),\r\n map(([, resourceIds]) => this.listActions.delete({ resourceIds }))\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 deleteUsersSuccess$ = 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>,\r\n protected readonly listActions: ListActions<T, E, S>,\r\n protected readonly listSelectors: ListSelectors<S, E>,\r\n protected readonly notificationService?: ListNotificationService<E>\r\n ) {}\r\n}\r\n","/* eslint-disable @typescript-eslint/ban-types */\r\nimport { InjectionToken } from '@angular/core';\r\nimport {\r\n ErrorDto,\r\n FilteringOptions,\r\n PagingOptions,\r\n RequestOptions,\r\n RequestState,\r\n SortingOptions\r\n} from '@ngdux/data-model-common';\r\nimport { ApiRequestState, LoadingState } from '@ngdux/store-common';\r\nimport { EntityState } from '@ngrx/entity';\r\nimport { ActionCreator, MemoizedSelector } from '@ngrx/store';\r\nimport { TypedAction } from '@ngrx/store/src/models';\r\n\r\nexport const LIST_FEATURE_KEY = new InjectionToken<string>('LIST_FEATURE_KEY');\r\n\r\nexport interface ListState<T, E> extends EntityState<T>, RequestOptions, ApiRequestState<E>, LoadingState {\r\n selectedResourceIds: string[];\r\n lastPageNumber?: number;\r\n}\r\n\r\nexport interface ListSelectors<T, E> {\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, SortingOptions>;\r\n getFilteringOptions: MemoizedSelector<object, FilteringOptions>;\r\n getRequestParameters: MemoizedSelector<object, Record<string, string> | 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, 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 } & TypedAction<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: SortingOptions }) => { sortingOptions: SortingOptions } & TypedAction<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 } & TypedAction<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 } & TypedAction<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 } & TypedAction<string>\r\n >;\r\n\r\n /**\r\n * Change the page number and reload the list\r\n */\r\n changePageNumber: ActionCreator<\r\n string,\r\n (props: { pageNumber: number }) => { pageNumber: number } & TypedAction<string>\r\n >;\r\n /**\r\n * Change the page size and reload the list\r\n */\r\n changePageSize: ActionCreator<string, (props: { pageSize: number }) => { pageSize: number } & TypedAction<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: SortingOptions }) => { sortingOptions: SortingOptions } & TypedAction<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 } & TypedAction<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 } & TypedAction<string>>;\r\n\r\n changeSelectedResources: ActionCreator<\r\n string,\r\n (props: { selectedResourceIds: string[] }) => { selectedResourceIds: string[] } & TypedAction<string>\r\n >;\r\n loadPage: ActionCreator<string, () => TypedAction<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 } & TypedAction<string>\r\n >;\r\n loadPageFailure: ActionCreator<string, (props: { errors: Error }) => { errors: Error } & TypedAction<string>>;\r\n delete: ActionCreator<string, (props: { resourceIds: string[] }) => { resourceIds: string[] } & TypedAction<string>>;\r\n deleteSuccess: ActionCreator<\r\n string,\r\n (props: { resourceIds: string[] }) => { resourceIds: string[] } & TypedAction<string>\r\n >;\r\n deleteFailure: ActionCreator<string, (props: { errors: Error }) => { errors: Error } & TypedAction<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> } & TypedAction<string>\r\n >;\r\n patchSuccess: ActionCreator<\r\n string,\r\n (props: { resources: (Entity | ErrorDto)[] }) => { resources: (Entity | ErrorDto)[] } & TypedAction<string>\r\n >;\r\n patchFailure: ActionCreator<string, (props: { errors: Error }) => { errors: Error } & TypedAction<string>>;\r\n loadNextPage: ActionCreator<string, () => TypedAction<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, () => TypedAction<string>>;\r\n /**\r\n * Reset to the initial state\r\n */\r\n reset: ActionCreator<string, () => TypedAction<string>>;\r\n loadPreviousPage: ActionCreator<string, () => TypedAction<string>>;\r\n loadFirstPage: ActionCreator<string, () => TypedAction<string>>;\r\n /**\r\n * Reset the request state to idle\r\n */\r\n resetRequestState: ActionCreator<string, () => TypedAction<string>>;\r\n showRemovalsConfirmation: ActionCreator<string, () => TypedAction<string>>;\r\n}\r\n","import { ErrorDto, FilteringOptions, PagingOptions, SortingOptions } 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} Page] Reset ${featureName} Request State`);\r\n const initialize = createAction(`[${featureName} Page] Initialize ${featureName}`);\r\n const reset = createAction(`[Organization ${featureName} Page] Reset ${featureName}`);\r\n\r\n const loadNextPage = createAction(`[${featureName} Page] Load Next ${featureName} Page`);\r\n const loadPreviousPage = createAction(`[${featureName} Page] Load Previous ${featureName} Page`);\r\n const loadFirstPage = createAction(`[${featureName} Page] Load First ${featureName} Page`);\r\n\r\n const setPageSize = createAction(`[${featureName} Page] Set ${featureName} Page Size`, props<{ pageSize: number }>());\r\n const setSorting = createAction(\r\n `[${featureName} Page] Set ${featureName} Sorting`,\r\n props<{ sortingOptions: SortingOptions }>()\r\n );\r\n const setFiltering = createAction(\r\n `[${featureName} Page] Set ${featureName} Filtering`,\r\n props<{ filteringOptions: FilteringOptions }>()\r\n );\r\n const setRequestParams = createAction(\r\n `[${featureName} Page] Set ${featureName} Request Params`,\r\n props<{ params: Params }>()\r\n );\r\n\r\n const changePageSize = createAction(\r\n `[${featureName} Page] Change ${featureName} Page Size`,\r\n props<{ pageSize: number }>()\r\n );\r\n\r\n const changePageNumber = createAction(\r\n `[${featureName} Page] Change ${featureName} Page Number`,\r\n props<{ pageNumber: number }>()\r\n );\r\n\r\n const changePagingOptions = createAction(\r\n `[${featureName} Page] Change ${featureName} Page Options`,\r\n props<{ pagingOptions: PagingOptions }>()\r\n );\r\n const changeSorting = createAction(\r\n `[${featureName} Page] Change ${featureName} Sorting`,\r\n props<{ sortingOptions: SortingOptions }>()\r\n );\r\n const changeFiltering = createAction(\r\n `[${featureName} Page] Change ${featureName} Filtering`,\r\n props<{ filteringOptions: FilteringOptions }>()\r\n );\r\n const changeSelectedResources = createAction(\r\n `[${featureName} Page] Change Selected Resources ${featureName}`,\r\n props<{ selectedResourceIds: string[] }>()\r\n );\r\n const changeRequestParams = createAction(\r\n `[${featureName} Page] Change ${featureName} Request Params`,\r\n props<{ params: Params }>()\r\n );\r\n\r\n const loadPage = createAction(`[${featureName} Page] Load ${featureName} Page`);\r\n const loadPageSuccess = createAction(\r\n `[${featureName} Page] Load ${featureName} Page Success`,\r\n props<{ resources: S[]; pagingOptions: PagingOptions }>()\r\n );\r\n const loadPageFailure = createAction(\r\n `[${featureName} Page] Load ${featureName} Page Failure`,\r\n props<{ errors: E }>()\r\n );\r\n\r\n const deleteAction = createAction(`[${featureName} Page] Delete ${featureName}`, props<{ resourceIds: string[] }>());\r\n const deleteSuccess = createAction(\r\n `[${featureName} Page] Delete ${featureName} Success`,\r\n props<{ resourceIds: string[] }>()\r\n );\r\n const deleteFailure = createAction(`[${featureName} Page] Delete ${featureName} Failure`, props<{ errors: E }>());\r\n\r\n const patch = createAction(\r\n `[${featureName} Page] Patch ${featureName}`,\r\n props<{ resourceIds: string[]; resource: Partial<T> }>()\r\n );\r\n const patchSuccess = createAction(\r\n `[${featureName} Page] Patch ${featureName} Success`,\r\n props<{ resources: (T | ErrorDto)[] }>()\r\n );\r\n const patchFailure = createAction(`[${featureName} Page] Patch ${featureName} Failure`, props<{ errors: E }>());\r\n\r\n const showRemovalsConfirmation = createAction(`[${featureName} Page] Show ${featureName} Removal Confirmation`);\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 showRemovalsConfirmation\r\n };\r\n}\r\n","import { DEFAULT_PAGE, DEFAULT_REQUEST_OPTIONS, 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 { EntityAdapter, createEntityAdapter } from '@ngrx/entity';\r\nimport { ActionReducer, ReducerTypes, createReducer, on } 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>(\r\n entityAdapter: EntityAdapter<S>,\r\n actions: ListActions<T, E, S>,\r\n actionHandlers?: ReducerTypes<ListState<S, E>, ActionCreator[]>[],\r\n initialListState?: { [key: string]: unknown }\r\n): ActionReducer<ListState<S, E>> {\r\n const initialState: ListState<S, E> = { ...createInitialListState<S, E>(entityAdapter), ...initialListState };\r\n return createReducer<ListState<S, E>>(\r\n initialState,\r\n ...createListActionHandlers<T, E, S>(initialState, entityAdapter, actions),\r\n ...(actionHandlers || [])\r\n );\r\n}\r\n\r\nfunction createInitialListState<T, E>(entityAdapter: EntityAdapter<T>): ListState<T, E> {\r\n return entityAdapter.getInitialState({\r\n ...DEFAULT_REQUEST_OPTIONS,\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>(\r\n initialListState: ListState<S, E>,\r\n entityAdapter: EntityAdapter<S>,\r\n actions: ListActions<T, E, S>\r\n): ReducerTypes<ListState<S, E>, ActionCreator[]>[] {\r\n return [\r\n on(actions.reset, () => initialListState),\r\n on(actions.initialize, (state: ListState<S, E>) =>\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>, { 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>, { pageNumber }) => ({\r\n ...state,\r\n pagingOptions: { ...state.pagingOptions, page: pageNumber }\r\n })),\r\n on(actions.changeSorting, actions.setSorting, (state: ListState<S, E>, { 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>, { 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 }): ListState<S, E> => ({\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>, { selectedResourceIds }) => ({\r\n ...state,\r\n selectedResourceIds\r\n })),\r\n on(actions.loadFirstPage, (state: ListState<S, E>) => ({\r\n ...state,\r\n pagingOptions: { ...state.pagingOptions, page: 1 }\r\n })),\r\n on(actions.loadPageSuccess, (state: ListState<S, E>, { 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>) => ({\r\n ...state,\r\n selectedResourceIds: [] as string[]\r\n })),\r\n ...createLoadingStateActionHandlers<ListState<S, E>>(\r\n actions.loadPage,\r\n actions.loadPageSuccess,\r\n actions.loadPageFailure\r\n ),\r\n ...createRequestStateActionHandlers<ListState<S, E>, E>(\r\n undefined,\r\n actions.delete,\r\n actions.deleteSuccess,\r\n actions.deleteFailure\r\n ),\r\n ...createRequestStateActionHandlers<ListState<S, E>, 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>(\r\n entityAdapter: EntityAdapter<T>,\r\n getListState: MemoizedSelector<object, ListState<T, E>, DefaultProjectorFn<ListState<T, E>>>\r\n): ListSelectors<T, E> {\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_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> {\r\n actions: ListActions<T, E, S>;\r\n selectors: ListSelectors<S, E>;\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>(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>(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>>(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> {\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>,\r\n private readonly listSelectors: ListSelectors<S, E>\r\n ) {}\r\n\r\n setPageSize(props: ActionPayload<ListActions<T, E>['setPageSize']>): void {\r\n this.store.dispatch(this.listActions.setPageSize(props));\r\n }\r\n\r\n setFiltering(props: ActionPayload<ListActions<T, E>['setFiltering']>): void {\r\n this.store.dispatch(this.listActions.setFiltering(props));\r\n }\r\n\r\n setSorting(props: ActionPayload<ListActions<T, E>['setSorting']>): void {\r\n this.store.dispatch(this.listActions.setSorting(props));\r\n }\r\n\r\n setRequestParameters(props: ActionPayload<ListActions<T, E>['setRequestParams']>) {\r\n this.store.dispatch(this.listActions.setRequestParams(props));\r\n }\r\n\r\n changeFiltering(props: ActionPayload<ListActions<T, E>['changeFiltering']>): void {\r\n this.store.dispatch(this.listActions.changeFiltering(props));\r\n }\r\n\r\n changePagingOptions(props: ActionPayload<ListActions<T, E>['changePagingOptions']>): void {\r\n this.store.dispatch(this.listActions.changePagingOptions(props));\r\n }\r\n\r\n changePageSize(props: ActionPayload<ListActions<T, E>['changePageSize']>): void {\r\n this.store.dispatch(this.listActions.changePageSize(props));\r\n }\r\n\r\n changePageNumber(props: ActionPayload<ListActions<T, E>['changePageNumber']>): void {\r\n this.store.dispatch(this.listActions.changePageNumber(props));\r\n }\r\n\r\n changeSelectedResources(props: ActionPayload<ListActions<T, E>['changeSelectedResources']>): void {\r\n this.store.dispatch(this.listActions.changeSelectedResources(props));\r\n }\r\n\r\n changeSorting(props: ActionPayload<ListActions<T, E>['changeSorting']>): void {\r\n this.store.dispatch(this.listActions.changeSorting(props));\r\n }\r\n\r\n changeRequestParams(props: ActionPayload<ListActions<T, E>['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>['patch']>): void {\r\n this.store.dispatch(this.listActions.patch(props));\r\n }\r\n\r\n delete(props: ActionPayload<ListActions<T, E>['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 showRemovalsConfirmation(): void {\r\n this.store.dispatch(this.listActions.showRemovalsConfirmation());\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<T extends { [key: string]: any }, E, S extends { [key: string]: any } = T>(\r\n featureName: string,\r\n idKey?: string\r\n) {\r\n const actions = createListActions<T, E, S>(featureName);\r\n const entityAdapter = createListEntityAdapter<S>(idKey);\r\n const reducer = createListReducer<T, E, S>(entityAdapter, actions);\r\n const getState = createFeatureSelector<ListState<S, E>>(featureName);\r\n const selectors = createListSelectors<S, E>(entityAdapter, getState);\r\n\r\n return {\r\n actions,\r\n reducer: (state: ListState<S, E>, action: Action): ListState<S, E> => 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":[],"mappings":"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"}