@ngdux/list 1.4.0 → 3.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.
- package/{esm2020 → esm2022}/index.mjs +11 -11
- package/{esm2020 → esm2022}/lib/+state/effects.mjs +23 -23
- package/esm2022/lib/+state/state.service.mjs +55 -0
- package/esm2022/lib/models/list.model.mjs +7 -0
- package/{esm2020 → esm2022}/lib/ngdux-list-state.module.mjs +53 -53
- package/{esm2020 → esm2022}/lib/services/list-notification-service.mjs +21 -21
- package/esm2022/lib/state-generator/abstract-list-effects.mjs +50 -0
- package/esm2022/lib/state-generator/abstract-list-state.service.mjs +44 -0
- package/{esm2020 → esm2022}/lib/state-generator/abstract-list.facade.mjs +85 -91
- package/{esm2020 → esm2022}/lib/state-generator/list-actions.mjs +58 -63
- package/esm2022/lib/state-generator/list-reducer.mjs +104 -0
- package/esm2022/lib/state-generator/list-selectors.mjs +80 -0
- package/{esm2020 → esm2022}/lib/state-generator/list-state.mjs +17 -17
- package/{esm2020 → esm2022}/ngdux-list.mjs +4 -4
- package/{fesm2020 → fesm2022}/ngdux-list.mjs +523 -550
- package/fesm2022/ngdux-list.mjs.map +1 -0
- package/index.d.ts +11 -11
- package/lib/+state/effects.d.ts +14 -14
- package/lib/+state/state.service.d.ts +22 -22
- package/lib/models/list.model.d.ts +191 -195
- package/lib/ngdux-list-state.module.d.ts +23 -23
- package/lib/services/list-notification-service.d.ts +13 -13
- package/lib/state-generator/abstract-list-effects.d.ts +49 -59
- package/lib/state-generator/abstract-list-state.service.d.ts +21 -21
- package/lib/state-generator/abstract-list.facade.d.ts +45 -49
- package/lib/state-generator/list-actions.d.ts +2 -2
- package/lib/state-generator/list-reducer.d.ts +10 -10
- package/lib/state-generator/list-selectors.d.ts +4 -4
- package/lib/state-generator/list-state.d.ts +12 -12
- package/package.json +11 -120
- package/esm2020/lib/+state/state.service.mjs +0 -55
- package/esm2020/lib/models/list.model.mjs +0 -7
- package/esm2020/lib/state-generator/abstract-list-effects.mjs +0 -66
- package/esm2020/lib/state-generator/abstract-list-state.service.mjs +0 -44
- package/esm2020/lib/state-generator/list-reducer.mjs +0 -104
- package/esm2020/lib/state-generator/list-selectors.mjs +0 -80
- package/fesm2015/ngdux-list.mjs +0 -537
- package/fesm2015/ngdux-list.mjs.map +0 -1
- package/fesm2020/ngdux-list.mjs.map +0 -1
package/fesm2015/ngdux-list.mjs
DELETED
|
@@ -1,537 +0,0 @@
|
|
|
1
|
-
import { getDefaultRequestOptions, RequestState, DEFAULT_PAGE } from '@ngdux/data-model-common';
|
|
2
|
-
export { RequestState } from '@ngdux/data-model-common';
|
|
3
|
-
import * as i0 from '@angular/core';
|
|
4
|
-
import { InjectionToken, Injectable, Inject, Optional, NgModule } from '@angular/core';
|
|
5
|
-
import * as i1 from '@ngrx/store';
|
|
6
|
-
import { createAction, props, createReducer, on, createSelector, createFeatureSelector, select, Store } from '@ngrx/store';
|
|
7
|
-
import * as i1$1 from '@ngdux/store-common';
|
|
8
|
-
import { getLastPageNumber, createLoadingStateActionHandlers, createRequestStateActionHandlers } from '@ngdux/store-common';
|
|
9
|
-
import { createEntityAdapter } from '@ngrx/entity';
|
|
10
|
-
import { __decorate, __param, __metadata } from 'tslib';
|
|
11
|
-
import * as i2 from '@ngrx/effects';
|
|
12
|
-
import { createEffect, ofType, Actions } from '@ngrx/effects';
|
|
13
|
-
import { of } from 'rxjs';
|
|
14
|
-
import { map, withLatestFrom, filter, switchMap, catchError, exhaustMap, tap } from 'rxjs/operators';
|
|
15
|
-
|
|
16
|
-
/* eslint-disable @typescript-eslint/ban-types */
|
|
17
|
-
const LIST_FEATURE_KEY = new InjectionToken('LIST_FEATURE_KEY');
|
|
18
|
-
const LIST_FEATURE_KEYS = new InjectionToken('LIST_FEATURE_KEYS');
|
|
19
|
-
const LIST_SERVICES = new InjectionToken('LIST_SERVICES');
|
|
20
|
-
const LIST_NOTIFICATION_SERVICES = new InjectionToken('LIST_NOTIFICATION_SERVICES');
|
|
21
|
-
|
|
22
|
-
function createListActions(featureName) {
|
|
23
|
-
const resetRequestState = createAction(`[${featureName} API] Reset ${featureName} Request State`);
|
|
24
|
-
const initialize = createAction(`[${featureName} API] Initialize ${featureName}`);
|
|
25
|
-
const reset = createAction(`[Organization ${featureName} API] Reset ${featureName}`);
|
|
26
|
-
const loadNextPage = createAction(`[${featureName} API] Load Next ${featureName} Page`);
|
|
27
|
-
const loadPreviousPage = createAction(`[${featureName} API] Load Previous ${featureName} Page`);
|
|
28
|
-
const loadFirstPage = createAction(`[${featureName} API] Load First ${featureName} Page`);
|
|
29
|
-
const setPageSize = createAction(`[${featureName} API] Set ${featureName} Page Size`, props());
|
|
30
|
-
const setSorting = createAction(`[${featureName} API] Set ${featureName} Sorting`, props());
|
|
31
|
-
const setFiltering = createAction(`[${featureName} API] Set ${featureName} Filtering`, props());
|
|
32
|
-
const setRequestParams = createAction(`[${featureName} API] Set ${featureName} Request Params`, props());
|
|
33
|
-
const changePageSize = createAction(`[${featureName} API] Change ${featureName} Page Size`, props());
|
|
34
|
-
const changePageNumber = createAction(`[${featureName} API] Change ${featureName} Page Number`, props());
|
|
35
|
-
const changePagingOptions = createAction(`[${featureName} API] Change ${featureName} Page Options`, props());
|
|
36
|
-
const changeSorting = createAction(`[${featureName} API] Change ${featureName} Sorting`, props());
|
|
37
|
-
const changeFiltering = createAction(`[${featureName} API] Change ${featureName} Filtering`, props());
|
|
38
|
-
const changeSelectedResources = createAction(`[${featureName} API] Change Selected Resources ${featureName}`, props());
|
|
39
|
-
const changeRequestParams = createAction(`[${featureName} API] Change ${featureName} Request Params`, props());
|
|
40
|
-
const loadPage = createAction(`[${featureName} API] Load ${featureName} Page`);
|
|
41
|
-
const loadPageSuccess = createAction(`[${featureName} API] Load ${featureName} Page Success`, props());
|
|
42
|
-
const loadPageFailure = createAction(`[${featureName} API] Load ${featureName} Page Failure`, props());
|
|
43
|
-
const deleteAction = createAction(`[${featureName} API] Delete ${featureName}`, props());
|
|
44
|
-
const deleteSuccess = createAction(`[${featureName} API] Delete ${featureName} Success`, props());
|
|
45
|
-
const deleteFailure = createAction(`[${featureName} API] Delete ${featureName} Failure`, props());
|
|
46
|
-
const patch = createAction(`[${featureName} API] Patch ${featureName}`, props());
|
|
47
|
-
const patchSuccess = createAction(`[${featureName} API] Patch ${featureName} Success`, props());
|
|
48
|
-
const patchFailure = createAction(`[${featureName} API] Patch ${featureName} Failure`, props());
|
|
49
|
-
/**
|
|
50
|
-
* @deprecated The method will be removed. The AbstractEffect will not be responsible for it anymore
|
|
51
|
-
*/
|
|
52
|
-
const showRemovalsConfirmation = createAction(`[${featureName} API] Show ${featureName} Removal Confirmation`);
|
|
53
|
-
return {
|
|
54
|
-
initialize,
|
|
55
|
-
reset,
|
|
56
|
-
setPageSize,
|
|
57
|
-
setSorting,
|
|
58
|
-
setFiltering,
|
|
59
|
-
setRequestParams,
|
|
60
|
-
changePageSize,
|
|
61
|
-
changePageNumber,
|
|
62
|
-
changePagingOptions,
|
|
63
|
-
changeSorting,
|
|
64
|
-
changeFiltering,
|
|
65
|
-
changeRequestParams,
|
|
66
|
-
loadPreviousPage,
|
|
67
|
-
loadNextPage,
|
|
68
|
-
loadFirstPage,
|
|
69
|
-
changeSelectedResources,
|
|
70
|
-
loadPage,
|
|
71
|
-
loadPageSuccess,
|
|
72
|
-
loadPageFailure,
|
|
73
|
-
delete: deleteAction,
|
|
74
|
-
deleteSuccess,
|
|
75
|
-
deleteFailure,
|
|
76
|
-
patch,
|
|
77
|
-
patchSuccess,
|
|
78
|
-
patchFailure,
|
|
79
|
-
resetRequestState,
|
|
80
|
-
showRemovalsConfirmation
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
function createListEntityAdapter(idKey = 'id') {
|
|
85
|
-
return createEntityAdapter({
|
|
86
|
-
selectId: resource => resource[idKey]
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
function createListReducer(entityAdapter, actions, actionHandlers, initialListState) {
|
|
90
|
-
const initialState = Object.assign(Object.assign({}, createInitialListState(entityAdapter)), initialListState);
|
|
91
|
-
return createReducer(initialState, ...createListActionHandlers(initialState, entityAdapter, actions), ...(actionHandlers || []));
|
|
92
|
-
}
|
|
93
|
-
function createInitialListState(entityAdapter) {
|
|
94
|
-
return entityAdapter.getInitialState(Object.assign(Object.assign({}, getDefaultRequestOptions()), { lastPageNumber: undefined, selectedResourceIds: [], loadingState: RequestState.IDLE, requestState: RequestState.IDLE, errors: undefined }));
|
|
95
|
-
}
|
|
96
|
-
function createListActionHandlers(initialListState, entityAdapter, actions) {
|
|
97
|
-
return [
|
|
98
|
-
on(actions.reset, () => initialListState),
|
|
99
|
-
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 }))),
|
|
100
|
-
on(actions.changePageSize, actions.setPageSize, (state, { pageSize }) => (Object.assign(Object.assign({}, state), { pagingOptions: { page: DEFAULT_PAGE, pageSize }, lastPageNumber: undefined }))),
|
|
101
|
-
on(actions.changePageNumber, (state, { pageNumber }) => (Object.assign(Object.assign({}, state), { pagingOptions: Object.assign(Object.assign({}, state.pagingOptions), { page: pageNumber }) }))),
|
|
102
|
-
on(actions.changePagingOptions, (state, { pagingOptions }) => (Object.assign(Object.assign({}, state), { pagingOptions }))),
|
|
103
|
-
on(actions.changeSorting, actions.setSorting, (state, { sortingOptions }) => (Object.assign(Object.assign({}, state), { sortingOptions, pagingOptions: Object.assign(Object.assign({}, state.pagingOptions), { page: DEFAULT_PAGE }) }))),
|
|
104
|
-
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 }))),
|
|
105
|
-
on(actions.changeRequestParams, actions.setRequestParams, (state, { params }) => (Object.assign(Object.assign({}, state), { requestParameters: params, pagingOptions: Object.assign(Object.assign({}, state.pagingOptions), { page: DEFAULT_PAGE }) }))),
|
|
106
|
-
on(actions.changeSelectedResources, (state, { selectedResourceIds }) => (Object.assign(Object.assign({}, state), { selectedResourceIds }))),
|
|
107
|
-
on(actions.loadFirstPage, (state) => (Object.assign(Object.assign({}, state), { pagingOptions: Object.assign(Object.assign({}, state.pagingOptions), { page: 1 }) }))),
|
|
108
|
-
on(actions.loadPageSuccess, (state, { resources, pagingOptions }) => {
|
|
109
|
-
const lastPageNumber = getLastPageNumber(resources, pagingOptions) || state.lastPageNumber;
|
|
110
|
-
if (lastPageNumber && pagingOptions.page > lastPageNumber) {
|
|
111
|
-
return Object.assign(Object.assign({}, state), { pagingOptions: Object.assign(Object.assign({}, state.pagingOptions), { page: lastPageNumber }), lastPageNumber, selectedResourceIds: [] });
|
|
112
|
-
}
|
|
113
|
-
return entityAdapter.setAll(resources, Object.assign(Object.assign({}, state), { lastPageNumber, selectedResourceIds: [] }));
|
|
114
|
-
}),
|
|
115
|
-
on(actions.deleteSuccess, (state) => (Object.assign(Object.assign({}, state), { selectedResourceIds: [] }))),
|
|
116
|
-
...createLoadingStateActionHandlers(actions.loadPage, actions.loadPageSuccess, actions.loadPageFailure),
|
|
117
|
-
...createRequestStateActionHandlers(undefined, actions.delete, actions.deleteSuccess, actions.deleteFailure),
|
|
118
|
-
...createRequestStateActionHandlers(actions.resetRequestState, actions.patch, actions.patchSuccess, actions.patchFailure)
|
|
119
|
-
];
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/* eslint-disable @typescript-eslint/ban-types */
|
|
123
|
-
function createListSelectors(entityAdapter, getListState) {
|
|
124
|
-
const getAll = createSelector(getListState, entityAdapter.getSelectors().selectAll);
|
|
125
|
-
const getPagingOptions = createSelector(getListState, state => state.pagingOptions);
|
|
126
|
-
const getRequestOptions = createSelector(getListState, (state) => ({
|
|
127
|
-
pagingOptions: state.pagingOptions,
|
|
128
|
-
sortingOptions: state.sortingOptions,
|
|
129
|
-
filteringOptions: state.filteringOptions
|
|
130
|
-
}));
|
|
131
|
-
const getLastPageNumber = createSelector(getListState, state => state.lastPageNumber);
|
|
132
|
-
const isLastPage = createSelector(getPagingOptions, getLastPageNumber, ({ page }, lastPageNumber) => {
|
|
133
|
-
return lastPageNumber ? lastPageNumber <= page : false;
|
|
134
|
-
});
|
|
135
|
-
const getCurrentPageData = createSelector(getAll, resources => {
|
|
136
|
-
return resources;
|
|
137
|
-
});
|
|
138
|
-
const getSortingOptions = createSelector(getListState, state => state.sortingOptions);
|
|
139
|
-
const getRequestParameters = createSelector(getListState, state => state.requestParameters);
|
|
140
|
-
const getFilteringOptions = createSelector(getListState, state => state.filteringOptions);
|
|
141
|
-
const getCurrentPageNumber = createSelector(getPagingOptions, options => options === null || options === void 0 ? void 0 : options.page);
|
|
142
|
-
const getSelectedResourceIds = createSelector(getListState, state => state.selectedResourceIds);
|
|
143
|
-
const getLoadingState = createSelector(getListState, state => state.loadingState);
|
|
144
|
-
const getSelectedItems = createSelector(getSelectedResourceIds, createSelector(getListState, entityAdapter.getSelectors().selectEntities), (selectedResourceIds, resources) => selectedResourceIds.reduce((acc, selectedResourceId) => {
|
|
145
|
-
const resource = resources[selectedResourceId];
|
|
146
|
-
if (resource) {
|
|
147
|
-
acc.push(resource);
|
|
148
|
-
}
|
|
149
|
-
return acc;
|
|
150
|
-
}, []));
|
|
151
|
-
const getSelectionRecord = createSelector(getSelectedResourceIds, createSelector(getListState, entityAdapter.getSelectors().selectEntities), (selectedResourceIds, resources) => selectedResourceIds.reduce((selected, selectedResourceId) => {
|
|
152
|
-
const resource = resources[selectedResourceId];
|
|
153
|
-
if (resource) {
|
|
154
|
-
selected[selectedResourceId] = resource;
|
|
155
|
-
}
|
|
156
|
-
return selected;
|
|
157
|
-
}, {}));
|
|
158
|
-
const getRequestState = createSelector(getListState, state => state.requestState);
|
|
159
|
-
const getErrors = createSelector(getListState, state => state.errors);
|
|
160
|
-
const isReady = createSelector(getAll, getLoadingState, (users, loadingState) => !!users && loadingState === RequestState.SUCCESS);
|
|
161
|
-
const areSelectedReady = createSelector(getSelectedResourceIds, getSelectionRecord, getLoadingState, (selectedResourceIds, resources, loadingState) => {
|
|
162
|
-
return selectedResourceIds.every(resourceId => !!resources[resourceId]) && loadingState === RequestState.SUCCESS;
|
|
163
|
-
});
|
|
164
|
-
const isDeleteDisabled = createSelector(getSelectedResourceIds, selectedResourceIds => !selectedResourceIds.length);
|
|
165
|
-
const isCopyDisabled = createSelector(getSelectedResourceIds, selectedResourceIds => selectedResourceIds.length !== 1);
|
|
166
|
-
const getTotalCount = createSelector(getPagingOptions, isLastPage, getCurrentPageData, (pagingOptions, isLastPage, currentPageData) => {
|
|
167
|
-
if (!pagingOptions) {
|
|
168
|
-
return 0;
|
|
169
|
-
}
|
|
170
|
-
if (isLastPage) {
|
|
171
|
-
return (pagingOptions.page - 1) * pagingOptions.pageSize + currentPageData.length;
|
|
172
|
-
}
|
|
173
|
-
return (pagingOptions.page + 1) * pagingOptions.pageSize;
|
|
174
|
-
});
|
|
175
|
-
return {
|
|
176
|
-
getAll,
|
|
177
|
-
getRequestOptions,
|
|
178
|
-
isLastPage,
|
|
179
|
-
getCurrentPageData,
|
|
180
|
-
getPagingOptions,
|
|
181
|
-
getSortingOptions,
|
|
182
|
-
getFilteringOptions,
|
|
183
|
-
getRequestParameters,
|
|
184
|
-
getCurrentPageNumber,
|
|
185
|
-
getLastPageNumber,
|
|
186
|
-
getLoadingState,
|
|
187
|
-
getSelectedResourceIds,
|
|
188
|
-
getSelectedItems,
|
|
189
|
-
getSelectionRecord,
|
|
190
|
-
getRequestState,
|
|
191
|
-
getErrors,
|
|
192
|
-
areSelectedReady,
|
|
193
|
-
isReady,
|
|
194
|
-
isDeleteDisabled,
|
|
195
|
-
isCopyDisabled,
|
|
196
|
-
getTotalCount
|
|
197
|
-
};
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
class ListStateService {
|
|
201
|
-
constructor(reducerManager, featureKeys) {
|
|
202
|
-
this.reducerManager = reducerManager;
|
|
203
|
-
this.actions = {};
|
|
204
|
-
this.selectors = {};
|
|
205
|
-
this.entityAdapter = this.getEntityAdapter();
|
|
206
|
-
featureKeys.forEach(featureKey => {
|
|
207
|
-
if (!this.actions[featureKey]) {
|
|
208
|
-
this.actions[featureKey] = this.getActions(featureKey);
|
|
209
|
-
this.addReducer(featureKey, this.actions[featureKey]);
|
|
210
|
-
this.selectors[featureKey] = this.getSelectors(featureKey);
|
|
211
|
-
}
|
|
212
|
-
});
|
|
213
|
-
}
|
|
214
|
-
getActions(featureKey) {
|
|
215
|
-
return createListActions(featureKey);
|
|
216
|
-
}
|
|
217
|
-
getEntityAdapter() {
|
|
218
|
-
return createListEntityAdapter();
|
|
219
|
-
}
|
|
220
|
-
addReducer(featureKey, actions) {
|
|
221
|
-
const currentReducers = Object.keys(this.reducerManager.currentReducers || {});
|
|
222
|
-
if (!currentReducers.includes(featureKey)) {
|
|
223
|
-
const reducer = createListReducer(this.entityAdapter, actions);
|
|
224
|
-
this.reducerManager.addReducer(featureKey, reducer);
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
getSelectors(featureKey) {
|
|
228
|
-
const getState = createFeatureSelector(featureKey);
|
|
229
|
-
return createListSelectors(this.entityAdapter, getState);
|
|
230
|
-
}
|
|
231
|
-
getFeatureActions(featureKey) {
|
|
232
|
-
return this.actions[featureKey];
|
|
233
|
-
}
|
|
234
|
-
getFeatureSelectors(featureKey) {
|
|
235
|
-
return this.selectors[featureKey];
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
ListStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ListStateService, deps: [{ token: i1.ReducerManager }, { token: LIST_FEATURE_KEYS }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
239
|
-
ListStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ListStateService });
|
|
240
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ListStateService, decorators: [{
|
|
241
|
-
type: Injectable
|
|
242
|
-
}], ctorParameters: function () {
|
|
243
|
-
return [{ type: i1.ReducerManager }, { type: undefined, decorators: [{
|
|
244
|
-
type: Inject,
|
|
245
|
-
args: [LIST_FEATURE_KEYS]
|
|
246
|
-
}] }];
|
|
247
|
-
} });
|
|
248
|
-
|
|
249
|
-
class AbstractListEffects {
|
|
250
|
-
constructor(actions$, store, service, listActions, listSelectors, notificationService) {
|
|
251
|
-
this.actions$ = actions$;
|
|
252
|
-
this.store = store;
|
|
253
|
-
this.service = service;
|
|
254
|
-
this.listActions = listActions;
|
|
255
|
-
this.listSelectors = listSelectors;
|
|
256
|
-
this.notificationService = notificationService;
|
|
257
|
-
this.texts = {
|
|
258
|
-
deleteConfirmationTitle: 'Delete resources',
|
|
259
|
-
deleteConfirmationMessage: 'Are you sure to delete the selected resources?'
|
|
260
|
-
};
|
|
261
|
-
this.reload$ = createEffect(() => this.actions$.pipe(ofType(this.listActions.changePageSize, this.listActions.changeSorting, this.listActions.changeFiltering, this.listActions.changePagingOptions, this.listActions.changeRequestParams, this.listActions.initialize, this.listActions.reset, this.listActions.changePageNumber, this.listActions.patchSuccess, this.listActions.deleteSuccess), map(() => this.listActions.loadPage())));
|
|
262
|
-
this.loadFirstPage$ = createEffect(() => this.actions$.pipe(ofType(this.listActions.loadFirstPage), map(() => this.listActions.changePageNumber({ pageNumber: 1 }))));
|
|
263
|
-
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 }))));
|
|
264
|
-
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 }))));
|
|
265
|
-
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))), switchMap(([, pagingOptions, sortingOptions, filteringOptions, requestParameters]) => {
|
|
266
|
-
return this.service
|
|
267
|
-
.loadResources({
|
|
268
|
-
pagingOptions,
|
|
269
|
-
sortingOptions,
|
|
270
|
-
filteringOptions,
|
|
271
|
-
requestParameters
|
|
272
|
-
})
|
|
273
|
-
.pipe(map(resources => this.listActions.loadPageSuccess({
|
|
274
|
-
resources,
|
|
275
|
-
pagingOptions
|
|
276
|
-
})), catchError((errors) => of(this.listActions.loadPageFailure({ errors }))));
|
|
277
|
-
})));
|
|
278
|
-
this.patch$ = createEffect(() => this.actions$.pipe(ofType(this.listActions.patch), exhaustMap(action => {
|
|
279
|
-
if (!this.service.patchResources) {
|
|
280
|
-
throw new Error('patchResources not implement in the ListService');
|
|
281
|
-
}
|
|
282
|
-
return this.service.patchResources(action.resourceIds, action.resource).pipe(map(resources => this.listActions.patchSuccess({ resources })), catchError((errors) => of(this.listActions.patchFailure({ errors }))));
|
|
283
|
-
})));
|
|
284
|
-
/**
|
|
285
|
-
* @deprecated The method will be removed. THe AbstractEffect will not be responsible for it anymore
|
|
286
|
-
*/
|
|
287
|
-
this.showRemovalsDialog$ = createEffect(() => this.actions$.pipe(ofType(this.listActions.showRemovalsConfirmation), switchMap(() => {
|
|
288
|
-
var _a;
|
|
289
|
-
if ((_a = this.notificationService) === null || _a === void 0 ? void 0 : _a.openConfirmationDialog) {
|
|
290
|
-
return this.notificationService.openConfirmationDialog({
|
|
291
|
-
message: this.texts.deleteConfirmationMessage,
|
|
292
|
-
title: this.texts.deleteConfirmationTitle
|
|
293
|
-
});
|
|
294
|
-
}
|
|
295
|
-
return of(true);
|
|
296
|
-
}), filter(confirmed => confirmed), withLatestFrom(this.store.pipe(select(this.listSelectors.getSelectedResourceIds))), filter(([, resourceIds]) => !!resourceIds.length), map(([, resourceIds]) => this.listActions.delete({ resourceIds }))));
|
|
297
|
-
this.delete$ = createEffect(() => this.actions$.pipe(ofType(this.listActions.delete), exhaustMap(({ resourceIds }) => {
|
|
298
|
-
if (!this.service.deleteResources) {
|
|
299
|
-
throw new Error('deleteResources not implement in the ListService');
|
|
300
|
-
}
|
|
301
|
-
return this.service.deleteResources(resourceIds).pipe(map(() => this.listActions.deleteSuccess({ resourceIds })), catchError((errors) => of(this.listActions.deleteFailure({ errors }))));
|
|
302
|
-
})));
|
|
303
|
-
this.deleteSuccess$ = createEffect(() => this.actions$.pipe(ofType(this.listActions.deleteSuccess), tap(({ resourceIds }) => {
|
|
304
|
-
var _a;
|
|
305
|
-
(_a = this.notificationService) === null || _a === void 0 ? void 0 : _a.onListDelete(resourceIds);
|
|
306
|
-
})), { dispatch: false });
|
|
307
|
-
this.errorsHandler$ = createEffect(() => this.actions$.pipe(ofType(this.listActions.loadPageFailure, this.listActions.deleteFailure, this.listActions.patchFailure), tap(({ errors }) => {
|
|
308
|
-
var _a;
|
|
309
|
-
(_a = this.notificationService) === null || _a === void 0 ? void 0 : _a.onListErrors(errors);
|
|
310
|
-
})), { dispatch: false });
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
let ListEffects = class ListEffects extends AbstractListEffects {
|
|
315
|
-
constructor(actions$, store, listStateService, featureKey, service, notificationService) {
|
|
316
|
-
super(actions$, store, service, listStateService.getFeatureActions(featureKey), listStateService.getFeatureSelectors(featureKey), notificationService);
|
|
317
|
-
this.featureKey = featureKey;
|
|
318
|
-
}
|
|
319
|
-
ngrxOnIdentifyEffects() {
|
|
320
|
-
return this.featureKey;
|
|
321
|
-
}
|
|
322
|
-
};
|
|
323
|
-
ListEffects = __decorate([
|
|
324
|
-
__param(5, Optional()),
|
|
325
|
-
__metadata("design:paramtypes", [Actions,
|
|
326
|
-
Store,
|
|
327
|
-
ListStateService, String, Object, Object])
|
|
328
|
-
], ListEffects);
|
|
329
|
-
|
|
330
|
-
class NotificationServicePlaceholder {
|
|
331
|
-
onListErrors(errors) {
|
|
332
|
-
console.error('ERROR', errors);
|
|
333
|
-
}
|
|
334
|
-
onListDelete(ids) {
|
|
335
|
-
console.log(`Resources ${ids.join(', ')} have been deleted.`);
|
|
336
|
-
}
|
|
337
|
-
openConfirmationDialog(data) {
|
|
338
|
-
console.log(data.title, data.message);
|
|
339
|
-
return of(true);
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
NotificationServicePlaceholder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NotificationServicePlaceholder, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
343
|
-
NotificationServicePlaceholder.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NotificationServicePlaceholder });
|
|
344
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NotificationServicePlaceholder, decorators: [{
|
|
345
|
-
type: Injectable
|
|
346
|
-
}] });
|
|
347
|
-
|
|
348
|
-
class NgduxListStateModule {
|
|
349
|
-
constructor(registerEffectsService, actions$, store, listStateService, featureKeys, services, notificationServices) {
|
|
350
|
-
featureKeys.forEach((featureKey, index) => {
|
|
351
|
-
const listEffects = new ListEffects(actions$, store, listStateService, featureKey, services[index], notificationServices[index]);
|
|
352
|
-
registerEffectsService.registerEffects([listEffects]);
|
|
353
|
-
});
|
|
354
|
-
}
|
|
355
|
-
static config(config) {
|
|
356
|
-
return {
|
|
357
|
-
ngModule: NgduxListStateModule,
|
|
358
|
-
providers: [
|
|
359
|
-
{ provide: LIST_SERVICES, multi: true, useClass: config.service },
|
|
360
|
-
{
|
|
361
|
-
provide: LIST_NOTIFICATION_SERVICES,
|
|
362
|
-
multi: true,
|
|
363
|
-
useClass: config.notificationService || NotificationServicePlaceholder
|
|
364
|
-
}
|
|
365
|
-
]
|
|
366
|
-
};
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
NgduxListStateModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", 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 });
|
|
370
|
-
NgduxListStateModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: NgduxListStateModule });
|
|
371
|
-
NgduxListStateModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgduxListStateModule, providers: [ListStateService] });
|
|
372
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgduxListStateModule, decorators: [{
|
|
373
|
-
type: NgModule,
|
|
374
|
-
args: [{
|
|
375
|
-
providers: [ListStateService]
|
|
376
|
-
}]
|
|
377
|
-
}], ctorParameters: function () {
|
|
378
|
-
return [{ type: i1$1.RegisterEffectsService }, { type: i2.Actions }, { type: i1.Store }, { type: ListStateService }, { type: undefined, decorators: [{
|
|
379
|
-
type: Inject,
|
|
380
|
-
args: [LIST_FEATURE_KEYS]
|
|
381
|
-
}] }, { type: undefined, decorators: [{
|
|
382
|
-
type: Inject,
|
|
383
|
-
args: [LIST_SERVICES]
|
|
384
|
-
}] }, { type: undefined, decorators: [{
|
|
385
|
-
type: Inject,
|
|
386
|
-
args: [LIST_NOTIFICATION_SERVICES]
|
|
387
|
-
}] }];
|
|
388
|
-
} });
|
|
389
|
-
|
|
390
|
-
class AbstractListReducerManager {
|
|
391
|
-
constructor(reducerManager, featureKey) {
|
|
392
|
-
this.reducerManager = reducerManager;
|
|
393
|
-
this.featureKey = featureKey;
|
|
394
|
-
this.actions = this.getActions();
|
|
395
|
-
this.entityAdapter = this.getEntityAdapter();
|
|
396
|
-
this.addReducer();
|
|
397
|
-
this.selectors = this.getSelectors();
|
|
398
|
-
}
|
|
399
|
-
getActions() {
|
|
400
|
-
return createListActions(this.featureKey);
|
|
401
|
-
}
|
|
402
|
-
getEntityAdapter() {
|
|
403
|
-
return createListEntityAdapter();
|
|
404
|
-
}
|
|
405
|
-
addReducer() {
|
|
406
|
-
const currentReducers = Object.keys(this.reducerManager.currentReducers || {});
|
|
407
|
-
if (!currentReducers.includes(this.featureKey)) {
|
|
408
|
-
const reducer = createListReducer(this.entityAdapter, this.actions);
|
|
409
|
-
this.reducerManager.addReducer(this.featureKey, reducer);
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
getSelectors() {
|
|
413
|
-
const getState = createFeatureSelector(this.featureKey);
|
|
414
|
-
return createListSelectors(this.entityAdapter, getState);
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
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 });
|
|
418
|
-
AbstractListReducerManager.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AbstractListReducerManager });
|
|
419
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AbstractListReducerManager, decorators: [{
|
|
420
|
-
type: Injectable
|
|
421
|
-
}], ctorParameters: function () {
|
|
422
|
-
return [{ type: i1.ReducerManager }, { type: undefined, decorators: [{
|
|
423
|
-
type: Inject,
|
|
424
|
-
args: [LIST_FEATURE_KEY]
|
|
425
|
-
}] }];
|
|
426
|
-
} });
|
|
427
|
-
|
|
428
|
-
class AbstractListFacade {
|
|
429
|
-
constructor(store, listActions, listSelectors) {
|
|
430
|
-
this.store = store;
|
|
431
|
-
this.listActions = listActions;
|
|
432
|
-
this.listSelectors = listSelectors;
|
|
433
|
-
this.resources$ = this.store.pipe(select(this.listSelectors.getAll));
|
|
434
|
-
this.loadingState$ = this.store.pipe(select(this.listSelectors.getLoadingState));
|
|
435
|
-
this.requestState$ = this.store.pipe(select(this.listSelectors.getRequestState));
|
|
436
|
-
this.errors$ = this.store.pipe(select(this.listSelectors.getErrors));
|
|
437
|
-
this.isReady$ = this.store.pipe(select(this.listSelectors.isReady));
|
|
438
|
-
this.areSelectedReady$ = this.store.pipe(select(this.listSelectors.areSelectedReady));
|
|
439
|
-
this.currentPageData$ = this.store.pipe(select(this.listSelectors.getCurrentPageData));
|
|
440
|
-
this.currentPageNumber$ = this.store.pipe(select(this.listSelectors.getCurrentPageNumber));
|
|
441
|
-
this.filteringOptions$ = this.store.pipe(select(this.listSelectors.getFilteringOptions));
|
|
442
|
-
this.requestParameters$ = this.store.pipe(select(this.listSelectors.getRequestParameters));
|
|
443
|
-
this.lastPageNumber$ = this.store.pipe(select(this.listSelectors.getLastPageNumber));
|
|
444
|
-
this.pagingOptions$ = this.store.pipe(select(this.listSelectors.getPagingOptions));
|
|
445
|
-
this.requestOptions$ = this.store.pipe(select(this.listSelectors.getRequestOptions));
|
|
446
|
-
this.sortingOptions$ = this.store.pipe(select(this.listSelectors.getSortingOptions));
|
|
447
|
-
this.selectedItems$ = this.store.pipe(select(this.listSelectors.getSelectedItems));
|
|
448
|
-
this.totalCount$ = this.store.pipe(select(this.listSelectors.getTotalCount));
|
|
449
|
-
}
|
|
450
|
-
setPageSize(props) {
|
|
451
|
-
this.store.dispatch(this.listActions.setPageSize(props));
|
|
452
|
-
}
|
|
453
|
-
setFiltering(props) {
|
|
454
|
-
this.store.dispatch(this.listActions.setFiltering(props));
|
|
455
|
-
}
|
|
456
|
-
setSorting(props) {
|
|
457
|
-
this.store.dispatch(this.listActions.setSorting(props));
|
|
458
|
-
}
|
|
459
|
-
setRequestParameters(props) {
|
|
460
|
-
this.store.dispatch(this.listActions.setRequestParams(props));
|
|
461
|
-
}
|
|
462
|
-
changeFiltering(props) {
|
|
463
|
-
this.store.dispatch(this.listActions.changeFiltering(props));
|
|
464
|
-
}
|
|
465
|
-
changePagingOptions(props) {
|
|
466
|
-
this.store.dispatch(this.listActions.changePagingOptions(props));
|
|
467
|
-
}
|
|
468
|
-
changePageSize(props) {
|
|
469
|
-
this.store.dispatch(this.listActions.changePageSize(props));
|
|
470
|
-
}
|
|
471
|
-
changePageNumber(props) {
|
|
472
|
-
this.store.dispatch(this.listActions.changePageNumber(props));
|
|
473
|
-
}
|
|
474
|
-
changeSelectedResources(props) {
|
|
475
|
-
this.store.dispatch(this.listActions.changeSelectedResources(props));
|
|
476
|
-
}
|
|
477
|
-
changeSorting(props) {
|
|
478
|
-
this.store.dispatch(this.listActions.changeSorting(props));
|
|
479
|
-
}
|
|
480
|
-
changeRequestParams(props) {
|
|
481
|
-
this.store.dispatch(this.listActions.changeRequestParams(props));
|
|
482
|
-
}
|
|
483
|
-
loadPage() {
|
|
484
|
-
this.store.dispatch(this.listActions.loadPage());
|
|
485
|
-
}
|
|
486
|
-
loadFirstPage() {
|
|
487
|
-
this.store.dispatch(this.listActions.loadFirstPage());
|
|
488
|
-
}
|
|
489
|
-
loadNextPage() {
|
|
490
|
-
this.store.dispatch(this.listActions.loadNextPage());
|
|
491
|
-
}
|
|
492
|
-
loadPreviousPage() {
|
|
493
|
-
this.store.dispatch(this.listActions.loadPreviousPage());
|
|
494
|
-
}
|
|
495
|
-
patch(props) {
|
|
496
|
-
this.store.dispatch(this.listActions.patch(props));
|
|
497
|
-
}
|
|
498
|
-
delete(props) {
|
|
499
|
-
this.store.dispatch(this.listActions.delete(props));
|
|
500
|
-
}
|
|
501
|
-
initialize() {
|
|
502
|
-
this.store.dispatch(this.listActions.initialize());
|
|
503
|
-
}
|
|
504
|
-
reinitialize() {
|
|
505
|
-
this.store.dispatch(this.listActions.reset());
|
|
506
|
-
}
|
|
507
|
-
resetRequestState() {
|
|
508
|
-
this.store.dispatch(this.listActions.resetRequestState());
|
|
509
|
-
}
|
|
510
|
-
/**
|
|
511
|
-
* @deprecated The method will be removed. The AbstractFacade will not be responsible for it anymore
|
|
512
|
-
*/
|
|
513
|
-
showRemovalsConfirmation() {
|
|
514
|
-
this.store.dispatch(this.listActions.showRemovalsConfirmation());
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
|
|
518
|
-
function createListState(featureName, idKey) {
|
|
519
|
-
const actions = createListActions(featureName);
|
|
520
|
-
const entityAdapter = createListEntityAdapter(idKey);
|
|
521
|
-
const reducer = createListReducer(entityAdapter, actions);
|
|
522
|
-
const getState = createFeatureSelector(featureName);
|
|
523
|
-
const selectors = createListSelectors(entityAdapter, getState);
|
|
524
|
-
return {
|
|
525
|
-
actions,
|
|
526
|
-
reducer: (state, action) => reducer(state, action),
|
|
527
|
-
selectors,
|
|
528
|
-
entityAdapter
|
|
529
|
-
};
|
|
530
|
-
}
|
|
531
|
-
|
|
532
|
-
/**
|
|
533
|
-
* Generated bundle index. Do not edit.
|
|
534
|
-
*/
|
|
535
|
-
|
|
536
|
-
export { AbstractListEffects, AbstractListFacade, AbstractListReducerManager, LIST_FEATURE_KEY, LIST_FEATURE_KEYS, LIST_NOTIFICATION_SERVICES, LIST_SERVICES, ListStateService, NgduxListStateModule, createListActions, createListEntityAdapter, createListReducer, createListSelectors, createListState };
|
|
537
|
-
//# sourceMappingURL=ngdux-list.mjs.map
|