@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.
Files changed (219) hide show
  1. package/README.md +7 -0
  2. package/async-action/async-action.model.d.ts +19 -0
  3. package/async-action/async-action.trait.d.ts +59 -0
  4. package/async-action/index.d.ts +2 -0
  5. package/bundles/ngrx-traits-common.umd.js +2126 -0
  6. package/bundles/ngrx-traits-common.umd.js.map +1 -0
  7. package/crud-entities/crud-entities.model.d.ts +76 -0
  8. package/crud-entities/crud-entities.trait.actions.d.ts +2 -0
  9. package/crud-entities/crud-entities.trait.d.ts +35 -0
  10. package/crud-entities/crud-entities.trait.mutators.d.ts +3 -0
  11. package/crud-entities/crud-entities.trait.reducer.d.ts +7 -0
  12. package/crud-entities/crud-entities.trait.selectors.d.ts +3 -0
  13. package/crud-entities/index.d.ts +2 -0
  14. package/entities-pagination/entities-pagination.model.d.ts +82 -0
  15. package/entities-pagination/entities-pagination.model.internal.d.ts +12 -0
  16. package/entities-pagination/entities-pagination.trait.actions.d.ts +2 -0
  17. package/entities-pagination/entities-pagination.trait.d.ts +55 -0
  18. package/entities-pagination/entities-pagination.trait.effects.d.ts +8 -0
  19. package/entities-pagination/entities-pagination.trait.mutators.d.ts +3 -0
  20. package/entities-pagination/entities-pagination.trait.reducer.d.ts +7 -0
  21. package/entities-pagination/entities-pagination.trait.selectors.d.ts +4 -0
  22. package/entities-pagination/index.d.ts +2 -0
  23. package/esm2015/async-action/async-action.model.js +2 -0
  24. package/esm2015/async-action/async-action.model.js.map +1 -0
  25. package/esm2015/async-action/async-action.trait.js +96 -0
  26. package/esm2015/async-action/async-action.trait.js.map +1 -0
  27. package/esm2015/async-action/index.js +3 -0
  28. package/esm2015/async-action/index.js.map +1 -0
  29. package/esm2015/crud-entities/crud-entities.model.js +8 -0
  30. package/esm2015/crud-entities/crud-entities.model.js.map +1 -0
  31. package/esm2015/crud-entities/crud-entities.trait.actions.js +20 -0
  32. package/esm2015/crud-entities/crud-entities.trait.actions.js.map +1 -0
  33. package/esm2015/crud-entities/crud-entities.trait.js +53 -0
  34. package/esm2015/crud-entities/crud-entities.trait.js.map +1 -0
  35. package/esm2015/crud-entities/crud-entities.trait.mutators.js +101 -0
  36. package/esm2015/crud-entities/crud-entities.trait.mutators.js.map +1 -0
  37. package/esm2015/crud-entities/crud-entities.trait.reducer.js +15 -0
  38. package/esm2015/crud-entities/crud-entities.trait.reducer.js.map +1 -0
  39. package/esm2015/crud-entities/crud-entities.trait.selectors.js +70 -0
  40. package/esm2015/crud-entities/crud-entities.trait.selectors.js.map +1 -0
  41. package/esm2015/crud-entities/index.js +3 -0
  42. package/esm2015/crud-entities/index.js.map +1 -0
  43. package/esm2015/entities-pagination/entities-pagination.model.internal.js +2 -0
  44. package/esm2015/entities-pagination/entities-pagination.model.internal.js.map +1 -0
  45. package/esm2015/entities-pagination/entities-pagination.model.js +2 -0
  46. package/esm2015/entities-pagination/entities-pagination.model.js.map +1 -0
  47. package/esm2015/entities-pagination/entities-pagination.trait.actions.js +20 -0
  48. package/esm2015/entities-pagination/entities-pagination.trait.actions.js.map +1 -0
  49. package/esm2015/entities-pagination/entities-pagination.trait.effects.js +54 -0
  50. package/esm2015/entities-pagination/entities-pagination.trait.effects.js.map +1 -0
  51. package/esm2015/entities-pagination/entities-pagination.trait.js +80 -0
  52. package/esm2015/entities-pagination/entities-pagination.trait.js.map +1 -0
  53. package/esm2015/entities-pagination/entities-pagination.trait.mutators.js +23 -0
  54. package/esm2015/entities-pagination/entities-pagination.trait.mutators.js.map +1 -0
  55. package/esm2015/entities-pagination/entities-pagination.trait.reducer.js +33 -0
  56. package/esm2015/entities-pagination/entities-pagination.trait.reducer.js.map +1 -0
  57. package/esm2015/entities-pagination/entities-pagination.trait.selectors.js +65 -0
  58. package/esm2015/entities-pagination/entities-pagination.trait.selectors.js.map +1 -0
  59. package/esm2015/entities-pagination/index.js +3 -0
  60. package/esm2015/entities-pagination/index.js.map +1 -0
  61. package/esm2015/filter-entities/filter-entities.model.internal.js +2 -0
  62. package/esm2015/filter-entities/filter-entities.model.internal.js.map +1 -0
  63. package/esm2015/filter-entities/filter-entities.model.js +2 -0
  64. package/esm2015/filter-entities/filter-entities.model.js.map +1 -0
  65. package/esm2015/filter-entities/filter-entities.trait.actions.js +16 -0
  66. package/esm2015/filter-entities/filter-entities.trait.actions.js.map +1 -0
  67. package/esm2015/filter-entities/filter-entities.trait.effect.js +56 -0
  68. package/esm2015/filter-entities/filter-entities.trait.effect.js.map +1 -0
  69. package/esm2015/filter-entities/filter-entities.trait.js +68 -0
  70. package/esm2015/filter-entities/filter-entities.trait.js.map +1 -0
  71. package/esm2015/filter-entities/filter-entities.trait.mutators.js +7 -0
  72. package/esm2015/filter-entities/filter-entities.trait.mutators.js.map +1 -0
  73. package/esm2015/filter-entities/filter-entities.trait.reducer.js +9 -0
  74. package/esm2015/filter-entities/filter-entities.trait.reducer.js.map +1 -0
  75. package/esm2015/filter-entities/filter-entities.trait.selectors.js +9 -0
  76. package/esm2015/filter-entities/filter-entities.trait.selectors.js.map +1 -0
  77. package/esm2015/filter-entities/index.js +3 -0
  78. package/esm2015/filter-entities/index.js.map +1 -0
  79. package/esm2015/index.js +12 -0
  80. package/esm2015/index.js.map +1 -0
  81. package/esm2015/load-entities/index.js +3 -0
  82. package/esm2015/load-entities/index.js.map +1 -0
  83. package/esm2015/load-entities/load-entities.model.js +2 -0
  84. package/esm2015/load-entities/load-entities.model.js.map +1 -0
  85. package/esm2015/load-entities/load-entities.mutators.js +8 -0
  86. package/esm2015/load-entities/load-entities.mutators.js.map +1 -0
  87. package/esm2015/load-entities/load-entities.trait.actions.js +10 -0
  88. package/esm2015/load-entities/load-entities.trait.actions.js.map +1 -0
  89. package/esm2015/load-entities/load-entities.trait.js +57 -0
  90. package/esm2015/load-entities/load-entities.trait.js.map +1 -0
  91. package/esm2015/load-entities/load-entities.trait.reducer.js +12 -0
  92. package/esm2015/load-entities/load-entities.trait.reducer.js.map +1 -0
  93. package/esm2015/load-entities/load-entities.trait.selectors.js +33 -0
  94. package/esm2015/load-entities/load-entities.trait.selectors.js.map +1 -0
  95. package/esm2015/load-entities/load-entities.utils.js +10 -0
  96. package/esm2015/load-entities/load-entities.utils.js.map +1 -0
  97. package/esm2015/load-entity/index.js +3 -0
  98. package/esm2015/load-entity/index.js.map +1 -0
  99. package/esm2015/load-entity/load-entity.model.js +2 -0
  100. package/esm2015/load-entity/load-entity.model.js.map +1 -0
  101. package/esm2015/load-entity/load-entity.traits.js +65 -0
  102. package/esm2015/load-entity/load-entity.traits.js.map +1 -0
  103. package/esm2015/ngrx-traits-common.js +5 -0
  104. package/esm2015/ngrx-traits-common.js.map +1 -0
  105. package/esm2015/public_api.js +2 -0
  106. package/esm2015/public_api.js.map +1 -0
  107. package/esm2015/reset/index.js +2 -0
  108. package/esm2015/reset/index.js.map +1 -0
  109. package/esm2015/reset/reset.trait.js +66 -0
  110. package/esm2015/reset/reset.trait.js.map +1 -0
  111. package/esm2015/select-entities/index.js +4 -0
  112. package/esm2015/select-entities/index.js.map +1 -0
  113. package/esm2015/select-entities/select-entities.model.js +2 -0
  114. package/esm2015/select-entities/select-entities.model.js.map +1 -0
  115. package/esm2015/select-entities/select-entities.trait.actions.js +11 -0
  116. package/esm2015/select-entities/select-entities.trait.actions.js.map +1 -0
  117. package/esm2015/select-entities/select-entities.trait.js +50 -0
  118. package/esm2015/select-entities/select-entities.trait.js.map +1 -0
  119. package/esm2015/select-entities/select-entities.trait.mutators.js +21 -0
  120. package/esm2015/select-entities/select-entities.trait.mutators.js.map +1 -0
  121. package/esm2015/select-entities/select-entities.trait.reducer.js +40 -0
  122. package/esm2015/select-entities/select-entities.trait.reducer.js.map +1 -0
  123. package/esm2015/select-entities/select-entities.trait.selectors.js +28 -0
  124. package/esm2015/select-entities/select-entities.trait.selectors.js.map +1 -0
  125. package/esm2015/select-entities/select-entities.utils.js +25 -0
  126. package/esm2015/select-entities/select-entities.utils.js.map +1 -0
  127. package/esm2015/select-entity/index.js +3 -0
  128. package/esm2015/select-entity/index.js.map +1 -0
  129. package/esm2015/select-entity/select-entity.model.js +2 -0
  130. package/esm2015/select-entity/select-entity.model.js.map +1 -0
  131. package/esm2015/select-entity/select-entity.trait.actions.js +9 -0
  132. package/esm2015/select-entity/select-entity.trait.actions.js.map +1 -0
  133. package/esm2015/select-entity/select-entity.trait.js +47 -0
  134. package/esm2015/select-entity/select-entity.trait.js.map +1 -0
  135. package/esm2015/select-entity/select-entity.trait.mutators.js +17 -0
  136. package/esm2015/select-entity/select-entity.trait.mutators.js.map +1 -0
  137. package/esm2015/select-entity/select-entity.trait.reducer.js +26 -0
  138. package/esm2015/select-entity/select-entity.trait.reducer.js.map +1 -0
  139. package/esm2015/select-entity/select-entity.trait.selectors.js +13 -0
  140. package/esm2015/select-entity/select-entity.trait.selectors.js.map +1 -0
  141. package/esm2015/set-entity/index.js +3 -0
  142. package/esm2015/set-entity/index.js.map +1 -0
  143. package/esm2015/set-entity/set-entity.model.js +2 -0
  144. package/esm2015/set-entity/set-entity.model.js.map +1 -0
  145. package/esm2015/set-entity/set-entity.trait.js +52 -0
  146. package/esm2015/set-entity/set-entity.trait.js.map +1 -0
  147. package/esm2015/sort-entities/index.js +4 -0
  148. package/esm2015/sort-entities/index.js.map +1 -0
  149. package/esm2015/sort-entities/sort-entities.model.js +2 -0
  150. package/esm2015/sort-entities/sort-entities.model.js.map +1 -0
  151. package/esm2015/sort-entities/sort-entities.trait.actions.js +8 -0
  152. package/esm2015/sort-entities/sort-entities.trait.actions.js.map +1 -0
  153. package/esm2015/sort-entities/sort-entities.trait.effect.js +28 -0
  154. package/esm2015/sort-entities/sort-entities.trait.effect.js.map +1 -0
  155. package/esm2015/sort-entities/sort-entities.trait.js +53 -0
  156. package/esm2015/sort-entities/sort-entities.trait.js.map +1 -0
  157. package/esm2015/sort-entities/sort-entities.trait.mutators.js +13 -0
  158. package/esm2015/sort-entities/sort-entities.trait.mutators.js.map +1 -0
  159. package/esm2015/sort-entities/sort-entities.trait.reducer.js +22 -0
  160. package/esm2015/sort-entities/sort-entities.trait.reducer.js.map +1 -0
  161. package/esm2015/sort-entities/sort-entities.trait.selectors.js +10 -0
  162. package/esm2015/sort-entities/sort-entities.trait.selectors.js.map +1 -0
  163. package/esm2015/sort-entities/sort-entities.utils.js +61 -0
  164. package/esm2015/sort-entities/sort-entities.utils.js.map +1 -0
  165. package/fesm2015/ngrx-traits-common.js +1511 -0
  166. package/fesm2015/ngrx-traits-common.js.map +1 -0
  167. package/filter-entities/filter-entities.model.d.ts +57 -0
  168. package/filter-entities/filter-entities.model.internal.d.ts +14 -0
  169. package/filter-entities/filter-entities.trait.actions.d.ts +2 -0
  170. package/filter-entities/filter-entities.trait.d.ts +42 -0
  171. package/filter-entities/filter-entities.trait.effect.d.ts +6 -0
  172. package/filter-entities/filter-entities.trait.mutators.d.ts +2 -0
  173. package/filter-entities/filter-entities.trait.reducer.d.ts +5 -0
  174. package/filter-entities/filter-entities.trait.selectors.d.ts +4 -0
  175. package/filter-entities/index.d.ts +2 -0
  176. package/index.d.ts +11 -0
  177. package/load-entities/index.d.ts +2 -0
  178. package/load-entities/load-entities.model.d.ts +97 -0
  179. package/load-entities/load-entities.mutators.d.ts +3 -0
  180. package/load-entities/load-entities.trait.actions.d.ts +2 -0
  181. package/load-entities/load-entities.trait.d.ts +39 -0
  182. package/load-entities/load-entities.trait.reducer.d.ts +4 -0
  183. package/load-entities/load-entities.trait.selectors.d.ts +3 -0
  184. package/load-entities/load-entities.utils.d.ts +4 -0
  185. package/load-entity/index.d.ts +2 -0
  186. package/load-entity/load-entity.model.d.ts +9 -0
  187. package/load-entity/load-entity.traits.d.ts +64 -0
  188. package/ngrx-traits-common.d.ts +5 -0
  189. package/package.json +28 -0
  190. package/public_api.d.ts +1 -0
  191. package/reset/index.d.ts +1 -0
  192. package/reset/reset.trait.d.ts +32 -0
  193. package/select-entities/index.d.ts +3 -0
  194. package/select-entities/select-entities.model.d.ts +41 -0
  195. package/select-entities/select-entities.trait.actions.d.ts +2 -0
  196. package/select-entities/select-entities.trait.d.ts +34 -0
  197. package/select-entities/select-entities.trait.mutators.d.ts +2 -0
  198. package/select-entities/select-entities.trait.reducer.d.ts +8 -0
  199. package/select-entities/select-entities.trait.selectors.d.ts +3 -0
  200. package/select-entities/select-entities.utils.d.ts +7 -0
  201. package/select-entity/index.d.ts +2 -0
  202. package/select-entity/select-entity.model.d.ts +33 -0
  203. package/select-entity/select-entity.trait.actions.d.ts +2 -0
  204. package/select-entity/select-entity.trait.d.ts +30 -0
  205. package/select-entity/select-entity.trait.mutators.d.ts +2 -0
  206. package/select-entity/select-entity.trait.reducer.d.ts +8 -0
  207. package/select-entity/select-entity.trait.selectors.d.ts +2 -0
  208. package/set-entity/index.d.ts +2 -0
  209. package/set-entity/set-entity.model.d.ts +16 -0
  210. package/set-entity/set-entity.trait.d.ts +39 -0
  211. package/sort-entities/index.d.ts +3 -0
  212. package/sort-entities/sort-entities.model.d.ts +35 -0
  213. package/sort-entities/sort-entities.trait.actions.d.ts +2 -0
  214. package/sort-entities/sort-entities.trait.d.ts +33 -0
  215. package/sort-entities/sort-entities.trait.effect.d.ts +6 -0
  216. package/sort-entities/sort-entities.trait.mutators.d.ts +3 -0
  217. package/sort-entities/sort-entities.trait.reducer.d.ts +4 -0
  218. package/sort-entities/sort-entities.trait.selectors.d.ts +2 -0
  219. 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,4 @@
1
+ export * from './select-entities.model';
2
+ export * from './select-entities.trait';
3
+ export * from './select-entities.utils';
4
+ //# sourceMappingURL=index.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=select-entities.model.js.map
@@ -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,3 @@
1
+ export * from './select-entity.trait';
2
+ export * from './select-entity.model';
3
+ //# sourceMappingURL=index.js.map
@@ -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,2 @@
1
+ export const selectEntityTraitKey = 'singleSelection';
2
+ //# sourceMappingURL=select-entity.model.js.map
@@ -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,3 @@
1
+ export * from './set-entity.model';
2
+ export * from './set-entity.trait';
3
+ //# sourceMappingURL=index.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=set-entity.model.js.map
@@ -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"]}