@ngrx-traits/common 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/async-action/async-action.model.d.ts +19 -0
- package/async-action/async-action.trait.d.ts +59 -0
- package/async-action/index.d.ts +2 -0
- package/bundles/ngrx-traits-common.umd.js +2126 -0
- package/bundles/ngrx-traits-common.umd.js.map +1 -0
- package/crud-entities/crud-entities.model.d.ts +76 -0
- package/crud-entities/crud-entities.trait.actions.d.ts +2 -0
- package/crud-entities/crud-entities.trait.d.ts +35 -0
- package/crud-entities/crud-entities.trait.mutators.d.ts +3 -0
- package/crud-entities/crud-entities.trait.reducer.d.ts +7 -0
- package/crud-entities/crud-entities.trait.selectors.d.ts +3 -0
- package/crud-entities/index.d.ts +2 -0
- package/entities-pagination/entities-pagination.model.d.ts +82 -0
- package/entities-pagination/entities-pagination.model.internal.d.ts +12 -0
- package/entities-pagination/entities-pagination.trait.actions.d.ts +2 -0
- package/entities-pagination/entities-pagination.trait.d.ts +55 -0
- package/entities-pagination/entities-pagination.trait.effects.d.ts +8 -0
- package/entities-pagination/entities-pagination.trait.mutators.d.ts +3 -0
- package/entities-pagination/entities-pagination.trait.reducer.d.ts +7 -0
- package/entities-pagination/entities-pagination.trait.selectors.d.ts +4 -0
- package/entities-pagination/index.d.ts +2 -0
- package/esm2015/async-action/async-action.model.js +2 -0
- package/esm2015/async-action/async-action.model.js.map +1 -0
- package/esm2015/async-action/async-action.trait.js +96 -0
- package/esm2015/async-action/async-action.trait.js.map +1 -0
- package/esm2015/async-action/index.js +3 -0
- package/esm2015/async-action/index.js.map +1 -0
- package/esm2015/crud-entities/crud-entities.model.js +8 -0
- package/esm2015/crud-entities/crud-entities.model.js.map +1 -0
- package/esm2015/crud-entities/crud-entities.trait.actions.js +20 -0
- package/esm2015/crud-entities/crud-entities.trait.actions.js.map +1 -0
- package/esm2015/crud-entities/crud-entities.trait.js +53 -0
- package/esm2015/crud-entities/crud-entities.trait.js.map +1 -0
- package/esm2015/crud-entities/crud-entities.trait.mutators.js +101 -0
- package/esm2015/crud-entities/crud-entities.trait.mutators.js.map +1 -0
- package/esm2015/crud-entities/crud-entities.trait.reducer.js +15 -0
- package/esm2015/crud-entities/crud-entities.trait.reducer.js.map +1 -0
- package/esm2015/crud-entities/crud-entities.trait.selectors.js +70 -0
- package/esm2015/crud-entities/crud-entities.trait.selectors.js.map +1 -0
- package/esm2015/crud-entities/index.js +3 -0
- package/esm2015/crud-entities/index.js.map +1 -0
- package/esm2015/entities-pagination/entities-pagination.model.internal.js +2 -0
- package/esm2015/entities-pagination/entities-pagination.model.internal.js.map +1 -0
- package/esm2015/entities-pagination/entities-pagination.model.js +2 -0
- package/esm2015/entities-pagination/entities-pagination.model.js.map +1 -0
- package/esm2015/entities-pagination/entities-pagination.trait.actions.js +20 -0
- package/esm2015/entities-pagination/entities-pagination.trait.actions.js.map +1 -0
- package/esm2015/entities-pagination/entities-pagination.trait.effects.js +54 -0
- package/esm2015/entities-pagination/entities-pagination.trait.effects.js.map +1 -0
- package/esm2015/entities-pagination/entities-pagination.trait.js +80 -0
- package/esm2015/entities-pagination/entities-pagination.trait.js.map +1 -0
- package/esm2015/entities-pagination/entities-pagination.trait.mutators.js +23 -0
- package/esm2015/entities-pagination/entities-pagination.trait.mutators.js.map +1 -0
- package/esm2015/entities-pagination/entities-pagination.trait.reducer.js +33 -0
- package/esm2015/entities-pagination/entities-pagination.trait.reducer.js.map +1 -0
- package/esm2015/entities-pagination/entities-pagination.trait.selectors.js +65 -0
- package/esm2015/entities-pagination/entities-pagination.trait.selectors.js.map +1 -0
- package/esm2015/entities-pagination/index.js +3 -0
- package/esm2015/entities-pagination/index.js.map +1 -0
- package/esm2015/filter-entities/filter-entities.model.internal.js +2 -0
- package/esm2015/filter-entities/filter-entities.model.internal.js.map +1 -0
- package/esm2015/filter-entities/filter-entities.model.js +2 -0
- package/esm2015/filter-entities/filter-entities.model.js.map +1 -0
- package/esm2015/filter-entities/filter-entities.trait.actions.js +16 -0
- package/esm2015/filter-entities/filter-entities.trait.actions.js.map +1 -0
- package/esm2015/filter-entities/filter-entities.trait.effect.js +56 -0
- package/esm2015/filter-entities/filter-entities.trait.effect.js.map +1 -0
- package/esm2015/filter-entities/filter-entities.trait.js +68 -0
- package/esm2015/filter-entities/filter-entities.trait.js.map +1 -0
- package/esm2015/filter-entities/filter-entities.trait.mutators.js +7 -0
- package/esm2015/filter-entities/filter-entities.trait.mutators.js.map +1 -0
- package/esm2015/filter-entities/filter-entities.trait.reducer.js +9 -0
- package/esm2015/filter-entities/filter-entities.trait.reducer.js.map +1 -0
- package/esm2015/filter-entities/filter-entities.trait.selectors.js +9 -0
- package/esm2015/filter-entities/filter-entities.trait.selectors.js.map +1 -0
- package/esm2015/filter-entities/index.js +3 -0
- package/esm2015/filter-entities/index.js.map +1 -0
- package/esm2015/index.js +12 -0
- package/esm2015/index.js.map +1 -0
- package/esm2015/load-entities/index.js +3 -0
- package/esm2015/load-entities/index.js.map +1 -0
- package/esm2015/load-entities/load-entities.model.js +2 -0
- package/esm2015/load-entities/load-entities.model.js.map +1 -0
- package/esm2015/load-entities/load-entities.mutators.js +8 -0
- package/esm2015/load-entities/load-entities.mutators.js.map +1 -0
- package/esm2015/load-entities/load-entities.trait.actions.js +10 -0
- package/esm2015/load-entities/load-entities.trait.actions.js.map +1 -0
- package/esm2015/load-entities/load-entities.trait.js +57 -0
- package/esm2015/load-entities/load-entities.trait.js.map +1 -0
- package/esm2015/load-entities/load-entities.trait.reducer.js +12 -0
- package/esm2015/load-entities/load-entities.trait.reducer.js.map +1 -0
- package/esm2015/load-entities/load-entities.trait.selectors.js +33 -0
- package/esm2015/load-entities/load-entities.trait.selectors.js.map +1 -0
- package/esm2015/load-entities/load-entities.utils.js +10 -0
- package/esm2015/load-entities/load-entities.utils.js.map +1 -0
- package/esm2015/load-entity/index.js +3 -0
- package/esm2015/load-entity/index.js.map +1 -0
- package/esm2015/load-entity/load-entity.model.js +2 -0
- package/esm2015/load-entity/load-entity.model.js.map +1 -0
- package/esm2015/load-entity/load-entity.traits.js +65 -0
- package/esm2015/load-entity/load-entity.traits.js.map +1 -0
- package/esm2015/ngrx-traits-common.js +5 -0
- package/esm2015/ngrx-traits-common.js.map +1 -0
- package/esm2015/public_api.js +2 -0
- package/esm2015/public_api.js.map +1 -0
- package/esm2015/reset/index.js +2 -0
- package/esm2015/reset/index.js.map +1 -0
- package/esm2015/reset/reset.trait.js +66 -0
- package/esm2015/reset/reset.trait.js.map +1 -0
- package/esm2015/select-entities/index.js +4 -0
- package/esm2015/select-entities/index.js.map +1 -0
- package/esm2015/select-entities/select-entities.model.js +2 -0
- package/esm2015/select-entities/select-entities.model.js.map +1 -0
- package/esm2015/select-entities/select-entities.trait.actions.js +11 -0
- package/esm2015/select-entities/select-entities.trait.actions.js.map +1 -0
- package/esm2015/select-entities/select-entities.trait.js +50 -0
- package/esm2015/select-entities/select-entities.trait.js.map +1 -0
- package/esm2015/select-entities/select-entities.trait.mutators.js +21 -0
- package/esm2015/select-entities/select-entities.trait.mutators.js.map +1 -0
- package/esm2015/select-entities/select-entities.trait.reducer.js +40 -0
- package/esm2015/select-entities/select-entities.trait.reducer.js.map +1 -0
- package/esm2015/select-entities/select-entities.trait.selectors.js +28 -0
- package/esm2015/select-entities/select-entities.trait.selectors.js.map +1 -0
- package/esm2015/select-entities/select-entities.utils.js +25 -0
- package/esm2015/select-entities/select-entities.utils.js.map +1 -0
- package/esm2015/select-entity/index.js +3 -0
- package/esm2015/select-entity/index.js.map +1 -0
- package/esm2015/select-entity/select-entity.model.js +2 -0
- package/esm2015/select-entity/select-entity.model.js.map +1 -0
- package/esm2015/select-entity/select-entity.trait.actions.js +9 -0
- package/esm2015/select-entity/select-entity.trait.actions.js.map +1 -0
- package/esm2015/select-entity/select-entity.trait.js +47 -0
- package/esm2015/select-entity/select-entity.trait.js.map +1 -0
- package/esm2015/select-entity/select-entity.trait.mutators.js +17 -0
- package/esm2015/select-entity/select-entity.trait.mutators.js.map +1 -0
- package/esm2015/select-entity/select-entity.trait.reducer.js +26 -0
- package/esm2015/select-entity/select-entity.trait.reducer.js.map +1 -0
- package/esm2015/select-entity/select-entity.trait.selectors.js +13 -0
- package/esm2015/select-entity/select-entity.trait.selectors.js.map +1 -0
- package/esm2015/set-entity/index.js +3 -0
- package/esm2015/set-entity/index.js.map +1 -0
- package/esm2015/set-entity/set-entity.model.js +2 -0
- package/esm2015/set-entity/set-entity.model.js.map +1 -0
- package/esm2015/set-entity/set-entity.trait.js +52 -0
- package/esm2015/set-entity/set-entity.trait.js.map +1 -0
- package/esm2015/sort-entities/index.js +4 -0
- package/esm2015/sort-entities/index.js.map +1 -0
- package/esm2015/sort-entities/sort-entities.model.js +2 -0
- package/esm2015/sort-entities/sort-entities.model.js.map +1 -0
- package/esm2015/sort-entities/sort-entities.trait.actions.js +8 -0
- package/esm2015/sort-entities/sort-entities.trait.actions.js.map +1 -0
- package/esm2015/sort-entities/sort-entities.trait.effect.js +28 -0
- package/esm2015/sort-entities/sort-entities.trait.effect.js.map +1 -0
- package/esm2015/sort-entities/sort-entities.trait.js +53 -0
- package/esm2015/sort-entities/sort-entities.trait.js.map +1 -0
- package/esm2015/sort-entities/sort-entities.trait.mutators.js +13 -0
- package/esm2015/sort-entities/sort-entities.trait.mutators.js.map +1 -0
- package/esm2015/sort-entities/sort-entities.trait.reducer.js +22 -0
- package/esm2015/sort-entities/sort-entities.trait.reducer.js.map +1 -0
- package/esm2015/sort-entities/sort-entities.trait.selectors.js +10 -0
- package/esm2015/sort-entities/sort-entities.trait.selectors.js.map +1 -0
- package/esm2015/sort-entities/sort-entities.utils.js +61 -0
- package/esm2015/sort-entities/sort-entities.utils.js.map +1 -0
- package/fesm2015/ngrx-traits-common.js +1511 -0
- package/fesm2015/ngrx-traits-common.js.map +1 -0
- package/filter-entities/filter-entities.model.d.ts +57 -0
- package/filter-entities/filter-entities.model.internal.d.ts +14 -0
- package/filter-entities/filter-entities.trait.actions.d.ts +2 -0
- package/filter-entities/filter-entities.trait.d.ts +42 -0
- package/filter-entities/filter-entities.trait.effect.d.ts +6 -0
- package/filter-entities/filter-entities.trait.mutators.d.ts +2 -0
- package/filter-entities/filter-entities.trait.reducer.d.ts +5 -0
- package/filter-entities/filter-entities.trait.selectors.d.ts +4 -0
- package/filter-entities/index.d.ts +2 -0
- package/index.d.ts +11 -0
- package/load-entities/index.d.ts +2 -0
- package/load-entities/load-entities.model.d.ts +97 -0
- package/load-entities/load-entities.mutators.d.ts +3 -0
- package/load-entities/load-entities.trait.actions.d.ts +2 -0
- package/load-entities/load-entities.trait.d.ts +39 -0
- package/load-entities/load-entities.trait.reducer.d.ts +4 -0
- package/load-entities/load-entities.trait.selectors.d.ts +3 -0
- package/load-entities/load-entities.utils.d.ts +4 -0
- package/load-entity/index.d.ts +2 -0
- package/load-entity/load-entity.model.d.ts +9 -0
- package/load-entity/load-entity.traits.d.ts +64 -0
- package/ngrx-traits-common.d.ts +5 -0
- package/package.json +28 -0
- package/public_api.d.ts +1 -0
- package/reset/index.d.ts +1 -0
- package/reset/reset.trait.d.ts +32 -0
- package/select-entities/index.d.ts +3 -0
- package/select-entities/select-entities.model.d.ts +41 -0
- package/select-entities/select-entities.trait.actions.d.ts +2 -0
- package/select-entities/select-entities.trait.d.ts +34 -0
- package/select-entities/select-entities.trait.mutators.d.ts +2 -0
- package/select-entities/select-entities.trait.reducer.d.ts +8 -0
- package/select-entities/select-entities.trait.selectors.d.ts +3 -0
- package/select-entities/select-entities.utils.d.ts +7 -0
- package/select-entity/index.d.ts +2 -0
- package/select-entity/select-entity.model.d.ts +33 -0
- package/select-entity/select-entity.trait.actions.d.ts +2 -0
- package/select-entity/select-entity.trait.d.ts +30 -0
- package/select-entity/select-entity.trait.mutators.d.ts +2 -0
- package/select-entity/select-entity.trait.reducer.d.ts +8 -0
- package/select-entity/select-entity.trait.selectors.d.ts +2 -0
- package/set-entity/index.d.ts +2 -0
- package/set-entity/set-entity.model.d.ts +16 -0
- package/set-entity/set-entity.trait.d.ts +39 -0
- package/sort-entities/index.d.ts +3 -0
- package/sort-entities/sort-entities.model.d.ts +35 -0
- package/sort-entities/sort-entities.trait.actions.d.ts +2 -0
- package/sort-entities/sort-entities.trait.d.ts +33 -0
- package/sort-entities/sort-entities.trait.effect.d.ts +6 -0
- package/sort-entities/sort-entities.trait.mutators.d.ts +3 -0
- package/sort-entities/sort-entities.trait.reducer.d.ts +4 -0
- package/sort-entities/sort-entities.trait.selectors.d.ts +2 -0
- package/sort-entities/sort-entities.utils.d.ts +8 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/reset/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC","sourcesContent":["export * from './reset.trait';\n"]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { createTraitFactory } from '@ngrx-traits/core';
|
|
2
|
+
import { createAction, createReducer, on, Store } from '@ngrx/store';
|
|
3
|
+
import { Injectable } from '@angular/core';
|
|
4
|
+
import { TraitEffect } from '@ngrx-traits/core';
|
|
5
|
+
import { Actions, createEffect, ofType } from '@ngrx/effects';
|
|
6
|
+
import { mapTo } from 'rxjs/operators';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@ngrx/effects";
|
|
9
|
+
import * as i2 from "@ngrx/store";
|
|
10
|
+
/**
|
|
11
|
+
* Generates the ngrx code needed to reset the current state to the initial state.
|
|
12
|
+
* @param traitConfig - Config object fot the trait factory
|
|
13
|
+
* @param traitConfig.resetOn - set an extra action which will also trigger a reset state,
|
|
14
|
+
* useful if you want to create an action that reset several features states
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* // The following trait config
|
|
18
|
+
*
|
|
19
|
+
* export interface TestState
|
|
20
|
+
* extends EntityAndStatusState<Todo>,FilterState<TodoFilter>{}
|
|
21
|
+
*
|
|
22
|
+
* const traits = createEntityFeatureFactory(
|
|
23
|
+
* addLoadEntitiesTrait<Todo>(),
|
|
24
|
+
* addResetEntitiesStateTrait()
|
|
25
|
+
* )({
|
|
26
|
+
* actionsGroupKey: '[Todos]',
|
|
27
|
+
* featureSelector: createFeatureSelector<TestState>>(
|
|
28
|
+
* 'todos',
|
|
29
|
+
* ),
|
|
30
|
+
* });
|
|
31
|
+
* // will generate the following actions, plus the ones generated by other traits
|
|
32
|
+
* traits.actions.resetTodosState()
|
|
33
|
+
*/
|
|
34
|
+
export function addResetEntitiesStateTrait(traitConfig = {}) {
|
|
35
|
+
return createTraitFactory({
|
|
36
|
+
key: 'reset',
|
|
37
|
+
config: traitConfig,
|
|
38
|
+
actions: ({ actionsGroupKey, entitiesName, }) => ({
|
|
39
|
+
resetEntitiesState: createAction(`${actionsGroupKey} Reset ${entitiesName} State`),
|
|
40
|
+
}),
|
|
41
|
+
reducer: ({ allActions, initialState }) => createReducer(initialState, on(allActions.resetEntitiesState, () => initialState)),
|
|
42
|
+
effects: ({ allActions }) => {
|
|
43
|
+
var _a;
|
|
44
|
+
class ResetEffect extends TraitEffect {
|
|
45
|
+
//TODO: not sure why Im forced to override this constructor
|
|
46
|
+
// or test wont pass, strangely doesnt happen in other files
|
|
47
|
+
// with similar case like pagination.effects.ts
|
|
48
|
+
constructor(actions$, store) {
|
|
49
|
+
var _a;
|
|
50
|
+
super(actions$, store);
|
|
51
|
+
this.externalReset$ = ((_a = traitConfig === null || traitConfig === void 0 ? void 0 : traitConfig.resetOn) === null || _a === void 0 ? void 0 : _a.length) &&
|
|
52
|
+
createEffect(() => {
|
|
53
|
+
return this.actions$.pipe(ofType(...traitConfig === null || traitConfig === void 0 ? void 0 : traitConfig.resetOn), mapTo(allActions.resetEntitiesState()));
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
ResetEffect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: ResetEffect, deps: [{ token: i1.Actions }, { token: i2.Store }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
58
|
+
ResetEffect.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: ResetEffect });
|
|
59
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: ResetEffect, decorators: [{
|
|
60
|
+
type: Injectable
|
|
61
|
+
}], ctorParameters: function () { return [{ type: i1.Actions }, { type: i2.Store }]; } });
|
|
62
|
+
return ((_a = traitConfig === null || traitConfig === void 0 ? void 0 : traitConfig.resetOn) === null || _a === void 0 ? void 0 : _a.length) ? [ResetEffect] : [];
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=reset.trait.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reset.trait.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/reset/reset.trait.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;;;;AAEvC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,0BAA0B,CACxC,cAEI,EAAE;IAEN,OAAO,kBAAkB,CAAC;QACxB,GAAG,EAAE,OAAO;QACZ,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,CAAC,EACR,eAAe,EACf,YAAY,GACc,EAAE,EAAE,CAAC,CAAC;YAChC,kBAAkB,EAAE,YAAY,CAC9B,GAAG,eAAe,UAAU,YAAY,QAAQ,CACjD;SACF,CAAC;QACF,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,EAAE,CACxC,aAAa,CACX,YAAY,EACZ,EAAE,CAAC,UAAU,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CACtD;QACH,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE;;YAC1B,MACM,WAAY,SAAQ,WAAW;gBAUnC,2DAA2D;gBAC3D,4DAA4D;gBAC5D,+CAA+C;gBAC/C,YAAY,QAAiB,EAAE,KAAiB;;oBAC9C,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;oBAbzB,mBAAc,GACZ,CAAA,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,0CAAE,MAAM;wBAC5B,YAAY,CAAC,GAAG,EAAE;4BAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CACvB,MAAM,CAAC,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,CAAC,EAC/B,KAAK,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CACvC,CAAC;wBACJ,CAAC,CAAC,CAAC;gBAOL,CAAC;;oHAfG,WAAW;wHAAX,WAAW;uGAAX,WAAW;8BADhB,UAAU;;YAkBX,OAAO,CAAA,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,0CAAE,MAAM,EAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1D;KACF,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { createTraitFactory } from '@ngrx-traits/core';\nimport { GenericActionCreator } from '../load-entities';\nimport { TraitActionsFactoryConfig } from '@ngrx-traits/core';\nimport { createAction, createReducer, on, Store } from '@ngrx/store';\nimport { Injectable } from '@angular/core';\nimport { TraitEffect } from '@ngrx-traits/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { mapTo } from 'rxjs/operators';\n\n/**\n * Generates the ngrx code needed to reset the current state to the initial state.\n * @param traitConfig - Config object fot the trait factory\n * @param traitConfig.resetOn - set an extra action which will also trigger a reset state,\n * useful if you want to create an action that reset several features states\n *\n * @example\n * // The following trait config\n *\n * export interface TestState\n * extends EntityAndStatusState<Todo>,FilterState<TodoFilter>{}\n *\n * const traits = createEntityFeatureFactory(\n * addLoadEntitiesTrait<Todo>(),\n * addResetEntitiesStateTrait()\n * )({\n * actionsGroupKey: '[Todos]',\n * featureSelector: createFeatureSelector<TestState>>(\n * 'todos',\n * ),\n * });\n * // will generate the following actions, plus the ones generated by other traits\n * traits.actions.resetTodosState()\n */\nexport function addResetEntitiesStateTrait(\n traitConfig: {\n resetOn?: GenericActionCreator[];\n } = {}\n) {\n return createTraitFactory({\n key: 'reset',\n config: traitConfig,\n actions: ({\n actionsGroupKey,\n entitiesName,\n }: TraitActionsFactoryConfig) => ({\n resetEntitiesState: createAction(\n `${actionsGroupKey} Reset ${entitiesName} State`\n ),\n }),\n reducer: ({ allActions, initialState }) =>\n createReducer(\n initialState,\n on(allActions.resetEntitiesState, () => initialState)\n ),\n effects: ({ allActions }) => {\n @Injectable()\n class ResetEffect extends TraitEffect {\n externalReset$ =\n traitConfig?.resetOn?.length &&\n createEffect(() => {\n return this.actions$.pipe(\n ofType(...traitConfig?.resetOn),\n mapTo(allActions.resetEntitiesState())\n );\n });\n\n //TODO: not sure why Im forced to override this constructor\n // or test wont pass, strangely doesnt happen in other files\n // with similar case like pagination.effects.ts\n constructor(actions$: Actions, store: Store<any>) {\n super(actions$, store);\n }\n }\n return traitConfig?.resetOn?.length ? [ResetEffect] : [];\n },\n });\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/select-entities/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC","sourcesContent":["export * from './select-entities.model';\nexport * from './select-entities.trait';\nexport * from './select-entities.utils';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-entities.model.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/select-entities/select-entities.model.ts"],"names":[],"mappings":"","sourcesContent":["import { Dictionary } from '@ngrx/entity';\nimport { LoadEntitiesState } from '../load-entities/load-entities.model';\nimport { ActionCreator, TypedAction } from '@ngrx/store/src/models';\n\nexport interface SelectEntitiesState {\n selectedIds: Dictionary<boolean>;\n}\n\nexport type SelectEntitiesActions = {\n selectEntities: ActionCreator<\n string,\n (props: {\n id: number | string;\n }) => { id: number | string } & TypedAction<string>\n >;\n deselectEntities: ActionCreator<\n string,\n (props: {\n id: number | string;\n }) => { id: number | string } & TypedAction<string>\n >;\n toggleSelectEntities: ActionCreator<\n string,\n (props: {\n id: number | string;\n }) => { id: number | string } & TypedAction<string>\n >;\n toggleSelectAllEntities: ActionCreator<string, () => TypedAction<string>>;\n clearEntitiesSelection: ActionCreator<string, () => TypedAction<string>>;\n};\n\nexport type SelectEntitiesSelectors<Entity> = {\n isAllEntitiesSelected: (\n state: LoadEntitiesState<Entity> & SelectEntitiesState\n ) => Selected;\n selectEntitiesIdsSelectedMap: (\n state: LoadEntitiesState<Entity> & SelectEntitiesState\n ) => Dictionary<boolean>;\n selectEntitiesIdsSelectedList: (\n state: LoadEntitiesState<Entity> & SelectEntitiesState\n ) => number[] | string[];\n selectEntitiesSelectedMap: (\n state: LoadEntitiesState<Entity> & SelectEntitiesState\n ) => Dictionary<Entity>;\n selectEntitiesSelectedList: (\n state: LoadEntitiesState<Entity> & SelectEntitiesState\n ) => Entity[];\n selectTotalSelectedEntities: (\n state: LoadEntitiesState<Entity> & SelectEntitiesState\n ) => number;\n};\n\nexport type SelectEntitiesMutators<Entity> = {\n selectEntities: <S extends LoadEntitiesState<Entity> & SelectEntitiesState>(\n id: number | string,\n state: S\n ) => S;\n\n deselectEntities<S extends LoadEntitiesState<Entity> & SelectEntitiesState>(\n id: number | string,\n state: S\n ): S;\n\n toggleSelectEntities<\n S extends LoadEntitiesState<Entity> & SelectEntitiesState\n >(\n id: number | string,\n state: S\n ): S;\n\n toggleSelectAllEntities<\n S extends LoadEntitiesState<Entity> & SelectEntitiesState\n >(\n state: S\n ): S;\n\n clearEntitiesSelection<\n S extends LoadEntitiesState<Entity> & SelectEntitiesState\n >(\n state: S\n ): S;\n};\n\nexport type Selected = 'all' | 'some' | 'none';\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createAction, props } from '@ngrx/store';
|
|
2
|
+
export function createSelectEntitiesTraitActions(actionsGroupKey, entitiesName) {
|
|
3
|
+
return {
|
|
4
|
+
selectEntities: createAction(`${actionsGroupKey} Select ${entitiesName}`, props()),
|
|
5
|
+
deselectEntities: createAction(`${actionsGroupKey} Deselect ${entitiesName}`, props()),
|
|
6
|
+
toggleSelectEntities: createAction(`${actionsGroupKey} Toggle Select ${entitiesName}`, props()),
|
|
7
|
+
toggleSelectAllEntities: createAction(`${actionsGroupKey} Toggle Select All ${entitiesName}`),
|
|
8
|
+
clearEntitiesSelection: createAction(`${actionsGroupKey} Clear ${entitiesName} Selection`),
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=select-entities.trait.actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-entities.trait.actions.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/select-entities/select-entities.trait.actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGlD,MAAM,UAAU,gCAAgC,CAC9C,eAAuB,EACvB,YAAoB;IAEpB,OAAO;QACL,cAAc,EAAE,YAAY,CAC1B,GAAG,eAAe,WAAW,YAAY,EAAE,EAC3C,KAAK,EAA2B,CACjC;QACD,gBAAgB,EAAE,YAAY,CAC5B,GAAG,eAAe,aAAa,YAAY,EAAE,EAC7C,KAAK,EAA2B,CACjC;QACD,oBAAoB,EAAE,YAAY,CAChC,GAAG,eAAe,kBAAkB,YAAY,EAAE,EAClD,KAAK,EAA2B,CACjC;QACD,uBAAuB,EAAE,YAAY,CACnC,GAAG,eAAe,sBAAsB,YAAY,EAAE,CACvD;QACD,sBAAsB,EAAE,YAAY,CAClC,GAAG,eAAe,UAAU,YAAY,YAAY,CACrD;KACF,CAAC;AACJ,CAAC","sourcesContent":["import { createAction, props } from '@ngrx/store';\nimport { SelectEntitiesActions } from './select-entities.model';\n\nexport function createSelectEntitiesTraitActions(\n actionsGroupKey: string,\n entitiesName: string\n): SelectEntitiesActions {\n return {\n selectEntities: createAction(\n `${actionsGroupKey} Select ${entitiesName}`,\n props<{ id: number | string }>()\n ),\n deselectEntities: createAction(\n `${actionsGroupKey} Deselect ${entitiesName}`,\n props<{ id: number | string }>()\n ),\n toggleSelectEntities: createAction(\n `${actionsGroupKey} Toggle Select ${entitiesName}`,\n props<{ id: number | string }>()\n ),\n toggleSelectAllEntities: createAction(\n `${actionsGroupKey} Toggle Select All ${entitiesName}`\n ),\n clearEntitiesSelection: createAction(\n `${actionsGroupKey} Clear ${entitiesName} Selection`\n ),\n };\n}\n"]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { createSelectEntitiesTraitActions } from './select-entities.trait.actions';
|
|
2
|
+
import { createSelectEntitiesTraitSelectors } from './select-entities.trait.selectors';
|
|
3
|
+
import { loadEntitiesTraitKey, } from '../load-entities/load-entities.model';
|
|
4
|
+
import { createTraitFactory } from '@ngrx-traits/core';
|
|
5
|
+
import { createSelectEntitiesInitialState, createSelectEntitiesTraitReducer, } from './select-entities.trait.reducer';
|
|
6
|
+
import { createSelectEntitiesTraitMutators } from './select-entities.trait.mutators';
|
|
7
|
+
/**
|
|
8
|
+
* Generates ngrx code to add multi selection to a list
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* // The following trait config
|
|
12
|
+
*
|
|
13
|
+
* export interface TestState
|
|
14
|
+
* extends EntityAndStatusState<Todo>,MultipleSelectionState{}
|
|
15
|
+
*
|
|
16
|
+
* const traits = createEntityFeatureFactory(
|
|
17
|
+
* addLoadEntitiesTrait<Todo>(),
|
|
18
|
+
* addSelectEntitiesTrait<Todo>()
|
|
19
|
+
* )({
|
|
20
|
+
* actionsGroupKey: '[Todos]',
|
|
21
|
+
* featureSelector: createFeatureSelector<TestState>>(
|
|
22
|
+
* 'todos',
|
|
23
|
+
* ),
|
|
24
|
+
* });
|
|
25
|
+
* // will generate the following actions and selectors, plus the ones generated by other traits
|
|
26
|
+
* traits.actions.selectTodos({id})
|
|
27
|
+
* traits.actions.deselectTodos({id})
|
|
28
|
+
* traits.actions.toggleSectTodos({id})
|
|
29
|
+
* traits.actions.toggleSelectAllTodos()
|
|
30
|
+
* traits.actions.clearTodosSelection()
|
|
31
|
+
*
|
|
32
|
+
* traits.selectors.isAllTodosSelected()
|
|
33
|
+
* traits.selectors.selectTodosIdsSelectedMap()
|
|
34
|
+
* traits.selectors.selectTodosIdsSelectedList()
|
|
35
|
+
* traits.selectors.selectTodosSelectedMap()
|
|
36
|
+
* traits.selectors.selectTodosSelectedList()
|
|
37
|
+
* traits.selectors.selectTotalSelectedTodos()
|
|
38
|
+
*/
|
|
39
|
+
export function addSelectEntitiesTrait() {
|
|
40
|
+
return createTraitFactory({
|
|
41
|
+
key: 'SelectEntities',
|
|
42
|
+
depends: [loadEntitiesTraitKey],
|
|
43
|
+
actions: ({ actionsGroupKey, entitiesName }) => createSelectEntitiesTraitActions(actionsGroupKey, entitiesName),
|
|
44
|
+
selectors: ({ previousSelectors }) => createSelectEntitiesTraitSelectors(previousSelectors),
|
|
45
|
+
initialState: ({ previousInitialState }) => createSelectEntitiesInitialState(previousInitialState),
|
|
46
|
+
mutators: ({ allSelectors }) => createSelectEntitiesTraitMutators(allSelectors),
|
|
47
|
+
reducer: ({ initialState, allActions, allMutators, allConfigs }) => createSelectEntitiesTraitReducer(initialState, allActions, allMutators, allConfigs),
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=select-entities.trait.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-entities.trait.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/select-entities/select-entities.trait.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,iCAAiC,CAAC;AAEnF,OAAO,EAAE,kCAAkC,EAAE,MAAM,mCAAmC,CAAC;AASvF,OAAO,EAIL,oBAAoB,GACrB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EACL,gCAAgC,EAChC,gCAAgC,GACjC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,iCAAiC,EAAE,MAAM,kCAAkC,CAAC;AASrF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,kBAAkB,CAAC;QACxB,GAAG,EAAE,gBAAgB;QACrB,OAAO,EAAE,CAAC,oBAAoB,CAAC;QAC/B,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,YAAY,EAA6B,EAAE,EAAE,CACxE,gCAAgC,CAAC,eAAe,EAAE,YAAY,CAAC;QACjE,SAAS,EAAE,CAAC,EAAE,iBAAiB,EAA+B,EAAE,EAAE,CAChE,kCAAkC,CAChC,iBAAkD,CACnD;QACH,YAAY,EAAE,CAAC,EAAE,oBAAoB,EAAkC,EAAE,EAAE,CACzE,gCAAgC,CAAS,oBAAoB,CAAC;QAChE,QAAQ,EAAE,CAAC,EAAE,YAAY,EAAmC,EAAE,EAAE,CAC9D,iCAAiC,CAC/B,YAA+C,CAChD;QACH,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,EAAE,CACjE,gCAAgC,CAC9B,YAAY,EACZ,UAK2B,EAC3B,WAAW,EACX,UAEiC,CAClC;KACJ,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { createSelectEntitiesTraitActions } from './select-entities.trait.actions';\nimport { SortEntitiesActions, SortEntitiesKeyedConfig } from '../sort-entities';\nimport { createSelectEntitiesTraitSelectors } from './select-entities.trait.selectors';\nimport {\n SelectEntitiesSelectors,\n SelectEntitiesActions,\n} from './select-entities.model';\nimport {\n EntitiesPaginationActions,\n EntitiesPaginationKeyedConfig,\n} from '../entities-pagination/entities-pagination.model';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesSelectors,\n loadEntitiesTraitKey,\n} from '../load-entities/load-entities.model';\nimport { createTraitFactory } from '@ngrx-traits/core';\nimport { CrudEntitiesActions } from '../crud-entities/crud-entities.model';\nimport {\n createSelectEntitiesInitialState,\n createSelectEntitiesTraitReducer,\n} from './select-entities.trait.reducer';\nimport { createSelectEntitiesTraitMutators } from './select-entities.trait.mutators';\nimport { FilterEntitiesActions } from '../filter-entities';\nimport {\n TraitActionsFactoryConfig,\n TraitInitialStateFactoryConfig,\n TraitSelectorsFactoryConfig,\n TraitStateMutatorsFactoryConfig,\n} from '@ngrx-traits/core';\n\n/**\n * Generates ngrx code to add multi selection to a list\n *\n * @example\n * // The following trait config\n *\n * export interface TestState\n * extends EntityAndStatusState<Todo>,MultipleSelectionState{}\n *\n * const traits = createEntityFeatureFactory(\n * addLoadEntitiesTrait<Todo>(),\n * addSelectEntitiesTrait<Todo>()\n * )({\n * actionsGroupKey: '[Todos]',\n * featureSelector: createFeatureSelector<TestState>>(\n * 'todos',\n * ),\n * });\n * // will generate the following actions and selectors, plus the ones generated by other traits\n * traits.actions.selectTodos({id})\n * traits.actions.deselectTodos({id})\n * traits.actions.toggleSectTodos({id})\n * traits.actions.toggleSelectAllTodos()\n * traits.actions.clearTodosSelection()\n *\n * traits.selectors.isAllTodosSelected()\n * traits.selectors.selectTodosIdsSelectedMap()\n * traits.selectors.selectTodosIdsSelectedList()\n * traits.selectors.selectTodosSelectedMap()\n * traits.selectors.selectTodosSelectedList()\n * traits.selectors.selectTotalSelectedTodos()\n */\nexport function addSelectEntitiesTrait<Entity>() {\n return createTraitFactory({\n key: 'SelectEntities',\n depends: [loadEntitiesTraitKey],\n actions: ({ actionsGroupKey, entitiesName }: TraitActionsFactoryConfig) =>\n createSelectEntitiesTraitActions(actionsGroupKey, entitiesName),\n selectors: ({ previousSelectors }: TraitSelectorsFactoryConfig) =>\n createSelectEntitiesTraitSelectors<Entity>(\n previousSelectors as LoadEntitiesSelectors<Entity>\n ),\n initialState: ({ previousInitialState }: TraitInitialStateFactoryConfig) =>\n createSelectEntitiesInitialState<Entity>(previousInitialState),\n mutators: ({ allSelectors }: TraitStateMutatorsFactoryConfig) =>\n createSelectEntitiesTraitMutators<Entity>(\n allSelectors as SelectEntitiesSelectors<Entity>\n ),\n reducer: ({ initialState, allActions, allMutators, allConfigs }) =>\n createSelectEntitiesTraitReducer(\n initialState,\n allActions as SelectEntitiesActions &\n CrudEntitiesActions<Entity> &\n SortEntitiesActions<Entity> &\n LoadEntitiesActions<Entity> &\n FilterEntitiesActions<any> &\n EntitiesPaginationActions,\n allMutators,\n allConfigs as LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig &\n SortEntitiesKeyedConfig<Entity>\n ),\n });\n}\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { toMap } from '@ngrx-traits/core';
|
|
2
|
+
import { clearEntitiesSelection, deselectEntities, selectEntities, toggleSelectEntities, } from './select-entities.utils';
|
|
3
|
+
export function createSelectEntitiesTraitMutators({ isAllEntitiesSelected, }) {
|
|
4
|
+
function toggleSelectAllEntities(state) {
|
|
5
|
+
const allSelected = isAllEntitiesSelected(state);
|
|
6
|
+
if (allSelected === 'all') {
|
|
7
|
+
return Object.assign(Object.assign({}, state), { selectedIds: {} });
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
return Object.assign(Object.assign({}, state), { selectedIds: toMap(state.ids) });
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
selectEntities,
|
|
15
|
+
deselectEntities,
|
|
16
|
+
toggleSelectEntities,
|
|
17
|
+
toggleSelectAllEntities,
|
|
18
|
+
clearEntitiesSelection,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=select-entities.trait.mutators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-entities.trait.mutators.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/select-entities/select-entities.trait.mutators.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AAGjC,MAAM,UAAU,iCAAiC,CAAS,EACxD,qBAAqB,GACW;IAChC,SAAS,uBAAuB,CAE9B,KAAQ;QACR,MAAM,WAAW,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,WAAW,KAAK,KAAK,EAAE;YACzB,uCACK,KAAK,KACR,WAAW,EAAE,EAAE,IACf;SACH;aAAM;YACL,uCACK,KAAK,KACR,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAC7B;SACH;IACH,CAAC;IAED,OAAO;QACL,cAAc;QACd,gBAAgB;QAChB,oBAAoB;QACpB,uBAAuB;QACvB,sBAAsB;KACvB,CAAC;AACJ,CAAC","sourcesContent":["import {\n SelectEntitiesMutators,\n SelectEntitiesSelectors,\n SelectEntitiesState,\n} from './select-entities.model';\nimport { toMap } from '@ngrx-traits/core';\nimport {\n clearEntitiesSelection,\n deselectEntities,\n selectEntities,\n toggleSelectEntities,\n} from './select-entities.utils';\nimport { LoadEntitiesState } from '../load-entities';\n\nexport function createSelectEntitiesTraitMutators<Entity>({\n isAllEntitiesSelected,\n}: SelectEntitiesSelectors<Entity>): SelectEntitiesMutators<Entity> {\n function toggleSelectAllEntities<\n S extends LoadEntitiesState<Entity> & SelectEntitiesState\n >(state: S): S {\n const allSelected = isAllEntitiesSelected(state);\n if (allSelected === 'all') {\n return {\n ...state,\n selectedIds: {},\n };\n } else {\n return {\n ...state,\n selectedIds: toMap(state.ids),\n };\n }\n }\n\n return {\n selectEntities,\n deselectEntities,\n toggleSelectEntities,\n toggleSelectAllEntities,\n clearEntitiesSelection,\n };\n}\n"]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { insertIf } from '@ngrx-traits/core';
|
|
2
|
+
import { createReducer, on } from '@ngrx/store';
|
|
3
|
+
export function createSelectEntitiesInitialState(previousInitialState) {
|
|
4
|
+
return Object.assign(Object.assign({}, previousInitialState), { selectedIds: {} });
|
|
5
|
+
}
|
|
6
|
+
export function createSelectEntitiesTraitReducer(initialState, allActions, allMutators, allConfigs) {
|
|
7
|
+
var _a, _b;
|
|
8
|
+
const { adapter } = allConfigs.loadEntities;
|
|
9
|
+
const sortRemote = (_a = allConfigs.sort) === null || _a === void 0 ? void 0 : _a.remote;
|
|
10
|
+
const paginationCacheType = (_b = allConfigs.pagination) === null || _b === void 0 ? void 0 : _b.cacheType;
|
|
11
|
+
function updateSelectedIdsChanged(state, updates) {
|
|
12
|
+
const changedIds = updates.reduce((acc, updated) => {
|
|
13
|
+
const id = adapter.selectId(updated.changes);
|
|
14
|
+
if (id && id !== updated.id && state.selectedIds[updated.id] != null) {
|
|
15
|
+
acc.push(updated);
|
|
16
|
+
return acc;
|
|
17
|
+
}
|
|
18
|
+
return acc;
|
|
19
|
+
}, []);
|
|
20
|
+
if (changedIds.length) {
|
|
21
|
+
const selectedIds = Object.assign({}, state.selectedIds);
|
|
22
|
+
changedIds.forEach((updated) => {
|
|
23
|
+
const id = adapter.selectId(updated.changes);
|
|
24
|
+
const value = selectedIds[updated.id];
|
|
25
|
+
delete selectedIds[updated.id];
|
|
26
|
+
selectedIds[id] = value;
|
|
27
|
+
});
|
|
28
|
+
return Object.assign(Object.assign({}, state), { selectedIds });
|
|
29
|
+
}
|
|
30
|
+
return state;
|
|
31
|
+
}
|
|
32
|
+
return createReducer(initialState, on(allActions.selectEntities, (state, { id }) => allMutators.selectEntities(id, state)), on(allActions.deselectEntities, (state, { id }) => allMutators.deselectEntities(id, state)), on(allActions.toggleSelectEntities, (state, { id }) => allMutators.toggleSelectEntities(id, state)), on(allActions.toggleSelectAllEntities, (state) => allMutators.toggleSelectAllEntities(state)), ...insertIf(allActions.removeEntities, () => on(allActions.removeEntities, (state, { keys }) => {
|
|
33
|
+
const selectedIds = Object.assign({}, state.selectedIds);
|
|
34
|
+
keys.forEach((v) => {
|
|
35
|
+
delete selectedIds[v];
|
|
36
|
+
});
|
|
37
|
+
return Object.assign(Object.assign({}, state), { selectedIds });
|
|
38
|
+
})), ...insertIf(allActions.updateEntities, () => on(allActions.updateEntities, (state, { updates }) => updateSelectedIdsChanged(state, updates))), on(allActions.clearEntitiesSelection, (state) => allMutators.clearEntitiesSelection(state)), ...insertIf(allActions.removeAllEntities, () => on(allActions.removeAllEntities, (state) => allMutators.clearEntitiesSelection(state))), ...insertIf(sortRemote, () => on(allActions.sortEntities, (state) => allMutators.clearEntitiesSelection(state))), ...insertIf(allActions.filterEntities, () => on(allActions.filterEntities, (state) => allMutators.clearEntitiesSelection(state))), ...insertIf(!allActions.loadEntitiesPageSuccess, () => on(allActions.loadEntitiesSuccess, (state) => allMutators.clearEntitiesSelection(state))), ...insertIf(!!allActions.loadEntitiesPageSuccess && paginationCacheType === 'partial', () => on(allActions.loadEntitiesPageSuccess, (state) => allMutators.clearEntitiesSelection(state))));
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=select-entities.trait.reducer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-entities.trait.reducer.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/select-entities/select-entities.trait.reducer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesState,\n} from '../load-entities/load-entities.model';\nimport {\n SortEntitiesActions,\n SortEntitiesKeyedConfig,\n} from '../sort-entities/sort-entities.model';\nimport {\n SelectEntitiesMutators,\n SelectEntitiesActions,\n SelectEntitiesState,\n} from './select-entities.model';\nimport { CrudEntitiesActions } from '../crud-entities/crud-entities.model';\nimport { Update } from '@ngrx/entity/src/models';\nimport { insertIf } from '@ngrx-traits/core';\nimport { createReducer, on } from '@ngrx/store';\nimport {\n EntitiesPaginationActions,\n EntitiesPaginationKeyedConfig,\n} from '../entities-pagination/entities-pagination.model';\nimport { FilterEntitiesActions } from '../filter-entities';\n\nexport function createSelectEntitiesInitialState<Entity>(\n previousInitialState: any\n): LoadEntitiesState<Entity> & SelectEntitiesState {\n return {\n ...previousInitialState,\n selectedIds: {},\n };\n}\n\nexport function createSelectEntitiesTraitReducer<\n Entity,\n S extends LoadEntitiesState<Entity> & SelectEntitiesState\n>(\n initialState: S,\n allActions: SelectEntitiesActions &\n CrudEntitiesActions<Entity> &\n SortEntitiesActions<Entity> &\n LoadEntitiesActions<Entity> &\n FilterEntitiesActions<any> &\n EntitiesPaginationActions,\n allMutators: SelectEntitiesMutators<Entity>,\n allConfigs: LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig &\n SortEntitiesKeyedConfig<Entity>\n) {\n const { adapter } = allConfigs.loadEntities!;\n const sortRemote = allConfigs.sort?.remote;\n const paginationCacheType = allConfigs.pagination?.cacheType;\n\n function updateSelectedIdsChanged<\n S extends LoadEntitiesState<Entity> & SelectEntitiesState\n >(state: S, updates: Update<Entity>[]) {\n const changedIds = updates.reduce((acc, updated) => {\n const id = adapter.selectId(updated.changes as Entity);\n if (id && id !== updated.id && state.selectedIds[updated.id] != null) {\n acc.push(updated);\n return acc;\n }\n return acc;\n }, [] as Update<Entity>[]);\n if (changedIds.length) {\n const selectedIds = { ...state.selectedIds };\n changedIds.forEach((updated) => {\n const id = adapter.selectId(updated.changes as Entity);\n const value = selectedIds[updated.id];\n delete selectedIds[updated.id];\n selectedIds[id] = value;\n });\n return { ...state, selectedIds };\n }\n\n return state;\n }\n\n return createReducer(\n initialState,\n on(allActions.selectEntities, (state, { id }) =>\n allMutators.selectEntities(id, state)\n ),\n on(allActions.deselectEntities, (state, { id }) =>\n allMutators.deselectEntities(id, state)\n ),\n on(allActions.toggleSelectEntities, (state, { id }) =>\n allMutators.toggleSelectEntities(id, state)\n ),\n on(allActions.toggleSelectAllEntities, (state) =>\n allMutators.toggleSelectAllEntities(state)\n ),\n ...insertIf<S>(allActions.removeEntities, () =>\n on(allActions.removeEntities, (state, { keys }) => {\n const selectedIds = { ...state.selectedIds };\n keys.forEach((v: string | number) => {\n delete selectedIds[v];\n });\n return { ...state, selectedIds };\n })\n ),\n ...insertIf<S>(allActions.updateEntities, () =>\n on(allActions.updateEntities, (state, { updates }) =>\n updateSelectedIdsChanged(state, updates)\n )\n ),\n on(allActions.clearEntitiesSelection, (state) =>\n allMutators.clearEntitiesSelection(state)\n ),\n ...insertIf<S>(allActions.removeAllEntities, () =>\n on(allActions.removeAllEntities, (state) =>\n allMutators.clearEntitiesSelection(state)\n )\n ),\n ...insertIf<S>(sortRemote, () =>\n on(allActions.sortEntities, (state) =>\n allMutators.clearEntitiesSelection(state)\n )\n ),\n ...insertIf<S>(allActions.filterEntities, () =>\n on(allActions.filterEntities, (state) =>\n allMutators.clearEntitiesSelection(state)\n )\n ),\n ...insertIf<S>(!allActions.loadEntitiesPageSuccess, () =>\n on(allActions.loadEntitiesSuccess, (state) =>\n allMutators.clearEntitiesSelection(state)\n )\n ),\n ...insertIf<S>(\n !!allActions.loadEntitiesPageSuccess && paginationCacheType === 'partial',\n () =>\n on(allActions.loadEntitiesPageSuccess, (state) =>\n allMutators.clearEntitiesSelection(state)\n )\n )\n );\n}\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { createSelector } from '@ngrx/store';
|
|
2
|
+
import { selectTotalSelectedEntities } from './select-entities.utils';
|
|
3
|
+
export function createSelectEntitiesTraitSelectors(previousSelectors) {
|
|
4
|
+
const { selectEntitiesMap, selectEntitiesTotal } = previousSelectors;
|
|
5
|
+
function selectEntitiesIdsSelectedMap(state) {
|
|
6
|
+
return state.selectedIds;
|
|
7
|
+
}
|
|
8
|
+
const selectEntitiesIdsSelectedList = createSelector(selectEntitiesIdsSelectedMap, (ids) => Object.keys(ids));
|
|
9
|
+
const selectEntitiesSelectedMap = createSelector(selectEntitiesIdsSelectedList, selectEntitiesMap, (selectedIds, entities) => selectedIds.reduce((acum, id) => {
|
|
10
|
+
acum[id] = entities[id];
|
|
11
|
+
return acum;
|
|
12
|
+
}, {}));
|
|
13
|
+
const selectEntitiesSelectedList = createSelector(selectEntitiesIdsSelectedList, selectEntitiesMap, (selectedIds, entities) => selectedIds.map((id) => entities[id]));
|
|
14
|
+
const isAllEntitiesSelected = createSelector((state) => selectEntitiesTotal(state), selectTotalSelectedEntities, (total, totalSelected) => totalSelected > 0 && totalSelected === total
|
|
15
|
+
? 'all'
|
|
16
|
+
: totalSelected === 0
|
|
17
|
+
? 'none'
|
|
18
|
+
: 'some');
|
|
19
|
+
return {
|
|
20
|
+
selectEntitiesIdsSelectedMap,
|
|
21
|
+
selectEntitiesIdsSelectedList,
|
|
22
|
+
selectEntitiesSelectedMap,
|
|
23
|
+
selectEntitiesSelectedList,
|
|
24
|
+
selectTotalSelectedEntities,
|
|
25
|
+
isAllEntitiesSelected,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=select-entities.trait.selectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-entities.trait.selectors.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/select-entities/select-entities.trait.selectors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAQtE,MAAM,UAAU,kCAAkC,CAChD,iBAAgD;IAEhD,MAAM,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,GAAG,iBAAiB,CAAC;IAErE,SAAS,4BAA4B,CACnC,KAAsD;QAEtD,OAAO,KAAK,CAAC,WAAW,CAAC;IAC3B,CAAC;IACD,MAAM,6BAA6B,GAAG,cAAc,CAClD,4BAA4B,EAC5B,CAAC,GAAwB,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAC/C,CAAC;IACF,MAAM,yBAAyB,GAAG,cAAc,CAC9C,6BAA6B,EAC7B,iBAAiB,EACjB,CAAC,WAAW,EAAE,QAAQ,EAAE,EAAE,CACxB,WAAW,CAAC,MAAM,CAAC,CAAC,IAA0C,EAAE,EAAE,EAAE,EAAE;QACpE,IAAI,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,EAAE,CAAC,CACT,CAAC;IACF,MAAM,0BAA0B,GAAG,cAAc,CAC/C,6BAA6B,EAC7B,iBAAiB,EACjB,CAAC,WAAW,EAAE,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAE,CAAC,CAClE,CAAC;IAEF,MAAM,qBAAqB,GAAG,cAAc,CAC1C,CAAC,KAAsD,EAAE,EAAE,CACzD,mBAAmB,CAAC,KAAK,CAAC,EAC5B,2BAA2B,EAC3B,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,CACvB,aAAa,GAAG,CAAC,IAAI,aAAa,KAAK,KAAK;QAC1C,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,aAAa,KAAK,CAAC;YACrB,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,MAAM,CACb,CAAC;IAEF,OAAO;QACL,4BAA4B;QAC5B,6BAA6B;QAC7B,yBAAyB;QACzB,0BAA0B;QAC1B,2BAA2B;QAC3B,qBAAqB;KACtB,CAAC;AACJ,CAAC","sourcesContent":["import { createSelector } from '@ngrx/store';\nimport { selectTotalSelectedEntities } from './select-entities.utils';\nimport {\n SelectEntitiesSelectors,\n SelectEntitiesState,\n} from './select-entities.model';\nimport { LoadEntitiesSelectors, LoadEntitiesState } from '../load-entities';\nimport { Dictionary } from '@ngrx/entity/src/models';\n\nexport function createSelectEntitiesTraitSelectors<Entity>(\n previousSelectors: LoadEntitiesSelectors<Entity>\n): SelectEntitiesSelectors<Entity> {\n const { selectEntitiesMap, selectEntitiesTotal } = previousSelectors;\n\n function selectEntitiesIdsSelectedMap(\n state: LoadEntitiesState<Entity> & SelectEntitiesState\n ) {\n return state.selectedIds;\n }\n const selectEntitiesIdsSelectedList = createSelector(\n selectEntitiesIdsSelectedMap,\n (ids: Dictionary<boolean>) => Object.keys(ids)\n );\n const selectEntitiesSelectedMap = createSelector(\n selectEntitiesIdsSelectedList,\n selectEntitiesMap,\n (selectedIds, entities) =>\n selectedIds.reduce((acum: { [id: string]: Entity | undefined }, id) => {\n acum[id] = entities[id];\n return acum;\n }, {})\n );\n const selectEntitiesSelectedList = createSelector(\n selectEntitiesIdsSelectedList,\n selectEntitiesMap,\n (selectedIds, entities) => selectedIds.map((id) => entities[id]!)\n );\n\n const isAllEntitiesSelected = createSelector(\n (state: LoadEntitiesState<Entity> & SelectEntitiesState) =>\n selectEntitiesTotal(state),\n selectTotalSelectedEntities,\n (total, totalSelected) =>\n totalSelected > 0 && totalSelected === total\n ? 'all'\n : totalSelected === 0\n ? 'none'\n : 'some'\n );\n\n return {\n selectEntitiesIdsSelectedMap,\n selectEntitiesIdsSelectedList,\n selectEntitiesSelectedMap,\n selectEntitiesSelectedList,\n selectTotalSelectedEntities,\n isAllEntitiesSelected,\n };\n}\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { __rest } from "tslib";
|
|
2
|
+
export function deselectEntities(id, state) {
|
|
3
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
4
|
+
const _a = state.selectedIds, _b = id, _value = _a[_b], selectedIds = __rest(_a, [typeof _b === "symbol" ? _b : _b + ""]);
|
|
5
|
+
return Object.assign(Object.assign({}, state), { selectedIds: selectedIds });
|
|
6
|
+
}
|
|
7
|
+
export function selectEntities(id, state) {
|
|
8
|
+
return Object.assign(Object.assign({}, state), { selectedIds: Object.assign(Object.assign({}, state.selectedIds), { [id]: true }) });
|
|
9
|
+
}
|
|
10
|
+
export function toggleSelectEntities(id, state) {
|
|
11
|
+
const selected = state.selectedIds[id];
|
|
12
|
+
if (selected) {
|
|
13
|
+
return deselectEntities(id, state);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
return selectEntities(id, state);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export function clearEntitiesSelection(state) {
|
|
20
|
+
return Object.assign(Object.assign({}, state), { selectedIds: {} });
|
|
21
|
+
}
|
|
22
|
+
export function selectTotalSelectedEntities(state) {
|
|
23
|
+
return Object.keys(state.selectedIds).length;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=select-entities.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-entities.utils.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/select-entities/select-entities.utils.ts"],"names":[],"mappings":";AAGA,MAAM,UAAU,gBAAgB,CAC9B,EAAmB,EACnB,KAAQ;IAER,6DAA6D;IAC7D,MAAyC,KAAA,KAAK,CAAC,WAAW,EAAlD,KAAC,EAAG,EAAE,MAAM,SAAA,EAAK,WAAW,cAA9B,uCAAgC,CAAoB,CAAC;IAC3D,uCACK,KAAK,KACR,WAAW,EAAE,WAAW,IACxB;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,EAAmB,EACnB,KAAQ;IAER,uCACK,KAAK,KACR,WAAW,kCAAO,KAAK,CAAC,WAAW,KAAE,CAAC,EAAE,CAAC,EAAE,IAAI,OAC/C;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,EAAmB,EACnB,KAAQ;IAER,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACvC,IAAI,QAAQ,EAAE;QACZ,OAAO,gBAAgB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;KACpC;SAAM;QACL,OAAO,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;KAClC;AACH,CAAC;AACD,MAAM,UAAU,sBAAsB,CACpC,KAAQ;IAER,uCAAY,KAAK,KAAE,WAAW,EAAE,EAAE,IAAG;AACvC,CAAC;AAED,MAAM,UAAU,2BAA2B,CAGzC,KAAQ;IACR,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;AAC/C,CAAC","sourcesContent":["import { SelectEntitiesState } from './select-entities.model';\nimport { LoadEntitiesState } from '../load-entities';\n\nexport function deselectEntities<S extends SelectEntitiesState>(\n id: number | string,\n state: S\n): S {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [id]: _value, ...selectedIds } = state.selectedIds;\n return {\n ...state,\n selectedIds: selectedIds,\n };\n}\n\nexport function selectEntities<S extends SelectEntitiesState>(\n id: number | string,\n state: S\n): S {\n return {\n ...state,\n selectedIds: { ...state.selectedIds, [id]: true },\n };\n}\n\nexport function toggleSelectEntities<S extends SelectEntitiesState>(\n id: number | string,\n state: S\n): S {\n const selected = state.selectedIds[id];\n if (selected) {\n return deselectEntities(id, state);\n } else {\n return selectEntities(id, state);\n }\n}\nexport function clearEntitiesSelection<S extends SelectEntitiesState>(\n state: S\n): S {\n return { ...state, selectedIds: {} };\n}\n\nexport function selectTotalSelectedEntities<\n Entity,\n S extends LoadEntitiesState<Entity> & SelectEntitiesState\n>(state: S): number {\n return Object.keys(state.selectedIds).length;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/select-entity/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC","sourcesContent":["export * from './select-entity.trait';\nexport * from './select-entity.model';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-entity.model.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/select-entity/select-entity.model.ts"],"names":[],"mappings":"AAmDA,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CAAC","sourcesContent":["import { ActionCreator, TypedAction } from '@ngrx/store/src/models';\nimport { KeyedConfig } from '@ngrx-traits/core';\nimport { LoadEntitiesState } from '../load-entities/load-entities.model';\n\nexport interface SelectEntityState {\n selectedId?: number | string;\n}\n\nexport type SelectEntityActions = {\n selectEntity: ActionCreator<\n string,\n (props: {\n id: number | string;\n }) => { id: number | string } & TypedAction<string>\n >;\n deselectEntity: ActionCreator<string, () => TypedAction<string>>;\n toggleSelectEntity: ActionCreator<\n string,\n (props: {\n id: number | string;\n }) => { id: number | string } & TypedAction<string>\n >;\n};\n\nexport type SelectEntitySelectors<T> = {\n selectEntityIdSelected: (\n state: LoadEntitiesState<T> & SelectEntityState\n ) => string | number | undefined;\n selectEntitySelected: (\n state: LoadEntitiesState<T> & SelectEntityState\n ) => T | undefined;\n};\n\nexport type SelectEntityMutators<T> = {\n selectEntity<S extends LoadEntitiesState<T> & SelectEntityState>(\n id: string | number,\n state: S\n ): S;\n deselectEntity<S extends LoadEntitiesState<T> & SelectEntityState>(\n state: S\n ): S;\n toggleSelectEntity<S extends LoadEntitiesState<T> & SelectEntityState>(\n id: string | number,\n state: S\n ): S;\n};\n\nexport interface SelectEntityConfig {\n selectedId?: string | number;\n}\n\nexport const selectEntityTraitKey = 'singleSelection';\nexport type SelectEntityKeyedConfig = KeyedConfig<\n typeof selectEntityTraitKey,\n SelectEntityConfig\n>;\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createAction, props } from '@ngrx/store';
|
|
2
|
+
export function createSelectEntityTraitActions(actionsGroupKey, entityName) {
|
|
3
|
+
return {
|
|
4
|
+
selectEntity: createAction(`${actionsGroupKey} Select ${entityName}`, props()),
|
|
5
|
+
deselectEntity: createAction(`${actionsGroupKey} Deselect ${entityName}`),
|
|
6
|
+
toggleSelectEntity: createAction(`${actionsGroupKey} Toggle Select ${entityName}`, props()),
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=select-entity.trait.actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-entity.trait.actions.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/select-entity/select-entity.trait.actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGlD,MAAM,UAAU,8BAA8B,CAC5C,eAAuB,EACvB,UAAkB;IAElB,OAAO;QACL,YAAY,EAAE,YAAY,CACxB,GAAG,eAAe,WAAW,UAAU,EAAE,EACzC,KAAK,EAA2B,CACjC;QACD,cAAc,EAAE,YAAY,CAAC,GAAG,eAAe,aAAa,UAAU,EAAE,CAAC;QACzE,kBAAkB,EAAE,YAAY,CAC9B,GAAG,eAAe,kBAAkB,UAAU,EAAE,EAChD,KAAK,EAA2B,CACjC;KACF,CAAC;AACJ,CAAC","sourcesContent":["import { createAction, props } from '@ngrx/store';\nimport { SelectEntityActions } from './select-entity.model';\n\nexport function createSelectEntityTraitActions(\n actionsGroupKey: string,\n entityName: string\n): SelectEntityActions {\n return {\n selectEntity: createAction(\n `${actionsGroupKey} Select ${entityName}`,\n props<{ id: string | number }>()\n ),\n deselectEntity: createAction(`${actionsGroupKey} Deselect ${entityName}`),\n toggleSelectEntity: createAction(\n `${actionsGroupKey} Toggle Select ${entityName}`,\n props<{ id: string | number }>()\n ),\n };\n}\n"]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { createTraitFactory, } from '@ngrx-traits/core';
|
|
2
|
+
import { createSelectEntityTraitActions } from './select-entity.trait.actions';
|
|
3
|
+
import { createSelectEntityTraitSelectors } from './select-entity.trait.selectors';
|
|
4
|
+
import { createSelectEntityInitialState, createSelectEntityTraitReducer, } from './select-entity.trait.reducer';
|
|
5
|
+
import { createSelectEntityTraitMutators } from './select-entity.trait.mutators';
|
|
6
|
+
import { loadEntitiesTraitKey, } from '../load-entities/load-entities.model';
|
|
7
|
+
/**
|
|
8
|
+
* Generates ngrx code to add single selection to a list
|
|
9
|
+
* @param config
|
|
10
|
+
* @param config.selectedId - Default selected id
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* // The following trait config
|
|
14
|
+
*
|
|
15
|
+
* export interface TestState
|
|
16
|
+
* extends EntityAndStatusState<Todo>,SelectEntityState{}
|
|
17
|
+
*
|
|
18
|
+
* const traits = createEntityFeatureFactory(
|
|
19
|
+
* addLoadEntitiesTrait<Todo>(),
|
|
20
|
+
* addSelectEntityTrait<Todo>()
|
|
21
|
+
* )({
|
|
22
|
+
* actionsGroupKey: '[Todos]',
|
|
23
|
+
* featureSelector: createFeatureSelector<TestState>>(
|
|
24
|
+
* 'todos',
|
|
25
|
+
* ),
|
|
26
|
+
* });
|
|
27
|
+
* // will generate the following actions and selectors, plus the ones generated by other traits
|
|
28
|
+
* traits.actions.selectTodo({id})
|
|
29
|
+
* traits.actions.deselectTodo()
|
|
30
|
+
* traits.actions.toggleSelectTodo({id})
|
|
31
|
+
*
|
|
32
|
+
* traits.selectors.selectTodoIdSelected()
|
|
33
|
+
* traits.selectors.selectTodoSelected()
|
|
34
|
+
*/
|
|
35
|
+
export function addSelectEntityTrait(config) {
|
|
36
|
+
return createTraitFactory({
|
|
37
|
+
key: 'singleSelection',
|
|
38
|
+
depends: [loadEntitiesTraitKey],
|
|
39
|
+
config,
|
|
40
|
+
actions: ({ actionsGroupKey, entityName }) => createSelectEntityTraitActions(actionsGroupKey, entityName),
|
|
41
|
+
selectors: () => createSelectEntityTraitSelectors(),
|
|
42
|
+
mutators: () => createSelectEntityTraitMutators(),
|
|
43
|
+
initialState: ({ previousInitialState, allConfigs, }) => createSelectEntityInitialState(previousInitialState, allConfigs),
|
|
44
|
+
reducer: ({ initialState, allActions, allMutators, allConfigs }) => createSelectEntityTraitReducer(initialState, allActions, allMutators, allConfigs),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=select-entity.trait.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-entity.trait.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/select-entity/select-entity.trait.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,GAGnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,EAAE,gCAAgC,EAAE,MAAM,iCAAiC,CAAC;AACnF,OAAO,EACL,8BAA8B,EAC9B,8BAA8B,GAC/B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,+BAA+B,EAAE,MAAM,gCAAgC,CAAC;AACjF,OAAO,EAGL,oBAAoB,GACrB,MAAM,sCAAsC,CAAC;AAiB9C;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,oBAAoB,CAAS,MAA2B;IACtE,OAAO,kBAAkB,CAAC;QACxB,GAAG,EAAE,iBAAiB;QACtB,OAAO,EAAE,CAAC,oBAAoB,CAAC;QAC/B,MAAM;QACN,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,UAAU,EAA6B,EAAE,EAAE,CACtE,8BAA8B,CAAC,eAAe,EAAE,UAAU,CAAC;QAC7D,SAAS,EAAE,GAAG,EAAE,CAAC,gCAAgC,EAAU;QAC3D,QAAQ,EAAE,GAAG,EAAE,CAAC,+BAA+B,EAAE;QACjD,YAAY,EAAE,CAAC,EACb,oBAAoB,EACpB,UAAU,GACqB,EAAE,EAAE,CACnC,8BAA8B,CAC5B,oBAAoB,EACpB,UAAqC,CACtC;QACH,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,EAAE,CACjE,8BAA8B,CAC5B,YAAY,EACZ,UAK6B,EAC7B,WAAW,EACX,UAGiC,CAClC;KACJ,CAAC,CAAC;AACL,CAAC","sourcesContent":["import {\n createTraitFactory,\n TraitActionsFactoryConfig,\n TraitInitialStateFactoryConfig,\n} from '@ngrx-traits/core';\n\nimport { createSelectEntityTraitActions } from './select-entity.trait.actions';\nimport { createSelectEntityTraitSelectors } from './select-entity.trait.selectors';\nimport {\n createSelectEntityInitialState,\n createSelectEntityTraitReducer,\n} from './select-entity.trait.reducer';\nimport { createSelectEntityTraitMutators } from './select-entity.trait.mutators';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n loadEntitiesTraitKey,\n} from '../load-entities/load-entities.model';\nimport {\n SortEntitiesActions,\n SortEntitiesKeyedConfig,\n} from '../sort-entities/sort-entities.model';\nimport {\n SelectEntityActions,\n SelectEntityConfig,\n SelectEntityKeyedConfig,\n} from './select-entity.model';\nimport { CrudEntitiesActions } from '../crud-entities/crud-entities.model';\nimport {\n EntitiesPaginationActions,\n EntitiesPaginationKeyedConfig,\n} from '../entities-pagination/entities-pagination.model';\nimport { FilterEntitiesActions } from '../filter-entities';\n\n/**\n * Generates ngrx code to add single selection to a list\n * @param config\n * @param config.selectedId - Default selected id\n *\n * @example\n * // The following trait config\n *\n * export interface TestState\n * extends EntityAndStatusState<Todo>,SelectEntityState{}\n *\n * const traits = createEntityFeatureFactory(\n * addLoadEntitiesTrait<Todo>(),\n * addSelectEntityTrait<Todo>()\n * )({\n * actionsGroupKey: '[Todos]',\n * featureSelector: createFeatureSelector<TestState>>(\n * 'todos',\n * ),\n * });\n * // will generate the following actions and selectors, plus the ones generated by other traits\n * traits.actions.selectTodo({id})\n * traits.actions.deselectTodo()\n * traits.actions.toggleSelectTodo({id})\n *\n * traits.selectors.selectTodoIdSelected()\n * traits.selectors.selectTodoSelected()\n */\nexport function addSelectEntityTrait<Entity>(config?: SelectEntityConfig) {\n return createTraitFactory({\n key: 'singleSelection',\n depends: [loadEntitiesTraitKey],\n config,\n actions: ({ actionsGroupKey, entityName }: TraitActionsFactoryConfig) =>\n createSelectEntityTraitActions(actionsGroupKey, entityName),\n selectors: () => createSelectEntityTraitSelectors<Entity>(),\n mutators: () => createSelectEntityTraitMutators(),\n initialState: ({\n previousInitialState,\n allConfigs,\n }: TraitInitialStateFactoryConfig) =>\n createSelectEntityInitialState<Entity>(\n previousInitialState,\n allConfigs as SelectEntityKeyedConfig\n ),\n reducer: ({ initialState, allActions, allMutators, allConfigs }) =>\n createSelectEntityTraitReducer(\n initialState,\n allActions as SelectEntityActions &\n CrudEntitiesActions<Entity> &\n SortEntitiesActions<Entity> &\n EntitiesPaginationActions &\n FilterEntitiesActions<any> &\n LoadEntitiesActions<Entity>,\n allMutators,\n allConfigs as SelectEntityKeyedConfig &\n LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig &\n SortEntitiesKeyedConfig<Entity>\n ),\n });\n}\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export function createSelectEntityTraitMutators() {
|
|
2
|
+
function selectEntity(id, state) {
|
|
3
|
+
return Object.assign(Object.assign({}, state), { selectedId: id });
|
|
4
|
+
}
|
|
5
|
+
function deselectEntity(state) {
|
|
6
|
+
return Object.assign(Object.assign({}, state), { selectedId: undefined });
|
|
7
|
+
}
|
|
8
|
+
function toggleSelectEntity(id, state) {
|
|
9
|
+
return Object.assign(Object.assign({}, state), { selectedId: state.selectedId === id ? undefined : id });
|
|
10
|
+
}
|
|
11
|
+
return {
|
|
12
|
+
selectEntity,
|
|
13
|
+
deselectEntity,
|
|
14
|
+
toggleSelectEntity,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=select-entity.trait.mutators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-entity.trait.mutators.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/select-entity/select-entity.trait.mutators.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,+BAA+B;IAG7C,SAAS,YAAY,CAEnB,EAAmB,EAAE,KAAQ;QAC7B,uCACK,KAAK,KACR,UAAU,EAAE,EAAE,IACd;IACJ,CAAC;IACD,SAAS,cAAc,CAErB,KAAQ;QACR,uCACK,KAAK,KACR,UAAU,EAAE,SAAS,IACrB;IACJ,CAAC;IACD,SAAS,kBAAkB,CAEzB,EAAmB,EAAE,KAAQ;QAC7B,uCACK,KAAK,KACR,UAAU,EAAE,KAAK,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IACpD;IACJ,CAAC;IAED,OAAO;QACL,YAAY;QACZ,cAAc;QACd,kBAAkB;KACnB,CAAC;AACJ,CAAC","sourcesContent":["import { SelectEntityMutators, SelectEntityState } from './select-entity.model';\nimport { LoadEntitiesState } from '../load-entities';\n\nexport function createSelectEntityTraitMutators<\n Entity\n>(): SelectEntityMutators<Entity> {\n function selectEntity<\n S extends LoadEntitiesState<Entity> & SelectEntityState\n >(id: string | number, state: S) {\n return {\n ...state,\n selectedId: id,\n };\n }\n function deselectEntity<\n S extends LoadEntitiesState<Entity> & SelectEntityState\n >(state: S) {\n return {\n ...state,\n selectedId: undefined,\n };\n }\n function toggleSelectEntity<\n S extends LoadEntitiesState<Entity> & SelectEntityState\n >(id: string | number, state: S) {\n return {\n ...state,\n selectedId: state.selectedId === id ? undefined : id,\n };\n }\n\n return {\n selectEntity,\n deselectEntity,\n toggleSelectEntity,\n };\n}\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createReducer, on } from '@ngrx/store';
|
|
2
|
+
import { insertIf } from '@ngrx-traits/core';
|
|
3
|
+
export function createSelectEntityInitialState(previousInitialState, allConfigs) {
|
|
4
|
+
var _a;
|
|
5
|
+
const selectedId = (_a = allConfigs.singleSelection) === null || _a === void 0 ? void 0 : _a.selectedId;
|
|
6
|
+
return Object.assign(Object.assign({}, previousInitialState), { selectedId });
|
|
7
|
+
}
|
|
8
|
+
export function createSelectEntityTraitReducer(initialState, allActions, allMutators, allConfigs) {
|
|
9
|
+
var _a, _b;
|
|
10
|
+
const { adapter } = allConfigs.loadEntities;
|
|
11
|
+
const sortRemote = (_a = allConfigs.sort) === null || _a === void 0 ? void 0 : _a.remote;
|
|
12
|
+
const paginationCacheType = (_b = allConfigs.pagination) === null || _b === void 0 ? void 0 : _b.cacheType;
|
|
13
|
+
return createReducer(initialState, on(allActions.selectEntity, (state, { id }) => allMutators.selectEntity(id, state)), on(allActions.deselectEntity, (state) => allMutators.deselectEntity(state)), on(allActions.toggleSelectEntity, (state, { id }) => allMutators.toggleSelectEntity(id, state)), ...insertIf(allActions.removeAllEntities, () => on(allActions.removeAllEntities, (state) => allMutators.deselectEntity(state))), ...insertIf(sortRemote, () => on(allActions.sortEntities, (state) => allMutators.deselectEntity(state))), ...insertIf(allActions.filterEntities, () => on(allActions.filterEntities, (state) => allMutators.deselectEntity(state))), ...insertIf(!allActions.loadEntitiesPageSuccess, () => on(allActions.loadEntitiesSuccess, (state) => allMutators.deselectEntity(state))), ...insertIf(!!allActions.loadEntitiesPageSuccess && paginationCacheType === 'partial', () => on(allActions.loadEntitiesPageSuccess, (state) => allMutators.deselectEntity(state))), ...insertIf(allActions.removeEntities, () => on(allActions.removeEntities, (state, { keys }) => {
|
|
14
|
+
const shouldDeselect = keys.some((v) => v === state.selectedId);
|
|
15
|
+
return shouldDeselect
|
|
16
|
+
? Object.assign(Object.assign({}, state), { selectedId: undefined }) : state;
|
|
17
|
+
})), ...insertIf(allActions.updateEntities, () => on(allActions.updateEntities, (state, { updates }) => {
|
|
18
|
+
const change = updates.find((updated) => {
|
|
19
|
+
const id = adapter.selectId(updated.changes);
|
|
20
|
+
return id && id !== updated.id && state.selectedId === updated.id;
|
|
21
|
+
});
|
|
22
|
+
return change
|
|
23
|
+
? Object.assign(Object.assign({}, state), { selectedId: adapter.selectId(change.changes) }) : state;
|
|
24
|
+
})));
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=select-entity.trait.reducer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-entity.trait.reducer.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/select-entity/select-entity.trait.reducer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAiBhD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAQ7C,MAAM,UAAU,8BAA8B,CAC5C,oBAAyB,EACzB,UAAmC;;IAEnC,MAAM,UAAU,GAAG,MAAA,UAAU,CAAC,eAAe,0CAAE,UAAU,CAAC;IAC1D,uCACK,oBAAoB,KACvB,UAAU,IACV;AACJ,CAAC;AACD,MAAM,UAAU,8BAA8B,CAI5C,YAAe,EACf,UAK6B,EAC7B,WAAyC,EACzC,UAGiC;;IAEjC,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,YAAa,CAAC;IAE7C,MAAM,UAAU,GAAG,MAAA,UAAU,CAAC,IAAI,0CAAE,MAAM,CAAC;IAC3C,MAAM,mBAAmB,GAAG,MAAA,UAAU,CAAC,UAAU,0CAAE,SAAS,CAAC;IAE7D,OAAO,aAAa,CAClB,YAAY,EACZ,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAC5C,WAAW,CAAC,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,CACpC,EACD,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAC3E,EAAE,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAClD,WAAW,CAAC,kBAAkB,CAAC,EAAE,EAAE,KAAK,CAAC,CAC1C,EACD,GAAG,QAAQ,CAAI,UAAU,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAChD,EAAE,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE,CACzC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAClC,CACF,EACD,GAAG,QAAQ,CAAI,UAAU,EAAE,GAAG,EAAE,CAC9B,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAC1E,EACD,GAAG,QAAQ,CAAI,UAAU,CAAC,cAAc,EAAE,GAAG,EAAE,CAC7C,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CACtC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAClC,CACF,EACD,GAAG,QAAQ,CAAI,CAAC,UAAU,CAAC,uBAAuB,EAAE,GAAG,EAAE,CACvD,EAAE,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE,CAC3C,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAClC,CACF,EACD,GAAG,QAAQ,CACT,CAAC,CAAC,UAAU,CAAC,uBAAuB,IAAI,mBAAmB,KAAK,SAAS,EACzE,GAAG,EAAE,CACH,EAAE,CAAC,UAAU,CAAC,uBAAuB,EAAE,CAAC,KAAK,EAAE,EAAE,CAC/C,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAClC,CACJ,EACD,GAAG,QAAQ,CAAI,UAAU,CAAC,cAAc,EAAE,GAAG,EAAE,CAC7C,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QAChD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAC9B,CAAC,CAAkB,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,UAAU,CAC/C,CAAC;QACF,OAAO,cAAc;YACnB,CAAC,iCACM,KAAK,KACR,UAAU,EAAE,SAAS,IAEzB,CAAC,CAAC,KAAK,CAAC;IACZ,CAAC,CAAC,CACH,EACD,GAAG,QAAQ,CAAI,UAAU,CAAC,cAAc,EAAE,GAAG,EAAE,CAC7C,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACnD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YACtC,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAiB,CAAC,CAAC;YACvD,OAAO,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC,EAAE,IAAI,KAAK,CAAC,UAAU,KAAK,OAAO,CAAC,EAAE,CAAC;QACpE,CAAC,CAAC,CAAC;QACH,OAAO,MAAM;YACX,CAAC,iCACM,KAAK,KACR,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAiB,CAAC,IAE1D,CAAC,CAAC,KAAK,CAAC;IACZ,CAAC,CAAC,CACH,CACF,CAAC;AACJ,CAAC","sourcesContent":["import { createReducer, on } from '@ngrx/store';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesState,\n} from '../load-entities/load-entities.model';\nimport {\n SortEntitiesActions,\n SortEntitiesKeyedConfig,\n} from '../sort-entities/sort-entities.model';\nimport {\n SelectEntityActions,\n SelectEntityKeyedConfig,\n SelectEntityMutators,\n SelectEntityState,\n} from './select-entity.model';\nimport { CrudEntitiesActions } from '../crud-entities/crud-entities.model';\nimport { insertIf } from '@ngrx-traits/core';\nimport {\n EntitiesPaginationActions,\n EntitiesPaginationKeyedConfig,\n} from '../entities-pagination/entities-pagination.model';\nimport { FilterEntitiesActions } from '../filter-entities';\nimport { createSelectEntityTraitActions } from './select-entity.trait.actions';\n\nexport function createSelectEntityInitialState<Entity>(\n previousInitialState: any,\n allConfigs: SelectEntityKeyedConfig\n): LoadEntitiesState<Entity> & SelectEntityState {\n const selectedId = allConfigs.singleSelection?.selectedId;\n return {\n ...previousInitialState,\n selectedId,\n };\n}\nexport function createSelectEntityTraitReducer<\n Entity,\n S extends LoadEntitiesState<Entity> & SelectEntityState\n>(\n initialState: S,\n allActions: SelectEntityActions &\n CrudEntitiesActions<Entity> &\n SortEntitiesActions<Entity> &\n EntitiesPaginationActions &\n FilterEntitiesActions<any> &\n LoadEntitiesActions<Entity>,\n allMutators: SelectEntityMutators<Entity>,\n allConfigs: SelectEntityKeyedConfig &\n LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig &\n SortEntitiesKeyedConfig<Entity>\n) {\n const { adapter } = allConfigs.loadEntities!;\n\n const sortRemote = allConfigs.sort?.remote;\n const paginationCacheType = allConfigs.pagination?.cacheType;\n\n return createReducer(\n initialState,\n on(allActions.selectEntity, (state, { id }) =>\n allMutators.selectEntity(id, state)\n ),\n on(allActions.deselectEntity, (state) => allMutators.deselectEntity(state)),\n on(allActions.toggleSelectEntity, (state, { id }) =>\n allMutators.toggleSelectEntity(id, state)\n ),\n ...insertIf<S>(allActions.removeAllEntities, () =>\n on(allActions.removeAllEntities, (state) =>\n allMutators.deselectEntity(state)\n )\n ),\n ...insertIf<S>(sortRemote, () =>\n on(allActions.sortEntities, (state) => allMutators.deselectEntity(state))\n ),\n ...insertIf<S>(allActions.filterEntities, () =>\n on(allActions.filterEntities, (state) =>\n allMutators.deselectEntity(state)\n )\n ),\n ...insertIf<S>(!allActions.loadEntitiesPageSuccess, () =>\n on(allActions.loadEntitiesSuccess, (state) =>\n allMutators.deselectEntity(state)\n )\n ),\n ...insertIf<S>(\n !!allActions.loadEntitiesPageSuccess && paginationCacheType === 'partial',\n () =>\n on(allActions.loadEntitiesPageSuccess, (state) =>\n allMutators.deselectEntity(state)\n )\n ),\n ...insertIf<S>(allActions.removeEntities, () =>\n on(allActions.removeEntities, (state, { keys }) => {\n const shouldDeselect = keys.some(\n (v: string | number) => v === state.selectedId\n );\n return shouldDeselect\n ? {\n ...state,\n selectedId: undefined,\n }\n : state;\n })\n ),\n ...insertIf<S>(allActions.updateEntities, () =>\n on(allActions.updateEntities, (state, { updates }) => {\n const change = updates.find((updated) => {\n const id = adapter.selectId(updated.changes as Entity);\n return id && id !== updated.id && state.selectedId === updated.id;\n });\n return change\n ? {\n ...state,\n selectedId: adapter.selectId(change.changes as Entity),\n }\n : state;\n })\n )\n );\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function createSelectEntityTraitSelectors() {
|
|
2
|
+
function selectEntityIdSelected(state) {
|
|
3
|
+
return state.selectedId;
|
|
4
|
+
}
|
|
5
|
+
function selectEntitySelected(state) {
|
|
6
|
+
return (state.selectedId && state.entities[state.selectedId]) || undefined;
|
|
7
|
+
}
|
|
8
|
+
return {
|
|
9
|
+
selectEntityIdSelected,
|
|
10
|
+
selectEntitySelected,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=select-entity.trait.selectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-entity.trait.selectors.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/select-entity/select-entity.trait.selectors.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,gCAAgC;IAG9C,SAAS,sBAAsB,CAAC,KAAwB;QACtD,OAAO,KAAK,CAAC,UAAU,CAAC;IAC1B,CAAC;IACD,SAAS,oBAAoB,CAC3B,KAAoD;QAEpD,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,SAAS,CAAC;IAC7E,CAAC;IAED,OAAO;QACL,sBAAsB;QACtB,oBAAoB;KACrB,CAAC;AACJ,CAAC","sourcesContent":["import {\n SelectEntitySelectors,\n SelectEntityState,\n} from './select-entity.model';\nimport { LoadEntitiesState } from '../load-entities';\n\nexport function createSelectEntityTraitSelectors<\n Entity\n>(): SelectEntitySelectors<Entity> {\n function selectEntityIdSelected(state: SelectEntityState) {\n return state.selectedId;\n }\n function selectEntitySelected<Entity>(\n state: LoadEntitiesState<Entity> & SelectEntityState\n ) {\n return (state.selectedId && state.entities[state.selectedId]) || undefined;\n }\n\n return {\n selectEntityIdSelected,\n selectEntitySelected,\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/set-entity/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC","sourcesContent":["export * from './set-entity.model';\nexport * from './set-entity.trait';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set-entity.model.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/set-entity/set-entity.model.ts"],"names":[],"mappings":"","sourcesContent":["import { PostfixProps, PrefixProps, TraitActions } from '@ngrx-traits/core';\n\nimport { ActionCreator, TypedAction } from '@ngrx/store/src/models';\n\ntype SetActions<T> = {\n /**\n * set entity in the store\n */\n set: ActionCreator<string, (props: T) => TypedAction<string>>;\n};\nexport type SetEntityActions<Entity, J extends string> = PostfixProps<\n SetActions<Entity>,\n J\n>;\n\nexport type SetEntityState<Entity, J extends string> = {\n [key in `${J}`]?: Entity;\n};\n\nexport type SetEntitySelectors<Entity, J extends string> = PostfixProps<\n {\n select: (state: SetEntityState<Entity, J>) => Entity;\n },\n J\n>;\n"]}
|