ngrx-entity-crud 12.0.6-beta.2
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/README.md +259 -0
- package/bundles/ngrx-entity-crud.umd.js +1829 -0
- package/bundles/ngrx-entity-crud.umd.js.map +1 -0
- package/esm2015/lib/actions.js +88 -0
- package/esm2015/lib/base-crud-gql.service.js +71 -0
- package/esm2015/lib/base-crud.service.js +136 -0
- package/esm2015/lib/create_adapter.js +14 -0
- package/esm2015/lib/effect.js +467 -0
- package/esm2015/lib/entity_state.js +23 -0
- package/esm2015/lib/ibase-crud-service.js +2 -0
- package/esm2015/lib/j-ngrx-filter.js +133 -0
- package/esm2015/lib/models.js +17 -0
- package/esm2015/lib/reducer.js +353 -0
- package/esm2015/lib/state_selectors.js +56 -0
- package/esm2015/lib/utils.js +19 -0
- package/esm2015/ngrx-entity-crud.js +5 -0
- package/esm2015/public-api.js +7 -0
- package/fesm2015/ngrx-entity-crud.js +1367 -0
- package/fesm2015/ngrx-entity-crud.js.map +1 -0
- package/lib/actions.d.ts +5 -0
- package/lib/actions.d.ts.map +1 -0
- package/lib/base-crud-gql.service.d.ts +19 -0
- package/lib/base-crud-gql.service.d.ts.map +1 -0
- package/lib/base-crud.service.d.ts +34 -0
- package/lib/base-crud.service.d.ts.map +1 -0
- package/lib/create_adapter.d.ts +6 -0
- package/lib/create_adapter.d.ts.map +1 -0
- package/lib/effect.d.ts +132 -0
- package/lib/effect.d.ts.map +1 -0
- package/lib/entity_state.d.ts +9 -0
- package/lib/entity_state.d.ts.map +1 -0
- package/lib/ibase-crud-service.d.ts +13 -0
- package/lib/ibase-crud-service.d.ts.map +1 -0
- package/lib/j-ngrx-filter.d.ts +14 -0
- package/lib/j-ngrx-filter.d.ts.map +1 -0
- package/lib/models.d.ts +494 -0
- package/lib/models.d.ts.map +1 -0
- package/lib/reducer.d.ts +11 -0
- package/lib/reducer.d.ts.map +1 -0
- package/lib/state_selectors.d.ts +5 -0
- package/lib/state_selectors.d.ts.map +1 -0
- package/lib/utils.d.ts +8 -0
- package/lib/utils.d.ts.map +1 -0
- package/ngrx-entity-crud.d.ts +5 -0
- package/ngrx-entity-crud.d.ts.map +1 -0
- package/ngrx-entity-crud.metadata.json +1 -0
- package/package.json +41 -0
- package/public-api.d.ts +7 -0
- package/public-api.d.ts.map +1 -0
- package/schematics/auth/files/model/auth.ts +17 -0
- package/schematics/auth/files/store/auth-store/actions.ts +30 -0
- package/schematics/auth/files/store/auth-store/auth-mock.service.ts +95 -0
- package/schematics/auth/files/store/auth-store/auth-store.module.ts +34 -0
- package/schematics/auth/files/store/auth-store/auth.guard.ts +44 -0
- package/schematics/auth/files/store/auth-store/auth.service.ts +28 -0
- package/schematics/auth/files/store/auth-store/conf.ts +2 -0
- package/schematics/auth/files/store/auth-store/effects.ts +53 -0
- package/schematics/auth/files/store/auth-store/index.d.ts +13 -0
- package/schematics/auth/files/store/auth-store/index.ts +13 -0
- package/schematics/auth/files/store/auth-store/names.ts +3 -0
- package/schematics/auth/files/store/auth-store/reducer.ts +16 -0
- package/schematics/auth/files/store/auth-store/selectors.ts +51 -0
- package/schematics/auth/files/store/auth-store/state.ts +16 -0
- package/schematics/auth/files/views/login/components/logout-button/logout-button.component.ts +49 -0
- package/schematics/auth/files/views/login/login-main/login-main.component.html +25 -0
- package/schematics/auth/files/views/login/login-main/login-main.component.ts +57 -0
- package/schematics/auth/files/views/login/login-routing.module.ts +30 -0
- package/schematics/auth/files/views/login/login.module.ts +30 -0
- package/schematics/auth/index.d.ts +2 -0
- package/schematics/auth/index.js +77 -0
- package/schematics/auth/index.js.map +1 -0
- package/schematics/auth/schema.json +21 -0
- package/schematics/auth0/files/store/auth-store/actions.ts +21 -0
- package/schematics/auth0/files/store/auth-store/auth-store.module.ts +32 -0
- package/schematics/auth0/files/store/auth-store/auth.guard.ts +44 -0
- package/schematics/auth0/files/store/auth-store/authentication.service.ts +32 -0
- package/schematics/auth0/files/store/auth-store/conf.ts +2 -0
- package/schematics/auth0/files/store/auth-store/effects.ts +59 -0
- package/schematics/auth0/files/store/auth-store/index.d.ts +13 -0
- package/schematics/auth0/files/store/auth-store/index.ts +13 -0
- package/schematics/auth0/files/store/auth-store/login.component.ts +75 -0
- package/schematics/auth0/files/store/auth-store/names.ts +3 -0
- package/schematics/auth0/files/store/auth-store/profile.ts +12 -0
- package/schematics/auth0/files/store/auth-store/reducer.ts +23 -0
- package/schematics/auth0/files/store/auth-store/selectors.ts +24 -0
- package/schematics/auth0/files/store/auth-store/state.ts +11 -0
- package/schematics/auth0/index.d.ts +2 -0
- package/schematics/auth0/index.js +67 -0
- package/schematics/auth0/index.js.map +1 -0
- package/schematics/auth0/schema.json +21 -0
- package/schematics/collection.json +30 -0
- package/schematics/my-utility.d.ts +58 -0
- package/schematics/my-utility.js +257 -0
- package/schematics/my-utility.js.map +1 -0
- package/schematics/ng-add/files/root-store/index.d.ts +8 -0
- package/schematics/ng-add/files/root-store/index.ts +8 -0
- package/schematics/ng-add/files/root-store/root-reducer.ts +11 -0
- package/schematics/ng-add/files/root-store/root-store.module.ts +29 -0
- package/schematics/ng-add/files/root-store/router-store/actions.ts +27 -0
- package/schematics/ng-add/files/root-store/router-store/effects.ts +65 -0
- package/schematics/ng-add/files/root-store/router-store/index.d.ts +11 -0
- package/schematics/ng-add/files/root-store/router-store/index.ts +11 -0
- package/schematics/ng-add/files/root-store/router-store/pop-up-base.component.ts +83 -0
- package/schematics/ng-add/files/root-store/router-store/pop-up-base.module.ts +24 -0
- package/schematics/ng-add/files/root-store/router-store/reducer.ts +31 -0
- package/schematics/ng-add/files/root-store/router-store/router-store.module.ts +30 -0
- package/schematics/ng-add/files/root-store/router-store/selectors.ts +63 -0
- package/schematics/ng-add/files/root-store/router-store/state.ts +18 -0
- package/schematics/ng-add/files/root-store/selectors.ts +20 -0
- package/schematics/ng-add/files/root-store/slide-menu-store/actions.ts +11 -0
- package/schematics/ng-add/files/root-store/slide-menu-store/effects.ts +10 -0
- package/schematics/ng-add/files/root-store/slide-menu-store/index.d.ts +13 -0
- package/schematics/ng-add/files/root-store/slide-menu-store/index.ts +13 -0
- package/schematics/ng-add/files/root-store/slide-menu-store/names.ts +3 -0
- package/schematics/ng-add/files/root-store/slide-menu-store/operators.ts +24 -0
- package/schematics/ng-add/files/root-store/slide-menu-store/reducer.ts +8 -0
- package/schematics/ng-add/files/root-store/slide-menu-store/selectors.ts +41 -0
- package/schematics/ng-add/files/root-store/slide-menu-store/slide-menu-store.module.ts +27 -0
- package/schematics/ng-add/files/root-store/slide-menu-store/state.ts +14 -0
- package/schematics/ng-add/files/root-store/state.ts +5 -0
- package/schematics/ng-add/index.d.ts +2 -0
- package/schematics/ng-add/index.js +78 -0
- package/schematics/ng-add/index.js.map +1 -0
- package/schematics/ng-add/schema.json +22 -0
- package/schematics/section/files/ionic/__clazz@dasherize__/__clazz@dasherize__-edit/__clazz@dasherize__-edit.component.html +52 -0
- package/schematics/section/files/ionic/__clazz@dasherize__/__clazz@dasherize__-edit/__clazz@dasherize__-edit.component.ts +57 -0
- package/schematics/section/files/ionic/__clazz@dasherize__/__clazz@dasherize__-list/__clazz@dasherize__-list.component.html +7 -0
- package/schematics/section/files/ionic/__clazz@dasherize__/__clazz@dasherize__-list/__clazz@dasherize__-list.component.ts +50 -0
- package/schematics/section/files/ionic/__clazz@dasherize__/__clazz@dasherize__-main/__clazz@dasherize__-main.component.html +15 -0
- package/schematics/section/files/ionic/__clazz@dasherize__/__clazz@dasherize__-main/__clazz@dasherize__-main.component.ts +23 -0
- package/schematics/section/files/ionic/__clazz@dasherize__/__clazz@dasherize__-routing.module.ts +36 -0
- package/schematics/section/files/ionic/__clazz@dasherize__/__clazz@dasherize__.module.ts +33 -0
- package/schematics/section/files/no-libs/__clazz@dasherize__/__clazz@dasherize__-edit/__clazz@dasherize__-edit.component.html +1 -0
- package/schematics/section/files/no-libs/__clazz@dasherize__/__clazz@dasherize__-edit/__clazz@dasherize__-edit.component.ts +16 -0
- package/schematics/section/files/no-libs/__clazz@dasherize__/__clazz@dasherize__-list/__clazz@dasherize__-list.component.html +1 -0
- package/schematics/section/files/no-libs/__clazz@dasherize__/__clazz@dasherize__-list/__clazz@dasherize__-list.component.ts +27 -0
- package/schematics/section/files/no-libs/__clazz@dasherize__/__clazz@dasherize__-main/__clazz@dasherize__-main.component.html +1 -0
- package/schematics/section/files/no-libs/__clazz@dasherize__/__clazz@dasherize__-main/__clazz@dasherize__-main.component.ts +18 -0
- package/schematics/section/files/no-libs/__clazz@dasherize__/__clazz@dasherize__-routing.module.ts +36 -0
- package/schematics/section/files/no-libs/__clazz@dasherize__/__clazz@dasherize__.module.ts +26 -0
- package/schematics/section/files/primeng/__clazz@dasherize__/__clazz@dasherize__-edit/__clazz@dasherize__-edit.component.html +38 -0
- package/schematics/section/files/primeng/__clazz@dasherize__/__clazz@dasherize__-edit/__clazz@dasherize__-edit.component.ts +50 -0
- package/schematics/section/files/primeng/__clazz@dasherize__/__clazz@dasherize__-list/__clazz@dasherize__-list.component.html +30 -0
- package/schematics/section/files/primeng/__clazz@dasherize__/__clazz@dasherize__-list/__clazz@dasherize__-list.component.ts +101 -0
- package/schematics/section/files/primeng/__clazz@dasherize__/__clazz@dasherize__-main/__clazz@dasherize__-main.component.html +12 -0
- package/schematics/section/files/primeng/__clazz@dasherize__/__clazz@dasherize__-main/__clazz@dasherize__-main.component.ts +21 -0
- package/schematics/section/files/primeng/__clazz@dasherize__/__clazz@dasherize__-routing.module.ts +37 -0
- package/schematics/section/files/primeng/__clazz@dasherize__/__clazz@dasherize__.module.ts +49 -0
- package/schematics/section/files/primeng/__clazz@dasherize__/components/button-create-many-test-__clazz@dasherize__.component.ts +46 -0
- package/schematics/section/files/primeng/__clazz@dasherize__/components/button-delete-__clazz@dasherize__.component.ts +35 -0
- package/schematics/section/files/primeng/__clazz@dasherize__/components/button-edit-many-test-__clazz@dasherize__.component.ts +45 -0
- package/schematics/section/files/primeng/__clazz@dasherize__/components/button-new-__clazz@dasherize__.component.ts +45 -0
- package/schematics/section/index.d.ts +2 -0
- package/schematics/section/index.js +56 -0
- package/schematics/section/index.js.map +1 -0
- package/schematics/section/schema.json +39 -0
- package/schematics/store/files/base-model/__clazz@dasherize__.ts +8 -0
- package/schematics/store/files/base-store/__clazz@dasherize__-store/__clazz@dasherize__-store.module.ts +26 -0
- package/schematics/store/files/base-store/__clazz@dasherize__-store/__clazz@dasherize__.actions.ts +9 -0
- package/schematics/store/files/base-store/__clazz@dasherize__-store/__clazz@dasherize__.effects.ts +11 -0
- package/schematics/store/files/base-store/__clazz@dasherize__-store/__clazz@dasherize__.names.ts +3 -0
- package/schematics/store/files/base-store/__clazz@dasherize__-store/__clazz@dasherize__.reducer.ts +8 -0
- package/schematics/store/files/base-store/__clazz@dasherize__-store/__clazz@dasherize__.selectors.ts +18 -0
- package/schematics/store/files/base-store/__clazz@dasherize__-store/__clazz@dasherize__.state.ts +6 -0
- package/schematics/store/files/base-store/__clazz@dasherize__-store/index.d.ts +13 -0
- package/schematics/store/files/base-store/__clazz@dasherize__-store/index.ts +13 -0
- package/schematics/store/files/crud-graphql/__clazz@dasherize__-store/__clazz@dasherize__.criteria.ts +39 -0
- package/schematics/store/files/crud-graphql/__clazz@dasherize__-store/__clazz@dasherize__.graphql +34 -0
- package/schematics/store/files/crud-model/__clazz@dasherize__.ts +8 -0
- package/schematics/store/files/crud-service/__clazz@dasherize__.service.ts +11 -0
- package/schematics/store/files/crud-service-graphql/__clazz@dasherize__.service.ts +16 -0
- package/schematics/store/files/crud-store/__clazz@dasherize__-store/__clazz@dasherize__-store.module.ts +26 -0
- package/schematics/store/files/crud-store/__clazz@dasherize__-store/__clazz@dasherize__.actions.ts +55 -0
- package/schematics/store/files/crud-store/__clazz@dasherize__-store/__clazz@dasherize__.effects.ts +90 -0
- package/schematics/store/files/crud-store/__clazz@dasherize__-store/__clazz@dasherize__.names.ts +3 -0
- package/schematics/store/files/crud-store/__clazz@dasherize__-store/__clazz@dasherize__.reducer.ts +103 -0
- package/schematics/store/files/crud-store/__clazz@dasherize__-store/__clazz@dasherize__.selectors.ts +26 -0
- package/schematics/store/files/crud-store/__clazz@dasherize__-store/__clazz@dasherize__.state.ts +11 -0
- package/schematics/store/files/crud-store/__clazz@dasherize__-store/index.d.ts +15 -0
- package/schematics/store/files/crud-store/__clazz@dasherize__-store/index.ts +15 -0
- package/schematics/store/index.d.ts +2 -0
- package/schematics/store/index.js +100 -0
- package/schematics/store/index.js.map +1 -0
- package/schematics/store/schema.json +45 -0
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
import { createReducer, on } from '@ngrx/store';
|
|
2
|
+
import { selectIdValue, toDictionary } from './utils';
|
|
3
|
+
export function evalData(fn, def = null) {
|
|
4
|
+
try {
|
|
5
|
+
return fn();
|
|
6
|
+
}
|
|
7
|
+
catch (e) {
|
|
8
|
+
return def;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export function createCrudOns(adapter, initialState, actions) {
|
|
12
|
+
const searchRequestOn = on(actions.SearchRequest, (state, criteria) => {
|
|
13
|
+
if (!criteria.path && !criteria.mode && !criteria.queryParams) {
|
|
14
|
+
throw new Error('It is not possible a search without payload, use :\'{criteria:{}}\'');
|
|
15
|
+
}
|
|
16
|
+
const { itemSelected, idSelected, entitiesSelected, idsSelected } = initialState;
|
|
17
|
+
if (criteria.mode === 'REFRESH' || criteria.mode === 'upsertMany') {
|
|
18
|
+
return Object.assign({}, state, {
|
|
19
|
+
isLoading: true,
|
|
20
|
+
error: initialState.error,
|
|
21
|
+
lastCriteria: criteria,
|
|
22
|
+
itemSelected,
|
|
23
|
+
idSelected,
|
|
24
|
+
entitiesSelected,
|
|
25
|
+
idsSelected
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return adapter.removeAll(Object.assign({}, state, {
|
|
29
|
+
isLoading: true,
|
|
30
|
+
error: initialState.error,
|
|
31
|
+
lastCriteria: criteria,
|
|
32
|
+
itemSelected,
|
|
33
|
+
idSelected,
|
|
34
|
+
entitiesSelected,
|
|
35
|
+
idsSelected
|
|
36
|
+
}));
|
|
37
|
+
});
|
|
38
|
+
const deleteRequestOn = on(actions.DeleteRequest, (state, request) => {
|
|
39
|
+
return Object.assign({}, state, { isLoading: true, error: initialState.error });
|
|
40
|
+
});
|
|
41
|
+
const deleteManyRequestOn = on(actions.DeleteManyRequest, (state, request) => {
|
|
42
|
+
return Object.assign({}, state, { isLoading: true, error: initialState.error });
|
|
43
|
+
});
|
|
44
|
+
const editRequestOn = on(actions.EditRequest, (state, request) => {
|
|
45
|
+
return Object.assign({}, state, { isLoading: true, error: initialState.error });
|
|
46
|
+
});
|
|
47
|
+
const editManyRequestOn = on(actions.EditManyRequest, (state, request) => {
|
|
48
|
+
return Object.assign({}, state, { isLoading: true, error: initialState.error });
|
|
49
|
+
});
|
|
50
|
+
const createRequestOn = on(actions.CreateRequest, (state, request) => {
|
|
51
|
+
return Object.assign({}, state, { isLoading: true, error: initialState.error });
|
|
52
|
+
});
|
|
53
|
+
const createManyRequestOn = on(actions.CreateManyRequest, (state, request) => {
|
|
54
|
+
return Object.assign({}, state, { isLoading: true, error: initialState.error });
|
|
55
|
+
});
|
|
56
|
+
const selectRequestOn = on(actions.SelectRequest, (state, request) => {
|
|
57
|
+
return Object.assign({}, state, { isLoading: true, error: initialState.error });
|
|
58
|
+
});
|
|
59
|
+
const searchSuccessOn = on(actions.SearchSuccess, (state, { type, items, request }) => {
|
|
60
|
+
const mode = evalData(() => request.mode, null) || 'setAll';
|
|
61
|
+
let method;
|
|
62
|
+
switch (mode) {
|
|
63
|
+
case 'REFRESH': {
|
|
64
|
+
// console.log('REFRESH');
|
|
65
|
+
method = adapter.setAll;
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
case 'upsertMany': {
|
|
69
|
+
// console.log('upsertMany');
|
|
70
|
+
method = adapter.upsertMany;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
case 'setAll': {
|
|
74
|
+
// console.log('setAll');
|
|
75
|
+
method = adapter.setAll;
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
default: {
|
|
79
|
+
// console.log('default');
|
|
80
|
+
method = adapter.setAll;
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return method(items, Object.assign({}, state, {
|
|
85
|
+
isLoaded: true,
|
|
86
|
+
isLoading: false,
|
|
87
|
+
error: null
|
|
88
|
+
}));
|
|
89
|
+
});
|
|
90
|
+
const deleteSuccessOn = on(actions.DeleteSuccess, (state, { type, id }) => {
|
|
91
|
+
// tolgo dallo store.idsSelected l'elemento cancellato
|
|
92
|
+
const idsSelected = state.idsSelected.filter((idA) => idA === id);
|
|
93
|
+
const entitiesSelected = idsSelected.reduce((prev, curr) => {
|
|
94
|
+
prev[curr] = state.entitiesSelected[curr];
|
|
95
|
+
return prev;
|
|
96
|
+
}, {});
|
|
97
|
+
// se ho cancellato l'id seezionato, lo tolgo dallo store.
|
|
98
|
+
const idSelected = !!state.idSelected && state.idSelected === id ? null : state.idSelected;
|
|
99
|
+
const itemSelected = !idSelected ? null : state.itemSelected;
|
|
100
|
+
return adapter.removeOne(id, Object.assign({}, state, {
|
|
101
|
+
isLoaded: true,
|
|
102
|
+
isLoading: false,
|
|
103
|
+
error: null,
|
|
104
|
+
idSelected,
|
|
105
|
+
idsSelected,
|
|
106
|
+
itemSelected,
|
|
107
|
+
entitiesSelected
|
|
108
|
+
}));
|
|
109
|
+
});
|
|
110
|
+
const deleteManySuccessOn = on(actions.DeleteManySuccess, (state, { type, ids }) => {
|
|
111
|
+
// tolgo dallo store.idsSelected gli elementi che sono stati cancellati.
|
|
112
|
+
const idsSelected = state.idsSelected.filter((id) => !(id in ids));
|
|
113
|
+
const entitiesSelected = idsSelected.reduce((prev, curr) => {
|
|
114
|
+
prev[curr] = state.entitiesSelected[curr];
|
|
115
|
+
return prev;
|
|
116
|
+
}, {});
|
|
117
|
+
// se ho cancellato l'id seezionato, lo tolgo dallo store.
|
|
118
|
+
const idSelected = !!state.idSelected && state.idSelected in ids ? null : state.idSelected;
|
|
119
|
+
const itemSelected = !idSelected ? null : state.itemSelected;
|
|
120
|
+
return adapter.removeMany(ids, Object.assign({}, state, {
|
|
121
|
+
isLoaded: true,
|
|
122
|
+
isLoading: false,
|
|
123
|
+
error: null,
|
|
124
|
+
idSelected,
|
|
125
|
+
idsSelected,
|
|
126
|
+
itemSelected,
|
|
127
|
+
entitiesSelected
|
|
128
|
+
}));
|
|
129
|
+
});
|
|
130
|
+
const deleteOn = on(actions.Delete, (state, { type, id }) => {
|
|
131
|
+
// tolgo dallo store.idsSelected l'elemento cancellato
|
|
132
|
+
const idsSelected = state.idsSelected.filter((idA) => idA === id);
|
|
133
|
+
// se ho cancellato l'id seezionato, lo tolgo dallo store.
|
|
134
|
+
const idSelected = !!state.idSelected && state.idSelected === id ? null : state.idSelected;
|
|
135
|
+
return adapter.removeOne(id, Object.assign({}, state, {
|
|
136
|
+
isLoaded: true,
|
|
137
|
+
isLoading: false,
|
|
138
|
+
error: null,
|
|
139
|
+
idSelected,
|
|
140
|
+
idsSelected
|
|
141
|
+
}));
|
|
142
|
+
});
|
|
143
|
+
const responseOn = on(actions.Response, (state, response) => {
|
|
144
|
+
const responses = [...state.responses, response];
|
|
145
|
+
return Object.assign(Object.assign({}, state), { responses });
|
|
146
|
+
});
|
|
147
|
+
const resetResponsesOn = on(actions.ResetResponses, (state) => {
|
|
148
|
+
const responses = [];
|
|
149
|
+
return Object.assign(Object.assign({}, state), { responses });
|
|
150
|
+
});
|
|
151
|
+
const createSuccessOn = on(actions.CreateSuccess, (state, { type, item }) => adapter.addOne(item, Object.assign({}, state, {
|
|
152
|
+
isLoaded: true,
|
|
153
|
+
isLoading: false,
|
|
154
|
+
error: null
|
|
155
|
+
})));
|
|
156
|
+
const createManySuccessOn = on(actions.CreateManySuccess, (state, { type, items }) => adapter.addMany(items, Object.assign({}, state, {
|
|
157
|
+
isLoaded: true,
|
|
158
|
+
isLoading: false,
|
|
159
|
+
error: null
|
|
160
|
+
})));
|
|
161
|
+
const createOn = on(actions.Create, (state, { type, item }) => adapter.addOne(item, Object.assign({}, state, {
|
|
162
|
+
isLoaded: true,
|
|
163
|
+
isLoading: false,
|
|
164
|
+
error: null
|
|
165
|
+
})));
|
|
166
|
+
const editSuccessOn = on(actions.EditSuccess, (state, { item, type }) => adapter.upsertOne(item, Object.assign({}, state, {
|
|
167
|
+
isLoaded: true,
|
|
168
|
+
isLoading: false,
|
|
169
|
+
error: null
|
|
170
|
+
})));
|
|
171
|
+
const editManySuccessOn = on(actions.EditManySuccess, (state, { items, type }) => adapter.upsertMany(items, Object.assign({}, state, {
|
|
172
|
+
isLoaded: true,
|
|
173
|
+
isLoading: false,
|
|
174
|
+
error: null
|
|
175
|
+
})));
|
|
176
|
+
const editOn = on(actions.Edit, (state, { item, type }) => adapter.upsertOne(item, Object.assign({}, state, {
|
|
177
|
+
isLoaded: true,
|
|
178
|
+
isLoading: false,
|
|
179
|
+
error: null
|
|
180
|
+
})));
|
|
181
|
+
const filtersOn = on(actions.Filters, (state, { type, filters }) => Object.assign({}, state, { filters }));
|
|
182
|
+
const removeAllSelectedOn = on(actions.RemoveAllSelected, (state, { type }) => {
|
|
183
|
+
const result = Object.assign(Object.assign({}, state), { idsSelected: [],
|
|
184
|
+
// itemsSelected: [], //todo: @deprecated da cancellare questo tipo di assegnazione.
|
|
185
|
+
entitiesSelected: {} });
|
|
186
|
+
return result;
|
|
187
|
+
});
|
|
188
|
+
const addManySelectedOn = on(actions.AddManySelected, (state, { type, items }) => {
|
|
189
|
+
const entitiesCurr = toDictionary(items, adapter);
|
|
190
|
+
const entitiesSelected = Object.assign(Object.assign({}, state.entitiesSelected), entitiesCurr);
|
|
191
|
+
const idsSelected = Object.keys(entitiesSelected);
|
|
192
|
+
const result = Object.assign(Object.assign({}, state), { idsSelected,
|
|
193
|
+
// itemsSelected: items, //todo: @deprecated da cancellare questo tipo di assegnazione.
|
|
194
|
+
entitiesSelected });
|
|
195
|
+
return result;
|
|
196
|
+
});
|
|
197
|
+
const removeManySelectedOn = on(actions.RemoveManySelected, (state, { type, ids }) => {
|
|
198
|
+
const idsAsString = ids.map(x => x + '');
|
|
199
|
+
const idsSelected = Object.keys(state.entitiesSelected).filter(id => !idsAsString.includes(id + ''));
|
|
200
|
+
const entitiesSelected = idsSelected.reduce((prec, curr) => (Object.assign(Object.assign({}, prec), { [curr]: state.entitiesSelected[curr] })), {});
|
|
201
|
+
// const itemsSelected = Object.values(entitiesSelected);
|
|
202
|
+
const result = Object.assign(Object.assign({}, state), { idsSelected,
|
|
203
|
+
// itemsSelected, //todo: @deprecated da cancellare questo tipo di assegnazione.
|
|
204
|
+
entitiesSelected });
|
|
205
|
+
return result;
|
|
206
|
+
});
|
|
207
|
+
const selectItemsOn = on(actions.SelectItems, (state, { type, items }) => {
|
|
208
|
+
const entitiesSelected = toDictionary(items, adapter);
|
|
209
|
+
const idsSelected = Object.keys(entitiesSelected);
|
|
210
|
+
const result = Object.assign(Object.assign({}, state), { idsSelected,
|
|
211
|
+
// itemsSelected: items,
|
|
212
|
+
entitiesSelected });
|
|
213
|
+
return result;
|
|
214
|
+
});
|
|
215
|
+
const selectItemOn = on(actions.SelectItem, (state, { type, item }) => {
|
|
216
|
+
const idSelected = selectIdValue(item, adapter.selectId);
|
|
217
|
+
const result = Object.assign(Object.assign({}, state), { idSelected, itemSelected: item });
|
|
218
|
+
return result;
|
|
219
|
+
});
|
|
220
|
+
const selectSuccessOn = on(actions.SelectSuccess, (state, { type, item }) => {
|
|
221
|
+
const idSelected = selectIdValue(item, adapter.selectId);
|
|
222
|
+
const result = Object.assign(Object.assign({}, state), { idSelected, itemSelected: item, isLoaded: true, isLoading: false, error: null });
|
|
223
|
+
return result;
|
|
224
|
+
});
|
|
225
|
+
const searchFailureOn = on(actions.SearchFailure, (state, { type, error }) => Object.assign({}, state, {
|
|
226
|
+
isLoaded: false,
|
|
227
|
+
isLoading: false,
|
|
228
|
+
error
|
|
229
|
+
}));
|
|
230
|
+
const deleteFailureOn = on(actions.DeleteFailure, (state, { type, error }) => Object.assign({}, state, {
|
|
231
|
+
isLoaded: false,
|
|
232
|
+
isLoading: false,
|
|
233
|
+
error
|
|
234
|
+
}));
|
|
235
|
+
const deleteManyFailureOn = on(actions.DeleteManyFailure, (state, { type, error }) => Object.assign({}, state, {
|
|
236
|
+
isLoaded: false,
|
|
237
|
+
isLoading: false,
|
|
238
|
+
error
|
|
239
|
+
}));
|
|
240
|
+
const createFailureOn = on(actions.CreateFailure, (state, { type, error }) => Object.assign({}, state, {
|
|
241
|
+
isLoaded: false,
|
|
242
|
+
isLoading: false,
|
|
243
|
+
error
|
|
244
|
+
}));
|
|
245
|
+
const createManyFailureOn = on(actions.CreateManyFailure, (state, { type, error }) => Object.assign({}, state, {
|
|
246
|
+
isLoaded: false,
|
|
247
|
+
isLoading: false,
|
|
248
|
+
error
|
|
249
|
+
}));
|
|
250
|
+
const editFailureOn = on(actions.EditFailure, (state, { error, type }) => Object.assign({}, state, {
|
|
251
|
+
isLoaded: false,
|
|
252
|
+
isLoading: false,
|
|
253
|
+
error
|
|
254
|
+
}));
|
|
255
|
+
const editManyFailureOn = on(actions.EditManyFailure, (state, { error, type }) => Object.assign({}, state, {
|
|
256
|
+
isLoaded: false,
|
|
257
|
+
isLoading: false,
|
|
258
|
+
error
|
|
259
|
+
}));
|
|
260
|
+
const selectFailureOn = on(actions.SelectFailure, (state, { error, type }) => Object.assign({}, state, {
|
|
261
|
+
isLoaded: false,
|
|
262
|
+
isLoading: false,
|
|
263
|
+
error
|
|
264
|
+
}));
|
|
265
|
+
const resetOn = on(actions.Reset, (state) => (Object.assign(Object.assign({}, state), initialState)));
|
|
266
|
+
return {
|
|
267
|
+
responseOn,
|
|
268
|
+
resetResponsesOn,
|
|
269
|
+
searchRequestOn,
|
|
270
|
+
deleteRequestOn,
|
|
271
|
+
deleteManyRequestOn,
|
|
272
|
+
editRequestOn,
|
|
273
|
+
editManyRequestOn,
|
|
274
|
+
createRequestOn,
|
|
275
|
+
createManyRequestOn,
|
|
276
|
+
selectRequestOn,
|
|
277
|
+
searchSuccessOn,
|
|
278
|
+
deleteSuccessOn,
|
|
279
|
+
deleteManySuccessOn,
|
|
280
|
+
createSuccessOn,
|
|
281
|
+
createManySuccessOn,
|
|
282
|
+
selectSuccessOn,
|
|
283
|
+
editSuccessOn,
|
|
284
|
+
editManySuccessOn,
|
|
285
|
+
searchFailureOn,
|
|
286
|
+
deleteFailureOn,
|
|
287
|
+
deleteManyFailureOn,
|
|
288
|
+
createFailureOn,
|
|
289
|
+
createManyFailureOn,
|
|
290
|
+
selectFailureOn,
|
|
291
|
+
editFailureOn,
|
|
292
|
+
editManyFailureOn,
|
|
293
|
+
resetOn,
|
|
294
|
+
filtersOn,
|
|
295
|
+
selectItemsOn,
|
|
296
|
+
removeAllSelectedOn,
|
|
297
|
+
addManySelectedOn,
|
|
298
|
+
removeManySelectedOn,
|
|
299
|
+
selectItemOn,
|
|
300
|
+
editOn,
|
|
301
|
+
createOn,
|
|
302
|
+
deleteOn
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
export function createCrudReducerFactory(adapter) {
|
|
306
|
+
function createCrudReducer(initialState, actions, ...ons) {
|
|
307
|
+
const { responseOn, resetResponsesOn, searchRequestOn, deleteRequestOn, deleteManyRequestOn, editRequestOn, editManyRequestOn, createRequestOn, createManyRequestOn, selectRequestOn, searchSuccessOn, deleteSuccessOn, deleteManySuccessOn, createSuccessOn, createManySuccessOn, selectSuccessOn, editSuccessOn, editManySuccessOn, searchFailureOn, deleteFailureOn, deleteManyFailureOn, createFailureOn, createManyFailureOn, selectFailureOn, editFailureOn, editManyFailureOn, resetOn, filtersOn, selectItemsOn, removeAllSelectedOn, addManySelectedOn, removeManySelectedOn, selectItemOn, editOn, createOn, deleteOn } = createCrudOns(adapter, initialState, actions);
|
|
308
|
+
const totalOns = [
|
|
309
|
+
...ons,
|
|
310
|
+
responseOn,
|
|
311
|
+
resetResponsesOn,
|
|
312
|
+
searchRequestOn,
|
|
313
|
+
deleteRequestOn,
|
|
314
|
+
deleteManyRequestOn,
|
|
315
|
+
editRequestOn,
|
|
316
|
+
editManyRequestOn,
|
|
317
|
+
createRequestOn,
|
|
318
|
+
createManyRequestOn,
|
|
319
|
+
selectRequestOn,
|
|
320
|
+
searchSuccessOn,
|
|
321
|
+
deleteSuccessOn,
|
|
322
|
+
deleteManySuccessOn,
|
|
323
|
+
createSuccessOn,
|
|
324
|
+
createManySuccessOn,
|
|
325
|
+
selectSuccessOn,
|
|
326
|
+
editSuccessOn,
|
|
327
|
+
editManySuccessOn,
|
|
328
|
+
searchFailureOn,
|
|
329
|
+
deleteFailureOn,
|
|
330
|
+
deleteManyFailureOn,
|
|
331
|
+
createFailureOn,
|
|
332
|
+
createManyFailureOn,
|
|
333
|
+
selectFailureOn,
|
|
334
|
+
editFailureOn,
|
|
335
|
+
editManyFailureOn,
|
|
336
|
+
resetOn,
|
|
337
|
+
filtersOn,
|
|
338
|
+
selectItemsOn,
|
|
339
|
+
removeAllSelectedOn,
|
|
340
|
+
addManySelectedOn,
|
|
341
|
+
removeManySelectedOn,
|
|
342
|
+
selectItemOn,
|
|
343
|
+
editOn,
|
|
344
|
+
createOn,
|
|
345
|
+
deleteOn
|
|
346
|
+
];
|
|
347
|
+
return createReducer(initialState, ...totalOns);
|
|
348
|
+
}
|
|
349
|
+
return {
|
|
350
|
+
createCrudReducer
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdWNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25ncngtZW50aXR5LWNydWQvc3JjL2xpYi9yZWR1Y2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBZ0IsYUFBYSxFQUFFLEVBQUUsRUFBZSxNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLEVBQUMsYUFBYSxFQUFFLFlBQVksRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVwRCxNQUFNLFVBQVUsUUFBUSxDQUFJLEVBQVcsRUFBRSxNQUFXLElBQUk7SUFDdEQsSUFBSTtRQUNGLE9BQU8sRUFBRSxFQUFFLENBQUM7S0FDYjtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsT0FBTyxHQUFHLENBQUM7S0FDWjtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFrQyxPQUF5QixFQUFFLFlBQWUsRUFBRSxPQUFtQjtJQUM1SCxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQVEsRUFBRSxRQUFtQixFQUFFLEVBQUU7UUFDbEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRTtZQUM3RCxNQUFNLElBQUksS0FBSyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7U0FDeEY7UUFFRCxNQUFNLEVBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUMsR0FBRyxZQUFZLENBQUM7UUFFL0UsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRTtZQUNqRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQ2xCLEVBQUUsRUFDRixLQUFLLEVBQ0w7Z0JBQ0UsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsS0FBSyxFQUFFLFlBQVksQ0FBQyxL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QUNGLE9BQU8sYUFBYSxDQUFJLFlBQVksRUFDbEMsR0FBRyxRQUFRLENBQ1osQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPO1FBQ0wsaUJBQWlCO0tBQ2xCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBY3Rpb25zLCBFbnRpdHlDcnVkU3RhdGUsIElDcml0ZXJpYSwgT3B0UmVxdWVzdH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHtFbnRpdHlBZGFwdGVyfSBmcm9tICdAbmdyeC9lbnRpdHknO1xuaW1wb3J0IHtBY3Rpb25DcmVhdG9yLCBjcmVhdGVSZWR1Y2VyLCBvbiwgUmVkdWNlclR5cGVzfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQge3NlbGVjdElkVmFsdWUsIHRvRGljdGlvbmFyeX0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBldmFsRGF0YTxUPihmbjogKCkgPT4gVCwgZGVmOiBhbnkgPSBudWxsKTogVCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZGVmO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDcnVkT25zPFQsIFMgZXh0ZW5kcyBFbnRpdHlDcnVkU3RhdGU8VD4+KGFkYXB0ZXI6IEVudGl0eUFkYXB0ZXI8VD4sIGluaXRpYWxTdGF0ZTogUywgYWN0aW9uczogQWN0aW9uczxUPik6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICBjb25zdCBzZWFyY2hSZXF1ZXN0T24gPSBvbihhY3Rpb25zLlNlYXJjaFJlcXVlc3QsIChzdGF0ZTogUywgY3JpdGVyaWE6IElDcml0ZXJpYSkgPT4ge1xuICAgIGlmICghY3JpdGVyaWEucGF0aCAmJiAhY3JpdGVyaWEubW9kZSAmJiAhY3JpdGVyaWEucXVlcnlQYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSXQgaXMgbm90IHBvc3NpYmxlIGEgc2VhcmNoIHdpdGhvdXQgcGF5bG9hZCwgdXNlIDpcXCd7Y3JpdGVyaWE6e319XFwnJyk7XG4gICAgfVxuXG4gICAgY29uc3Qge2l0ZW1TZWxlY3RlZCwgaWRTZWxlY3RlZCwgZW50aXRpZXNTZWxlY3RlZCwgaWRzU2VsZWN0ZWR9ID0gaW5pdGlhbFN0YXRlO1xuXG4gICAgaWYgKGNyaXRlcmlhLm1vZGUgPT09ICdSRUZSRVNIJyB8fCBjcml0ZXJpYS5tb2RlID09PSAndXBzZXJ0TWFueScpIHtcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIHtcbiAgICAgICAgICBpc0xvYWRpbmc6IHRydWUsXG4gICAgICAgICAgZXJyb3I6IGluaXRpYWxTdGF0ZS5lcnJvcixcbiAgICAgICAgICBsYXN0Q3JpdGVyaWE6IGNyaXRlcmlhLFxuICAgICAgICAgIGl0ZW1TZWxlY3RlZCxcbiAgICAgICAgICBpZFNlbGVjdGVkLFxuICAgICAgICAgIGVudGl0aWVzU2VsZWN0ZWQsXG4gICAgICAgICAgaWRzU2VsZWN0ZWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGFkYXB0ZXIucmVtb3ZlQWxsKFxuICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIHN0YXRlLFxuICAgICAgICB7XG4gICAgICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgICAgIGVycm9yOiBpbml0aWFsU3RhdGUuZXJyb3IsXG4gICAgICAgICAgbGFzdENyaXRlcmlhOiBjcml0ZXJpYSxcbiAgICAgICAgICBpdGVtU2VsZWN0ZWQsXG4gICAgICAgICAgaWRTZWxlY3RlZCxcbiAgICAgICAgICBlbnRpdGllc1NlbGVjdGVkLFxuICAgICAgICAgIGlkc1NlbGVjdGVkXG4gICAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG4gIGNvbnN0IGRlbGV0ZVJlcXVlc3RPbiA9IG9uKGFjdGlvbnMuRGVsZXRlUmVxdWVzdCwgKHN0YXRlOiBTLCByZXF1ZXN0OiBPcHRSZXF1ZXN0KSA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIHN0YXRlLFxuICAgICAge2lzTG9hZGluZzogdHJ1ZSwgZXJyb3I6IGluaXRpYWxTdGF0ZS5lcnJvcn1cbiAgICApO1xuICB9KTtcbiAgY29uc3QgZGVsZXRlTWFueVJlcXVlc3RPbiA9IG9uKGFjdGlvbnMuRGVsZXRlTWFueVJlcXVlc3QsIChzdGF0ZTogUywgcmVxdWVzdDogT3B0UmVxdWVzdCkgPT4ge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICBzdGF0ZSxcbiAgICAgIHtpc0xvYWRpbmc6IHRydWUsIGVycm9yOiBpbml0aWFsU3RhdGUuZXJyb3J9XG4gICAgKTtcbiAgfSk7XG4gIGNvbnN0IGVkaXRSZXF1ZXN0T24gPSBvbihhY3Rpb25zLkVkaXRSZXF1ZXN0LCAoc3RhdGU6IFMsIHJlcXVlc3Q6IE9wdFJlcXVlc3QpID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgc3RhdGUsXG4gICAgICB7aXNMb2FkaW5nOiB0cnVlLCBlcnJvcjogaW5pdGlhbFN0YXRlLmVycm9yfVxuICAgICk7XG4gIH0pO1xuICBjb25zdCBlZGl0TWFueVJlcXVlc3RPbiA9IG9uKGFjdGlvbnMuRWRpdE1hbnlSZXF1ZXN0LCAoc3RhdGU6IFMsIHJlcXVlc3Q6IE9wdFJlcXVlc3QpID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgc3RhdGUsXG4gICAgICB7aXNMb2FkaW5nOiB0cnVlLCBlcnJvcjogaW5pdGlhbFN0YXRlLmVycm9yfVxuICAgICk7XG4gIH0pO1xuICBjb25zdCBjcmVhdGVSZXF1ZXN0T24gPSBvbihhY3Rpb25zLkNyZWF0ZVJlcXVlc3QsIChzdGF0ZTogUywgcmVxdWVzdDogT3B0UmVxdWVzdCkgPT4ge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICBzdGF0ZSxcbiAgICAgIHtpc0xvYWRpbmc6IHRydWUsIGVycm9yOiBpbml0aWFsU3RhdGUuZXJyb3J9XG4gICAgKTtcbiAgfSk7XG4gIGNvbnN0IGNyZWF0ZU1hbnlSZXF1ZXN0T24gPSBvbihhY3Rpb25zLkNyZWF0ZU1hbnlSZXF1ZXN0LCAoc3RhdGU6IFMsIHJlcXVlc3Q6IE9wdFJlcXVlc3QpID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgc3RhdGUsXG4gICAgICB7aXNMb2FkaW5nOiB0cnVlLCBlcnJvcjogaW5pdGlhbFN0YXRlLmVycm9yfVxuICAgICk7XG4gIH0pO1xuICBjb25zdCBzZWxlY3RSZXF1ZXN0T24gPSBvbihhY3Rpb25zLlNlbGVjdFJlcXVlc3QsIChzdGF0ZTogUywgcmVxdWVzdDogSUNyaXRlcmlhKSA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIHN0YXRlLFxuICAgICAge2lzTG9hZGluZzogdHJ1ZSwgZXJyb3I6IGluaXRpYWxTdGF0ZS5lcnJvcn1cbiAgICApO1xuICB9KTtcblxuICBjb25zdCBzZWFyY2hTdWNjZXNzT24gPSBvbihhY3Rpb25zLlNlYXJjaFN1Y2Nlc3MsIChzdGF0ZTogUywge3R5cGUsIGl0ZW1zLCByZXF1ZXN0fSkgPT4ge1xuICAgIGNvbnN0IG1vZGUgPSBldmFsRGF0YSgoKSA9PiByZXF1ZXN0Lm1vZGUsIG51bGwpIHx8ICdzZXRBbGwnO1xuICAgIGxldCBtZXRob2Q7XG4gICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICBjYXNlICAnUkVGUkVTSCcgOiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdSRUZSRVNIJyk7XG4gICAgICAgIG1ldGhvZCA9IGFkYXB0ZXIuc2V0QWxsO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3Vwc2VydE1hbnknOiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCd1cHNlcnRNYW55Jyk7XG4gICAgICAgIG1ldGhvZCA9IGFkYXB0ZXIudXBzZXJ0TWFueTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdzZXRBbGwnOiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdzZXRBbGwnKTtcbiAgICAgICAgbWV0aG9kID0gYWRhcHRlci5zZXRBbGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdkZWZhdWx0Jyk7XG4gICAgICAgIG1ldGhvZCA9IGFkYXB0ZXIuc2V0QWxsO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWV0aG9kKGl0ZW1zLCBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICBzdGF0ZSxcbiAgICAgIHtcbiAgICAgICAgaXNMb2FkZWQ6IHRydWUsXG4gICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgIGVycm9yOiBudWxsXG4gICAgICB9XG4gICAgKSk7XG4gIH0pO1xuICBjb25zdCBkZWxldGVTdWNjZXNzT24gPSBvbihhY3Rpb25zLkRlbGV0ZVN1Y2Nlc3MsIChzdGF0ZTogUywge3R5cGUsIGlkfSkgPT4ge1xuXG4gICAgICAvLyB0b2xnbyBkYWxsbyBzdG9yZS5pZHNTZWxlY3RlZCBsJ2VsZW1lbnRvIGNhbmNlbGxhdG9cbiAgICAgIGNvbnN0IGlkc1NlbGVjdGVkID0gKHN0YXRlLmlkc1NlbGVjdGVkIGFzIGFueVtdKS5maWx0ZXIoKGlkQSkgPT4gaWRBID09PSBpZCk7XG4gICAgICBjb25zdCBlbnRpdGllc1NlbGVjdGVkID0gaWRzU2VsZWN0ZWQucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICAgIHByZXZbY3Vycl0gPSBzdGF0ZS5lbnRpdGllc1NlbGVjdGVkW2N1cnJdO1xuICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgIH0sIHt9KTtcblxuICAgICAgLy8gc2UgaG8gY2FuY2VsbGF0byBsJ2lkIHNlZXppb25hdG8sIGxvIHRvbGdvIGRhbGxvIHN0b3JlLlxuICAgICAgY29uc3QgaWRTZWxlY3RlZCA9ICEhc3RhdGUuaWRTZWxlY3RlZCAmJiBzdGF0ZS5pZFNlbGVjdGVkID09PSBpZCA/IG51bGwgOiBzdGF0ZS5pZFNlbGVjdGVkO1xuICAgICAgY29uc3QgaXRlbVNlbGVjdGVkID0gIWlkU2VsZWN0ZWQgPyBudWxsIDogc3RhdGUuaXRlbVNlbGVjdGVkO1xuXG4gICAgICByZXR1cm4gYWRhcHRlci5yZW1vdmVPbmUoaWQsXG4gICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge30sIHN0YXRlLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlzTG9hZGVkOiB0cnVlLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgaWRTZWxlY3RlZCxcbiAgICAgICAgICAgIGlkc1NlbGVjdGVkLFxuICAgICAgICAgICAgaXRlbVNlbGVjdGVkLFxuICAgICAgICAgICAgZW50aXRpZXNTZWxlY3RlZFxuICAgICAgICAgIH1cbiAgICAgICAgKSk7XG4gICAgfVxuICApO1xuXG4gIGNvbnN0IGRlbGV0ZU1hbnlTdWNjZXNzT24gPSBvbihhY3Rpb25zLkRlbGV0ZU1hbnlTdWNjZXNzLCAoc3RhdGU6IFMsIHt0eXBlLCBpZHN9KSA9PiB7XG5cbiAgICAvLyB0b2xnbyBkYWxsbyBzdG9yZS5pZHNTZWxlY3RlZCBnbGkgZWxlbWVudGkgY2hlIHNvbm8gc3RhdGkgY2FuY2VsbGF0aS5cbiAgICBjb25zdCBpZHNTZWxlY3RlZDogc3RyaW5nW10gPSAoc3RhdGUuaWRzU2VsZWN0ZWQgYXMgYW55W10pLmZpbHRlcigoaWQpID0+ICEoaWQgaW4gaWRzKSk7XG4gICAgY29uc3QgZW50aXRpZXNTZWxlY3RlZCA9IGlkc1NlbGVjdGVkLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgcHJldltjdXJyXSA9IHN0YXRlLmVudGl0aWVzU2VsZWN0ZWRbY3Vycl07XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCB7fSk7XG5cbiAgICAvLyBzZSBobyBjYW5jZWxsYXRvIGwnaWQgc2VlemlvbmF0bywgbG8gdG9sZ28gZGFsbG8gc3RvcmUuXG4gICAgY29uc3QgaWRTZWxlY3RlZCA9ICEhc3RhdGUuaWRTZWxlY3RlZCAmJiBzdGF0ZS5pZFNlbGVjdGVkIGluIGlkcyA/IG51bGwgOiBzdGF0ZS5pZFNlbGVjdGVkO1xuICAgIGNvbnN0IGl0ZW1TZWxlY3RlZCA9ICFpZFNlbGVjdGVkID8gbnVsbCA6IHN0YXRlLml0ZW1TZWxlY3RlZDtcbiAgICByZXR1cm4gYWRhcHRlci5yZW1vdmVNYW55KGlkcyxcbiAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHt9LCBzdGF0ZSxcbiAgICAgICAge1xuICAgICAgICAgIGlzTG9hZGVkOiB0cnVlLFxuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgaWRTZWxlY3RlZCxcbiAgICAgICAgICBpZHNTZWxlY3RlZCxcbiAgICAgICAgICBpdGVtU2VsZWN0ZWQsXG4gICAgICAgICAgZW50aXRpZXNTZWxlY3RlZFxuICAgICAgICB9XG4gICAgICApKTtcbiAgfSk7XG5cbiAgY29uc3QgZGVsZXRlT24gPSBvbihhY3Rpb25zLkRlbGV0ZSwgKHN0YXRlOiBTLCB7dHlwZSwgaWR9KSA9PiB7XG4gICAgICAvLyB0b2xnbyBkYWxsbyBzdG9yZS5pZHNTZWxlY3RlZCBsJ2VsZW1lbnRvIGNhbmNlbGxhdG9cbiAgICAgIGNvbnN0IGlkc1NlbGVjdGVkID0gKHN0YXRlLmlkc1NlbGVjdGVkIGFzIGFueVtdKS5maWx0ZXIoKGlkQSkgPT4gaWRBID09PSBpZCk7XG5cbiAgICAgIC8vIHNlIGhvIGNhbmNlbGxhdG8gbCdpZCBzZWV6aW9uYXRvLCBsbyB0b2xnbyBkYWxsbyBzdG9yZS5cbiAgICAgIGNvbnN0IGlkU2VsZWN0ZWQgPSAhIXN0YXRlLmlkU2VsZWN0ZWQgJiYgc3RhdGUuaWRTZWxlY3RlZCA9PT0gaWQgPyBudWxsIDogc3RhdGUuaWRTZWxlY3RlZDtcblxuICAgICAgcmV0dXJuIGFkYXB0ZXIucmVtb3ZlT25lKGlkLFxuICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIHt9LCBzdGF0ZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpc0xvYWRlZDogdHJ1ZSxcbiAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIGlkU2VsZWN0ZWQsXG4gICAgICAgICAgICBpZHNTZWxlY3RlZFxuICAgICAgICAgIH1cbiAgICAgICAgKSk7XG4gICAgfVxuICApO1xuICBjb25zdCByZXNwb25zZU9uID0gb24oYWN0aW9ucy5SZXNwb25zZSwgKHN0YXRlOiBTLCByZXNwb25zZSkgPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlcyA9IFsuLi5zdGF0ZS5yZXNwb25zZXMsIHJlc3BvbnNlXTtcbiAgICByZXR1cm4gey4uLnt9LCAuLi5zdGF0ZSwgLi4ue3Jlc3BvbnNlc319O1xuICB9KTtcblxuICBjb25zdCByZXNldFJlc3BvbnNlc09uID0gb24oYWN0aW9ucy5SZXNldFJlc3BvbnNlcywgKHN0YXRlOiBTKSA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZXMgPSBbXTtcbiAgICAgIHJldHVybiB7Li4uc3RhdGUsIC4uLntyZXNwb25zZXN9fTtcbiAgICB9XG4gICk7XG4gIGNvbnN0IGNyZWF0ZVN1Y2Nlc3NPbiA9IG9uKGFjdGlvbnMuQ3JlYXRlU3VjY2VzcywgKHN0YXRlOiBTLCB7dHlwZSwgaXRlbX0pID0+IGFkYXB0ZXIuYWRkT25lKGl0ZW0sXG4gICAgT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LCBzdGF0ZSxcbiAgICAgIHtcbiAgICAgICAgaXNMb2FkZWQ6IHRydWUsXG4gICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgIGVycm9yOiBudWxsXG4gICAgICB9XG4gICAgKSkpO1xuICBjb25zdCBjcmVhdGVNYW55U3VjY2Vzc09uID0gb24oYWN0aW9ucy5DcmVhdGVNYW55U3VjY2VzcywgKHN0YXRlOiBTLCB7dHlwZSwgaXRlbXN9KSA9PiBhZGFwdGVyLmFkZE1hbnkoaXRlbXMsXG4gICAgT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LCBzdGF0ZSxcbiAgICAgIHtcbiAgICAgICAgaXNMb2FkZWQ6IHRydWUsXG4gICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgIGVycm9yOiBudWxsXG4gICAgICB9XG4gICAgKSkpO1xuICBjb25zdCBjcmVhdGVPbiA9IG9uKGFjdGlvbnMuQ3JlYXRlLCAoc3RhdGU6IFMsIHt0eXBlLCBpdGVtfSkgPT4gYWRhcHRlci5hZGRPbmUoaXRlbSxcbiAgICBPYmplY3QuYXNzaWduKFxuICAgICAge30sIHN0YXRlLFxuICAgICAge1xuICAgICAgICBpc0xvYWRlZDogdHJ1ZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IG51bGxcbiAgICAgIH1cbiAgICApKSk7XG4gIGNvbnN0IGVkaXRTdWNjZXNzT24gPSBvbihhY3Rpb25zLkVkaXRTdWNjZXNzLCAoc3RhdGU6IFMsIHtpdGVtLCB0eXBlfSkgPT4gYWRhcHRlci51cHNlcnRPbmUoaXRlbSxcbiAgICBPYmplY3QuYXNzaWduKFxuICAgICAge30sIHN0YXRlLFxuICAgICAge1xuICAgICAgICBpc0xvYWRlZDogdHJ1ZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IG51bGxcbiAgICAgIH1cbiAgICApKSk7XG4gIGNvbnN0IGVkaXRNYW55U3VjY2Vzc09uID0gb24oYWN0aW9ucy5FZGl0TWFueVN1Y2Nlc3MsIChzdGF0ZTogUywge2l0ZW1zLCB0eXBlfSkgPT4gYWRhcHRlci51cHNlcnRNYW55KGl0ZW1zLFxuICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSwgc3RhdGUsXG4gICAgICB7XG4gICAgICAgIGlzTG9hZGVkOiB0cnVlLFxuICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICBlcnJvcjogbnVsbFxuICAgICAgfVxuICAgICkpKTtcbiAgY29uc3QgZWRpdE9uID0gb24oYWN0aW9ucy5FZGl0LCAoc3RhdGU6IFMsIHtpdGVtLCB0eXBlfSkgPT4gYWRhcHRlci51cHNlcnRPbmUoaXRlbSxcbiAgICBPYmplY3QuYXNzaWduKFxuICAgICAge30sIHN0YXRlLFxuICAgICAge1xuICAgICAgICBpc0xvYWRlZDogdHJ1ZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IG51bGxcbiAgICAgIH1cbiAgICApKSk7XG4gIGNvbnN0IGZpbHRlcnNPbiA9IG9uKGFjdGlvbnMuRmlsdGVycywgKHN0YXRlOiBTLCB7dHlwZSwgZmlsdGVyc30pID0+IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7ZmlsdGVyc30pKTtcblxuICBjb25zdCByZW1vdmVBbGxTZWxlY3RlZE9uID0gb24oYWN0aW9ucy5SZW1vdmVBbGxTZWxlY3RlZCwgKHN0YXRlOiBTLCB7dHlwZX06IHsgdHlwZTogc3RyaW5nIH0pID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGlkc1NlbGVjdGVkOiBbXSxcbiAgICAgIC8vIGl0ZW1zU2VsZWN0ZWQ6IFtdLCAvL3RvZG86IEBkZXByZWNhdGVkIGRhIGNhbmNlbGxhcmUgcXVlc3RvIHRpcG8gZGkgYXNzZWduYXppb25lLlxuICAgICAgZW50aXRpZXNTZWxlY3RlZDoge31cbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgY29uc3QgYWRkTWFueVNlbGVjdGVkT24gPSBvbihhY3Rpb25zLkFkZE1hbnlTZWxlY3RlZCwgKHN0YXRlOiBTLCB7dHlwZSwgaXRlbXN9OiB7IHR5cGU6IHN0cmluZywgaXRlbXM6IFRbXSB9KSA9PiB7XG4gICAgY29uc3QgZW50aXRpZXNDdXJyID0gdG9EaWN0aW9uYXJ5KGl0ZW1zLCBhZGFwdGVyKTtcbiAgICBjb25zdCBlbnRpdGllc1NlbGVjdGVkID0gey4uLnN0YXRlLmVudGl0aWVzU2VsZWN0ZWQsIC4uLmVudGl0aWVzQ3Vycn07XG4gICAgY29uc3QgaWRzU2VsZWN0ZWQgPSBPYmplY3Qua2V5cyhlbnRpdGllc1NlbGVjdGVkKTtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGlkc1NlbGVjdGVkLFxuICAgICAgLy8gaXRlbXNTZWxlY3RlZDogaXRlbXMsIC8vdG9kbzogQGRlcHJlY2F0ZWQgZGEgY2FuY2VsbGFyZSBxdWVzdG8gdGlwbyBkaSBhc3NlZ25hemlvbmUuXG4gICAgICBlbnRpdGllc1NlbGVjdGVkXG4gICAgfTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIGNvbnN0IHJlbW92ZU1hbnlTZWxlY3RlZE9uID0gb24oYWN0aW9ucy5SZW1vdmVNYW55U2VsZWN0ZWQsIChzdGF0ZTogUywge3R5cGUsIGlkc306IHsgdHlwZTogc3RyaW5nLCBpZHM6IHN0cmluZ1tdIH0pID0+IHtcbiAgICBjb25zdCBpZHNBc1N0cmluZyA9IGlkcy5tYXAoeCA9PiB4ICsgJycpO1xuICAgIGNvbnN0IGlkc1NlbGVjdGVkID0gT2JqZWN0LmtleXMoc3RhdGUuZW50aXRpZXNTZWxlY3RlZCkuZmlsdGVyKGlkID0+ICFpZHNBc1N0cmluZy5pbmNsdWRlcyhpZCArICcnKSk7XG4gICAgY29uc3QgZW50aXRpZXNTZWxlY3RlZCA9IGlkc1NlbGVjdGVkLnJlZHVjZSgocHJlYywgY3VycikgPT4gKHsuLi5wcmVjLCBbY3Vycl06IHN0YXRlLmVudGl0aWVzU2VsZWN0ZWRbY3Vycl19KSwge30pO1xuICAgIC8vIGNvbnN0IGl0ZW1zU2VsZWN0ZWQgPSBPYmplY3QudmFsdWVzKGVudGl0aWVzU2VsZWN0ZWQpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBpZHNTZWxlY3RlZCxcbiAgICAgIC8vIGl0ZW1zU2VsZWN0ZWQsIC8vdG9kbzogQGRlcHJlY2F0ZWQgZGEgY2FuY2VsbGFyZSBxdWVzdG8gdGlwbyBkaSBhc3NlZ25hemlvbmUuXG4gICAgICBlbnRpdGllc1NlbGVjdGVkXG4gICAgfTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIGNvbnN0IHNlbGVjdEl0ZW1zT24gPSBvbihhY3Rpb25zLlNlbGVjdEl0ZW1zLCAoc3RhdGU6IFMsIHt0eXBlLCBpdGVtc30pID0+IHtcbiAgICBjb25zdCBlbnRpdGllc1NlbGVjdGVkID0gdG9EaWN0aW9uYXJ5KGl0ZW1zLCBhZGFwdGVyKTtcbiAgICBjb25zdCBpZHNTZWxlY3RlZCA9IE9iamVjdC5rZXlzKGVudGl0aWVzU2VsZWN0ZWQpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgaWRzU2VsZWN0ZWQsXG4gICAgICAvLyBpdGVtc1NlbGVjdGVkOiBpdGVtcyxcbiAgICAgIGVudGl0aWVzU2VsZWN0ZWRcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG4gIGNvbnN0IHNlbGVjdEl0ZW1PbiA9IG9uKGFjdGlvbnMuU2VsZWN0SXRlbSwgKHN0YXRlOiBTLCB7dHlwZSwgaXRlbX0pID0+IHtcbiAgICBjb25zdCBpZFNlbGVjdGVkID0gc2VsZWN0SWRWYWx1ZShpdGVtLCBhZGFwdGVyLnNlbGVjdElkKTtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGlkU2VsZWN0ZWQsXG4gICAgICBpdGVtU2VsZWN0ZWQ6IGl0ZW1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG4gIGNvbnN0IHNlbGVjdFN1Y2Nlc3NPbiA9IG9uKGFjdGlvbnMuU2VsZWN0U3VjY2VzcywgKHN0YXRlOiBTLCB7dHlwZSwgaXRlbX0pID0+IHtcbiAgICAgIGNvbnN0IGlkU2VsZWN0ZWQgPSBzZWxlY3RJZFZhbHVlKGl0ZW0sIGFkYXB0ZXIuc2VsZWN0SWQpO1xuICAgICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgaWRTZWxlY3RlZCxcbiAgICAgICAgaXRlbVNlbGVjdGVkOiBpdGVtLFxuICAgICAgICBpc0xvYWRlZDogdHJ1ZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IG51bGxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICApO1xuICBjb25zdCBzZWFyY2hGYWlsdXJlT24gPSBvbihcbiAgICBhY3Rpb25zLlNlYXJjaEZhaWx1cmUsXG4gICAgKHN0YXRlOiBTLCB7dHlwZSwgZXJyb3J9KSA9PiBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICBzdGF0ZSxcbiAgICAgIHtcbiAgICAgICAgaXNMb2FkZWQ6IGZhbHNlLFxuICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICBlcnJvclxuICAgICAgfVxuICAgICkpO1xuICBjb25zdCBkZWxldGVGYWlsdXJlT24gPSBvbihcbiAgICBhY3Rpb25zLkRlbGV0ZUZhaWx1cmUsXG4gICAgKHN0YXRlOiBTLCB7dHlwZSwgZXJyb3J9KSA9PiBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICBzdGF0ZSxcbiAgICAgIHtcbiAgICAgICAgaXNMb2FkZWQ6IGZhbHNlLFxuICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICBlcnJvclxuICAgICAgfVxuICAgICkpO1xuICBjb25zdCBkZWxldGVNYW55RmFpbHVyZU9uID0gb24oXG4gICAgYWN0aW9ucy5EZWxldGVNYW55RmFpbHVyZSxcbiAgICAoc3RhdGU6IFMsIHt0eXBlLCBlcnJvcn0pID0+IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIHN0YXRlLFxuICAgICAge1xuICAgICAgICBpc0xvYWRlZDogZmFsc2UsXG4gICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgIGVycm9yXG4gICAgICB9XG4gICAgKSk7XG4gIGNvbnN0IGNyZWF0ZUZhaWx1cmVPbiA9IG9uKFxuICAgIGFjdGlvbnMuQ3JlYXRlRmFpbHVyZSxcbiAgICAoc3RhdGU6IFMsIHt0eXBlLCBlcnJvcn0pID0+IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIHN0YXRlLFxuICAgICAge1xuICAgICAgICBpc0xvYWRlZDogZmFsc2UsXG4gICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgIGVycm9yXG4gICAgICB9XG4gICAgKSk7XG4gIGNvbnN0IGNyZWF0ZU1hbnlGYWlsdXJlT24gPSBvbihcbiAgICBhY3Rpb25zLkNyZWF0ZU1hbnlGYWlsdXJlLFxuICAgIChzdGF0ZTogUywge3R5cGUsIGVycm9yfSkgPT4gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgc3RhdGUsXG4gICAgICB7XG4gICAgICAgIGlzTG9hZGVkOiBmYWxzZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgZXJyb3JcbiAgICAgIH1cbiAgICApKTtcbiAgY29uc3QgZWRpdEZhaWx1cmVPbiA9IG9uKFxuICAgIGFjdGlvbnMuRWRpdEZhaWx1cmUsXG4gICAgKHN0YXRlOiBTLCB7ZXJyb3IsIHR5cGV9KSA9PiBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICBzdGF0ZSxcbiAgICAgIHtcbiAgICAgICAgaXNMb2FkZWQ6IGZhbHNlLFxuICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICBlcnJvclxuICAgICAgfVxuICAgICkpO1xuICBjb25zdCBlZGl0TWFueUZhaWx1cmVPbiA9IG9uKFxuICAgIGFjdGlvbnMuRWRpdE1hbnlGYWlsdXJlLFxuICAgIChzdGF0ZTogUywge2Vycm9yLCB0eXBlfSkgPT4gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgc3RhdGUsXG4gICAgICB7XG4gICAgICAgIGlzTG9hZGVkOiBmYWxzZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgZXJyb3JcbiAgICAgIH1cbiAgICApKTtcbiAgY29uc3Qgc2VsZWN0RmFpbHVyZU9uID0gb24oXG4gICAgYWN0aW9ucy5TZWxlY3RGYWlsdXJlLFxuICAgIChzdGF0ZTogUywge2Vycm9yLCB0eXBlfSkgPT4gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgc3RhdGUsXG4gICAgICB7XG4gICAgICAgIGlzTG9hZGVkOiBmYWxzZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgZXJyb3JcbiAgICAgIH1cbiAgICApKTtcbiAgY29uc3QgcmVzZXRPbiA9IG9uKGFjdGlvbnMuUmVzZXQsIChzdGF0ZTogUykgPT4gKHsuLi5zdGF0ZSwgLi4uaW5pdGlhbFN0YXRlfSkpO1xuICByZXR1cm4ge1xuICAgIHJlc3BvbnNlT24sXG4gICAgcmVzZXRSZXNwb25zZXNPbixcbiAgICBzZWFyY2hSZXF1ZXN0T24sXG4gICAgZGVsZXRlUmVxdWVzdE9uLFxuICAgIGRlbGV0ZU1hbnlSZXF1ZXN0T24sXG4gICAgZWRpdFJlcXVlc3RPbixcbiAgICBlZGl0TWFueVJlcXVlc3RPbixcbiAgICBjcmVhdGVSZXF1ZXN0T24sXG4gICAgY3JlYXRlTWFueVJlcXVlc3RPbixcbiAgICBzZWxlY3RSZXF1ZXN0T24sXG4gICAgc2VhcmNoU3VjY2Vzc09uLFxuICAgIGRlbGV0ZVN1Y2Nlc3NPbixcbiAgICBkZWxldGVNYW55U3VjY2Vzc09uLFxuICAgIGNyZWF0ZVN1Y2Nlc3NPbixcbiAgICBjcmVhdGVNYW55U3VjY2Vzc09uLFxuICAgIHNlbGVjdFN1Y2Nlc3NPbixcbiAgICBlZGl0U3VjY2Vzc09uLFxuICAgIGVkaXRNYW55U3VjY2Vzc09uLFxuICAgIHNlYXJjaEZhaWx1cmVPbixcbiAgICBkZWxldGVGYWlsdXJlT24sXG4gICAgZGVsZXRlTWFueUZhaWx1cmVPbixcbiAgICBjcmVhdGVGYWlsdXJlT24sXG4gICAgY3JlYXRlTWFueUZhaWx1cmVPbixcbiAgICBzZWxlY3RGYWlsdXJlT24sXG4gICAgZWRpdEZhaWx1cmVPbixcbiAgICBlZGl0TWFueUZhaWx1cmVPbixcbiAgICByZXNldE9uLFxuICAgIGZpbHRlcnNPbixcbiAgICBzZWxlY3RJdGVtc09uLFxuICAgIHJlbW92ZUFsbFNlbGVjdGVkT24sXG4gICAgYWRkTWFueVNlbGVjdGVkT24sXG4gICAgcmVtb3ZlTWFueVNlbGVjdGVkT24sXG4gICAgc2VsZWN0SXRlbU9uLFxuICAgIGVkaXRPbixcbiAgICBjcmVhdGVPbixcbiAgICBkZWxldGVPblxuICB9O1xuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDcnVkUmVkdWNlckZhY3Rvcnk8VD4oYWRhcHRlcjogRW50aXR5QWRhcHRlcjxUPikge1xuICBmdW5jdGlvbiBjcmVhdGVDcnVkUmVkdWNlcjxTIGV4dGVuZHMgRW50aXR5Q3J1ZFN0YXRlPFQ+Pihpbml0aWFsU3RhdGU6IFMsIGFjdGlvbnM6IEFjdGlvbnM8VD4sIC4uLm9uczogUmVkdWNlclR5cGVzPFMsIEFjdGlvbkNyZWF0b3JbXT5bXSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJlc3BvbnNlT24sXG4gICAgICByZXNldFJlc3BvbnNlc09uLFxuICAgICAgc2VhcmNoUmVxdWVzdE9uLFxuICAgICAgZGVsZXRlUmVxdWVzdE9uLFxuICAgICAgZGVsZXRlTWFueVJlcXVlc3RPbixcbiAgICAgIGVkaXRSZXF1ZXN0T24sXG4gICAgICBlZGl0TWFueVJlcXVlc3RPbixcbiAgICAgIGNyZWF0ZVJlcXVlc3RPbixcbiAgICAgIGNyZWF0ZU1hbnlSZXF1ZXN0T24sXG4gICAgICBzZWxlY3RSZXF1ZXN0T24sXG4gICAgICBzZWFyY2hTdWNjZXNzT24sXG4gICAgICBkZWxldGVTdWNjZXNzT24sXG4gICAgICBkZWxldGVNYW55U3VjY2Vzc09uLFxuICAgICAgY3JlYXRlU3VjY2Vzc09uLFxuICAgICAgY3JlYXRlTWFueVN1Y2Nlc3NPbixcbiAgICAgIHNlbGVjdFN1Y2Nlc3NPbixcbiAgICAgIGVkaXRTdWNjZXNzT24sXG4gICAgICBlZGl0TWFueVN1Y2Nlc3NPbixcbiAgICAgIHNlYXJjaEZhaWx1cmVPbixcbiAgICAgIGRlbGV0ZUZhaWx1cmVPbixcbiAgICAgIGRlbGV0ZU1hbnlGYWlsdXJlT24sXG4gICAgICBjcmVhdGVGYWlsdXJlT24sXG4gICAgICBjcmVhdGVNYW55RmFpbHVyZU9uLFxuICAgICAgc2VsZWN0RmFpbHVyZU9uLFxuICAgICAgZWRpdEZhaWx1cmVPbixcbiAgICAgIGVkaXRNYW55RmFpbHVyZU9uLFxuICAgICAgcmVzZXRPbixcbiAgICAgIGZpbHRlcnNPbixcbiAgICAgIHNlbGVjdEl0ZW1zT24sXG4gICAgICByZW1vdmVBbGxTZWxlY3RlZE9uLFxuICAgICAgYWRkTWFueVNlbGVjdGVkT24sXG4gICAgICByZW1vdmVNYW55U2VsZWN0ZWRPbixcbiAgICAgIHNlbGVjdEl0ZW1PbixcbiAgICAgIGVkaXRPbixcbiAgICAgIGNyZWF0ZU9uLFxuICAgICAgZGVsZXRlT25cbiAgICB9ID0gY3JlYXRlQ3J1ZE9ucyhhZGFwdGVyLCBpbml0aWFsU3RhdGUsIGFjdGlvbnMpO1xuICAgIGNvbnN0IHRvdGFsT25zOiBSZWR1Y2VyVHlwZXM8UywgQWN0aW9uQ3JlYXRvcltdPltdID0gW1xuICAgICAgLi4ub25zLFxuICAgICAgcmVzcG9uc2VPbixcbiAgICAgIHJlc2V0UmVzcG9uc2VzT24sXG4gICAgICBzZWFyY2hSZXF1ZXN0T24sXG4gICAgICBkZWxldGVSZXF1ZXN0T24sXG4gICAgICBkZWxldGVNYW55UmVxdWVzdE9uLFxuICAgICAgZWRpdFJlcXVlc3RPbixcbiAgICAgIGVkaXRNYW55UmVxdWVzdE9uLFxuICAgICAgY3JlYXRlUmVxdWVzdE9uLFxuICAgICAgY3JlYXRlTWFueVJlcXVlc3RPbixcbiAgICAgIHNlbGVjdFJlcXVlc3RPbixcbiAgICAgIHNlYXJjaFN1Y2Nlc3NPbixcbiAgICAgIGRlbGV0ZVN1Y2Nlc3NPbixcbiAgICAgIGRlbGV0ZU1hbnlTdWNjZXNzT24sXG4gICAgICBjcmVhdGVTdWNjZXNzT24sXG4gICAgICBjcmVhdGVNYW55U3VjY2Vzc09uLFxuICAgICAgc2VsZWN0U3VjY2Vzc09uLFxuICAgICAgZWRpdFN1Y2Nlc3NPbixcbiAgICAgIGVkaXRNYW55U3VjY2Vzc09uLFxuICAgICAgc2VhcmNoRmFpbHVyZU9uLFxuICAgICAgZGVsZXRlRmFpbHVyZU9uLFxuICAgICAgZGVsZXRlTWFueUZhaWx1cmVPbixcbiAgICAgIGNyZWF0ZUZhaWx1cmVPbixcbiAgICAgIGNyZWF0ZU1hbnlGYWlsdXJlT24sXG4gICAgICBzZWxlY3RGYWlsdXJlT24sXG4gICAgICBlZGl0RmFpbHVyZU9uLFxuICAgICAgZWRpdE1hbnlGYWlsdXJlT24sXG4gICAgICByZXNldE9uLFxuICAgICAgZmlsdGVyc09uLFxuICAgICAgc2VsZWN0SXRlbXNPbixcbiAgICAgIHJlbW92ZUFsbFNlbGVjdGVkT24sXG4gICAgICBhZGRNYW55U2VsZWN0ZWRPbixcbiAgICAgIHJlbW92ZU1hbnlTZWxlY3RlZE9uLFxuICAgICAgc2VsZWN0SXRlbU9uLFxuICAgICAgZWRpdE9uLFxuICAgICAgY3JlYXRlT24sXG4gICAgICBkZWxldGVPblxuICAgIF07XG4gICAgcmV0dXJuIGNyZWF0ZVJlZHVjZXI8Uz4oaW5pdGlhbFN0YXRlLFxuICAgICAgLi4udG90YWxPbnNcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjcmVhdGVDcnVkUmVkdWNlclxuICB9O1xufVxuIl19
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { createSelector } from '@ngrx/store';
|
|
2
|
+
import { jNgrxFilter } from './j-ngrx-filter';
|
|
3
|
+
export function createCrudSelectorsFactory(adapter) {
|
|
4
|
+
function getCrudSelectors(selectState) {
|
|
5
|
+
const getError = (state) => state.error;
|
|
6
|
+
const getIsLoading = (state) => state.isLoading;
|
|
7
|
+
const getIsLoaded = (state) => state.isLoaded;
|
|
8
|
+
const getFilters = (state) => state.filters;
|
|
9
|
+
const getLastCriteria = (state) => state.lastCriteria;
|
|
10
|
+
const getItemSelected = (state) => state.itemSelected;
|
|
11
|
+
const getIdSelected = (state) => state.idSelected;
|
|
12
|
+
// const getItemsSelected = (state: CrudState<T>): T[] => state.itemsSelected;
|
|
13
|
+
const getEntitiesSelected = (state) => state.entitiesSelected;
|
|
14
|
+
const getIdsSelected = (state) => state.idsSelected;
|
|
15
|
+
const getRespones = (state) => state.responses;
|
|
16
|
+
const selectError = createSelector(selectState, getError);
|
|
17
|
+
const selectIsLoading = createSelector(selectState, getIsLoading);
|
|
18
|
+
const selectIsLoaded = createSelector(selectState, getIsLoaded);
|
|
19
|
+
const selectFilters = createSelector(selectState, getFilters);
|
|
20
|
+
const selectLastCriteria = createSelector(selectState, getLastCriteria);
|
|
21
|
+
const selectItemSelected = createSelector(selectState, getItemSelected);
|
|
22
|
+
const selectEntitiesSelected = createSelector(selectState, getEntitiesSelected);
|
|
23
|
+
const selectItemsSelected = createSelector(selectEntitiesSelected, (entities) => Object.values(entities));
|
|
24
|
+
const selectIdSelected = createSelector(selectState, getIdSelected);
|
|
25
|
+
const selectIdsSelected = createSelector(selectState, getIdsSelected);
|
|
26
|
+
const selectResponses = createSelector(selectState, getRespones);
|
|
27
|
+
const { selectAll, selectEntities, selectIds, selectTotal } = adapter.getSelectors(selectState);
|
|
28
|
+
const selectItemsSelectedOrigin = createSelector(selectIdsSelected, selectEntities, (ids, entities) => ids.map((id) => entities[id]));
|
|
29
|
+
const selectItemSelectedOrigin = createSelector(selectIdSelected, selectEntities, (id, entities) => entities[id]);
|
|
30
|
+
const selectFilteredItems = createSelector([selectAll, selectFilters], (allTasks, filters) => {
|
|
31
|
+
return jNgrxFilter(allTasks, filters);
|
|
32
|
+
});
|
|
33
|
+
return {
|
|
34
|
+
selectError,
|
|
35
|
+
selectIsLoading,
|
|
36
|
+
selectIsLoaded,
|
|
37
|
+
selectFilters,
|
|
38
|
+
selectFilteredItems,
|
|
39
|
+
selectAll,
|
|
40
|
+
selectEntities,
|
|
41
|
+
selectIds,
|
|
42
|
+
selectTotal,
|
|
43
|
+
selectLastCriteria,
|
|
44
|
+
selectIdSelected,
|
|
45
|
+
selectItemSelected,
|
|
46
|
+
selectItemSelectedOrigin,
|
|
47
|
+
selectIdsSelected,
|
|
48
|
+
selectItemsSelected,
|
|
49
|
+
selectEntitiesSelected,
|
|
50
|
+
selectItemsSelectedOrigin,
|
|
51
|
+
selectResponses,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
return { getCrudSelectors };
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGVfc2VsZWN0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdyeC1lbnRpdHktY3J1ZC9zcmMvbGliL3N0YXRlX3NlbGVjdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsY0FBYyxFQUFtQixNQUFNLGFBQWEsQ0FBQztBQUM3RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFNUMsTUFBTSxVQUFVLDBCQUEwQixDQUFJLE9BQU87SUFLbkQsU0FBUyxnQkFBZ0IsQ0FDdkIsV0FBNkM7UUFHN0MsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFtQixFQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzNELE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBbUIsRUFBVyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUN2RSxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQW1CLEVBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDckUsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFtQixFQUFvQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM1RixNQUFNLGVBQWUsR0FBRyxDQUFDLEtBQW1CLEVBQWEsRUFBRSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUM7UUFDL0UsTUFBTSxlQUFlLEdBQUcsQ0FBQyxLQUFtQixFQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQ3ZFLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBbUIsRUFBbUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDakYsOEVBQThFO1FBQzlFLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUFtQixFQUFpQixFQUFFLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDO1FBQzNGLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBbUIsRUFBdUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDdkYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFtQixFQUFvQixFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUUvRSxNQUFNLFdBQVcsR0FBNkIsY0FBYyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNwRixNQUFNLGVBQWUsR0FBaUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNoRyxNQUFNLGNBQWMsR0FBaUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM5RixNQUFNLGFBQWEsR0FBMEQsY0FBYyxDQUN6RixXQUFXLEVBQ1gsVUFBVSxDQUNYLENBQUM7UUFDRixNQUFNLGtCQUFrQixHQUFtQyxjQUFjLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBRXhHLE1BQU0sa0JBQWtCLEdBQTJCLGNBQWMsQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDaEcsTUFBTSxzQkFBc0IsR0FBdUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3BILE1BQU0sbUJBQW1CLEdBQTZCLGNBQWMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLFFBQXVCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUVuSixNQUFNLGdCQUFnQixHQUF5QyxjQUFjLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzFHLE1BQU0saUJBQWlCLEdBQTZDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFaEgsTUFBTSxlQUFlLEdBQTBDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFeEcsTUFBTSxFQUNKLFNBQVMsRUFDVCxjQUFjLEVBQ2QsU0FBUyxFQUNULFdBQVcsRUFDWixHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFdEMsTUFBTSx5QkFBeUIsR0FBRyxjQUFjLENBQzlDLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsQ0FBQyxHQUFVLEVBQUUsUUFBdUIsRUFBTyxFQUFFLENBQzNDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUFFLFFBQVEsQ0FBQyxFQUFFLENBQU8sQ0FBQyxDQUM1QyxDQUFDO1FBRUYsTUFBTSx3QkFBd0IsR0FBRyxjQUFjLENBQzdDLGdCQUFnQixFQUNoQixjQUFjLEVBQ2QsQ0FBQyxFQUFFLEVBQUUsUUFBdUIsRUFBTyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUNuRCxDQUFDO1FBRUYsTUFBTSxtQkFBbUIsR0FBK0IsY0FBYyxDQUFDLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxFQUMvRixDQUFDLFFBQWEsRUFBRSxPQUF5QyxFQUFPLEVBQUU7WUFDaEUsT0FBTyxXQUFXLENBQUksUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FDRixDQUFDO1FBRUYsT0FBTztZQUNMLFdBQVc7WUFDWCxlQUFlO1lBQ2YsY0FBYztZQUNkLGFBQWE7WUFDYixtQkFBbUI7WUFDbkIsU0FBUztZQUNULGNBQWM7WUFDZCxTQUFTO1lBQ1QsV0FBVztZQUNYLGtCQUFrQjtZQUNsQixnQkFBZ0I7WUFDaEIsa0JBQWtCO1lBQ2xCLHdCQUF3QjtZQUN4QixpQkFBaUI7WUFDakIsbUJBQW1CO1lBQ25CLHNCQUFzQjtZQUN0Qix5QkFBeUI7WUFDekIsZUFBZTtTQUNoQixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxDQUFDO0FBQzVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NydWRTdGF0ZSwgRGljdGlvbmFyeSwgRW50aXR5Q3J1ZFNlbGVjdG9ycywgRW50aXR5Q3J1ZFN0YXRlLCBGaWx0ZXJNZXRhZGF0YSwgSUNyaXRlcmlhLCBPcHRSZXNwb25zZX0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHtjcmVhdGVTZWxlY3RvciwgTWVtb2l6ZWRTZWxlY3Rvcn0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHtqTmdyeEZpbHRlcn0gZnJvbSAnLi9qLW5ncngtZmlsdGVyJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNydWRTZWxlY3RvcnNGYWN0b3J5PFQ+KGFkYXB0ZXIpIHtcblxuICBmdW5jdGlvbiBnZXRDcnVkU2VsZWN0b3JzPFY+KFxuICAgIHNlbGVjdFN0YXRlOiAoc3RhdGU6IFYpID0+IEVudGl0eUNydWRTdGF0ZTxUPlxuICApOiBFbnRpdHlDcnVkU2VsZWN0b3JzPFQsIFY+O1xuICBmdW5jdGlvbiBnZXRDcnVkU2VsZWN0b3JzPFY+KFxuICAgIHNlbGVjdFN0YXRlOiAoc3RhdGU6IFYpID0+IEVudGl0eUNydWRTdGF0ZTxUPlxuICApOiBFbnRpdHlDcnVkU2VsZWN0b3JzPFQsIFY+IHtcblxuICAgIGNvbnN0IGdldEVycm9yID0gKHN0YXRlOiBDcnVkU3RhdGU8VD4pOiBhbnkgPT4gc3RhdGUuZXJyb3I7XG4gICAgY29uc3QgZ2V0SXNMb2FkaW5nID0gKHN0YXRlOiBDcnVkU3RhdGU8VD4pOiBib29sZWFuID0+IHN0YXRlLmlzTG9hZGluZztcbiAgICBjb25zdCBnZXRJc0xvYWRlZCA9IChzdGF0ZTogQ3J1ZFN0YXRlPFQ+KTogYm9vbGVhbiA9PiBzdGF0ZS5pc0xvYWRlZDtcbiAgICBjb25zdCBnZXRGaWx0ZXJzID0gKHN0YXRlOiBDcnVkU3RhdGU8VD4pOiB7IFtzOiBzdHJpbmddOiBGaWx0ZXJNZXRhZGF0YTsgfSA9PiBzdGF0ZS5maWx0ZXJzO1xuICAgIGNvbnN0IGdldExhc3RDcml0ZXJpYSA9IChzdGF0ZTogQ3J1ZFN0YXRlPFQ+KTogSUNyaXRlcmlhID0+IHN0YXRlLmxhc3RDcml0ZXJpYTtcbiAgICBjb25zdCBnZXRJdGVtU2VsZWN0ZWQgPSAoc3RhdGU6IENydWRTdGF0ZTxUPik6IFQgPT4gc3RhdGUuaXRlbVNlbGVjdGVkO1xuICAgIGNvbnN0IGdldElkU2VsZWN0ZWQgPSAoc3RhdGU6IENydWRTdGF0ZTxUPik6IHN0cmluZyB8IG51bWJlciA9PiBzdGF0ZS5pZFNlbGVjdGVkO1xuICAgIC8vIGNvbnN0IGdldEl0ZW1zU2VsZWN0ZWQgPSAoc3RhdGU6IENydWRTdGF0ZTxUPik6IFRbXSA9PiBzdGF0ZS5pdGVtc1NlbGVjdGVkO1xuICAgIGNvbnN0IGdldEVudGl0aWVzU2VsZWN0ZWQgPSAoc3RhdGU6IENydWRTdGF0ZTxUPik6IERpY3Rpb25hcnk8VD4gPT4gc3RhdGUuZW50aXRpZXNTZWxlY3RlZDtcbiAgICBjb25zdCBnZXRJZHNTZWxlY3RlZCA9IChzdGF0ZTogQ3J1ZFN0YXRlPFQ+KTogc3RyaW5nW10gfCBudW1iZXJbXSA9PiBzdGF0ZS5pZHNTZWxlY3RlZDtcbiAgICBjb25zdCBnZXRSZXNwb25lcyA9IChzdGF0ZTogQ3J1ZFN0YXRlPFQ+KTogT3B0UmVzcG9uc2U8VD5bXSA9PiBzdGF0ZS5yZXNwb25zZXM7XG5cbiAgICBjb25zdCBzZWxlY3RFcnJvcjogTWVtb2l6ZWRTZWxlY3RvcjxWLCBhbnk+ID0gY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIGdldEVycm9yKTtcbiAgICBjb25zdCBzZWxlY3RJc0xvYWRpbmc6IE1lbW9pemVkU2VsZWN0b3I8ViwgYm9vbGVhbj4gPSBjcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgZ2V0SXNMb2FkaW5nKTtcbiAgICBjb25zdCBzZWxlY3RJc0xvYWRlZDogTWVtb2l6ZWRTZWxlY3RvcjxWLCBib29sZWFuPiA9IGNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBnZXRJc0xvYWRlZCk7XG4gICAgY29uc3Qgc2VsZWN0RmlsdGVyczogTWVtb2l6ZWRTZWxlY3RvcjxWLCB7IFtzOiBzdHJpbmddOiBGaWx0ZXJNZXRhZGF0YTsgfT4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHNlbGVjdFN0YXRlLFxuICAgICAgZ2V0RmlsdGVyc1xuICAgICk7XG4gICAgY29uc3Qgc2VsZWN0TGFzdENyaXRlcmlhOiBNZW1vaXplZFNlbGVjdG9yPFYsIElDcml0ZXJpYT4gPSBjcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgZ2V0TGFzdENyaXRlcmlhKTtcblxuICAgIGNvbnN0IHNlbGVjdEl0ZW1TZWxlY3RlZDogTWVtb2l6ZWRTZWxlY3RvcjxWLCBUPiA9IGNyZWF0ZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBnZXRJdGVtU2VsZWN0ZWQpO1xuICAgIGNvbnN0IHNlbGVjdEVudGl0aWVzU2VsZWN0ZWQ6IE1lbW9pemVkU2VsZWN0b3I8ViwgRGljdGlvbmFyeTxUPj4gPSBjcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgZ2V0RW50aXRpZXNTZWxlY3RlZCk7XG4gICAgY29uc3Qgc2VsZWN0SXRlbXNTZWxlY3RlZDogTWVtb2l6ZWRTZWxlY3RvcjxWLCBUW10+ID0gY3JlYXRlU2VsZWN0b3Ioc2VsZWN0RW50aXRpZXNTZWxlY3RlZCwgKGVudGl0aWVzOiBEaWN0aW9uYXJ5PFQ+KSA9PiBPYmplY3QudmFsdWVzKGVudGl0aWVzKSk7XG5cbiAgICBjb25zdCBzZWxlY3RJZFNlbGVjdGVkOiBNZW1vaXplZFNlbGVjdG9yPFYsIHN0cmluZyB8IG51bWJlcj4gPSBjcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgZ2V0SWRTZWxlY3RlZCk7XG4gICAgY29uc3Qgc2VsZWN0SWRzU2VsZWN0ZWQ6IE1lbW9pemVkU2VsZWN0b3I8Viwgc3RyaW5nW10gfCBudW1iZXJbXT4gPSBjcmVhdGVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgZ2V0SWRzU2VsZWN0ZWQpO1xuXG4gICAgY29uc3Qgc2VsZWN0UmVzcG9uc2VzOiBNZW1vaXplZFNlbGVjdG9yPFYsIE9wdFJlc3BvbnNlPFQ+W10+ID0gY3JlYXRlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIGdldFJlc3BvbmVzKTtcblxuICAgIGNvbnN0IHtcbiAgICAgIHNlbGVjdEFsbCxcbiAgICAgIHNlbGVjdEVudGl0aWVzLFxuICAgICAgc2VsZWN0SWRzLFxuICAgICAgc2VsZWN0VG90YWxcbiAgICB9ID0gYWRhcHRlci5nZXRTZWxlY3RvcnMoc2VsZWN0U3RhdGUpO1xuXG4gICAgY29uc3Qgc2VsZWN0SXRlbXNTZWxlY3RlZE9yaWdpbiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgc2VsZWN0SWRzU2VsZWN0ZWQsXG4gICAgICBzZWxlY3RFbnRpdGllcyxcbiAgICAgIChpZHM6IGFueVtdLCBlbnRpdGllczogRGljdGlvbmFyeTxUPik6IGFueSA9PlxuICAgICAgICBpZHMubWFwKChpZDogYW55KSA9PiAoZW50aXRpZXNbaWRdIGFzIFQpKVxuICAgICk7XG5cbiAgICBjb25zdCBzZWxlY3RJdGVtU2VsZWN0ZWRPcmlnaW4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHNlbGVjdElkU2VsZWN0ZWQsXG4gICAgICBzZWxlY3RFbnRpdGllcyxcbiAgICAgIChpZCwgZW50aXRpZXM6IERpY3Rpb25hcnk8VD4pOiBhbnkgPT4gZW50aXRpZXNbaWRdXG4gICAgKTtcblxuICAgIGNvbnN0IHNlbGVjdEZpbHRlcmVkSXRlbXM6IE1lbW9pemVkU2VsZWN0b3I8YW55LCBUW10+ID0gY3JlYXRlU2VsZWN0b3IoW3NlbGVjdEFsbCwgc2VsZWN0RmlsdGVyc10sXG4gICAgICAoYWxsVGFza3M6IFRbXSwgZmlsdGVyczogeyBbczogc3RyaW5nXTogRmlsdGVyTWV0YWRhdGE7IH0pOiBUW10gPT4ge1xuICAgICAgICByZXR1cm4gak5ncnhGaWx0ZXI8VD4oYWxsVGFza3MsIGZpbHRlcnMpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2VsZWN0RXJyb3IsXG4gICAgICBzZWxlY3RJc0xvYWRpbmcsXG4gICAgICBzZWxlY3RJc0xvYWRlZCxcbiAgICAgIHNlbGVjdEZpbHRlcnMsXG4gICAgICBzZWxlY3RGaWx0ZXJlZEl0ZW1zLFxuICAgICAgc2VsZWN0QWxsLFxuICAgICAgc2VsZWN0RW50aXRpZXMsXG4gICAgICBzZWxlY3RJZHMsXG4gICAgICBzZWxlY3RUb3RhbCxcbiAgICAgIHNlbGVjdExhc3RDcml0ZXJpYSxcbiAgICAgIHNlbGVjdElkU2VsZWN0ZWQsXG4gICAgICBzZWxlY3RJdGVtU2VsZWN0ZWQsXG4gICAgICBzZWxlY3RJdGVtU2VsZWN0ZWRPcmlnaW4sXG4gICAgICBzZWxlY3RJZHNTZWxlY3RlZCxcbiAgICAgIHNlbGVjdEl0ZW1zU2VsZWN0ZWQsXG4gICAgICBzZWxlY3RFbnRpdGllc1NlbGVjdGVkLFxuICAgICAgc2VsZWN0SXRlbXNTZWxlY3RlZE9yaWdpbixcbiAgICAgIHNlbGVjdFJlc3BvbnNlcyxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtnZXRDcnVkU2VsZWN0b3JzfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { filter } from 'rxjs/operators';
|
|
2
|
+
import { ActionEnum } from './models';
|
|
3
|
+
import { isDevMode } from '@angular/core';
|
|
4
|
+
export const ofFailure = () => {
|
|
5
|
+
return input$ => input$.pipe(filter(value => value.type.endsWith(ActionEnum.FAILURE)));
|
|
6
|
+
};
|
|
7
|
+
export function selectIdValue(entity, selectId) {
|
|
8
|
+
const key = selectId(entity);
|
|
9
|
+
if (isDevMode() && key === undefined) {
|
|
10
|
+
console.warn('@ngrx/entity: The entity passed to the `selectId` implementation returned undefined.', 'You should probably provide your own `selectId` implementation.', 'The entity that was passed:', entity, 'The `selectId` implementation:', selectId.toString());
|
|
11
|
+
}
|
|
12
|
+
return key;
|
|
13
|
+
}
|
|
14
|
+
export const toDictionary = (items, adapter) => items.reduce((prev, curr) => {
|
|
15
|
+
const key = selectIdValue(curr, adapter.selectId);
|
|
16
|
+
prev[key] = curr;
|
|
17
|
+
return prev;
|
|
18
|
+
}, {});
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3J4LWVudGl0eS1jcnVkL3NyYy9saWIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBQyxVQUFVLEVBQXlCLE1BQU0sVUFBVSxDQUFDO0FBRTVELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHeEMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLEdBQWtELEVBQUU7SUFDM0UsT0FBTyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RixDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsYUFBYSxDQUFJLE1BQVMsRUFBRSxRQUF1QjtJQUNqRSxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFN0IsSUFBSSxTQUFTLEVBQUUsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO1FBQ3BDLE9BQU8sQ0FBQyxJQUFJLENBQ1Ysc0ZBQXNGLEVBQ3RGLGlFQUFpRSxFQUNqRSw2QkFBNkIsRUFDN0IsTUFBTSxFQUNOLGdDQUFnQyxFQUNoQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQ3BCLENBQUM7S0FDSDtJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFJLEtBQVUsRUFBRSxPQUF5QixFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBaUIsRUFBRTtJQUNuSCxNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ2pCLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXJ9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7QWN0aW9uRW51bSwgRGljdGlvbmFyeSwgSWRTZWxlY3Rvcn0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHtBY3Rpb259IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7aXNEZXZNb2RlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RW50aXR5QWRhcHRlcn0gZnJvbSAnQG5ncngvZW50aXR5JztcblxuZXhwb3J0IGNvbnN0IG9mRmFpbHVyZSA9IDxUIGV4dGVuZHMgQWN0aW9uPigpOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD4gPT4ge1xuICByZXR1cm4gaW5wdXQkID0+IGlucHV0JC5waXBlKGZpbHRlcih2YWx1ZSA9PiB2YWx1ZS50eXBlLmVuZHNXaXRoKEFjdGlvbkVudW0uRkFJTFVSRSkpKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RJZFZhbHVlPFQ+KGVudGl0eTogVCwgc2VsZWN0SWQ6IElkU2VsZWN0b3I8VD4pIHtcbiAgY29uc3Qga2V5ID0gc2VsZWN0SWQoZW50aXR5KTtcblxuICBpZiAoaXNEZXZNb2RlKCkgJiYga2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAnQG5ncngvZW50aXR5OiBUaGUgZW50aXR5IHBhc3NlZCB0byB0aGUgYHNlbGVjdElkYCBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCB1bmRlZmluZWQuJyxcbiAgICAgICdZb3Ugc2hvdWxkIHByb2JhYmx5IHByb3ZpZGUgeW91ciBvd24gYHNlbGVjdElkYCBpbXBsZW1lbnRhdGlvbi4nLFxuICAgICAgJ1RoZSBlbnRpdHkgdGhhdCB3YXMgcGFzc2VkOicsXG4gICAgICBlbnRpdHksXG4gICAgICAnVGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb246JyxcbiAgICAgIHNlbGVjdElkLnRvU3RyaW5nKClcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGtleTtcbn1cblxuZXhwb3J0IGNvbnN0IHRvRGljdGlvbmFyeSA9IDxUPihpdGVtczogVFtdLCBhZGFwdGVyOiBFbnRpdHlBZGFwdGVyPFQ+KSA9PiBpdGVtcy5yZWR1Y2UoKHByZXYsIGN1cnIpOiBEaWN0aW9uYXJ5PFQ+ID0+IHtcbiAgY29uc3Qga2V5ID0gc2VsZWN0SWRWYWx1ZShjdXJyLCBhZGFwdGVyLnNlbGVjdElkKTtcbiAgcHJldltrZXldID0gY3VycjtcbiAgcmV0dXJuIHByZXY7XG59LCB7fSk7XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdyeC1lbnRpdHktY3J1ZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25ncngtZW50aXR5LWNydWQvc3JjL25ncngtZW50aXR5LWNydWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './lib/models';
|
|
2
|
+
export * from './lib/create_adapter';
|
|
3
|
+
export * from './lib/effect';
|
|
4
|
+
export * from './lib/base-crud.service';
|
|
5
|
+
export * from './lib/base-crud-gql.service';
|
|
6
|
+
export { createCrudOns } from './lib/reducer';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25ncngtZW50aXR5LWNydWQvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jcmVhdGVfYWRhcHRlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9lZmZlY3QnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYmFzZS1jcnVkLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYmFzZS1jcnVkLWdxbC5zZXJ2aWNlJztcbmV4cG9ydCB7Y3JlYXRlQ3J1ZE9uc30gZnJvbSAnLi9saWIvcmVkdWNlcic7XG4iXX0=
|