@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":"crud-entities.trait.mutators.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/crud-entities/crud-entities.trait.mutators.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Change,\n ChangeType,\n CrudEntitiesKeyedConfig,\n CrudEntitiesMutators,\n CrudEntitiesState,\n} from './crud-entities.model';\nimport { Predicate, Update } from '@ngrx/entity';\nimport {\n LoadEntitiesKeyedConfig,\n LoadEntitiesState,\n} from '../load-entities/load-entities.model';\n\nexport function createCrudTraitMutators<Entity>(\n allConfigs: CrudEntitiesKeyedConfig & LoadEntitiesKeyedConfig<Entity>\n): CrudEntitiesMutators<Entity> {\n const { storeChanges } = allConfigs.crud || {};\n const adapter = allConfigs!.loadEntities!.adapter;\n\n function generateChangeEntry(\n entity: Entity,\n changeType: ChangeType,\n customId?: string | number\n ) {\n return {\n id: customId ?? adapter.selectId(entity),\n changeType,\n entityChanges: (storeChanges && entity) || undefined,\n };\n }\n\n function addEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(entities: Entity[], state: S, addFirst = false) {\n const changes = [\n ...state.changes,\n ...entities.map((entity) =>\n generateChangeEntry(entity, ChangeType.CREATED)\n ),\n ];\n if (!addFirst)\n return adapter.addMany(entities, {\n ...state,\n changes,\n });\n\n const newIds = entities.map((e) => adapter.selectId(e));\n const newEntities = { ...state.entities };\n entities.forEach((e) => {\n const id = adapter.selectId(e);\n newEntities[id] = e;\n });\n return {\n ...state,\n ids: [...newIds, ...state.ids],\n entities: newEntities,\n changes,\n };\n }\n\n function upsertEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(entities: Entity[], state: S) {\n const oldChanges = [...state.changes];\n const existingIds = adapter.getSelectors().selectIds(state) as string[];\n\n const [additions, updates] = entities.reduce(\n ([a, u], entity) =>\n existingIds.indexOf(adapter.selectId(entity as Entity) as string) !== -1\n ? [a, [...u, entity]]\n : [[...a, entity], u],\n [new Array<Entity>(), new Array<Entity>()]\n );\n\n return adapter.upsertMany(entities, {\n ...state,\n changes: [\n ...oldChanges,\n\n ...additions.map((entity) =>\n generateChangeEntry(entity, ChangeType.CREATED)\n ),\n ...updates.map((entity) =>\n generateChangeEntry(entity, ChangeType.UPDATED)\n ),\n ],\n });\n }\n\n function removeEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(keys: number[], state: S): S;\n function removeEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(keys: string[], state: S): S;\n function removeEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(predicate: Predicate<Entity>, state: S): S;\n function removeEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(keysOrPredicate: Predicate<Entity> | string[] | number[], state: S): S {\n if (typeof keysOrPredicate === 'function') {\n return adapter.removeMany(keysOrPredicate, {\n ...state,\n changes: [\n ...state.changes,\n ...(state.ids as any[]).map((id) => ({\n id,\n changeType: ChangeType.DELETED,\n })),\n ],\n });\n }\n\n return adapter.removeMany(keysOrPredicate as string[], {\n ...state,\n changes: [\n ...state.changes,\n ...(keysOrPredicate as string[]).map((key: string) => ({\n id: key,\n changeType: ChangeType.DELETED,\n })),\n ],\n });\n }\n function removeAllEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(state: S): S {\n return adapter.removeAll({\n ...state,\n changes: [\n ...state.changes,\n ...(state.ids as any[]).map((id) => ({\n id,\n changeType: ChangeType.DELETED,\n })),\n ],\n });\n }\n function clearEntitiesChanges<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(state: S) {\n return { ...state, changes: [] };\n }\n\n function updateEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(updates: Update<Entity>[], state: S) {\n const oldChanges = [...state.changes];\n updates.forEach((updated) => {\n const id = adapter.selectId(updated.changes as Entity);\n if (id && id !== updated.id) {\n // if the id changes update the id of pold changes\n const index = oldChanges.findIndex((v) => v.id === updated.id);\n const oldChange = oldChanges[index];\n oldChanges[index] = { ...oldChange, id };\n }\n });\n return adapter.updateMany(updates, {\n ...state,\n changes: [\n ...oldChanges,\n ...updates.map(\n (updated) =>\n ({\n id: adapter.selectId(updated.changes as Entity) ?? updated.id,\n changeType: ChangeType.UPDATED,\n entityChanges: (storeChanges && updated.changes) || undefined,\n } as Change<Entity>)\n ),\n ],\n });\n }\n\n return {\n addEntities,\n removeEntities,\n updateEntities,\n removeAllEntities,\n clearEntitiesChanges,\n upsertEntities,\n };\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import { createReducer, on } from '@ngrx/store';
2
+ import { insertIf } from '@ngrx-traits/core';
3
+ export function createCrudInitialState(previousInitialState) {
4
+ return Object.assign(Object.assign({}, previousInitialState), { changes: [] });
5
+ }
6
+ export function createCrudTraitReducer(initialState, allActions, allMutators, allConfigs) {
7
+ var _a, _b, _c;
8
+ const sortRemote = (_a = allConfigs.sort) === null || _a === void 0 ? void 0 : _a.remote;
9
+ const filterRemote = allConfigs.filter && !((_b = allConfigs.filter) === null || _b === void 0 ? void 0 : _b.filterFn);
10
+ const paginationCacheType = (_c = allConfigs.pagination) === null || _c === void 0 ? void 0 : _c.cacheType;
11
+ return createReducer(initialState, on(allActions.addEntities, (state, { entities }) => allMutators.addEntities(entities, state)), on(allActions.updateEntities, (state, { updates }) => allMutators.updateEntities(updates, state)), on(allActions.upsertEntities, (state, { entities }) => allMutators.upsertEntities(entities, state)), on(allActions.removeEntities, (state, { keys }) => allMutators.removeEntities(keys, state)), on(allActions.removeAllEntities, (state, { predicate }) => predicate
12
+ ? allMutators.removeEntities(predicate, state)
13
+ : allMutators.removeAllEntities(state)), on(allActions.clearEntitiesChanges, (state) => allMutators.clearEntitiesChanges(state)), ...insertIf(sortRemote, () => on(allActions.sortEntities, (state) => allMutators.clearEntitiesChanges(state))), ...insertIf(filterRemote, () => on(allActions.filterEntities, (state) => allMutators.clearEntitiesChanges(state))), ...insertIf(!allActions.loadEntitiesPageSuccess, () => on(allActions.loadEntitiesSuccess, (state) => allMutators.clearEntitiesChanges(state))), ...insertIf(!!allActions.loadEntitiesPageSuccess && paginationCacheType === 'partial', () => on(allActions.loadEntitiesPageSuccess, (state) => allMutators.clearEntitiesChanges(state))));
14
+ }
15
+ //# sourceMappingURL=crud-entities.trait.reducer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crud-entities.trait.reducer.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/crud-entities/crud-entities.trait.reducer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAiBhD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,UAAU,sBAAsB,CACpC,oBAAyB;IAEzB,uCACK,oBAAoB,KACvB,OAAO,EAAE,EAAE,IACX;AACJ,CAAC;AACD,MAAM,UAAU,sBAAsB,CAIpC,YAAe,EACf,UAI2B,EAC3B,WAAyC,EACzC,UAI+B;;IAE/B,MAAM,UAAU,GAAG,MAAA,UAAU,CAAC,IAAI,0CAAE,MAAM,CAAC;IAC3C,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,CAAA,MAAA,UAAU,CAAC,MAAM,0CAAE,QAAQ,CAAA,CAAC;IACvE,MAAM,mBAAmB,GAAG,MAAA,UAAU,CAAC,UAAU,0CAAE,SAAS,CAAC;IAE7D,OAAO,aAAa,CAClB,YAAY,EACZ,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CACjD,WAAW,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CACzC,EACD,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CACnD,WAAW,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAC3C,EACD,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CACpD,WAAW,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAC5C,EACD,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAChD,WAAW,CAAC,cAAc,CAAC,IAAa,EAAE,KAAK,CAAC,CACjD,EACD,EAAE,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CACxD,SAAS;QACP,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC;QAC9C,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC,KAAK,CAAC,CACzC,EACD,EAAE,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE,CAC5C,WAAW,CAAC,oBAAoB,CAAC,KAAK,CAAC,CACxC,EACD,GAAG,QAAQ,CAAI,UAAU,EAAE,GAAG,EAAE,CAC9B,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CACpC,WAAW,CAAC,oBAAoB,CAAC,KAAK,CAAC,CACxC,CACF,EACD,GAAG,QAAQ,CAAI,YAAY,EAAE,GAAG,EAAE,CAChC,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CACtC,WAAW,CAAC,oBAAoB,CAAC,KAAK,CAAC,CACxC,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,oBAAoB,CAAC,KAAK,CAAC,CACxC,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,oBAAoB,CAAC,KAAK,CAAC,CACxC,CACJ,CACF,CAAC;AACJ,CAAC","sourcesContent":["import {\n FilterEntitiesActions,\n FilterEntitiesKeyedConfig,\n} from '../filter-entities/filter-entities.model';\nimport { createReducer, on } from '@ngrx/store';\nimport {\n CrudEntitiesActions,\n CrudEntitiesKeyedConfig,\n CrudEntitiesMutators,\n CrudEntitiesState,\n} from './crud-entities.model';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesState,\n} from '../load-entities';\nimport { SortEntitiesActions, SortEntitiesKeyedConfig } from '../sort-entities';\nimport {\n EntitiesPaginationActions,\n EntitiesPaginationKeyedConfig,\n} from '../entities-pagination';\nimport { insertIf } from '@ngrx-traits/core';\n\nexport function createCrudInitialState<Entity>(\n previousInitialState: any\n): LoadEntitiesState<Entity> & CrudEntitiesState<Entity> {\n return {\n ...previousInitialState,\n changes: [],\n };\n}\nexport function createCrudTraitReducer<\n Entity,\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n>(\n initialState: S,\n allActions: CrudEntitiesActions<Entity> &\n LoadEntitiesActions<Entity> &\n SortEntitiesActions<Entity> &\n FilterEntitiesActions<any> &\n EntitiesPaginationActions,\n allMutators: CrudEntitiesMutators<Entity>,\n allConfigs: CrudEntitiesKeyedConfig &\n FilterEntitiesKeyedConfig<Entity, unknown> &\n LoadEntitiesKeyedConfig<Entity> &\n SortEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig\n) {\n const sortRemote = allConfigs.sort?.remote;\n const filterRemote = allConfigs.filter && !allConfigs.filter?.filterFn;\n const paginationCacheType = allConfigs.pagination?.cacheType;\n\n return createReducer(\n initialState,\n on(allActions.addEntities, (state, { entities }) =>\n allMutators.addEntities(entities, state)\n ),\n on(allActions.updateEntities, (state, { updates }) =>\n allMutators.updateEntities(updates, state)\n ),\n on(allActions.upsertEntities, (state, { entities }) =>\n allMutators.upsertEntities(entities, state)\n ),\n on(allActions.removeEntities, (state, { keys }) =>\n allMutators.removeEntities(keys as any[], state)\n ),\n on(allActions.removeAllEntities, (state, { predicate }) =>\n predicate\n ? allMutators.removeEntities(predicate, state)\n : allMutators.removeAllEntities(state)\n ),\n on(allActions.clearEntitiesChanges, (state) =>\n allMutators.clearEntitiesChanges(state)\n ),\n ...insertIf<S>(sortRemote, () =>\n on(allActions.sortEntities, (state) =>\n allMutators.clearEntitiesChanges(state)\n )\n ),\n ...insertIf<S>(filterRemote, () =>\n on(allActions.filterEntities, (state) =>\n allMutators.clearEntitiesChanges(state)\n )\n ),\n ...insertIf<S>(!allActions.loadEntitiesPageSuccess, () =>\n on(allActions.loadEntitiesSuccess, (state) =>\n allMutators.clearEntitiesChanges(state)\n )\n ),\n ...insertIf<S>(\n !!allActions.loadEntitiesPageSuccess && paginationCacheType === 'partial',\n () =>\n on(allActions.loadEntitiesPageSuccess, (state) =>\n allMutators.clearEntitiesChanges(state)\n )\n )\n );\n}\n"]}
@@ -0,0 +1,70 @@
1
+ import { createSelector } from '@ngrx/store';
2
+ import { ChangeType, } from './crud-entities.model';
3
+ export function createCrudTraitSelectors(previousSelectors) {
4
+ function selectChanges(state) {
5
+ return state.changes;
6
+ }
7
+ function selectFilteredChanges(state) {
8
+ const cache = {};
9
+ return state.changes.reduce((acc, value) => {
10
+ const changes = cache[value.id];
11
+ if (!changes) {
12
+ cache[value.id] = [value.changeType];
13
+ acc.push(value);
14
+ return acc;
15
+ }
16
+ if (value.changeType === ChangeType.UPDATED) {
17
+ return acc;
18
+ }
19
+ if (value.changeType === ChangeType.DELETED &&
20
+ changes.includes(ChangeType.CREATED)) {
21
+ delete cache[value.id];
22
+ return acc.filter((v) => v.id !== value.id);
23
+ }
24
+ if (value.changeType === ChangeType.DELETED) {
25
+ delete cache[value.id];
26
+ const newAcc = acc.filter((v) => v.id !== value.id);
27
+ newAcc.push(value);
28
+ return newAcc;
29
+ }
30
+ return acc;
31
+ }, []);
32
+ }
33
+ const { selectEntitiesMap } = previousSelectors;
34
+ const selectEntitiesChangesList = createSelector((state) => selectEntitiesMap(state), selectChanges, (entities, changed, { type }) => {
35
+ if (type)
36
+ return changed
37
+ .filter((c) => c.changeType === type)
38
+ .map((change) => {
39
+ var _a;
40
+ return ({
41
+ changeType: change.changeType,
42
+ entity: (_a = entities[change.id]) !== null && _a !== void 0 ? _a : {
43
+ id: change.id,
44
+ },
45
+ });
46
+ });
47
+ const map = changed.map((change) => {
48
+ var _a;
49
+ return ({
50
+ changeType: change.changeType,
51
+ entity: (_a = entities[change.id]) !== null && _a !== void 0 ? _a : {
52
+ id: change.id,
53
+ },
54
+ });
55
+ });
56
+ return map;
57
+ });
58
+ const selectFilteredEntitiesChangesList = createSelector(selectFilteredChanges, (state) => selectEntitiesMap(state), (changes, entities) => changes.map((c) => {
59
+ var _a;
60
+ return {
61
+ entity: (_a = entities[c.id]) !== null && _a !== void 0 ? _a : { id: c.id },
62
+ changeType: c.changeType,
63
+ };
64
+ }));
65
+ return {
66
+ selectEntitiesChangesList,
67
+ selectFilteredEntitiesChangesList,
68
+ };
69
+ }
70
+ //# sourceMappingURL=crud-entities.trait.selectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crud-entities.trait.selectors.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/crud-entities/crud-entities.trait.selectors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAEL,UAAU,GAIX,MAAM,uBAAuB,CAAC;AAO/B,MAAM,UAAU,wBAAwB,CACtC,iBAAgD;IAEhD,SAAS,aAAa,CAAsC,KAAQ;QAClE,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,SAAS,qBAAqB,CAC5B,KAAQ;QAER,MAAM,KAAK,GAAmC,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACzC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAChC,IAAI,CAAC,OAAO,EAAE;gBACZ,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBACrC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAChB,OAAO,GAAG,CAAC;aACZ;YAED,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU,CAAC,OAAO,EAAE;gBAC3C,OAAO,GAAG,CAAC;aACZ;YAED,IACE,KAAK,CAAC,UAAU,KAAK,UAAU,CAAC,OAAO;gBACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EACpC;gBACA,OAAO,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACvB,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;aAC7C;YAED,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU,CAAC,OAAO,EAAE;gBAC3C,OAAO,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACvB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;gBACpD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnB,OAAO,MAAM,CAAC;aACf;YACD,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAsB,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,CAAC;IAEhD,MAAM,yBAAyB,GAAG,cAAc,CAC9C,CAAC,KAA4D,EAAE,EAAE,CAC/D,iBAAiB,CAAC,KAAK,CAAC,EAC1B,aAAa,EACb,CACE,QAA4B,EAC5B,OAAyB,EACzB,EAAE,IAAI,EAAwB,EAC9B,EAAE;QACF,IAAI,IAAI;YACN,OAAO,OAAO;iBACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC;iBACpC,GAAG,CACF,CAAC,MAAM,EAAE,EAAE;;gBACT,OAAA,CAAC;oBACC,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,MAAM,EAAE,MAAA,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,mCAAI;wBAC7B,EAAE,EAAE,MAAM,CAAC,EAAE;qBACd;iBACuB,CAAA,CAAA;aAAA,CAC7B,CAAC;QAEN,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CACrB,CAAC,MAAM,EAAE,EAAE;;YACT,OAAA,CAAC;gBACC,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,MAAM,EAAE,MAAA,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,mCAAI;oBAC7B,EAAE,EAAE,MAAM,CAAC,EAAE;iBACd;aACuB,CAAA,CAAA;SAAA,CAC7B,CAAC;QACF,OAAO,GAAG,CAAC;IACb,CAAC,CACF,CAAC;IAEF,MAAM,iCAAiC,GAAG,cAAc,CACtD,qBAAqB,EACrB,CAAC,KAA4D,EAAE,EAAE,CAC/D,iBAAiB,CAAC,KAAK,CAAC,EAC1B,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CACpB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;;QAChB,OAAO;YACL,MAAM,EAAE,MAAA,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,mCAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE;YACtC,UAAU,EAAE,CAAC,CAAC,UAAU;SACD,CAAC;IAC5B,CAAC,CAAC,CACL,CAAC;IAEF,OAAO;QACL,yBAAyB;QACzB,iCAAiC;KAClC,CAAC;AACJ,CAAC","sourcesContent":["import { createSelector } from '@ngrx/store';\nimport {\n Change,\n ChangeType,\n CrudEntitiesSelectors,\n CrudEntitiesState,\n EntityChange,\n} from './crud-entities.model';\nimport {\n LoadEntitiesSelectors,\n LoadEntitiesState,\n} from '../load-entities/load-entities.model';\nimport { Dictionary } from '@ngrx/entity';\n\nexport function createCrudTraitSelectors<Entity>(\n previousSelectors: LoadEntitiesSelectors<Entity>\n): CrudEntitiesSelectors<Entity> {\n function selectChanges<S extends CrudEntitiesState<Entity>>(state: S) {\n return state.changes;\n }\n\n function selectFilteredChanges<S extends CrudEntitiesState<Entity>>(\n state: S\n ) {\n const cache: { [id: string]: ChangeType[] } = {};\n return state.changes.reduce((acc, value) => {\n const changes = cache[value.id];\n if (!changes) {\n cache[value.id] = [value.changeType];\n acc.push(value);\n return acc;\n }\n\n if (value.changeType === ChangeType.UPDATED) {\n return acc;\n }\n\n if (\n value.changeType === ChangeType.DELETED &&\n changes.includes(ChangeType.CREATED)\n ) {\n delete cache[value.id];\n return acc.filter((v) => v.id !== value.id);\n }\n\n if (value.changeType === ChangeType.DELETED) {\n delete cache[value.id];\n const newAcc = acc.filter((v) => v.id !== value.id);\n newAcc.push(value);\n return newAcc;\n }\n return acc;\n }, [] as Change<Entity>[]);\n }\n\n const { selectEntitiesMap } = previousSelectors;\n\n const selectEntitiesChangesList = createSelector(\n (state: LoadEntitiesState<Entity> & CrudEntitiesState<Entity>) =>\n selectEntitiesMap(state),\n selectChanges,\n (\n entities: Dictionary<Entity>,\n changed: Change<Entity>[],\n { type }: { type: ChangeType }\n ) => {\n if (type)\n return changed\n .filter((c) => c.changeType === type)\n .map(\n (change) =>\n ({\n changeType: change.changeType,\n entity: entities[change.id] ?? {\n id: change.id,\n },\n } as EntityChange<Entity>)\n );\n\n const map = changed.map(\n (change) =>\n ({\n changeType: change.changeType,\n entity: entities[change.id] ?? {\n id: change.id,\n },\n } as EntityChange<Entity>)\n );\n return map;\n }\n );\n\n const selectFilteredEntitiesChangesList = createSelector(\n selectFilteredChanges,\n (state: LoadEntitiesState<Entity> & CrudEntitiesState<Entity>) =>\n selectEntitiesMap(state),\n (changes, entities) =>\n changes.map((c) => {\n return {\n entity: entities[c.id] ?? { id: c.id },\n changeType: c.changeType,\n } as EntityChange<Entity>;\n })\n );\n\n return {\n selectEntitiesChangesList,\n selectFilteredEntitiesChangesList,\n };\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export * from './crud-entities.model';
2
+ export * from './crud-entities.trait';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/crud-entities/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC","sourcesContent":["export * from './crud-entities.model';\nexport * from './crud-entities.trait';\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=entities-pagination.model.internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entities-pagination.model.internal.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/entities-pagination/entities-pagination.model.internal.ts"],"names":[],"mappings":"","sourcesContent":["import { ActionCreator, TypedAction } from '@ngrx/store/src/models';\nimport { EntitiesPaginationActions } from './entities-pagination.model';\n\n/**\n * @internal\n */\nexport type ƟPaginationActions = EntitiesPaginationActions & {\n setEntitiesRequestPage: ActionCreator<\n string,\n (props: { index: number }) => { index: number } & TypedAction<string>\n >;\n};\n"]}
@@ -0,0 +1,2 @@
1
+ export const entitiesPaginationTraitKey = 'pagination';
2
+ //# sourceMappingURL=entities-pagination.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entities-pagination.model.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/entities-pagination/entities-pagination.model.ts"],"names":[],"mappings":"AAkGA,MAAM,CAAC,MAAM,0BAA0B,GAAG,YAAY,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-empty-interface */\nimport { LoadEntitiesState } from '../load-entities';\n\nimport { ActionCreator, TypedAction } from '@ngrx/store/src/models';\n\nexport type CacheType = 'full' | 'partial' | 'grow';\nexport interface EntitiesPaginationState {\n pagination: {\n currentPage: number;\n requestPage: number;\n pageSize: number;\n total?: number;\n pagesToCache: number;\n cache: {\n type: CacheType;\n start: number;\n end: number;\n };\n };\n}\n\nexport type EntitiesPaginationActions = {\n loadEntitiesPage: ActionCreator<\n string,\n (props: {\n index: number;\n forceLoad?: boolean;\n }) => { index: number; forceLoad?: boolean } & TypedAction<string>\n >;\n loadEntitiesPageSuccess: ActionCreator<string, () => TypedAction<string>>;\n loadEntitiesPageFail: ActionCreator<string, () => TypedAction<string>>;\n loadEntitiesNextPage: ActionCreator<string, () => TypedAction<string>>;\n loadEntitiesPreviousPage: ActionCreator<string, () => TypedAction<string>>;\n loadEntitiesFirstPage: ActionCreator<\n string,\n (forceLoad?: boolean) => { forceLoad?: boolean } & TypedAction<string>\n >;\n loadEntitiesLastPage: ActionCreator<string, () => TypedAction<string>>;\n clearEntitiesPagesCache: ActionCreator<string, () => TypedAction<string>>;\n};\n\nexport type EntitiesPaginationSelectors<T> = {\n isEntitiesPageInCache: (\n state: LoadEntitiesState<T> & EntitiesPaginationState,\n props?: { page?: number }\n ) => boolean;\n selectPageEntitiesList: (\n state: LoadEntitiesState<T> & EntitiesPaginationState,\n props?: { page?: number }\n ) => T[];\n selectEntitiesPage: (\n state: LoadEntitiesState<T> & EntitiesPaginationState,\n props?: { page?: number }\n ) => PageModel<T>;\n selectEntitiesPagedRequest: (\n state: LoadEntitiesState<T> & EntitiesPaginationState\n ) => PagedRequest;\n selectEntitiesPageInfo: (\n state: LoadEntitiesState<T> & EntitiesPaginationState\n ) => PageInfoModel;\n isLoadingEntitiesPage: (\n state: LoadEntitiesState<T> & EntitiesPaginationState\n ) => boolean;\n};\n\nexport type EntitiesPaginationMutators<T> = {\n mergePaginatedEntities<\n S extends LoadEntitiesState<T> & EntitiesPaginationState\n >(\n entities: T[],\n total: number | undefined,\n state: S\n ): S;\n};\n\nexport interface PageModel<T> {\n entities: T[];\n pageIndex: number;\n total: number | undefined;\n pageSize: number;\n}\n\nexport interface PageInfoModel {\n pageIndex: number;\n total: number | undefined;\n pageSize: number;\n pagesCount: number | undefined;\n hasPrevious: boolean;\n hasNext: boolean;\n cacheType: CacheType;\n}\n\nexport interface PagedRequest {\n startIndex: number;\n size: number;\n page: number;\n}\n\nexport const entitiesPaginationTraitKey = 'pagination';\n\nexport interface EntitiesPaginationConfig {\n cacheType?: CacheType;\n pageSize?: number;\n currentPage?: number;\n pagesToCache?: number;\n}\n\nexport interface EntitiesPaginationKeyedConfig {\n pagination?: EntitiesPaginationConfig;\n}\n"]}
@@ -0,0 +1,20 @@
1
+ import { createAction, props } from '@ngrx/store';
2
+ export function createPaginationTraitActions(actionsGroupKey, entitiesName) {
3
+ const actions = {
4
+ loadEntitiesPage: createAction(`${actionsGroupKey} Load ${entitiesName} Page`, ({ index, forceLoad }) => ({
5
+ index,
6
+ forceLoad,
7
+ })),
8
+ loadEntitiesPageSuccess: createAction(`${actionsGroupKey} Load ${entitiesName}
9
+ Page Success`),
10
+ loadEntitiesPageFail: createAction(`${actionsGroupKey} Load ${entitiesName} Page Fail`),
11
+ loadEntitiesPreviousPage: createAction(`${actionsGroupKey} Load Previous ${entitiesName} Page`),
12
+ loadEntitiesNextPage: createAction(`${actionsGroupKey} Load Next ${entitiesName} Page`),
13
+ loadEntitiesFirstPage: createAction(`${actionsGroupKey} Load First ${entitiesName} Page`, (forceLoad) => ({ forceLoad })),
14
+ loadEntitiesLastPage: createAction(`${actionsGroupKey} Load Last ${entitiesName} Page`),
15
+ clearEntitiesPagesCache: createAction(`${actionsGroupKey} Clear ${entitiesName} Cache`),
16
+ setEntitiesRequestPage: createAction(`${actionsGroupKey} Set ${entitiesName} Request Page`, props()),
17
+ };
18
+ return actions;
19
+ }
20
+ //# sourceMappingURL=entities-pagination.trait.actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entities-pagination.trait.actions.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/entities-pagination/entities-pagination.trait.actions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGlD,MAAM,UAAU,4BAA4B,CAC1C,eAAuB,EACvB,YAAoB;IAEpB,MAAM,OAAO,GAAuB;QAClC,gBAAgB,EAAE,YAAY,CAC5B,GAAG,eAAe,SAAS,YAAY,OAAO,EAC9C,CAAC,EAAE,KAAK,EAAE,SAAS,EAA0C,EAAE,EAAE,CAAC,CAAC;YACjE,KAAK;YACL,SAAS;SACV,CAAC,CACH;QACD,uBAAuB,EAAE,YAAY,CACnC,GAAG,eAAe,UAAU,YAAY;uBACvB,CAClB;QACD,oBAAoB,EAAE,YAAY,CAChC,GAAG,eAAe,SAAS,YAAY,YAAY,CACpD;QACD,wBAAwB,EAAE,YAAY,CACpC,GAAG,eAAe,kBAAkB,YAAY,OAAO,CACxD;QACD,oBAAoB,EAAE,YAAY,CAChC,GAAG,eAAe,cAAc,YAAY,OAAO,CACpD;QACD,qBAAqB,EAAE,YAAY,CACjC,GAAG,eAAe,eAAe,YAAY,OAAO,EACpD,CAAC,SAAmB,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CACzC;QACD,oBAAoB,EAAE,YAAY,CAChC,GAAG,eAAe,cAAc,YAAY,OAAO,CACpD;QACD,uBAAuB,EAAE,YAAY,CACnC,GAAG,eAAe,UAAU,YAAY,QAAQ,CACjD;QACD,sBAAsB,EAAE,YAAY,CAClC,GAAG,eAAe,QAAQ,YAAY,eAAe,EACrD,KAAK,EAAqB,CAC3B;KACF,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["import { EntitiesPaginationActions } from './entities-pagination.model';\nimport { createAction, props } from '@ngrx/store';\nimport { ƟPaginationActions } from './entities-pagination.model.internal';\n\nexport function createPaginationTraitActions(\n actionsGroupKey: string,\n entitiesName: string\n): EntitiesPaginationActions {\n const actions: ƟPaginationActions = {\n loadEntitiesPage: createAction(\n `${actionsGroupKey} Load ${entitiesName} Page`,\n ({ index, forceLoad }: { index: number; forceLoad?: boolean }) => ({\n index,\n forceLoad,\n })\n ),\n loadEntitiesPageSuccess: createAction(\n `${actionsGroupKey} Load ${entitiesName}\n Page Success`\n ),\n loadEntitiesPageFail: createAction(\n `${actionsGroupKey} Load ${entitiesName} Page Fail`\n ),\n loadEntitiesPreviousPage: createAction(\n `${actionsGroupKey} Load Previous ${entitiesName} Page`\n ),\n loadEntitiesNextPage: createAction(\n `${actionsGroupKey} Load Next ${entitiesName} Page`\n ),\n loadEntitiesFirstPage: createAction(\n `${actionsGroupKey} Load First ${entitiesName} Page`,\n (forceLoad?: boolean) => ({ forceLoad })\n ),\n loadEntitiesLastPage: createAction(\n `${actionsGroupKey} Load Last ${entitiesName} Page`\n ),\n clearEntitiesPagesCache: createAction(\n `${actionsGroupKey} Clear ${entitiesName} Cache`\n ),\n setEntitiesRequestPage: createAction(\n `${actionsGroupKey} Set ${entitiesName} Request Page`,\n props<{ index: number }>()\n ),\n };\n return actions;\n}\n"]}
@@ -0,0 +1,54 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { TraitEffect } from '@ngrx-traits/core';
3
+ import { concatMap, concatMapTo, filter, first, map } from 'rxjs/operators';
4
+ import { concatLatestFrom, createEffect, ofType } from '@ngrx/effects';
5
+ import * as i0 from "@angular/core";
6
+ export function createPaginationTraitEffects(allActions, allSelectors) {
7
+ class PaginationEffect extends TraitEffect {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.loadPage$ = createEffect(() => {
11
+ return this.actions$.pipe(ofType(allActions.loadEntitiesPage), concatLatestFrom(() => this.store.select(allSelectors.isEntitiesPageInCache)), map(([{ forceLoad }, isInCache]) => !forceLoad && isInCache
12
+ ? allActions.loadEntitiesPageSuccess()
13
+ : allActions.loadEntities()));
14
+ });
15
+ this.preloadNextPage$ = createEffect(() => {
16
+ return this.actions$.pipe(ofType(allActions.loadEntitiesPageSuccess), concatMapTo(this.store.select(allSelectors.selectEntitiesPageInfo).pipe(first())), filter((pageInfo) => !!pageInfo.total &&
17
+ pageInfo.hasNext &&
18
+ pageInfo.cacheType !== 'full'), concatMap((pageInfo) => this.store
19
+ .select(allSelectors.isEntitiesPageInCache, {
20
+ page: pageInfo.pageIndex + 1,
21
+ })
22
+ .pipe(first(), map((isInCache) => (!isInCache && pageInfo) || undefined))), filter((pageInfo) => !!pageInfo), concatMap((pageInfo) => [
23
+ allActions.setEntitiesRequestPage({ index: pageInfo.pageIndex + 1 }),
24
+ allActions.loadEntities(),
25
+ ]));
26
+ });
27
+ this.loadFirstPage$ = createEffect(() => {
28
+ return this.actions$.pipe(ofType(allActions.loadEntitiesFirstPage), map(() => allActions.loadEntitiesPage({ index: 0 })));
29
+ });
30
+ this.loadPreviousPage$ = createEffect(() => {
31
+ return this.actions$.pipe(ofType(allActions.loadEntitiesPreviousPage), concatMapTo(this.store.select(allSelectors.selectEntitiesPageInfo).pipe(first())), map((page) => page.hasPrevious
32
+ ? allActions.loadEntitiesPage({ index: page.pageIndex - 1 })
33
+ : allActions.loadEntitiesPageFail()));
34
+ });
35
+ this.loadNextPage$ = createEffect(() => {
36
+ return this.actions$.pipe(ofType(allActions.loadEntitiesNextPage), concatMapTo(this.store.select(allSelectors.selectEntitiesPageInfo).pipe(first())), map((page) => page.hasNext
37
+ ? allActions.loadEntitiesPage({ index: page.pageIndex + 1 })
38
+ : allActions.loadEntitiesPageFail()));
39
+ });
40
+ this.loadLastPage$ = createEffect(() => {
41
+ return this.actions$.pipe(ofType(allActions.loadEntitiesLastPage), concatMapTo(this.store.select(allSelectors.selectEntitiesPageInfo).pipe(first())), map((page) => page.hasNext && page.pagesCount
42
+ ? allActions.loadEntitiesPage({ index: page.pagesCount - 1 })
43
+ : allActions.loadEntitiesPageFail()));
44
+ });
45
+ }
46
+ }
47
+ PaginationEffect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: PaginationEffect, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
48
+ PaginationEffect.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: PaginationEffect });
49
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: PaginationEffect, decorators: [{
50
+ type: Injectable
51
+ }] });
52
+ return [PaginationEffect];
53
+ }
54
+ //# sourceMappingURL=entities-pagination.trait.effects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entities-pagination.trait.effects.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/entities-pagination/entities-pagination.trait.effects.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from '@angular/core';\nimport { TraitEffect } from '@ngrx-traits/core';\nimport { concatMap, concatMapTo, filter, first, map } from 'rxjs/operators';\nimport { concatLatestFrom, createEffect, ofType } from '@ngrx/effects';\nimport { FilterEntitiesActions } from '../filter-entities/filter-entities.model';\nimport { LoadEntitiesActions, LoadEntitiesSelectors } from '../load-entities';\nimport { CrudEntitiesActions } from '../crud-entities/crud-entities.model';\nimport { EntitiesPaginationSelectors } from './entities-pagination.model';\nimport { Type } from '@ngrx-traits/core';\nimport { ƟPaginationActions } from './entities-pagination.model.internal';\n\nexport function createPaginationTraitEffects<Entity>(\n allActions: ƟPaginationActions &\n FilterEntitiesActions<Entity> &\n LoadEntitiesActions<Entity> &\n CrudEntitiesActions<Entity>,\n allSelectors: LoadEntitiesSelectors<Entity> &\n EntitiesPaginationSelectors<Entity>\n): Type<TraitEffect>[] {\n @Injectable()\n class PaginationEffect extends TraitEffect {\n loadPage$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions.loadEntitiesPage),\n concatLatestFrom(() =>\n this.store.select(allSelectors.isEntitiesPageInCache)\n ),\n map(([{ forceLoad }, isInCache]) =>\n !forceLoad && isInCache\n ? allActions.loadEntitiesPageSuccess()\n : allActions.loadEntities()\n )\n );\n });\n\n preloadNextPage$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions.loadEntitiesPageSuccess),\n concatMapTo(\n this.store.select(allSelectors.selectEntitiesPageInfo).pipe(first())\n ),\n filter(\n (pageInfo) =>\n !!pageInfo.total &&\n pageInfo.hasNext &&\n pageInfo.cacheType !== 'full'\n ),\n concatMap((pageInfo) =>\n this.store\n .select(allSelectors.isEntitiesPageInCache, {\n page: pageInfo.pageIndex + 1,\n })\n .pipe(\n first(),\n map((isInCache) => (!isInCache && pageInfo) || undefined)\n )\n ),\n filter((pageInfo) => !!pageInfo),\n concatMap((pageInfo) => [\n allActions.setEntitiesRequestPage({ index: pageInfo!.pageIndex + 1 }),\n allActions.loadEntities(),\n ])\n );\n });\n\n loadFirstPage$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions.loadEntitiesFirstPage),\n map(() => allActions.loadEntitiesPage({ index: 0 }))\n );\n });\n\n loadPreviousPage$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions.loadEntitiesPreviousPage),\n concatMapTo(\n this.store.select(allSelectors.selectEntitiesPageInfo).pipe(first())\n ),\n map((page) =>\n page.hasPrevious\n ? allActions.loadEntitiesPage({ index: page.pageIndex - 1 })\n : allActions.loadEntitiesPageFail()\n )\n );\n });\n\n loadNextPage$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions.loadEntitiesNextPage),\n concatMapTo(\n this.store.select(allSelectors.selectEntitiesPageInfo).pipe(first())\n ),\n map((page) =>\n page.hasNext\n ? allActions.loadEntitiesPage({ index: page.pageIndex + 1 })\n : allActions.loadEntitiesPageFail()\n )\n );\n });\n\n loadLastPage$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions.loadEntitiesLastPage),\n concatMapTo(\n this.store.select(allSelectors.selectEntitiesPageInfo).pipe(first())\n ),\n map((page) =>\n page.hasNext && page.pagesCount\n ? allActions.loadEntitiesPage({ index: page.pagesCount - 1 })\n : allActions.loadEntitiesPageFail()\n )\n );\n });\n }\n return [PaginationEffect];\n}\n"]}
@@ -0,0 +1,80 @@
1
+ import { entitiesPaginationTraitKey, } from './entities-pagination.model';
2
+ import { createPaginationTraitSelectors } from './entities-pagination.trait.selectors';
3
+ import { createPaginationTraitActions } from './entities-pagination.trait.actions';
4
+ import { loadEntitiesTraitKey, } from '../load-entities/load-entities.model';
5
+ import { createPaginationInitialState, createPaginationTraitReducer, } from './entities-pagination.trait.reducer';
6
+ import { createPaginationTraitEffects } from './entities-pagination.trait.effects';
7
+ import { createTraitFactory } from '@ngrx-traits/core';
8
+ import { createPaginationTraitMutators } from './entities-pagination.trait.mutators';
9
+ /**
10
+ * Generates ngrx code to paginate an list of entities, this has 3 cache `cacheType`
11
+ * - 'full': The full result is cache in memory and split in pages to render, useful
12
+ * for small result but not so small that requires been render in pages
13
+ * - 'partial': Backend returns partial results because is are to big, this has a cache a few pages forward
14
+ * to avoid calling the backend on each page, the cache is clean when a new loadEntities is required
15
+ * - 'grow': Similar to partial that the backend returns partial result, but in this case the cache grows,
16
+ * after each loadEntities the cache is appended to the previous cache, this mode is ideal for infinite scrolls,
17
+ * where you will only call loadNextPage.
18
+ * To make the pagination experience smoother the loadEntities to get new pages is done when the current page is change to
19
+ * the last cached page.
20
+ * @param config
21
+ * @param config.cacheType - Default to 'full', change the cache mode
22
+ * @param config.pageSize - Default to 20, number of entities on each page
23
+ * @param config.currentPage - Default to 0, starting page
24
+ * @param config.pagesToCache - Default to 3, used in partial and grow cache mode, is the number of
25
+ * extra pages kept in cache to avoid calling the backend on each page
26
+ *
27
+ * @example
28
+ * // The following trait config
29
+ *
30
+ * export interface TestState
31
+ * extends EntityAndStatusState<Todo>,SingleSelectionState{}
32
+ *
33
+ * const traits = createEntityFeatureFactory(
34
+ * addLoadEntitiesTrait<Todo>(),
35
+ * addEntitiesPaginationTrait<Todo>()
36
+ * )({
37
+ * actionsGroupKey: '[Todos]',
38
+ * featureSelector: createFeatureSelector<TestState>>(
39
+ * 'todos',
40
+ * ),
41
+ * });
42
+ * // will generate the following actions and selectors, plus the ones generated by other traits
43
+ * traits.actions.loadTodosPage({index})
44
+ * traits.actions.loadTodosPageSuccess()
45
+ * traits.actions.loadTodosPageFail()
46
+ * traits.actions.loadTodosNextPage()
47
+ * traits.actions.loadTodosPreviousPage()
48
+ * traits.actions.loadTodosFirstPage()
49
+ * traits.actions.loadTodosLastPage()
50
+ * traits.actions.clearTodosPagesCache()
51
+ *
52
+ * // page param is optional and defaults to current page
53
+ * traits.selectors.isTodosPageInCache({page})
54
+ * traits.selectors.selectPageTodosList({page})
55
+ * traits.selectors.isLoadingTodosPage({page})
56
+ * // prefer isLoadingTodosPage over isLoadingTodos which will return true even
57
+ * // if the page loading is not the current one
58
+ * traits.selectors.selectTodosPage({page})
59
+ * traits.selectors.selectTodosPagedRequest()// use in effects to get paging parameter
60
+ * traits.selectors.selectTodosPageInfo()
61
+ */
62
+ export function addEntitiesPaginationTrait({ cacheType = 'full', pageSize = 20, currentPage = 0, pagesToCache = 3, } = {}) {
63
+ return createTraitFactory({
64
+ key: entitiesPaginationTraitKey,
65
+ depends: [loadEntitiesTraitKey],
66
+ config: {
67
+ cacheType,
68
+ pageSize,
69
+ currentPage,
70
+ pagesToCache,
71
+ },
72
+ actions: ({ actionsGroupKey, entitiesName }) => createPaginationTraitActions(actionsGroupKey, entitiesName),
73
+ selectors: ({ previousSelectors, allConfigs, }) => createPaginationTraitSelectors(previousSelectors, allConfigs),
74
+ mutators: ({ allSelectors, allConfigs }) => createPaginationTraitMutators(allSelectors, allConfigs),
75
+ initialState: ({ previousInitialState, allConfigs, }) => createPaginationInitialState(previousInitialState, allConfigs),
76
+ reducer: ({ initialState, allActions, allSelectors, allMutators, allConfigs, }) => createPaginationTraitReducer(initialState, allActions, allSelectors, allMutators, allConfigs),
77
+ effects: ({ allActions, allSelectors }) => createPaginationTraitEffects(allActions, allSelectors),
78
+ });
79
+ }
80
+ //# sourceMappingURL=entities-pagination.trait.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entities-pagination.trait.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/entities-pagination/entities-pagination.trait.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,0BAA0B,GAC3B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,8BAA8B,EAAE,MAAM,uCAAuC,CAAC;AACvF,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AAKnF,OAAO,EAKL,oBAAoB,GACrB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,6BAA6B,EAAE,MAAM,sCAAsC,CAAC;AAQrF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,MAAM,UAAU,0BAA0B,CAAS,EACjD,SAAS,GAAG,MAAM,EAClB,QAAQ,GAAG,EAAE,EACb,WAAW,GAAG,CAAC,EACf,YAAY,GAAG,CAAC,MACY,EAAE;IAC9B,OAAO,kBAAkB,CAAC;QACxB,GAAG,EAAE,0BAA0B;QAC/B,OAAO,EAAE,CAAC,oBAAoB,CAAC;QAC/B,MAAM,EAAE;YACN,SAAS;YACT,QAAQ;YACR,WAAW;YACX,YAAY;SACe;QAC7B,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,YAAY,EAA6B,EAAE,EAAE,CACxE,4BAA4B,CAAC,eAAe,EAAE,YAAY,CAAC;QAC7D,SAAS,EAAE,CAAC,EACV,iBAAiB,EACjB,UAAU,GACkB,EAAE,EAAE,CAChC,8BAA8B,CAC5B,iBAAkD,EAClD,UAC4C,CAC7C;QACH,QAAQ,EAAE,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,CACzC,6BAA6B,CAC3B,YAC+B,EAC/B,UACiC,CAClC;QACH,YAAY,EAAE,CAAC,EACb,oBAAoB,EACpB,UAAU,GACqB,EAAE,EAAE,CACnC,4BAA4B,CAC1B,oBAAoB,EACpB,UAA2C,CAC5C;QACH,OAAO,EAAE,CAAC,EACR,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,UAAU,GACX,EAAE,EAAE,CACH,4BAA4B,CAC1B,YAAY,EACZ,UAG6B,EAC7B,YAC+B,EAC/B,WAC8B,EAC9B,UAE+B,CAChC;QACH,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,EAAE,CACxC,4BAA4B,CAC1B,UAG6B,EAC7B,YAC+B,CAChC;KACJ,CAAC,CAAC;AACL,CAAC","sourcesContent":["import {\n EntitiesPaginationConfig,\n EntitiesPaginationKeyedConfig,\n EntitiesPaginationMutators,\n EntitiesPaginationSelectors,\n entitiesPaginationTraitKey,\n} from './entities-pagination.model';\nimport { createPaginationTraitSelectors } from './entities-pagination.trait.selectors';\nimport { createPaginationTraitActions } from './entities-pagination.trait.actions';\nimport {\n FilterEntitiesActions,\n FilterEntitiesKeyedConfig,\n} from '../filter-entities/filter-entities.model';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesMutators,\n LoadEntitiesSelectors,\n loadEntitiesTraitKey,\n} from '../load-entities/load-entities.model';\nimport {\n createPaginationInitialState,\n createPaginationTraitReducer,\n} from './entities-pagination.trait.reducer';\nimport { createPaginationTraitEffects } from './entities-pagination.trait.effects';\nimport { createTraitFactory } from '@ngrx-traits/core';\nimport { CrudEntitiesActions } from '../crud-entities/crud-entities.model';\nimport { createPaginationTraitMutators } from './entities-pagination.trait.mutators';\nimport { ƟPaginationActions } from './entities-pagination.model.internal';\nimport {\n TraitActionsFactoryConfig,\n TraitInitialStateFactoryConfig,\n TraitSelectorsFactoryConfig,\n} from '@ngrx-traits/core';\n\n/**\n * Generates ngrx code to paginate an list of entities, this has 3 cache `cacheType`\n * - 'full': The full result is cache in memory and split in pages to render, useful\n * for small result but not so small that requires been render in pages\n * - 'partial': Backend returns partial results because is are to big, this has a cache a few pages forward\n * to avoid calling the backend on each page, the cache is clean when a new loadEntities is required\n * - 'grow': Similar to partial that the backend returns partial result, but in this case the cache grows,\n * after each loadEntities the cache is appended to the previous cache, this mode is ideal for infinite scrolls,\n * where you will only call loadNextPage.\n * To make the pagination experience smoother the loadEntities to get new pages is done when the current page is change to\n * the last cached page.\n * @param config\n * @param config.cacheType - Default to 'full', change the cache mode\n * @param config.pageSize - Default to 20, number of entities on each page\n * @param config.currentPage - Default to 0, starting page\n * @param config.pagesToCache - Default to 3, used in partial and grow cache mode, is the number of\n * extra pages kept in cache to avoid calling the backend on each page\n *\n * @example\n * // The following trait config\n *\n * export interface TestState\n * extends EntityAndStatusState<Todo>,SingleSelectionState{}\n *\n * const traits = createEntityFeatureFactory(\n * addLoadEntitiesTrait<Todo>(),\n * addEntitiesPaginationTrait<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.loadTodosPage({index})\n * traits.actions.loadTodosPageSuccess()\n * traits.actions.loadTodosPageFail()\n * traits.actions.loadTodosNextPage()\n * traits.actions.loadTodosPreviousPage()\n * traits.actions.loadTodosFirstPage()\n * traits.actions.loadTodosLastPage()\n * traits.actions.clearTodosPagesCache()\n *\n * // page param is optional and defaults to current page\n * traits.selectors.isTodosPageInCache({page})\n * traits.selectors.selectPageTodosList({page})\n * traits.selectors.isLoadingTodosPage({page})\n * // prefer isLoadingTodosPage over isLoadingTodos which will return true even\n * // if the page loading is not the current one\n * traits.selectors.selectTodosPage({page})\n * traits.selectors.selectTodosPagedRequest()// use in effects to get paging parameter\n * traits.selectors.selectTodosPageInfo()\n */\nexport function addEntitiesPaginationTrait<Entity>({\n cacheType = 'full',\n pageSize = 20,\n currentPage = 0,\n pagesToCache = 3,\n}: EntitiesPaginationConfig = {}) {\n return createTraitFactory({\n key: entitiesPaginationTraitKey,\n depends: [loadEntitiesTraitKey],\n config: {\n cacheType,\n pageSize,\n currentPage,\n pagesToCache,\n } as EntitiesPaginationConfig,\n actions: ({ actionsGroupKey, entitiesName }: TraitActionsFactoryConfig) =>\n createPaginationTraitActions(actionsGroupKey, entitiesName),\n selectors: ({\n previousSelectors,\n allConfigs,\n }: TraitSelectorsFactoryConfig) =>\n createPaginationTraitSelectors<Entity>(\n previousSelectors as LoadEntitiesSelectors<Entity>,\n allConfigs as EntitiesPaginationKeyedConfig &\n FilterEntitiesKeyedConfig<Entity, unknown>\n ),\n mutators: ({ allSelectors, allConfigs }) =>\n createPaginationTraitMutators<Entity>(\n allSelectors as EntitiesPaginationSelectors<Entity> &\n LoadEntitiesSelectors<Entity>,\n allConfigs as EntitiesPaginationKeyedConfig &\n LoadEntitiesKeyedConfig<Entity>\n ),\n initialState: ({\n previousInitialState,\n allConfigs,\n }: TraitInitialStateFactoryConfig) =>\n createPaginationInitialState<Entity>(\n previousInitialState,\n allConfigs as EntitiesPaginationKeyedConfig\n ),\n reducer: ({\n initialState,\n allActions,\n allSelectors,\n allMutators,\n allConfigs,\n }) =>\n createPaginationTraitReducer(\n initialState,\n allActions as ƟPaginationActions &\n FilterEntitiesActions<Entity> &\n LoadEntitiesActions<Entity> &\n CrudEntitiesActions<Entity>,\n allSelectors as EntitiesPaginationSelectors<Entity> &\n LoadEntitiesSelectors<Entity>,\n allMutators as EntitiesPaginationMutators<Entity> &\n LoadEntitiesMutators<Entity>,\n allConfigs as FilterEntitiesKeyedConfig<Entity, unknown> &\n LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig\n ),\n effects: ({ allActions, allSelectors }) =>\n createPaginationTraitEffects(\n allActions as ƟPaginationActions &\n FilterEntitiesActions<Entity> &\n LoadEntitiesActions<Entity> &\n CrudEntitiesActions<Entity>,\n allSelectors as EntitiesPaginationSelectors<Entity> &\n LoadEntitiesSelectors<Entity>\n ),\n });\n}\n"]}
@@ -0,0 +1,23 @@
1
+ export function createPaginationTraitMutators(allSelectors, allConfigs) {
2
+ const adapter = allConfigs.loadEntities.adapter;
3
+ function mergePaginatedEntities(entities, total = undefined, state) {
4
+ const cacheType = state.pagination.cache.type;
5
+ switch (cacheType) {
6
+ case 'full':
7
+ return adapter.setAll(entities, Object.assign(Object.assign({}, state), { pagination: Object.assign(Object.assign({}, state.pagination), { total: entities.length, cache: Object.assign(Object.assign({}, state.pagination.cache), { start: 0, end: entities.length }) }) }));
8
+ case 'partial': {
9
+ const isPreloadNextPages = state.pagination.currentPage + 1 === state.pagination.requestPage;
10
+ const start = state.pagination.currentPage * state.pagination.pageSize;
11
+ const newEntities = isPreloadNextPages
12
+ ? [...allSelectors.selectPageEntitiesList(state), ...entities]
13
+ : entities;
14
+ return adapter.setAll(newEntities, Object.assign(Object.assign({}, state), { pagination: Object.assign(Object.assign({}, state.pagination), { total, cache: Object.assign(Object.assign({}, state.pagination.cache), { start, end: start + entities.length }) }) }));
15
+ }
16
+ case 'grow':
17
+ return adapter.addMany(entities, Object.assign(Object.assign({}, state), { pagination: Object.assign(Object.assign({}, state.pagination), { total, cache: Object.assign(Object.assign({}, state.pagination.cache), { end: state.ids.length + entities.length }) }) }));
18
+ }
19
+ return state;
20
+ }
21
+ return { mergePaginatedEntities };
22
+ }
23
+ //# sourceMappingURL=entities-pagination.trait.mutators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entities-pagination.trait.mutators.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/entities-pagination/entities-pagination.trait.mutators.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,6BAA6B,CAC3C,YAAiD,EACjD,UAA2C;IAE3C,MAAM,OAAO,GAAG,UAAU,CAAC,YAAa,CAAC,OAAO,CAAC;IAEjD,SAAS,sBAAsB,CAE7B,QAAkB,EAAE,KAAK,GAAG,SAAS,EAAE,KAAQ;QAC/C,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;QAE9C,QAAQ,SAAS,EAAE;YACjB,KAAK,MAAM;gBACT,OAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,kCACzB,KAAK,KACR,UAAU,kCACL,KAAK,CAAC,UAAU,KACnB,KAAK,EAAE,QAAQ,CAAC,MAAM,EACtB,KAAK,kCACA,KAAK,CAAC,UAAU,CAAC,KAAK,KACzB,KAAK,EAAE,CAAC,EACR,GAAG,EAAE,QAAQ,CAAC,MAAM,UAGxB,CAAC;YACL,KAAK,SAAS,CAAC,CAAC;gBACd,MAAM,kBAAkB,GACtB,KAAK,CAAC,UAAU,CAAC,WAAW,GAAG,CAAC,KAAK,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC;gBAEpE,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC;gBACvE,MAAM,WAAW,GAAG,kBAAkB;oBACpC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE,GAAG,QAAQ,CAAC;oBAC9D,CAAC,CAAC,QAAQ,CAAC;gBACb,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW,kCAC5B,KAAK,KACR,UAAU,kCACL,KAAK,CAAC,UAAU,KACnB,KAAK,EACL,KAAK,kCACA,KAAK,CAAC,UAAU,CAAC,KAAK,KACzB,KAAK,EACL,GAAG,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,UAGhC,CAAC;aACJ;YACD,KAAK,MAAM;gBACT,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,kCAC1B,KAAK,KACR,UAAU,kCACL,KAAK,CAAC,UAAU,KACnB,KAAK,EACL,KAAK,kCACA,KAAK,CAAC,UAAU,CAAC,KAAK,KACzB,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,UAG3C,CAAC;SACN;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,EAAE,sBAAsB,EAAE,CAAC;AACpC,CAAC","sourcesContent":["import {\n EntitiesPaginationMutators,\n EntitiesPaginationSelectors,\n EntitiesPaginationState,\n} from './entities-pagination.model';\nimport { LoadEntitiesKeyedConfig, LoadEntitiesState } from '../load-entities';\n\nexport function createPaginationTraitMutators<Entity>(\n allSelectors: EntitiesPaginationSelectors<Entity>,\n allConfigs: LoadEntitiesKeyedConfig<Entity>\n): EntitiesPaginationMutators<Entity> {\n const adapter = allConfigs.loadEntities!.adapter;\n\n function mergePaginatedEntities<\n S extends LoadEntitiesState<Entity> & EntitiesPaginationState\n >(entities: Entity[], total = undefined, state: S): S {\n const cacheType = state.pagination.cache.type;\n\n switch (cacheType) {\n case 'full':\n return adapter.setAll(entities, {\n ...state,\n pagination: {\n ...state.pagination,\n total: entities.length,\n cache: {\n ...state.pagination.cache,\n start: 0,\n end: entities.length,\n },\n },\n });\n case 'partial': {\n const isPreloadNextPages =\n state.pagination.currentPage + 1 === state.pagination.requestPage;\n\n const start = state.pagination.currentPage * state.pagination.pageSize;\n const newEntities = isPreloadNextPages\n ? [...allSelectors.selectPageEntitiesList(state), ...entities]\n : entities;\n return adapter.setAll(newEntities, {\n ...state,\n pagination: {\n ...state.pagination,\n total,\n cache: {\n ...state.pagination.cache,\n start,\n end: start + entities.length,\n },\n },\n });\n }\n case 'grow':\n return adapter.addMany(entities, {\n ...state,\n pagination: {\n ...state.pagination,\n total,\n cache: {\n ...state.pagination.cache,\n end: state.ids.length + entities.length,\n },\n },\n });\n }\n\n return state;\n }\n return { mergePaginatedEntities };\n}\n"]}
@@ -0,0 +1,33 @@
1
+ import { createReducer, on } from '@ngrx/store';
2
+ import { insertIf } from '@ngrx-traits/core';
3
+ export function createPaginationInitialState(previousInitialState, allConfigs) {
4
+ const { currentPage, pageSize, cacheType, pagesToCache } = allConfigs.pagination;
5
+ return Object.assign(Object.assign({}, previousInitialState), { pagination: {
6
+ pageSize,
7
+ currentPage,
8
+ requestPage: currentPage,
9
+ pagesToCache,
10
+ cache: {
11
+ type: cacheType,
12
+ start: 0,
13
+ end: 0,
14
+ },
15
+ } });
16
+ }
17
+ export function createPaginationTraitReducer(initialState, allActions, allSelectors, allMutators, allConfigs) {
18
+ var _a;
19
+ function addToCacheTotal(state, add) {
20
+ var _a;
21
+ return Object.assign(Object.assign({}, state), { pagination: Object.assign(Object.assign({}, state.pagination), { total: ((_a = state.pagination.total) !== null && _a !== void 0 ? _a : 0) + add }) });
22
+ }
23
+ function clearPagesCache(state) {
24
+ return Object.assign(Object.assign({}, state), { entities: {}, ids: [], pagination: Object.assign(Object.assign({}, state.pagination), { currentPage: 0, total: 0, cache: Object.assign(Object.assign({}, state.pagination.cache), { start: 0, end: 0 }) }) });
25
+ }
26
+ function recalculateTotal(state) {
27
+ const total = allSelectors.selectEntitiesTotal(state);
28
+ return Object.assign(Object.assign({}, state), { status: 'success', pagination: Object.assign(Object.assign({}, state.pagination), { currentPage: 0, total, cache: Object.assign(Object.assign({}, state.pagination.cache), { start: 0, end: total }) }) });
29
+ }
30
+ const filterRemote = !((_a = allConfigs === null || allConfigs === void 0 ? void 0 : allConfigs.filter) === null || _a === void 0 ? void 0 : _a.filterFn);
31
+ return createReducer(initialState, on(allActions.loadEntitiesPage, (state, { index }) => (Object.assign(Object.assign({}, state), { pagination: Object.assign(Object.assign({}, state.pagination), { currentPage: index, requestPage: index }), status: 'loading' }))), on(allActions.setEntitiesRequestPage, (state, { index }) => (Object.assign(Object.assign({}, state), { pagination: Object.assign(Object.assign({}, state.pagination), { requestPage: index }), status: 'loading' }))), on(allActions.loadEntitiesPageSuccess, (state) => (Object.assign(Object.assign({}, state), { status: 'success' }))), on(allActions.loadEntitiesPageFail, (state) => (Object.assign(Object.assign({}, state), { status: 'fail' }))), on(allActions.clearEntitiesPagesCache, (state) => clearPagesCache(state)), on(allActions.loadEntitiesSuccess, (state, { entities, total }) => allMutators.mergePaginatedEntities(entities, total, Object.assign(Object.assign({}, state), { status: 'success' }))), ...insertIf(allActions.addEntities, () => on(allActions.addEntities, (state, { entities }) => addToCacheTotal(state, entities.length))), ...insertIf(allActions.removeEntities, () => on(allActions.removeEntities, (state, { keys }) => addToCacheTotal(state, -keys.length))), ...insertIf(filterRemote && allActions.filterEntities, () => on(allActions.filterEntities, (state) => recalculateTotal(state))), ...insertIf(allActions.removeAllEntities, () => on(allActions.removeAllEntities, (state) => clearPagesCache(state))));
32
+ }
33
+ //# sourceMappingURL=entities-pagination.trait.reducer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entities-pagination.trait.reducer.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/entities-pagination/entities-pagination.trait.reducer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n FilterEntitiesActions,\n FilterEntitiesKeyedConfig,\n} from '../filter-entities/filter-entities.model';\nimport { createReducer, on } from '@ngrx/store';\n\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesMutators,\n LoadEntitiesSelectors,\n LoadEntitiesState,\n} from '../load-entities/load-entities.model';\nimport {\n EntitiesPaginationKeyedConfig,\n EntitiesPaginationMutators,\n EntitiesPaginationState,\n} from './entities-pagination.model';\nimport { CrudEntitiesActions } from '../crud-entities';\nimport { ƟPaginationActions } from './entities-pagination.model.internal';\nimport { insertIf } from '@ngrx-traits/core';\n\nexport function createPaginationInitialState<Entity>(\n previousInitialState: any,\n allConfigs: EntitiesPaginationKeyedConfig\n): LoadEntitiesState<Entity> & EntitiesPaginationState {\n const { currentPage, pageSize, cacheType, pagesToCache } =\n allConfigs.pagination!;\n\n return {\n ...previousInitialState,\n pagination: {\n pageSize,\n currentPage,\n requestPage: currentPage,\n pagesToCache,\n cache: {\n type: cacheType,\n start: 0,\n end: 0,\n },\n },\n };\n}\n\nexport function createPaginationTraitReducer<\n Entity,\n S extends LoadEntitiesState<Entity> & EntitiesPaginationState\n>(\n initialState: S,\n allActions: ƟPaginationActions &\n FilterEntitiesActions<Entity> &\n LoadEntitiesActions<Entity> &\n CrudEntitiesActions<Entity>,\n allSelectors: LoadEntitiesSelectors<Entity>,\n allMutators: EntitiesPaginationMutators<Entity> &\n LoadEntitiesMutators<Entity>,\n allConfigs: FilterEntitiesKeyedConfig<Entity, unknown> &\n LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig\n) {\n function addToCacheTotal<\n S extends LoadEntitiesState<Entity> & EntitiesPaginationState\n >(state: S, add: number) {\n return {\n ...state,\n pagination: {\n ...state.pagination,\n total: (state.pagination.total ?? 0) + add,\n },\n };\n }\n\n function clearPagesCache<\n S extends LoadEntitiesState<Entity> & EntitiesPaginationState\n >(state: S): S {\n return {\n ...state,\n entities: {},\n ids: [],\n pagination: {\n ...state.pagination,\n currentPage: 0,\n total: 0,\n cache: { ...state.pagination.cache, start: 0, end: 0 },\n },\n };\n }\n\n function recalculateTotal<\n S extends LoadEntitiesState<Entity> & EntitiesPaginationState\n >(state: S): S {\n const total = allSelectors.selectEntitiesTotal(state);\n return {\n ...state,\n status: 'success',\n pagination: {\n ...state.pagination,\n currentPage: 0,\n total,\n cache: {\n ...state.pagination.cache,\n start: 0,\n end: total,\n },\n },\n };\n }\n\n const filterRemote = !allConfigs?.filter?.filterFn;\n\n return createReducer(\n initialState,\n on(allActions.loadEntitiesPage, (state, { index }) => ({\n ...state,\n pagination: {\n ...state.pagination,\n currentPage: index,\n requestPage: index,\n },\n status: 'loading',\n })),\n on(allActions.setEntitiesRequestPage, (state, { index }) => ({\n ...state,\n pagination: {\n ...state.pagination,\n requestPage: index,\n },\n status: 'loading',\n })),\n on(allActions.loadEntitiesPageSuccess, (state) => ({\n ...state,\n status: 'success',\n })),\n on(allActions.loadEntitiesPageFail, (state) => ({\n ...state,\n status: 'fail',\n })),\n on(allActions.clearEntitiesPagesCache, (state) => clearPagesCache(state)),\n on(allActions.loadEntitiesSuccess, (state, { entities, total }) =>\n allMutators.mergePaginatedEntities(entities, total, {\n ...state,\n status: 'success',\n })\n ),\n ...insertIf<S>(allActions.addEntities, () =>\n on(allActions.addEntities, (state, { entities }) =>\n addToCacheTotal(state, entities.length)\n )\n ),\n ...insertIf<S>(allActions.removeEntities, () =>\n on(allActions.removeEntities, (state, { keys }) =>\n addToCacheTotal(state, -keys.length)\n )\n ),\n ...insertIf<S>(filterRemote && allActions.filterEntities, () =>\n on(allActions.filterEntities, (state) => recalculateTotal(state))\n ),\n ...insertIf<S>(allActions.removeAllEntities, () =>\n on(allActions.removeAllEntities, (state) => clearPagesCache(state))\n )\n );\n}\n"]}
@@ -0,0 +1,65 @@
1
+ import { createSelector } from '@ngrx/store';
2
+ export function createPaginationTraitSelectors(previousSelectors, allConfigs) {
3
+ var _a;
4
+ const { selectEntitiesList, isEntitiesLoading } = previousSelectors;
5
+ const filterFunction = (_a = allConfigs === null || allConfigs === void 0 ? void 0 : allConfigs.filter) === null || _a === void 0 ? void 0 : _a.filterFn;
6
+ function selectPagination(state) {
7
+ return state.pagination;
8
+ }
9
+ const selectPaginationFiltered = filterFunction
10
+ ? createSelector(selectEntitiesList, selectPagination, (entities, pagination) => {
11
+ return Object.assign(Object.assign({}, pagination), { total: entities.length, cache: Object.assign(Object.assign({}, pagination.cache), { start: 0, end: entities.length }) });
12
+ })
13
+ : selectPagination;
14
+ const selectPageEntitiesList = createSelector(selectEntitiesList, selectPaginationFiltered, (entities, pagination, { page } = { page: pagination.currentPage }) => {
15
+ const startIndex = page * pagination.pageSize - pagination.cache.start;
16
+ let endIndex = startIndex + pagination.pageSize;
17
+ endIndex =
18
+ endIndex < pagination.cache.end ? endIndex : pagination.cache.end;
19
+ return entities.slice(startIndex, endIndex);
20
+ });
21
+ const selectEntitiesPageInfo = createSelector(selectPaginationFiltered, (pagination) => {
22
+ const pagesCount = pagination.total && pagination.total > 0
23
+ ? Math.ceil(pagination.total / pagination.pageSize)
24
+ : undefined;
25
+ return {
26
+ pageIndex: pagination.currentPage,
27
+ total: pagination.total,
28
+ pageSize: pagination.pageSize,
29
+ pagesCount,
30
+ hasPrevious: pagination.currentPage - 1 >= 0,
31
+ hasNext: pagination.total && pagination.total > 0
32
+ ? pagination.currentPage + 1 < pagesCount
33
+ : true,
34
+ cacheType: pagination.cache.type,
35
+ };
36
+ });
37
+ const isEntitiesPageInCache = createSelector(selectPaginationFiltered, (pagination, { page } = { page: pagination.currentPage }) => {
38
+ const startIndex = page * pagination.pageSize;
39
+ let endIndex = startIndex + pagination.pageSize - 1;
40
+ endIndex =
41
+ pagination.total && endIndex > pagination.total
42
+ ? pagination.total - 1
43
+ : endIndex;
44
+ return (startIndex >= pagination.cache.start && endIndex <= pagination.cache.end);
45
+ });
46
+ const selectEntitiesPage = createSelector(selectPageEntitiesList, selectEntitiesPageInfo,
47
+ // props look unsued but they are pass to the selectPageEntities
48
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
49
+ (entities, pageInfo, props = { page: pageInfo.pageIndex }) => (Object.assign({ entities }, pageInfo)));
50
+ const selectEntitiesPagedRequest = createSelector(selectPagination, (pagination) => ({
51
+ startIndex: pagination.pageSize * pagination.requestPage,
52
+ size: pagination.pageSize * pagination.pagesToCache,
53
+ page: pagination.requestPage,
54
+ }));
55
+ const isLoadingEntitiesPage = createSelector(isEntitiesLoading, selectPagination, (isLoading, pagination) => isLoading && pagination.requestPage === pagination.currentPage);
56
+ return {
57
+ selectPageEntitiesList,
58
+ isEntitiesPageInCache,
59
+ selectEntitiesPage,
60
+ selectEntitiesPagedRequest,
61
+ selectEntitiesPageInfo,
62
+ isLoadingEntitiesPage,
63
+ };
64
+ }
65
+ //# sourceMappingURL=entities-pagination.trait.selectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entities-pagination.trait.selectors.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/entities-pagination/entities-pagination.trait.selectors.ts"],"names":[],"mappings":"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","sourcesContent":["import { createSelector } from '@ngrx/store';\nimport {\n EntitiesPaginationSelectors,\n EntitiesPaginationState,\n} from './entities-pagination.model';\nimport {\n LoadEntitiesSelectors,\n LoadEntitiesState,\n} from '../load-entities/load-entities.model';\nimport { FilterEntitiesKeyedConfig } from '../filter-entities/filter-entities.model';\n\nexport function createPaginationTraitSelectors<Entity>(\n previousSelectors: LoadEntitiesSelectors<Entity>,\n allConfigs: FilterEntitiesKeyedConfig<Entity, unknown>\n): EntitiesPaginationSelectors<Entity> {\n const { selectEntitiesList, isEntitiesLoading } = previousSelectors;\n\n const filterFunction = allConfigs?.filter?.filterFn;\n\n function selectPagination(\n state: LoadEntitiesState<Entity> & EntitiesPaginationState\n ) {\n return state.pagination;\n }\n const selectPaginationFiltered: (\n state: LoadEntitiesState<Entity> & EntitiesPaginationState\n ) => EntitiesPaginationState['pagination'] = filterFunction\n ? createSelector(\n selectEntitiesList,\n selectPagination,\n (entities, pagination) => {\n return {\n ...pagination,\n total: entities.length,\n cache: {\n ...pagination.cache,\n start: 0,\n end: entities.length,\n },\n };\n }\n )\n : selectPagination;\n\n const selectPageEntitiesList = createSelector(\n selectEntitiesList,\n selectPaginationFiltered,\n (\n entities: Entity[],\n pagination,\n { page } = { page: pagination.currentPage }\n ) => {\n const startIndex = page * pagination.pageSize - pagination.cache.start;\n let endIndex = startIndex + pagination.pageSize;\n endIndex =\n endIndex < pagination.cache.end ? endIndex : pagination.cache.end;\n return entities.slice(startIndex, endIndex);\n }\n );\n\n const selectEntitiesPageInfo = createSelector(\n selectPaginationFiltered,\n (pagination) => {\n const pagesCount =\n pagination.total && pagination.total > 0\n ? Math.ceil(pagination.total / pagination.pageSize)\n : undefined;\n return {\n pageIndex: pagination.currentPage,\n total: pagination.total,\n pageSize: pagination.pageSize,\n pagesCount,\n hasPrevious: pagination.currentPage - 1 >= 0,\n hasNext:\n pagination.total && pagination.total > 0\n ? pagination.currentPage + 1 < pagesCount!\n : true,\n cacheType: pagination.cache.type,\n };\n }\n );\n\n const isEntitiesPageInCache = createSelector(\n selectPaginationFiltered,\n (pagination, { page } = { page: pagination.currentPage }) => {\n const startIndex = page * pagination.pageSize;\n let endIndex = startIndex + pagination.pageSize - 1;\n endIndex =\n pagination.total && endIndex > pagination.total\n ? pagination.total - 1\n : endIndex;\n return (\n startIndex >= pagination.cache.start && endIndex <= pagination.cache.end\n );\n }\n );\n\n const selectEntitiesPage = createSelector(\n selectPageEntitiesList,\n selectEntitiesPageInfo,\n // props look unsued but they are pass to the selectPageEntities\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n (entities, pageInfo, props = { page: pageInfo.pageIndex }) => ({\n entities,\n ...pageInfo,\n })\n );\n\n const selectEntitiesPagedRequest = createSelector(\n selectPagination,\n (pagination) => ({\n startIndex: pagination.pageSize * pagination.requestPage,\n size: pagination.pageSize * pagination.pagesToCache,\n page: pagination.requestPage,\n })\n );\n\n const isLoadingEntitiesPage = createSelector(\n isEntitiesLoading,\n selectPagination,\n (isLoading, pagination) =>\n isLoading && pagination.requestPage === pagination.currentPage\n );\n\n return {\n selectPageEntitiesList,\n isEntitiesPageInCache,\n selectEntitiesPage,\n selectEntitiesPagedRequest,\n selectEntitiesPageInfo,\n isLoadingEntitiesPage,\n };\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export * from './entities-pagination.model';
2
+ export * from './entities-pagination.trait';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/entities-pagination/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC","sourcesContent":["export * from './entities-pagination.model';\nexport * from './entities-pagination.trait';\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=filter-entities.model.internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-entities.model.internal.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/filter-entities/filter-entities.model.internal.ts"],"names":[],"mappings":"","sourcesContent":["import { ActionCreator, TypedAction } from '@ngrx/store/src/models';\nimport { FilterEntitiesActions } from './filter-entities.model';\n\n/**\n * @internal\n */\nexport type ƟFilterEntitiesActions<F> = FilterEntitiesActions<F> & {\n storeEntitiesFilter: ActionCreator<\n string,\n (props: {\n filters?: F;\n patch?: boolean;\n }) => { filters?: F; patch?: boolean } & TypedAction<string>\n >;\n};\n"]}
@@ -0,0 +1,2 @@
1
+ export const filterEntitiesTraitKey = 'filter';
2
+ //# sourceMappingURL=filter-entities.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-entities.model.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/filter-entities/filter-entities.model.ts"],"names":[],"mappings":"AAuDA,MAAM,CAAC,MAAM,sBAAsB,GAAG,QAAQ,CAAC","sourcesContent":["import { LoadEntitiesState } from '../load-entities/load-entities.model';\n\nimport { ActionCreator, TypedAction } from '@ngrx/store/src/models';\n\nexport interface FilterEntitiesState<F> {\n filters?: F;\n}\n\ntype FilterPatchConditionalType<F, P> = P extends true ? Partial<F> : F;\n\nexport interface FilterActionOverload<F> {\n <P extends boolean>(props?: {\n filters: FilterPatchConditionalType<F, P>;\n forceLoad?: boolean;\n patch: P;\n }): {\n filters: FilterPatchConditionalType<F, P>;\n forceLoad: boolean;\n patch: P;\n } & TypedAction<string>;\n (props?: { filters: F; forceLoad?: boolean }): {\n filters: F;\n forceLoad: boolean;\n patch: boolean;\n } & TypedAction<string>;\n}\n\nexport type FilterEntitiesActions<F> = {\n /**\n * Store the filters param (read using selectFilter) and fires the loadEntities action\n * if the filters param has changed, this call is also debounce by default, to disable this\n * behavior you can use the forceLoad param as true or defaultDebounceTime to 0 in the trait config\n * to disable permanently.\n * If the `patch` param is set to true (default is false), the filters are merged with the previous value in the store,\n * otherwise they are replaced.\n */\n filterEntities: ActionCreator<string, FilterActionOverload<F>>;\n};\nexport type FilterEntitiesSelectors<T, F> = {\n /**\n * Returns the stored filters set by the filter action\n * @param state\n */\n selectEntitiesFilter: (\n state: LoadEntitiesState<T> & FilterEntitiesState<F>\n ) => F | undefined;\n};\n\nexport type FilterEntitiesMutators<T, F> = {\n setEntitiesFilters<S extends LoadEntitiesState<T> & FilterEntitiesState<F>>(\n filter: F | undefined,\n state: S\n ): S;\n};\n\nexport const filterEntitiesTraitKey = 'filter';\n\nexport type FilterEntitiesConfig<T, F> = {\n defaultFilter?: F;\n filterFn?: (filter: F, entity: T) => boolean;\n defaultDebounceTime?: number;\n isRemoteFilter?: (previous: F | undefined, current: F | undefined) => boolean;\n};\n\nexport type FilterEntitiesKeyedConfig<T, F> = {\n filter?: FilterEntitiesConfig<T, F>;\n};\n"]}