@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,52 @@
1
+ import { capitalize, createTraitFactory, } from '@ngrx-traits/core';
2
+ import { createAction, createReducer, on } from '@ngrx/store';
3
+ /**
4
+ * Generates ngrx code needed to set and entity in the store state
5
+ * @param entityName - Entity name, should be in camel case
6
+ * @param options.actionProps - param for the main request action,
7
+ * use the props() function for its value
8
+ * @returns the trait factory
9
+ *
10
+ * @example
11
+ * const traits = createEntityFeatureFactory(
12
+ * addSetEntityTraits({
13
+ * entityName: 'client',
14
+ * actionProps: props<{ client: { id: number; name: string } }
15
+ * }),
16
+ * )({
17
+ * actionsGroupKey: 'Client',
18
+ * featureSelector: createFeatureSelector<
19
+ * SetEntityState<Client, 'client'>
20
+ * >('client'),
21
+ * });
22
+ *
23
+ * // will generate
24
+ * traits.actions.setClient({client: {id:123, name: 'gabs'}});
25
+ * traits.selectors.selectClient
26
+ */
27
+ export function addSetEntityTrait({ entityName, actionProps, }) {
28
+ const capitalizedName = capitalize(entityName);
29
+ return createTraitFactory({
30
+ key: `load${capitalizedName}`,
31
+ config: { entityName, actionProps },
32
+ actions: ({ actionsGroupKey }) => {
33
+ const setEntity = createAction(`${actionsGroupKey} Set ${capitalizedName}`, actionProps);
34
+ return {
35
+ [`set${capitalizedName}`]: setEntity,
36
+ };
37
+ },
38
+ selectors: () => {
39
+ function selectEntity(state) {
40
+ return state[`${entityName}`];
41
+ }
42
+ return {
43
+ [`select${capitalizedName}`]: selectEntity,
44
+ };
45
+ },
46
+ initialState: ({ previousInitialState }) => previousInitialState,
47
+ reducer: ({ initialState, allActions }) => {
48
+ return createReducer(initialState, on(allActions[`set${capitalizedName}`], (state, action) => (Object.assign(Object.assign({}, state), { [entityName]: action[entityName] }))));
49
+ },
50
+ });
51
+ }
52
+ //# sourceMappingURL=set-entity.trait.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-entity.trait.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/set-entity/set-entity.trait.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,kBAAkB,GAEnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAY9D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,iBAAiB,CAK/B,EACA,UAAU,EACV,WAAW,GAIZ;IACC,MAAM,eAAe,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAE/C,OAAO,kBAAkB,CAAC;QACxB,GAAG,EAAE,OAAO,eAAe,EAAE;QAC7B,MAAM,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE;QACnC,OAAO,EAAE,CAAC,EAAE,eAAe,EAA6B,EAAE,EAAE;YAC1D,MAAM,SAAS,GAAG,YAAY,CAC5B,GAAG,eAAe,QAAQ,eAAe,EAAE,EAC3C,WAAkB,CACnB,CAAC;YAEF,OAAO;gBACL,CAAC,MAAM,eAAe,EAAE,CAAC,EAAE,SAAS;aACL,CAAC;QACpC,CAAC;QACD,SAAS,EAAE,GAAG,EAAE;YACd,SAAS,YAAY,CAAC,KAAY;gBAChC,OAAQ,KAAa,CAAC,GAAG,UAAU,EAAE,CAAW,CAAC;YACnD,CAAC;YAED,OAAO;gBACL,CAAC,SAAS,eAAe,EAAE,CAAC,EAAE,YAAY;aACV,CAAC;QACrC,CAAC;QACD,YAAY,EAAE,CAAC,EAAE,oBAAoB,EAAkC,EAAE,EAAE,CACzE,oBAA6B;QAC/B,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE;YACxC,OAAO,aAAa,CAClB,YAAY,EACZ,EAAE,CACC,UAAkB,CAAC,MAAM,eAAe,EAAE,CAAC,EAC5C,CAAC,KAAU,EAAE,MAAW,EAAE,EAAE,CAAC,iCACxB,KAAK,KACR,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,IAChC,CACH,CACF,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC","sourcesContent":["import {\n capitalize,\n createTraitFactory,\n TraitActionsFactoryConfig,\n} from '@ngrx-traits/core';\nimport { createAction, createReducer, on } from '@ngrx/store';\n\nimport {\n SetEntityActions,\n SetEntitySelectors,\n SetEntityState,\n} from './set-entity.model';\nimport { TraitInitialStateFactoryConfig } from '@ngrx-traits/core';\nimport { ActionCreatorProps } from '@ngrx/store/src/models';\n\ntype RecordEntity<T> = T extends Record<string, infer J> ? J : never;\n\n/**\n * Generates ngrx code needed to set and entity in the store state\n * @param entityName - Entity name, should be in camel case\n * @param options.actionProps - param for the main request action,\n * use the props() function for its value\n * @returns the trait factory\n *\n * @example\n * const traits = createEntityFeatureFactory(\n * addSetEntityTraits({\n * entityName: 'client',\n * actionProps: props<{ client: { id: number; name: string } }\n * }),\n * )({\n * actionsGroupKey: 'Client',\n * featureSelector: createFeatureSelector<\n * SetEntityState<Client, 'client'>\n * >('client'),\n * });\n *\n * // will generate\n * traits.actions.setClient({client: {id:123, name: 'gabs'}});\n * traits.selectors.selectClient\n */\nexport function addSetEntityTrait<\n J extends string,\n Payload extends Record<J, any> | undefined = undefined,\n Entity = RecordEntity<Payload>,\n State = SetEntityState<Entity, J>\n>({\n entityName,\n actionProps,\n}: {\n entityName: J;\n actionProps?: ActionCreatorProps<Payload>;\n}) {\n const capitalizedName = capitalize(entityName);\n\n return createTraitFactory({\n key: `load${capitalizedName}`,\n config: { entityName, actionProps },\n actions: ({ actionsGroupKey }: TraitActionsFactoryConfig) => {\n const setEntity = createAction(\n `${actionsGroupKey} Set ${capitalizedName}`,\n actionProps as any\n );\n\n return {\n [`set${capitalizedName}`]: setEntity,\n } as SetEntityActions<Payload, J>;\n },\n selectors: () => {\n function selectEntity(state: State) {\n return (state as any)[`${entityName}`] as Entity;\n }\n\n return {\n [`select${capitalizedName}`]: selectEntity,\n } as SetEntitySelectors<Entity, J>;\n },\n initialState: ({ previousInitialState }: TraitInitialStateFactoryConfig) =>\n previousInitialState as State,\n reducer: ({ initialState, allActions }) => {\n return createReducer(\n initialState,\n on(\n (allActions as any)[`set${capitalizedName}`],\n (state: any, action: any) => ({\n ...state,\n [entityName]: action[entityName],\n })\n )\n );\n },\n });\n}\n"]}
@@ -0,0 +1,4 @@
1
+ export * from './sort-entities.model';
2
+ export * from './sort-entities.trait';
3
+ export * from './sort-entities.utils';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/sort-entities/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC","sourcesContent":["export * from './sort-entities.model';\nexport * from './sort-entities.trait';\nexport * from './sort-entities.utils';\n"]}
@@ -0,0 +1,2 @@
1
+ export const sortTraitKey = 'sort';
2
+ //# sourceMappingURL=sort-entities.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort-entities.model.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.model.ts"],"names":[],"mappings":"AA6CA,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC","sourcesContent":["import { LoadEntitiesState } from '../load-entities/load-entities.model';\n\nimport { ActionCreator, TypedAction } from '@ngrx/store/src/models';\nimport { KeyedConfig } from '@ngrx-traits/core';\n\nexport declare type SortDirection = 'asc' | 'desc' | '';\n\nexport interface Sort<T> {\n /** The id of the column being sorted. */\n active: keyof T;\n /** The sort direction. */\n direction: SortDirection;\n}\n\nexport interface SortEntitiesState<T> {\n sort: {\n current: Sort<T>;\n default: Sort<T>;\n };\n}\n\nexport type SortEntitiesActions<T> = {\n sortEntities: ActionCreator<\n string,\n (props: Sort<T>) => Sort<T> & TypedAction<string>\n >;\n /**\n * Sets the default sort back\n */\n resetEntitiesSort: ActionCreator<string, () => TypedAction<string>>;\n};\n\nexport type SortEntitiesSelectors<T> = {\n selectEntitiesSort: (\n state: LoadEntitiesState<T> & SortEntitiesState<T>\n ) => Sort<T>;\n};\n\nexport type SortEntitiesMutators<T> = {\n sortEntities<S extends LoadEntitiesState<T> & SortEntitiesState<T>>(\n { active, direction }: Sort<T>,\n state: S\n ): S;\n};\n\nexport const sortTraitKey = 'sort';\n\nexport interface SortEntitiesConfig<T> {\n defaultSort: Sort<T>;\n remote?: boolean;\n}\n\nexport type SortEntitiesKeyedConfig<T> = KeyedConfig<\n typeof sortTraitKey,\n SortEntitiesConfig<T>\n>;\n"]}
@@ -0,0 +1,8 @@
1
+ import { createAction, props } from '@ngrx/store';
2
+ export function createSortTraitActions(actionsGroupKey, entitiesName) {
3
+ return {
4
+ sortEntities: createAction(`${actionsGroupKey} Sort ${entitiesName}`, props()),
5
+ resetEntitiesSort: createAction(`${actionsGroupKey} Reset ${entitiesName} Sort`),
6
+ };
7
+ }
8
+ //# sourceMappingURL=sort-entities.trait.actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort-entities.trait.actions.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.trait.actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGlD,MAAM,UAAU,sBAAsB,CACpC,eAAuB,EACvB,YAAoB;IAEpB,OAAO;QACL,YAAY,EAAE,YAAY,CACxB,GAAG,eAAe,SAAS,YAAY,EAAE,EACzC,KAAK,EAAgB,CACtB;QACD,iBAAiB,EAAE,YAAY,CAC7B,GAAG,eAAe,UAAU,YAAY,OAAO,CAChD;KACF,CAAC;AACJ,CAAC","sourcesContent":["import { createAction, props } from '@ngrx/store';\nimport { Sort, SortEntitiesActions } from './sort-entities.model';\n\nexport function createSortTraitActions<Entity>(\n actionsGroupKey: string,\n entitiesName: string\n): SortEntitiesActions<Entity> {\n return {\n sortEntities: createAction(\n `${actionsGroupKey} Sort ${entitiesName}`,\n props<Sort<Entity>>()\n ),\n resetEntitiesSort: createAction(\n `${actionsGroupKey} Reset ${entitiesName} Sort`\n ),\n };\n}\n"]}
@@ -0,0 +1,28 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { TraitEffect } from '@ngrx-traits/core';
3
+ import { createEffect, ofType } from '@ngrx/effects';
4
+ import { concatMap } from 'rxjs/operators';
5
+ import * as i0 from "@angular/core";
6
+ export function createSortTraitEffect(allActions, allConfigs) {
7
+ const { remote } = allConfigs.sort;
8
+ class SortEffect extends TraitEffect {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.remoteSort$ = createEffect(() => {
12
+ return this.actions$.pipe(ofType(allActions.sortEntities, allActions.resetEntitiesSort), concatMap(() => allActions.loadEntitiesFirstPage
13
+ ? [
14
+ allActions.clearEntitiesPagesCache(),
15
+ allActions.loadEntitiesFirstPage(),
16
+ ]
17
+ : [allActions.loadEntities()]));
18
+ });
19
+ }
20
+ }
21
+ SortEffect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: SortEffect, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
22
+ SortEffect.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: SortEffect });
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: SortEffect, decorators: [{
24
+ type: Injectable
25
+ }] });
26
+ return remote ? [SortEffect] : [];
27
+ }
28
+ //# sourceMappingURL=sort-entities.trait.effect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort-entities.trait.effect.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.trait.effect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;;AAY3C,MAAM,UAAU,qBAAqB,CACnC,UAE2B,EAC3B,UAA6E;IAE7E,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,IAAK,CAAC;IAEpC,MACM,UAAW,SAAQ,WAAW;QADpC;;YAEE,gBAAW,GAAG,YAAY,CAAC,GAAG,EAAE;gBAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CACvB,MAAM,CAAC,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC,iBAAiB,CAAC,EAC7D,SAAS,CAAC,GAAG,EAAE,CACb,UAAU,CAAC,qBAAqB;oBAC9B,CAAC,CAAC;wBACE,UAAU,CAAC,uBAAuB,EAAE;wBACpC,UAAU,CAAC,qBAAqB,EAAE;qBACnC;oBACH,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAChC,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;SACJ;;2GAdK,UAAU;+GAAV,UAAU;+FAAV,UAAU;sBADf,UAAU;;IAgBX,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;CACnC","sourcesContent":["import { Injectable } from '@angular/core';\nimport { TraitEffect } from '@ngrx-traits/core';\nimport { createEffect, ofType } from '@ngrx/effects';\nimport { concatMap } from 'rxjs/operators';\nimport { Type } from '@ngrx-traits/core';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n} from '../load-entities/load-entities.model';\nimport {\n SortEntitiesActions,\n SortEntitiesKeyedConfig,\n} from './sort-entities.model';\nimport { EntitiesPaginationActions } from '../entities-pagination/entities-pagination.model';\n\nexport function createSortTraitEffect<Entity>(\n allActions: LoadEntitiesActions<Entity> &\n SortEntitiesActions<Entity> &\n EntitiesPaginationActions,\n allConfigs: LoadEntitiesKeyedConfig<Entity> & SortEntitiesKeyedConfig<Entity>\n): Type<TraitEffect>[] {\n const { remote } = allConfigs.sort!;\n\n @Injectable()\n class SortEffect extends TraitEffect {\n remoteSort$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions.sortEntities, allActions.resetEntitiesSort),\n concatMap(() =>\n allActions.loadEntitiesFirstPage\n ? [\n allActions.clearEntitiesPagesCache(),\n allActions.loadEntitiesFirstPage(),\n ]\n : [allActions.loadEntities()]\n )\n );\n });\n }\n return remote ? [SortEffect] : [];\n}\n"]}
@@ -0,0 +1,53 @@
1
+ import { createSortTraitMutators } from './sort-entities.trait.mutators';
2
+ import { createSortInitialState, createSortTraitReducer, } from './sort-entities.trait.reducer';
3
+ import { createSortTraitSelectors } from './sort-entities.trait.selectors';
4
+ import { createSortTraitEffect } from './sort-entities.trait.effect';
5
+ import { sortTraitKey, } from './sort-entities.model';
6
+ import { loadEntitiesTraitKey, } from '../load-entities/load-entities.model';
7
+ import { createTraitFactory } from '@ngrx-traits/core';
8
+ import { createSortTraitActions } from './sort-entities.trait.actions';
9
+ /**
10
+ * Generates ngrx code to sort locally or remotely a list of entities
11
+ * @param config
12
+ * @param config.defaultSort - Required, Default entity prop for the sort
13
+ * @param config.remote - Optional field, default to false, when true disables local
14
+ * sorting and every sort action call will now trigger a loadEntities action and the backend
15
+ * should sort the data, use selectSort in the effect that call backend to get the requested sort,
16
+ * when false all sorting is done in memory when the sort action is fired
17
+ *
18
+ * @example
19
+ * // The following trait config
20
+ * export interface TestState
21
+ * extends EntityAndStatusState<Todo>, SortState<Todo>{}
22
+ *
23
+ * const traits = createEntityFeatureFactory(
24
+ * addLoadEntitiesTrait<Todo>(),
25
+ * addSortEntitiesTrait<Todo>({
26
+ * defaultSort: {active:'id', direction:'asc'}
27
+ * })
28
+ * )({
29
+ * actionsGroupKey: '[Todos]',
30
+ * featureSelector: createFeatureSelector<TestState>>(
31
+ * 'todos',
32
+ * ),
33
+ * });
34
+ * // will generate the following actions and selectors, plus the ones generated by other traits
35
+ * traits.actions.sortTodos({active:'id', direction:'desc'})
36
+ * traits.actions.resetTodosSort()
37
+ *
38
+ * traits.selectors.selectTodosSort()
39
+ */
40
+ export function addSortEntitiesTrait({ remote = false, defaultSort, }) {
41
+ return createTraitFactory({
42
+ key: sortTraitKey,
43
+ depends: [loadEntitiesTraitKey],
44
+ config: { remote, defaultSort },
45
+ actions: ({ actionsGroupKey, entitiesName }) => createSortTraitActions(actionsGroupKey, entitiesName),
46
+ selectors: () => createSortTraitSelectors(),
47
+ mutators: ({ allSelectors, allConfigs }) => createSortTraitMutators(allSelectors, allConfigs),
48
+ initialState: ({ previousInitialState, allConfigs, }) => createSortInitialState(previousInitialState, allConfigs),
49
+ reducer: ({ initialState, allActions, allMutators, allConfigs }) => createSortTraitReducer(initialState, allActions, allMutators, allConfigs),
50
+ effects: ({ allActions, allConfigs }) => createSortTraitEffect(allActions, allConfigs),
51
+ });
52
+ }
53
+ //# sourceMappingURL=sort-entities.trait.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort-entities.trait.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.trait.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EACL,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAKL,YAAY,GACb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAIL,oBAAoB,GACrB,MAAM,sCAAsC,CAAC;AAK9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAOvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,oBAAoB,CAAS,EAC3C,MAAM,GAAG,KAAK,EACd,WAAW,GACgB;IAC3B,OAAO,kBAAkB,CAAC;QACxB,GAAG,EAAE,YAAY;QACjB,OAAO,EAAE,CAAC,oBAAoB,CAAC;QAC/B,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,EAAgC;QAC7D,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,YAAY,EAA6B,EAAE,EAAE,CACxE,sBAAsB,CAAS,eAAe,EAAE,YAAY,CAAC;QAC/D,SAAS,EAAE,GAAG,EAAE,CAAC,wBAAwB,EAAU;QACnD,QAAQ,EAAE,CAAC,EAAE,YAAY,EAAE,UAAU,EAAmC,EAAE,EAAE,CAC1E,uBAAuB,CACrB,YAC+B,EAC/B,UAAU,CACX;QACH,YAAY,EAAE,CAAC,EACb,oBAAoB,EACpB,UAAU,GACqB,EAAE,EAAE,CACnC,sBAAsB,CAAS,oBAAoB,EAAE,UAAU,CAAC;QAClE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,EAAE,CACjE,sBAAsB,CACpB,YAAY,EACZ,UAAuE,EACvE,WAAW,EACX,UAEiC,CAClC;QACH,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,CACtC,qBAAqB,CACnB,UAE2B,EAC3B,UACiC,CAClC;KACJ,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { createSortTraitMutators } from './sort-entities.trait.mutators';\nimport {\n createSortInitialState,\n createSortTraitReducer,\n} from './sort-entities.trait.reducer';\nimport { createSortTraitSelectors } from './sort-entities.trait.selectors';\nimport { createSortTraitEffect } from './sort-entities.trait.effect';\nimport {\n SortEntitiesActions,\n SortEntitiesConfig,\n SortEntitiesKeyedConfig,\n SortEntitiesSelectors,\n sortTraitKey,\n} from './sort-entities.model';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesSelectors,\n loadEntitiesTraitKey,\n} from '../load-entities/load-entities.model';\nimport {\n EntitiesPaginationActions,\n EntitiesPaginationKeyedConfig,\n} from '../entities-pagination/entities-pagination.model';\nimport { createTraitFactory } from '@ngrx-traits/core';\nimport { createSortTraitActions } from './sort-entities.trait.actions';\nimport {\n TraitActionsFactoryConfig,\n TraitInitialStateFactoryConfig,\n TraitStateMutatorsFactoryConfig,\n} from '@ngrx-traits/core';\n\n/**\n * Generates ngrx code to sort locally or remotely a list of entities\n * @param config\n * @param config.defaultSort - Required, Default entity prop for the sort\n * @param config.remote - Optional field, default to false, when true disables local\n * sorting and every sort action call will now trigger a loadEntities action and the backend\n * should sort the data, use selectSort in the effect that call backend to get the requested sort,\n * when false all sorting is done in memory when the sort action is fired\n *\n * @example\n * // The following trait config\n * export interface TestState\n * extends EntityAndStatusState<Todo>, SortState<Todo>{}\n *\n * const traits = createEntityFeatureFactory(\n * addLoadEntitiesTrait<Todo>(),\n * addSortEntitiesTrait<Todo>({\n * defaultSort: {active:'id', direction:'asc'}\n * })\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.sortTodos({active:'id', direction:'desc'})\n * traits.actions.resetTodosSort()\n *\n * traits.selectors.selectTodosSort()\n */\nexport function addSortEntitiesTrait<Entity>({\n remote = false,\n defaultSort,\n}: SortEntitiesConfig<Entity>) {\n return createTraitFactory({\n key: sortTraitKey,\n depends: [loadEntitiesTraitKey],\n config: { remote, defaultSort } as SortEntitiesConfig<Entity>,\n actions: ({ actionsGroupKey, entitiesName }: TraitActionsFactoryConfig) =>\n createSortTraitActions<Entity>(actionsGroupKey, entitiesName),\n selectors: () => createSortTraitSelectors<Entity>(),\n mutators: ({ allSelectors, allConfigs }: TraitStateMutatorsFactoryConfig) =>\n createSortTraitMutators<Entity>(\n allSelectors as SortEntitiesSelectors<Entity> &\n LoadEntitiesSelectors<Entity>,\n allConfigs\n ),\n initialState: ({\n previousInitialState,\n allConfigs,\n }: TraitInitialStateFactoryConfig) =>\n createSortInitialState<Entity>(previousInitialState, allConfigs),\n reducer: ({ initialState, allActions, allMutators, allConfigs }) =>\n createSortTraitReducer<Entity>(\n initialState,\n allActions as SortEntitiesActions<Entity> & LoadEntitiesActions<Entity>,\n allMutators,\n allConfigs as LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig &\n SortEntitiesKeyedConfig<Entity>\n ),\n effects: ({ allActions, allConfigs }) =>\n createSortTraitEffect(\n allActions as LoadEntitiesActions<Entity> &\n SortEntitiesActions<Entity> &\n EntitiesPaginationActions,\n allConfigs as LoadEntitiesKeyedConfig<Entity> &\n SortEntitiesKeyedConfig<Entity>\n ),\n });\n}\n"]}
@@ -0,0 +1,13 @@
1
+ import { sortData } from './sort-entities.utils';
2
+ export function createSortTraitMutators({ selectEntitiesList }, allConfigs) {
3
+ function sortEntities({ active, direction }, state) {
4
+ const { adapter } = allConfigs.loadEntities;
5
+ const entities = selectEntitiesList(state);
6
+ const sortedIds = sortData(entities, { active, direction }).map((v) => adapter.selectId(v));
7
+ return Object.assign(Object.assign({}, state), { ids: sortedIds, sort: Object.assign(Object.assign({}, state.sort), { current: { active, direction } }) });
8
+ }
9
+ return {
10
+ sortEntities,
11
+ };
12
+ }
13
+ //# sourceMappingURL=sort-entities.trait.mutators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort-entities.trait.mutators.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.trait.mutators.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,MAAM,UAAU,uBAAuB,CACrC,EAAE,kBAAkB,EAAiC,EACrD,UAA2C;IAE3C,SAAS,YAAY,CAEnB,EAAE,MAAM,EAAE,SAAS,EAAgB,EAAE,KAAQ;QAC7C,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,YAAa,CAAC;QAC7C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACpE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CACpB,CAAC;QACF,uCACK,KAAK,KACR,GAAG,EAAE,SAAS,EACd,IAAI,kCAAO,KAAK,CAAC,IAAI,KAAE,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OACrD;IACJ,CAAC;IACD,OAAO;QACL,YAAY;KACb,CAAC;AACJ,CAAC","sourcesContent":["import {\n LoadEntitiesKeyedConfig,\n LoadEntitiesSelectors,\n LoadEntitiesState,\n} from '../load-entities/load-entities.model';\nimport {\n Sort,\n SortEntitiesMutators,\n SortEntitiesState,\n} from './sort-entities.model';\nimport { sortData } from './sort-entities.utils';\n\nexport function createSortTraitMutators<Entity>(\n { selectEntitiesList }: LoadEntitiesSelectors<Entity>,\n allConfigs: LoadEntitiesKeyedConfig<Entity>\n): SortEntitiesMutators<Entity> {\n function sortEntities<\n S extends LoadEntitiesState<Entity> & SortEntitiesState<Entity>\n >({ active, direction }: Sort<Entity>, state: S) {\n const { adapter } = allConfigs.loadEntities!;\n const entities = selectEntitiesList(state);\n const sortedIds = sortData(entities, { active, direction }).map((v) =>\n adapter.selectId(v)\n );\n return {\n ...state,\n ids: sortedIds,\n sort: { ...state.sort, current: { active, direction } },\n };\n }\n return {\n sortEntities,\n };\n}\n"]}
@@ -0,0 +1,22 @@
1
+ import { createReducer, on } from '@ngrx/store';
2
+ export function createSortInitialState(previousInitialState, allConfigs) {
3
+ const { defaultSort } = allConfigs.sort;
4
+ return Object.assign(Object.assign({}, previousInitialState), { sort: {
5
+ current: defaultSort,
6
+ default: defaultSort,
7
+ } });
8
+ }
9
+ export function createSortTraitReducer(initialState, allActions, allMutators, allConfigs) {
10
+ const { remote } = allConfigs.sort;
11
+ return createReducer(initialState, on(allActions.sortEntities, (state, { active, direction }) => !remote
12
+ ? allMutators.sortEntities({ active, direction }, state)
13
+ : Object.assign(Object.assign({}, state), { sort: Object.assign(Object.assign({}, state.sort), { current: { active, direction } }) })), on(allActions.resetEntitiesSort, (state) => {
14
+ var _a, _b, _c;
15
+ return ((_a = state.sort) === null || _a === void 0 ? void 0 : _a.default)
16
+ ? !remote
17
+ ? allMutators.sortEntities((_b = state.sort) === null || _b === void 0 ? void 0 : _b.default, state)
18
+ : Object.assign(Object.assign({}, state), { sort: Object.assign(Object.assign({}, state.sort), { current: (_c = state.sort) === null || _c === void 0 ? void 0 : _c.default }) })
19
+ : state;
20
+ }));
21
+ }
22
+ //# sourceMappingURL=sort-entities.trait.reducer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort-entities.trait.reducer.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.trait.reducer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAahD,MAAM,UAAU,sBAAsB,CACpC,oBAAyB,EACzB,UAA2C;IAE3C,MAAM,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,IAAK,CAAC;IAEzC,uCACK,oBAAoB,KACvB,IAAI,EAAE;YACJ,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE,WAAW;SACrB,IACD;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAMpC,YAAe,EACf,UAAqE,EACrE,WAAyC,EACzC,UAA6E;IAE7E,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,IAAK,CAAC;IAEpC,OAAO,aAAa,CAClB,YAAY,EACZ,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,CAC3D,CAAC,MAAM;QACL,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC;QACxD,CAAC,iCACM,KAAK,KACR,IAAI,kCAAO,KAAK,CAAC,IAAI,KAAE,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MACtD,CACN,EACD,EAAE,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE;;QACzC,OAAA,CAAA,MAAA,KAAK,CAAC,IAAI,0CAAE,OAAO;YACjB,CAAC,CAAC,CAAC,MAAM;gBACP,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,MAAA,KAAK,CAAC,IAAI,0CAAE,OAAO,EAAE,KAAK,CAAC;gBACtD,CAAC,iCACM,KAAK,KACR,IAAI,kCAAO,KAAK,CAAC,IAAI,KAAE,OAAO,EAAE,MAAA,KAAK,CAAC,IAAI,0CAAE,OAAO,MACpD;YACL,CAAC,CAAC,KAAK,CAAA;KAAA,CACV,CACF,CAAC;AACJ,CAAC","sourcesContent":["import { createReducer, on } from '@ngrx/store';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesState,\n} from '../load-entities';\nimport {\n SortEntitiesActions,\n SortEntitiesKeyedConfig,\n SortEntitiesMutators,\n SortEntitiesState,\n} from './sort-entities.model';\n\nexport function createSortInitialState<Entity>(\n previousInitialState: any,\n allConfigs: SortEntitiesKeyedConfig<Entity>\n): LoadEntitiesState<Entity> & SortEntitiesState<Entity> {\n const { defaultSort } = allConfigs.sort!;\n\n return {\n ...previousInitialState,\n sort: {\n current: defaultSort,\n default: defaultSort,\n },\n };\n}\n\nexport function createSortTraitReducer<\n Entity,\n S extends LoadEntitiesState<Entity> &\n SortEntitiesState<Entity> = LoadEntitiesState<Entity> &\n SortEntitiesState<Entity>\n>(\n initialState: S,\n allActions: SortEntitiesActions<Entity> & LoadEntitiesActions<Entity>,\n allMutators: SortEntitiesMutators<Entity>,\n allConfigs: LoadEntitiesKeyedConfig<Entity> & SortEntitiesKeyedConfig<Entity>\n) {\n const { remote } = allConfigs.sort!;\n\n return createReducer(\n initialState,\n on(allActions.sortEntities, (state, { active, direction }) =>\n !remote\n ? allMutators.sortEntities({ active, direction }, state)\n : {\n ...state,\n sort: { ...state.sort, current: { active, direction } },\n }\n ),\n on(allActions.resetEntitiesSort, (state) =>\n state.sort?.default\n ? !remote\n ? allMutators.sortEntities(state.sort?.default, state)\n : {\n ...state,\n sort: { ...state.sort, current: state.sort?.default },\n }\n : state\n )\n );\n}\n"]}
@@ -0,0 +1,10 @@
1
+ export function createSortTraitSelectors() {
2
+ function selectEntitiesSort(state) {
3
+ var _a;
4
+ return (_a = state.sort) === null || _a === void 0 ? void 0 : _a.current;
5
+ }
6
+ return {
7
+ selectEntitiesSort,
8
+ };
9
+ }
10
+ //# sourceMappingURL=sort-entities.trait.selectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort-entities.trait.selectors.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.trait.selectors.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,wBAAwB;IAGtC,SAAS,kBAAkB,CAAC,KAAgC;;QAC1D,OAAO,MAAA,KAAK,CAAC,IAAI,0CAAE,OAAO,CAAC;IAC7B,CAAC;IACD,OAAO;QACL,kBAAkB;KACnB,CAAC;AACJ,CAAC","sourcesContent":["import {\n SortEntitiesSelectors,\n SortEntitiesState,\n} from './sort-entities.model';\n\nexport function createSortTraitSelectors<\n Entity\n>(): SortEntitiesSelectors<Entity> {\n function selectEntitiesSort(state: SortEntitiesState<Entity>) {\n return state.sort?.current;\n }\n return {\n selectEntitiesSort,\n };\n}\n"]}
@@ -0,0 +1,61 @@
1
+ const MAX_SAFE_INTEGER = 9007199254740991;
2
+ export function _isNumberValue(value) {
3
+ // parseFloat(value) handles most of the cases we're interested in (it treats null, empty string,
4
+ // and other non-number values as NaN, where Number just uses 0) but it considers the string
5
+ // '123hello' to be a valid number. Therefore we also check if Number(value) is NaN.
6
+ return !isNaN(parseFloat(value)) && !isNaN(Number(value));
7
+ }
8
+ function sortingDataAccessor(data, sortHeaderId) {
9
+ const value = data[sortHeaderId];
10
+ if (_isNumberValue(value)) {
11
+ const numberValue = Number(value);
12
+ // Numbers beyond `MAX_SAFE_INTEGER` can't be compared reliably so we
13
+ // leave them as strings. For more info: https://goo.gl/y5vbSg
14
+ return numberValue < MAX_SAFE_INTEGER ? numberValue : value;
15
+ }
16
+ return value;
17
+ }
18
+ /**
19
+ * Gets a sorted copy of the data array based on the state of the Sort.
20
+ * @param data The array of data that should be sorted.
21
+ * @param sort The connected MatSort that holds the current sort state.
22
+ */
23
+ export function sortData(data, sort) {
24
+ const active = sort.active;
25
+ const direction = sort.direction;
26
+ if (!active || direction === '') {
27
+ return data;
28
+ }
29
+ return data.sort((a, b) => {
30
+ const valueA = sortingDataAccessor(a, active);
31
+ const valueB = sortingDataAccessor(b, active);
32
+ // If both valueA and valueB exist (truthy), then compare the two. Otherwise, check if
33
+ // one value exists while the other doesn't. In this case, existing value should come last.
34
+ // This avoids inconsistent results when comparing values to undefined/null.
35
+ // If neither value exists, return 0 (equal).
36
+ let comparatorResult = 0;
37
+ if (valueA != null && valueB != null) {
38
+ // Check if one value is greater than the other; if equal, comparatorResult should remain 0.
39
+ if (typeof valueA === 'string' || typeof valueB === 'string') {
40
+ // if either values are a string, then force both to be strings before localCompare
41
+ comparatorResult = valueA.toString().localeCompare(valueB.toString());
42
+ }
43
+ else {
44
+ if (valueA > valueB) {
45
+ comparatorResult = 1;
46
+ }
47
+ else if (valueA < valueB) {
48
+ comparatorResult = -1;
49
+ }
50
+ }
51
+ }
52
+ else if (valueA != null) {
53
+ comparatorResult = 1;
54
+ }
55
+ else if (valueB != null) {
56
+ comparatorResult = -1;
57
+ }
58
+ return comparatorResult * (direction === 'asc' ? 1 : -1);
59
+ });
60
+ }
61
+ //# sourceMappingURL=sort-entities.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort-entities.utils.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.utils.ts"],"names":[],"mappings":"AAEA,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAE1C,MAAM,UAAU,cAAc,CAAC,KAAU;IACvC,iGAAiG;IACjG,4FAA4F;IAC5F,oFAAoF;IACpF,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,mBAAmB,CAC1B,IAAO,EACP,YAAoB;IAEpB,MAAM,KAAK,GAAI,IAA+B,CAAC,YAAY,CAAC,CAAC;IAE7D,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE;QACzB,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAElC,qEAAqE;QACrE,8DAA8D;QAC9D,OAAO,WAAW,GAAG,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC;KAC7D;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAI,IAAS,EAAE,IAAa;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACjC,IAAI,CAAC,MAAM,IAAI,SAAS,KAAK,EAAE,EAAE;QAC/B,OAAO,IAAI,CAAC;KACb;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,mBAAmB,CAAC,CAAC,EAAE,MAAgB,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,mBAAmB,CAAC,CAAC,EAAE,MAAgB,CAAC,CAAC;QAExD,sFAAsF;QACtF,2FAA2F;QAC3F,4EAA4E;QAC5E,6CAA6C;QAC7C,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE;YACpC,4FAA4F;YAE5F,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBAC5D,mFAAmF;gBACnF,gBAAgB,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;aACvE;iBAAM;gBACL,IAAI,MAAM,GAAG,MAAM,EAAE;oBACnB,gBAAgB,GAAG,CAAC,CAAC;iBACtB;qBAAM,IAAI,MAAM,GAAG,MAAM,EAAE;oBAC1B,gBAAgB,GAAG,CAAC,CAAC,CAAC;iBACvB;aACF;SACF;aAAM,IAAI,MAAM,IAAI,IAAI,EAAE;YACzB,gBAAgB,GAAG,CAAC,CAAC;SACtB;aAAM,IAAI,MAAM,IAAI,IAAI,EAAE;YACzB,gBAAgB,GAAG,CAAC,CAAC,CAAC;SACvB;QAED,OAAO,gBAAgB,GAAG,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { Sort } from './sort-entities.model';\n\nconst MAX_SAFE_INTEGER = 9007199254740991;\n\nexport function _isNumberValue(value: any): boolean {\n // parseFloat(value) handles most of the cases we're interested in (it treats null, empty string,\n // and other non-number values as NaN, where Number just uses 0) but it considers the string\n // '123hello' to be a valid number. Therefore we also check if Number(value) is NaN.\n return !isNaN(parseFloat(value as any)) && !isNaN(Number(value));\n}\n\nfunction sortingDataAccessor<T>(\n data: T,\n sortHeaderId: string\n): string | number {\n const value = (data as { [key: string]: any })[sortHeaderId];\n\n if (_isNumberValue(value)) {\n const numberValue = Number(value);\n\n // Numbers beyond `MAX_SAFE_INTEGER` can't be compared reliably so we\n // leave them as strings. For more info: https://goo.gl/y5vbSg\n return numberValue < MAX_SAFE_INTEGER ? numberValue : value;\n }\n\n return value;\n}\n\n/**\n * Gets a sorted copy of the data array based on the state of the Sort.\n * @param data The array of data that should be sorted.\n * @param sort The connected MatSort that holds the current sort state.\n */\nexport function sortData<T>(data: T[], sort: Sort<T>): T[] {\n const active = sort.active;\n const direction = sort.direction;\n if (!active || direction === '') {\n return data;\n }\n\n return data.sort((a, b) => {\n const valueA = sortingDataAccessor(a, active as string);\n const valueB = sortingDataAccessor(b, active as string);\n\n // If both valueA and valueB exist (truthy), then compare the two. Otherwise, check if\n // one value exists while the other doesn't. In this case, existing value should come last.\n // This avoids inconsistent results when comparing values to undefined/null.\n // If neither value exists, return 0 (equal).\n let comparatorResult = 0;\n if (valueA != null && valueB != null) {\n // Check if one value is greater than the other; if equal, comparatorResult should remain 0.\n\n if (typeof valueA === 'string' || typeof valueB === 'string') {\n // if either values are a string, then force both to be strings before localCompare\n comparatorResult = valueA.toString().localeCompare(valueB.toString());\n } else {\n if (valueA > valueB) {\n comparatorResult = 1;\n } else if (valueA < valueB) {\n comparatorResult = -1;\n }\n }\n } else if (valueA != null) {\n comparatorResult = 1;\n } else if (valueB != null) {\n comparatorResult = -1;\n }\n\n return comparatorResult * (direction === 'asc' ? 1 : -1);\n });\n}\n"]}