@one-paragon/angular-utilities 2.2.6 → 2.2.7

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 (297) hide show
  1. package/action-state/action-state-spinner/action-state-spinner.component.d.ts +12 -0
  2. package/action-state/action-state-ui/action-state-ui.module.d.ts +7 -0
  3. package/{src/action-state/index.ts → action-state/index.d.ts} +4 -8
  4. package/action-state/ngrx-ext/ngrx-ext.module.d.ts +8 -0
  5. package/action-state/ngrx.d.ts +31 -0
  6. package/fesm2022/one-paragon-angular-utilities.mjs +6565 -0
  7. package/fesm2022/one-paragon-angular-utilities.mjs.map +1 -0
  8. package/http-request-state/RequestStateFactory.d.ts +17 -0
  9. package/http-request-state/RequestStateStore.d.ts +101 -0
  10. package/{src/http-request-state/deprecated.ts → http-request-state/deprecated.d.ts} +20 -20
  11. package/http-request-state/directives/HttpStateDirectiveBase.d.ts +14 -0
  12. package/http-request-state/directives/http-error-state-directive.d.ts +10 -0
  13. package/http-request-state/directives/http-inProgress-state-directive.d.ts +10 -0
  14. package/http-request-state/directives/http-notStarted-state-directive.d.ts +10 -0
  15. package/http-request-state/directives/http-success-state-directive.d.ts +17 -0
  16. package/{src/http-request-state/directives/index.ts → http-request-state/directives/index.d.ts} +5 -5
  17. package/http-request-state/directives/request-state-directive.d.ts +34 -0
  18. package/http-request-state/helpers.d.ts +9 -0
  19. package/http-request-state/http-state-module.d.ts +11 -0
  20. package/{src/http-request-state/index.ts → http-request-state/index.d.ts} +7 -7
  21. package/http-request-state/request-state.d.ts +12 -0
  22. package/http-request-state/rxjs/getRequestorBody.d.ts +3 -0
  23. package/http-request-state/rxjs/getRequestorState.d.ts +3 -0
  24. package/{src/http-request-state/rxjs/index.ts → http-request-state/rxjs/index.d.ts} +4 -4
  25. package/http-request-state/rxjs/tapError.d.ts +3 -0
  26. package/http-request-state/rxjs/tapSuccess.d.ts +3 -0
  27. package/http-request-state/types.d.ts +41 -0
  28. package/index.d.ts +5 -0
  29. package/ngrx/actionable-selector.d.ts +32 -0
  30. package/ngrx/index.d.ts +1 -0
  31. package/package.json +27 -15
  32. package/{src/public-api.ts → public-api.d.ts} +16 -35
  33. package/rxjs/defaultShareReplay.d.ts +2 -0
  34. package/{src/rxjs/index.ts → rxjs/index.d.ts} +5 -5
  35. package/rxjs/mapError.d.ts +2 -0
  36. package/rxjs/rxjs-operators.d.ts +13 -0
  37. package/rxjs/subjectifier.d.ts +10 -0
  38. package/rxjs/subscriber.directive.d.ts +14 -0
  39. package/table-builder/classes/DefaultSettings.d.ts +9 -0
  40. package/table-builder/classes/MatTableObservableDataSource.d.ts +9 -0
  41. package/table-builder/classes/TableBuilderConfig.d.ts +31 -0
  42. package/table-builder/classes/TableBuilderDataSource.d.ts +18 -0
  43. package/table-builder/classes/TableState.d.ts +81 -0
  44. package/table-builder/classes/data-store.d.ts +8 -0
  45. package/{src/table-builder/classes/display-col.ts → table-builder/classes/display-col.d.ts} +5 -5
  46. package/table-builder/classes/filter-info.d.ts +39 -0
  47. package/table-builder/classes/table-builder-general-settings.d.ts +122 -0
  48. package/table-builder/classes/table-builder.d.ts +22 -0
  49. package/table-builder/classes/table-store.d.ts +146 -0
  50. package/table-builder/classes/table-store.helpers.d.ts +31 -0
  51. package/table-builder/components/array-column.component.d.ts +15 -0
  52. package/table-builder/components/column-builder/column-builder.component.d.ts +41 -0
  53. package/table-builder/components/column-builder/column-helpers.d.ts +38 -0
  54. package/table-builder/components/column-header-menu/column-header-menu.component.d.ts +50 -0
  55. package/table-builder/components/date-filter/date-filter.component.d.ts +37 -0
  56. package/table-builder/components/date-time-filter/date-time-filter.component.d.ts +37 -0
  57. package/table-builder/components/filter/filter.component.d.ts +48 -0
  58. package/table-builder/components/filter/in-list/in-list-filter.component.d.ts +22 -0
  59. package/table-builder/components/gen-col-displayer/gen-col-displayer.component.d.ts +17 -0
  60. package/table-builder/components/generic-table/generic-table.component.d.ts +85 -0
  61. package/table-builder/components/generic-table/paginator.component.d.ts +26 -0
  62. package/table-builder/components/group-by-list/group-by-list.component.d.ts +11 -0
  63. package/table-builder/components/in-filter/in-filter.component.d.ts +20 -0
  64. package/{src/table-builder/components/index.ts → table-builder/components/index.d.ts} +9 -9
  65. package/table-builder/components/initialization-component/initialization.component.d.ts +15 -0
  66. package/table-builder/components/link-column.component.d.ts +23 -0
  67. package/table-builder/components/number-filter/number-filter.component.d.ts +39 -0
  68. package/table-builder/components/profiles-menu/profiles-menu.component.d.ts +33 -0
  69. package/table-builder/components/reset-menu/reset-menu.component.d.ts +25 -0
  70. package/table-builder/components/scroll-strategy.d.ts +45 -0
  71. package/table-builder/components/sort-menu/sort-menu.component-store.d.ts +24 -0
  72. package/table-builder/components/sort-menu/sort-menu.component.d.ts +19 -0
  73. package/table-builder/components/table-container/table-container.component.d.ts +104 -0
  74. package/table-builder/components/table-container/table-container.helpers/data-state.helpers.d.ts +7 -0
  75. package/table-builder/components/table-container/table-container.helpers/filter-state.helpers.d.ts +19 -0
  76. package/table-builder/components/table-container/table-container.helpers/groupBy.helpers.d.ts +19 -0
  77. package/table-builder/components/table-container/table-container.helpers/meta-data.helpers.d.ts +2 -0
  78. package/table-builder/components/table-container/table-container.helpers/sort-state.helpers.d.ts +12 -0
  79. package/table-builder/components/table-container/tableProps.d.ts +10 -0
  80. package/table-builder/components/table-container/virtual-scroll-container.d.ts +40 -0
  81. package/table-builder/components/table-container-filter/filter-list/filter-list.component.d.ts +15 -0
  82. package/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.d.ts +12 -0
  83. package/table-builder/components/table-container-filter/table-wrapper-filter-store.d.ts +14 -0
  84. package/table-builder/components/table-header-menu/table-header-menu.component.d.ts +15 -0
  85. package/table-builder/directives/custom-cell-directive.d.ts +34 -0
  86. package/{src/table-builder/directives/index.ts → table-builder/directives/index.d.ts} +5 -6
  87. package/table-builder/directives/multi-sort.directive.d.ts +10 -0
  88. package/table-builder/directives/resize-column.directive.d.ts +43 -0
  89. package/table-builder/directives/table-wrapper.directive.d.ts +8 -0
  90. package/table-builder/directives/tb-filter.directive.d.ts +116 -0
  91. package/table-builder/enums/filterTypes.d.ts +36 -0
  92. package/table-builder/functions/boolean-filter-function.d.ts +3 -0
  93. package/table-builder/functions/date-filter-function.d.ts +4 -0
  94. package/table-builder/functions/download-data.d.ts +1 -0
  95. package/table-builder/functions/null-filter-function.d.ts +2 -0
  96. package/table-builder/functions/number-filter-function.d.ts +4 -0
  97. package/table-builder/functions/sort-data-function.d.ts +6 -0
  98. package/table-builder/functions/string-filter-function.d.ts +5 -0
  99. package/{src/table-builder/interfaces/ColumnInfo.ts → table-builder/interfaces/ColumnInfo.d.ts} +6 -7
  100. package/{src/table-builder/interfaces/dictionary.ts → table-builder/interfaces/dictionary.d.ts} +3 -3
  101. package/table-builder/interfaces/report-def.d.ts +229 -0
  102. package/table-builder/ngrx/tableBuilderStateStore.d.ts +69 -0
  103. package/table-builder/pipes/column-total.pipe.d.ts +8 -0
  104. package/table-builder/pipes/format-filter-type.pipe.d.ts +8 -0
  105. package/table-builder/pipes/format-filter-value.pipe.d.ts +11 -0
  106. package/table-builder/pipes/key-display.d.ts +9 -0
  107. package/table-builder/services/export-to-csv.service.d.ts +22 -0
  108. package/table-builder/services/link-creator.service.d.ts +16 -0
  109. package/table-builder/services/table-template-service.d.ts +14 -0
  110. package/table-builder/services/transform-creator.d.ts +9 -0
  111. package/table-builder/table-builder.module.d.ts +14 -0
  112. package/utilities/array-helpers.d.ts +1 -0
  113. package/utilities/directives/auto-focus.directive.d.ts +9 -0
  114. package/utilities/directives/clickEmitterDirective.d.ts +7 -0
  115. package/utilities/directives/clickSubject.d.ts +9 -0
  116. package/utilities/directives/conditional-classes.directive.d.ts +12 -0
  117. package/utilities/directives/dialog-service.d.ts +10 -0
  118. package/utilities/directives/dialog.d.ts +45 -0
  119. package/utilities/directives/mat-toggle-group-directive.d.ts +21 -0
  120. package/utilities/directives/prevent-enter.directive.d.ts +6 -0
  121. package/utilities/directives/stop-propagation.directive.d.ts +7 -0
  122. package/utilities/directives/styler.d.ts +16 -0
  123. package/utilities/directives/trim-whitespace.directive.d.ts +7 -0
  124. package/{src/utilities/index.ts → utilities/index.d.ts} +15 -22
  125. package/utilities/module.d.ts +19 -0
  126. package/utilities/pipes/function.pipe.d.ts +11 -0
  127. package/utilities/pipes/phone.pipe.d.ts +8 -0
  128. package/utilities/pipes/space-case.pipes.d.ts +17 -0
  129. package/karma.conf.js +0 -44
  130. package/ng-package.json +0 -7
  131. package/src/action-state/action-state-spinner/action-state-spinner.component.css +0 -16
  132. package/src/action-state/action-state-spinner/action-state-spinner.component.html +0 -7
  133. package/src/action-state/action-state-spinner/action-state-spinner.component.spec.ts +0 -25
  134. package/src/action-state/action-state-spinner/action-state-spinner.component.ts +0 -25
  135. package/src/action-state/action-state-ui/action-state-ui.module.ts +0 -13
  136. package/src/action-state/ngrx-ext/ngrx-ext.module.ts +0 -14
  137. package/src/action-state/ngrx.ts +0 -69
  138. package/src/http-request-state/RequestStateFactory.ts +0 -56
  139. package/src/http-request-state/RequestStateStore.ts +0 -284
  140. package/src/http-request-state/directives/HttpStateDirectiveBase.ts +0 -29
  141. package/src/http-request-state/directives/http-error-state-directive.ts +0 -21
  142. package/src/http-request-state/directives/http-inProgress-state-directive.ts +0 -19
  143. package/src/http-request-state/directives/http-notStarted-state-directive.ts +0 -19
  144. package/src/http-request-state/directives/http-success-state-directive.ts +0 -29
  145. package/src/http-request-state/directives/request-state-directive.spec.ts +0 -73
  146. package/src/http-request-state/directives/request-state-directive.ts +0 -78
  147. package/src/http-request-state/helpers.ts +0 -30
  148. package/src/http-request-state/http-state-module.ts +0 -23
  149. package/src/http-request-state/models/view-context.ts +0 -18
  150. package/src/http-request-state/observable.spec.ts +0 -43
  151. package/src/http-request-state/request-state.ts +0 -66
  152. package/src/http-request-state/rxjs/getRequestorBody.ts +0 -10
  153. package/src/http-request-state/rxjs/getRequestorState.ts +0 -8
  154. package/src/http-request-state/rxjs/tapError.ts +0 -16
  155. package/src/http-request-state/rxjs/tapSuccess.ts +0 -16
  156. package/src/http-request-state/strategies.spec.ts +0 -42
  157. package/src/http-request-state/types.ts +0 -54
  158. package/src/ngrx/actionable-selector.ts +0 -160
  159. package/src/ngrx/index.ts +0 -1
  160. package/src/rxjs/defaultShareReplay.ts +0 -8
  161. package/src/rxjs/mapError.ts +0 -8
  162. package/src/rxjs/rxjs-operators.ts +0 -130
  163. package/src/rxjs/subjectifier.ts +0 -17
  164. package/src/rxjs/subscriber.directive.ts +0 -57
  165. package/src/specs/clickSubject.spec.ts +0 -95
  166. package/src/specs/dialog.spec.ts +0 -101
  167. package/src/specs/toggleGroupDirective.spec.ts +0 -229
  168. package/src/table-builder/classes/DefaultSettings.ts +0 -11
  169. package/src/table-builder/classes/MatTableObservableDataSource.ts +0 -23
  170. package/src/table-builder/classes/TableBuilderConfig.ts +0 -50
  171. package/src/table-builder/classes/TableBuilderDataSource.ts +0 -64
  172. package/src/table-builder/classes/TableState.ts +0 -125
  173. package/src/table-builder/classes/data-store.ts +0 -10
  174. package/src/table-builder/classes/filter-info.ts +0 -125
  175. package/src/table-builder/classes/table-builder-general-settings.ts +0 -205
  176. package/src/table-builder/classes/table-builder.ts +0 -105
  177. package/src/table-builder/classes/table-store.helpers.ts +0 -104
  178. package/src/table-builder/classes/table-store.ts +0 -440
  179. package/src/table-builder/components/array-column.component.ts +0 -34
  180. package/src/table-builder/components/column-builder/column-builder.component.html +0 -87
  181. package/src/table-builder/components/column-builder/column-builder.component.scss +0 -43
  182. package/src/table-builder/components/column-builder/column-builder.component.spec.ts +0 -49
  183. package/src/table-builder/components/column-builder/column-builder.component.ts +0 -129
  184. package/src/table-builder/components/column-builder/column-helpers.ts +0 -54
  185. package/src/table-builder/components/column-header-menu/column-header-menu.component.html +0 -110
  186. package/src/table-builder/components/column-header-menu/column-header-menu.component.scss +0 -97
  187. package/src/table-builder/components/column-header-menu/column-header-menu.component.ts +0 -94
  188. package/src/table-builder/components/date-filter/date-filter.component.html +0 -25
  189. package/src/table-builder/components/date-filter/date-filter.component.ts +0 -22
  190. package/src/table-builder/components/date-time-filter/date-time-filter.component.html +0 -11
  191. package/src/table-builder/components/date-time-filter/date-time-filter.component.ts +0 -20
  192. package/src/table-builder/components/filter/filter.component.html +0 -109
  193. package/src/table-builder/components/filter/filter.component.scss +0 -60
  194. package/src/table-builder/components/filter/filter.component.spec.ts +0 -86
  195. package/src/table-builder/components/filter/filter.component.ts +0 -64
  196. package/src/table-builder/components/filter/in-list/in-list-filter.component.ts +0 -102
  197. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.html +0 -60
  198. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.scss +0 -57
  199. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.ts +0 -44
  200. package/src/table-builder/components/generic-table/generic-table.component.html +0 -97
  201. package/src/table-builder/components/generic-table/generic-table.component.scss +0 -38
  202. package/src/table-builder/components/generic-table/generic-table.component.ts +0 -403
  203. package/src/table-builder/components/generic-table/paginator.component.ts +0 -112
  204. package/src/table-builder/components/group-by-list/group-by-list.component.css +0 -17
  205. package/src/table-builder/components/group-by-list/group-by-list.component.html +0 -14
  206. package/src/table-builder/components/group-by-list/group-by-list.component.spec.ts +0 -23
  207. package/src/table-builder/components/group-by-list/group-by-list.component.ts +0 -25
  208. package/src/table-builder/components/in-filter/in-filter.component.css +0 -3
  209. package/src/table-builder/components/in-filter/in-filter.component.html +0 -23
  210. package/src/table-builder/components/in-filter/in-filter.component.ts +0 -65
  211. package/src/table-builder/components/initialization-component/initialization.component.html +0 -78
  212. package/src/table-builder/components/initialization-component/initialization.component.ts +0 -27
  213. package/src/table-builder/components/link-column.component.ts +0 -42
  214. package/src/table-builder/components/number-filter/number-filter.component.css +0 -10
  215. package/src/table-builder/components/number-filter/number-filter.component.html +0 -25
  216. package/src/table-builder/components/number-filter/number-filter.component.spec.ts +0 -30
  217. package/src/table-builder/components/number-filter/number-filter.component.ts +0 -25
  218. package/src/table-builder/components/profiles-menu/profiles-menu.component.html +0 -77
  219. package/src/table-builder/components/profiles-menu/profiles-menu.component.scss +0 -126
  220. package/src/table-builder/components/profiles-menu/profiles-menu.component.spec.ts +0 -23
  221. package/src/table-builder/components/profiles-menu/profiles-menu.component.ts +0 -63
  222. package/src/table-builder/components/reset-menu/reset-menu.component.css +0 -3
  223. package/src/table-builder/components/reset-menu/reset-menu.component.html +0 -10
  224. package/src/table-builder/components/reset-menu/reset-menu.component.ts +0 -87
  225. package/src/table-builder/components/scroll-strategy.ts +0 -139
  226. package/src/table-builder/components/sort-menu/sort-menu.component-store.ts +0 -57
  227. package/src/table-builder/components/sort-menu/sort-menu.component.html +0 -115
  228. package/src/table-builder/components/sort-menu/sort-menu.component.scss +0 -119
  229. package/src/table-builder/components/sort-menu/sort-menu.component.ts +0 -88
  230. package/src/table-builder/components/table-container/table-container.component.html +0 -81
  231. package/src/table-builder/components/table-container/table-container.component.ts +0 -403
  232. package/src/table-builder/components/table-container/table-container.helpers/data-state.helpers.ts +0 -113
  233. package/src/table-builder/components/table-container/table-container.helpers/filter-state.helpers.ts +0 -125
  234. package/src/table-builder/components/table-container/table-container.helpers/groupBy.helpers.ts +0 -122
  235. package/src/table-builder/components/table-container/table-container.helpers/meta-data.helpers.ts +0 -16
  236. package/src/table-builder/components/table-container/table-container.helpers/sort-state.helpers.ts +0 -47
  237. package/src/table-builder/components/table-container/table-container.scss +0 -47
  238. package/src/table-builder/components/table-container/tableProps.ts +0 -18
  239. package/src/table-builder/components/table-container/virtual-scroll-container.ts +0 -216
  240. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.html +0 -35
  241. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.ts +0 -44
  242. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.css +0 -40
  243. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.html +0 -11
  244. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.spec.ts +0 -85
  245. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.ts +0 -36
  246. package/src/table-builder/components/table-container-filter/table-wrapper-filter-store.ts +0 -23
  247. package/src/table-builder/components/table-header-menu/table-header-menu.component.css +0 -21
  248. package/src/table-builder/components/table-header-menu/table-header-menu.component.html +0 -50
  249. package/src/table-builder/components/table-header-menu/table-header-menu.component.ts +0 -35
  250. package/src/table-builder/directives/custom-cell-directive.ts +0 -57
  251. package/src/table-builder/directives/multi-sort.directive.spec.ts +0 -124
  252. package/src/table-builder/directives/multi-sort.directive.ts +0 -50
  253. package/src/table-builder/directives/resize-column.directive.ts +0 -107
  254. package/src/table-builder/directives/table-wrapper.directive.ts +0 -13
  255. package/src/table-builder/directives/tb-filter.directive.ts +0 -376
  256. package/src/table-builder/enums/filterTypes.ts +0 -40
  257. package/src/table-builder/functions/boolean-filter-function.ts +0 -12
  258. package/src/table-builder/functions/date-filter-function.ts +0 -78
  259. package/src/table-builder/functions/download-data.ts +0 -11
  260. package/src/table-builder/functions/null-filter-function.ts +0 -9
  261. package/src/table-builder/functions/number-filter-function.ts +0 -41
  262. package/src/table-builder/functions/sort-data-function.ts +0 -80
  263. package/src/table-builder/functions/string-filter-function.ts +0 -53
  264. package/src/table-builder/interfaces/report-def.ts +0 -254
  265. package/src/table-builder/ngrx/tableBuilderStateStore.ts +0 -197
  266. package/src/table-builder/pipes/column-total.pipe.ts +0 -16
  267. package/src/table-builder/pipes/format-filter-type.pipe.ts +0 -12
  268. package/src/table-builder/pipes/format-filter-value.pipe.ts +0 -67
  269. package/src/table-builder/pipes/key-display.ts +0 -13
  270. package/src/table-builder/services/export-to-csv.service.ts +0 -113
  271. package/src/table-builder/services/link-creator.service.ts +0 -98
  272. package/src/table-builder/services/table-template-service.ts +0 -47
  273. package/src/table-builder/services/transform-creator.ts +0 -96
  274. package/src/table-builder/specs/table-custom-filters.spec.ts +0 -262
  275. package/src/table-builder/styles/collapser.styles.scss +0 -16
  276. package/src/table-builder/table-builder.module.ts +0 -38
  277. package/src/test.ts +0 -17
  278. package/src/utilities/array-helpers.ts +0 -13
  279. package/src/utilities/directives/auto-focus.directive.ts +0 -20
  280. package/src/utilities/directives/clickEmitterDirective.ts +0 -15
  281. package/src/utilities/directives/clickSubject.ts +0 -19
  282. package/src/utilities/directives/conditional-classes.directive.ts +0 -36
  283. package/src/utilities/directives/dialog-service.ts +0 -19
  284. package/src/utilities/directives/dialog.ts +0 -144
  285. package/src/utilities/directives/mat-toggle-group-directive.ts +0 -60
  286. package/src/utilities/directives/prevent-enter.directive.ts +0 -12
  287. package/src/utilities/directives/stop-propagation.directive.ts +0 -19
  288. package/src/utilities/directives/styler.ts +0 -44
  289. package/src/utilities/directives/trim-whitespace.directive.ts +0 -20
  290. package/src/utilities/module.ts +0 -53
  291. package/src/utilities/pipes/function.pipe.ts +0 -21
  292. package/src/utilities/pipes/phone.pipe.ts +0 -20
  293. package/src/utilities/pipes/space-case.pipes.spec.ts +0 -47
  294. package/src/utilities/pipes/space-case.pipes.ts +0 -26
  295. package/tsconfig.lib.json +0 -20
  296. package/tsconfig.lib.prod.json +0 -10
  297. package/tsconfig.spec.json +0 -17
@@ -1,403 +0,0 @@
1
- import {
2
- Component,
3
- ChangeDetectionStrategy,
4
- Predicate,
5
- inject,
6
- TemplateRef,
7
- Injector,
8
- contentChildren,
9
- computed,
10
- effect,
11
- untracked,
12
- input,
13
- viewChild,
14
- output,
15
- ElementRef,
16
- linkedSignal,
17
- DestroyRef,
18
- } from '@angular/core';
19
- import { Timestamp } from 'rxjs';
20
- import { CustomCellMeta } from '../../interfaces/report-def';
21
- import { TableBuilder } from '../../classes/table-builder';
22
- import { MatRowDef } from '@angular/material/table';
23
- import { CustomCellDirective, MultiSortDirective, TableCustomFilterDirective, TableFilterDirective } from '../../directives';
24
- import { TableStore } from '../../classes/table-store';
25
- import { ExportToCsvService } from '../../services/export-to-csv.service';
26
- import { GroupedData, InitializationState, NoneGroupHeader } from '../../classes/TableState';
27
- import { WrapperFilterStore } from '../table-container-filter/table-wrapper-filter-store';
28
- import { createFilterFunc, CustomFilter, FilterInfo, isCustomFilter, needsFilterCreation } from '../../classes/filter-info';
29
- import { TableWrapperDirective } from '../../directives/table-wrapper.directive';
30
- import { createLinkCreatorDict } from '../../services/link-creator.service';
31
- import { TableBuilderStateStore } from '../../ngrx/tableBuilderStateStore';
32
- import { FilterInfoDict, FilterInfoState, FilterPredicateState, patchDirectiveFromState, updateFilterInfoState, updateFilterPredicateState, updateFilterState } from './table-container.helpers/filter-state.helpers';
33
- import { initialSortState, SortState, updateSortState } from './table-container.helpers/sort-state.helpers';
34
- import { getAllGroupHeaderNames, GroupByState, updateGroupByState } from './table-container.helpers/groupBy.helpers';
35
- import { sortAndFilterData } from './table-container.helpers/data-state.helpers';
36
- import { TableProps } from './tableProps';
37
- import { PaginatorComponent } from '../generic-table/paginator.component';
38
- import { TableBuilderDataSource } from '../../classes/TableBuilderDataSource';
39
- import { GenericTableComponent } from '../generic-table/generic-table.component';
40
- import { outputFromObservable, toObservable } from '@angular/core/rxjs-interop';
41
- import { DataStore } from '../../classes/data-store';
42
- import { PersistedTableSettings } from '../../classes/table-builder-general-settings';
43
- import { mergeCustomCellMetaData } from './table-container.helpers/meta-data.helpers';
44
- import { SelectionChange } from '@angular/cdk/collections';
45
- import { MatMenu, MatMenuModule } from '@angular/material/menu';
46
- import { NgTemplateOutlet } from '@angular/common';
47
- import { MatButtonModule } from '@angular/material/button';
48
- import { MatIconModule } from '@angular/material/icon';
49
- import { MatTooltipModule } from '@angular/material/tooltip';
50
- import { GenColDisplayerComponent } from '../gen-col-displayer/gen-col-displayer.component';
51
- import { GroupByListComponent } from '../group-by-list/group-by-list.component';
52
- import { ProfilesMenuComponent } from '../profiles-menu/profiles-menu.component';
53
- import { SortMenuComponent } from '../sort-menu/sort-menu.component';
54
- import { FilterChipsComponent } from '../table-container-filter/filter-list/filter-list.component';
55
- import { GenFilterDisplayerComponent } from '../table-container-filter/gen-filter-displayer/gen-filter-displayer.component';
56
- import { TableHeaderMenuComponent } from '../table-header-menu/table-header-menu.component';
57
- import { VirtualScrollContainer } from './virtual-scroll-container';
58
- import { Sort } from '@angular/material/sort';
59
-
60
- @Component({
61
- selector: 'tb-table-container',
62
- templateUrl: './table-container.component.html',
63
- styleUrls: ['./table-container.scss', '../../styles/collapser.styles.scss'],
64
- changeDetection: ChangeDetectionStrategy.OnPush,
65
- providers: [TableStore, ExportToCsvService, WrapperFilterStore, DataStore],
66
- imports: [
67
- NgTemplateOutlet,
68
- PaginatorComponent,
69
-
70
- MultiSortDirective, GroupByListComponent, FilterChipsComponent, GenFilterDisplayerComponent, GenColDisplayerComponent,
71
- SortMenuComponent, GenericTableComponent, ProfilesMenuComponent, TableHeaderMenuComponent,
72
-
73
- MatButtonModule, MatMenuModule, MatIconModule, MatTooltipModule, VirtualScrollContainer
74
- ]
75
- }) export class TableContainerComponent<T = any> {
76
- public state = inject(TableStore);
77
- private dataStore = inject(DataStore);
78
- public wrapper = inject(TableWrapperDirective, { optional: true });
79
- public stateService = inject(TableBuilderStateStore);
80
- public injector = inject(Injector);
81
- public elementRef = inject(ElementRef);
82
- protected dataSource = new TableBuilderDataSource<T>(
83
- this.state,
84
- this.dataStore
85
- );
86
-
87
- $filterDirectives = contentChildren(TableFilterDirective, { descendants: true });
88
- $customFilterDirectives = contentChildren(TableCustomFilterDirective, { descendants: true });
89
- $paginatorComponent = viewChild(PaginatorComponent);
90
- $genericTable = viewChild(GenericTableComponent);
91
- _$customRows = contentChildren(MatRowDef<any>);
92
- $customRows = computed(() => [...this._$customRows()]);
93
- $customCells = contentChildren(CustomCellDirective);
94
- $menu = viewChild.required(MatMenu);
95
- menuInjector = Injector.create({
96
- providers: [{ provide: MatMenu, useFactory: () => this.$menu() }],
97
- parent: this.injector
98
- })
99
-
100
- $tableBuilder = input.required<TableBuilder<T>>({ alias: 'tableBuilder' });
101
- $tableIdInput = input<string | undefined>(undefined, { alias: 'tableId' });
102
- $trackByInput = input<string | undefined>(undefined, { alias: 'trackBy' });
103
- $inputFilters = input<(Predicate<T> | CustomFilter<T> | FilterInfo<any, T>)[]>([], { alias: 'inputFilters' });
104
- $filterInfoInputs = computed(() =>
105
- this.$inputFilters().filter(i => !isFunction(i)) as (FilterInfo | CustomFilter)[]);
106
-
107
- $indexColumnInput = input<boolean>(false, { alias: 'indexColumn' });
108
- $selectionColumnInput = input<boolean>(false, { alias: 'selectionColumn' });
109
- $stickyHeaderInput = input<boolean>(true, { alias: 'stickyHeader' });
110
- $stickyFooterInput = input<boolean>(false, { alias: 'stickyFooter' });
111
- $groupHeaderTemplate = input<TemplateRef<any> | undefined>(undefined, { alias: 'groupHeaderTemplate' });
112
- $groupHeaderHeight = input<number | undefined>(undefined, { alias: 'groupHeaderHeight' });
113
- $pageSize = input<number | undefined>(undefined, { alias: 'pageSize' });
114
-
115
-
116
- selection$ = output<SelectionChange<T>>({ alias: 'selection' });
117
- onStateReset$ = output<null>({ alias: 'onStateReset' });
118
- onSaveState$ = output<null>({ alias: 'onSaveState' });
119
- state$ = outputFromObservable(toObservable(this.state.$savableState), { alias: 'state' });
120
- $data = computed(() => this.$sortedAndFilteredData()?.value || []);
121
- data$ = outputFromObservable(toObservable(this.$data), { alias: 'data' });
122
-
123
- private $displayData = computed(() => this.$tableBuilder() && this.$filteredSortedAndGrouped()?.displayData);
124
- public clearSelections(){
125
- this.$genericTable()?.$selection().clear(true);
126
- }
127
- public firstPage(): void {
128
- this.$paginatorComponent()?.$paginator()?.firstPage();
129
- }
130
- public lastPage(): void {
131
- this.$paginatorComponent()?.$paginator()?.lastPage();
132
- }
133
- public expandAllGroups = () => {
134
- const groupHeaders = getAllGroupHeaderNames(this.$displayData()!);
135
- this.state.expandAllOfGroup({ groupHeadersByKey: groupHeaders });
136
- }
137
- public collapseAllGroups = () => this.state.collapseAll();
138
-
139
-
140
- protected $myColumns = computed(() => {
141
- return this.state.$metaDataArray().map( metaData => ({
142
- metaData,
143
- customCell: this.$customCells().filter(cc => cc.$inited()).find(cc => cc.$customCell() === metaData.key)
144
- }))
145
- });
146
- protected $useVirtual = this.state.$isVirtual;
147
- protected $collapsedFooter = this.state.$footerCollapsed;
148
- protected $collapsedHeader = this.state.$headerCollapsed;
149
- protected $displayDataLength = computed(() => this.$displayData()?.length || 0);
150
-
151
-
152
- $tableBuilderSettings = computed(() => this.$tableBuilder().$settings());
153
- $trackBy = computed(() => this.$trackByInput() || this.$tableBuilderSettings()?.tableSettings?.trackBy);
154
- $tableId = computed(() => this.$tableIdInput() || this.$tableBuilderSettings()?.tableSettings?.tableId);
155
- $includeSelectionColumn = computed(() => this.$selectionColumnInput() || !!this.$tableBuilderSettings()?.tableSettings?.includeSelectionColumn);
156
- $includeIndexColumn = computed(() => this.$indexColumnInput() || !!this.$tableBuilderSettings()?.tableSettings?.includeIndexColumn);
157
- $stickyHeader = computed(() => {
158
- const settings = this.$tableBuilderSettings()?.columnHeaderSettings?.stickyHeaderRow;
159
- if(settings != null){
160
- return settings;
161
- }
162
- return this.$stickyHeaderInput();
163
- });
164
- $stickyFooter = computed(() => this.$stickyFooterInput() || !!this.$tableBuilderSettings()?.columnFooterSettings?.stickyFooterRow)
165
-
166
- $props = computed((): TableProps => {
167
- const indexColumn = this.$includeIndexColumn();
168
- const selectionColumn = this.$includeSelectionColumn();
169
- const stickHeader = this.$stickyHeader();
170
- const stickyFooter = this.$stickyFooter();
171
- const groupHeaderTemplate = this.$groupHeaderTemplate();
172
- const groupHeaderHeight = this.$groupHeaderHeight();
173
- return ({ indexColumn, selectionColumn, isSticky: stickHeader, stickyFooter, groupHeaderTemplate, groupHeaderHeight })
174
- });
175
-
176
- #initTableBuilder = effect(() => {
177
- const tb = this.$tableBuilder();
178
- untracked(() => {
179
- if(tb){
180
- tb?.prep(this.injector);
181
- tb.container.set(this);
182
- }
183
- })
184
- });
185
- #initializeTableSettingsFromTableBuilderAndPersistedStateEffect = effect(() => {
186
- const metaLoaded = this.$isInitializationState(InitializationState.MetaDataLoaded)();
187
- if(!metaLoaded) return;
188
- const persistedState = this.$persistedState();
189
- const tbSettings = this.$tableBuilderSettings()!;
190
- untracked(() => {
191
- this.state.setTableSettings(tbSettings);
192
- if(persistedState){
193
- persistedState.persistedTableSettings = new PersistedTableSettings(persistedState.persistedTableSettings);
194
- this.state.updateStateFromPersistedState(persistedState);
195
- }
196
- this.state.setInitializationState(InitializationState.Ready);
197
- });
198
- });
199
- #setPageSizeFromInputEffect = effect(() => {
200
- const pageSize = this.$pageSize();
201
- const userDefinedPageSize = this.state.$userDefinedPageSize();
202
- if(pageSize && !userDefinedPageSize) {
203
- untracked(() => this.state.setPageSize(pageSize));
204
- }
205
- });
206
- #patchedFilters: string[] = [];
207
- #patchSavableFilterDirectivesFromPersistedStateEffect = effect(() => {
208
- const loaded = this.$isInitializationState(InitializationState.TableSettingsLoaded)();
209
- const filterDirectives = this.$allFilterDirectives();
210
- if(!loaded || !filterDirectives.length) return;
211
- const stateFilters = this.state.$filters();
212
-
213
- untracked(() => {
214
- filterDirectives.filter(f => f.savable && !this.#patchedFilters.includes(f.filterId)).forEach( f => {
215
- this.#patchedFilters.push(f.filterId);
216
- const filter = stateFilters[f.filterId];
217
-
218
- patchDirectiveFromState(f, filter);
219
- this.state.addFilter(f.filter$ as any);
220
- });
221
- })
222
- });
223
- #patchSavableFilterInputsFromPersistedStateEffect = effect(() => {
224
- const loaded = this.$isInitializationState(InitializationState.TableSettingsLoaded)();
225
- const inputFilters = this.$filterInfoInputs();
226
- if(!loaded || !inputFilters.length) return;
227
-
228
- untracked(() => {
229
- const stateFilters = this.state.$filters();
230
- inputFilters.filter(f => f.filterId).forEach( f => {
231
- const patched = this.#patchedFilters.includes(f.filterId);
232
- const stateFilter = stateFilters[f.filterId];
233
-
234
- if(patched || !stateFilter) {
235
- this.state.addFilter(f);
236
- } else if(isCustomFilter(f)){
237
- (stateFilter as CustomFilter).predicate = f.predicate;
238
- this.state.addFilter(stateFilter);
239
- }
240
- this.#patchedFilters.push(f.filterId);
241
- });
242
- })
243
- });
244
- #addPropsToStoreFromInputsEffect = effect(() => {
245
- const props = this.$props();
246
- untracked(() => this.state.setProps(props));
247
- });
248
- #addMetaDataToStoreEffect = effect(() => {
249
- const allMetaDatas = this.$allMetaDatas();
250
- if(!allMetaDatas) return;
251
- untracked(() => {
252
- this.state.setMetaData(allMetaDatas);
253
- this.state.setLinkMaps(createLinkCreatorDict(allMetaDatas));
254
- });
255
- });
256
- #setFilteredDataLengthEffect = effect(() => {
257
- const tableBuilder = this.$tableBuilder();
258
- const data = this.$sortedAndFilteredData();
259
- if(!tableBuilder || !data) return;
260
- untracked(() => {
261
- this.dataStore.patchState({ sortedFilteredDataLength: data.value.length });
262
- })
263
- });
264
-
265
- #setDataSourceDataEffect = effect(() => {
266
- const tableBuilder = this.$tableBuilder();
267
- const flat = this.$filteredSortedAndGrouped();
268
- if(!tableBuilder || !flat) return;
269
- untracked(() => {
270
- const data = flat.displayData;
271
- this.dataSource.setData(data);
272
- this.dataStore.patchState({ sortedFilteredGroupedDataLength: data.length });
273
- })
274
- });
275
-
276
- #destroyRef = inject(DestroyRef).onDestroy(() => {
277
- const tableId = this.$tableId();
278
- if(tableId) {
279
- this.stateService.saveTableStateToLocal({ tableId, tableState: this.state.$savableState() });
280
- }
281
- });
282
-
283
- private $persistedState = computed(() => {
284
- const tableId = this.$tableId();
285
- if(tableId) {
286
- return this.stateService.$selectLocalTableStateForView(tableId)();
287
- }
288
- return undefined
289
- });
290
- private $allFilterDirectives = computed( () => {
291
- if(this.wrapper) {
292
- return [...this.$filterDirectives(), ...this.$customFilterDirectives(), ...this.wrapper.$registrations()];
293
- }
294
- return [...this.$filterDirectives(), ...this.$customFilterDirectives()];
295
- });
296
- private $tableBuilderMetaData = computed(() => this.$tableBuilder()?.$metaData());
297
- private $allMetaDatas = computed(() => {
298
- const tableBuilderMetaData = this.$tableBuilderMetaData();
299
- if(!tableBuilderMetaData) return;
300
- const customCellMetaDatas = this.$customCells().filter(cc => cc.$inited()).map(cc => cc.$metaData()).filter(d => !!d) as CustomCellMeta[];
301
- const mappedCustomCellMetaDatas = customCellMetaDatas.map( md => mergeCustomCellMetaData(md!, tableBuilderMetaData.find( item => item.key === md.key ) ));
302
-
303
- return [...tableBuilderMetaData, ...mappedCustomCellMetaDatas];
304
- });
305
-
306
- private $preds = computed(() => {
307
- const predicateInputFilters = this.$inputFilters().filter(isFunction);
308
- const notSavableFilterDirectives = this.$allFilterDirectives()
309
- .filter(d => !d.savable)
310
- .map(d => d.$filter())
311
- .filter(d => !!d && needsFilterCreation(d))
312
- .map(d => createFilterFunc(d!));
313
- return [...predicateInputFilters, ...notSavableFilterDirectives]
314
- })
315
- private $predicateFiltersState = linkedSignal<Predicate<any>[], { value: FilterPredicateState<T>, timestamp: number } >({
316
- source: this.$preds,
317
- computation: (curr, previous) => {
318
- if(!previous?.value) return ({ value: updateFilterPredicateState({ allFilters: [] as Predicate<T>[] }, curr), timestamp: new Date().getTime() })
319
- return ({ value: updateFilterPredicateState(previous.value.value, curr), timestamp: new Date().getTime() })
320
- }
321
- });
322
- private $savableFiltersState = linkedSignal<FilterInfoDict, { value: FilterInfoState<T>, timestamp: number } >({
323
- source: this.state.$filters,
324
- computation: (curr, previous) => {
325
- if(!previous?.value) return ({ value: updateFilterInfoState({ allFilters: {} }, curr), timestamp: new Date().getTime() })
326
- return ({ value: updateFilterInfoState(previous.value.value, curr), timestamp: new Date().getTime() })
327
- }
328
- });
329
- private $allFilterStatesTimeStamped = computed(() => {
330
- if(!this.$isInitializationState(InitializationState.Ready)()) return undefined;
331
- return ({ value: updateFilterState(this.$savableFiltersState(), this.$predicateFiltersState()), timestamp: new Date().getTime() })
332
- });
333
- private $sortStateTimeStamped = linkedSignal<Sort[] | false, { value: SortState, timestamp: number } | undefined>({
334
- source: computed(() => this.$isInitializationState(InitializationState.Ready)() && this.state.$getSorts()),
335
- computation: (curr, prev) => {
336
- if(!curr) return undefined;
337
- if(!prev?.value) return ({ value: updateSortState(initialSortState, curr), timestamp: new Date().getTime() });
338
- return ({ value: updateSortState(prev.value.value, curr), timestamp: new Date().getTime() });
339
- }
340
- });
341
- private $allData = computed(() => (this.$tableBuilder()?.$initialized() && this.$tableBuilder()?.$data()) || [])
342
- private $allDataTimeStamped = computed(() => {
343
- const data = this.$allData();
344
- if(!data) return undefined;
345
- return ({
346
- value: data,
347
- timestamp: new Date().getTime()
348
- })
349
- });
350
- private $allTimeStamped = computed(() => {
351
- const data = this.$allDataTimeStamped();
352
- const sort = this.$sortStateTimeStamped();
353
- const filter = this.$allFilterStatesTimeStamped();
354
- if(!data?.value || !sort?.value || !filter?.value) return undefined;
355
- return ({
356
- data,
357
- sort,
358
- filter
359
- });
360
- });
361
- private $sortedAndFilteredData = linkedSignal<{data: Timestamp<T[]>, filter: Timestamp<FilterPredicateState<T>>, sort: Timestamp<SortState>} | undefined, Timestamp<T[]> | undefined>({
362
- source: this.$allTimeStamped,
363
- computation: (values, prev) => {
364
- const init = this.$isInitializationState(InitializationState.Ready);
365
- if(!values || !init) return undefined;
366
- const { data, filter, sort } = values;
367
- const val = prev?.value?.value || data.value;
368
- const filteredData = sortAndFilterData(data, filter, sort, !prev?.value, val);
369
- return ({ value: filteredData, timestamp: new Date().getTime() });
370
- }
371
- });
372
- $timestampedGroups = computed(() => ({ value: this.state.$groupByKeys(), timestamp: new Date().getTime() }));
373
- $timestampedExpanded = computed(() => ({ value: this.state.$expandGroups(), timestamp: new Date().getTime() }));
374
- private $dataAndGroupsTimestamped = computed(() => {
375
- const data = this.$sortedAndFilteredData() as Timestamp<(T & NoneGroupHeader)[]>;
376
- const groups = this.$timestampedGroups();
377
- const expanded = this.$timestampedExpanded();
378
- if(!data) return undefined;
379
- return ({
380
- data,
381
- groups,
382
- expanded
383
- })});
384
-
385
- protected $filteredSortedAndGrouped = linkedSignal<{ data: Timestamp<(T & NoneGroupHeader)[]>, groups: Timestamp<string[]>, expanded: Timestamp<GroupedData[]>} | undefined, GroupByState | undefined>({
386
- source: this.$dataAndGroupsTimestamped,
387
- computation: (curr, prev) => {
388
- if(!curr) return undefined;
389
- const val = prev?.value?.groupedData || [];
390
- return updateGroupByState(val, curr, !prev?.value);
391
- }
392
- });
393
-
394
- private $isInitializationState = (state: InitializationState) => computed(() =>
395
- this.state.selectSignal(s => s.initializationState >= state)()) ;
396
-
397
- static headerId = 'tb-header-wrapper';
398
- headerId = TableContainerComponent.headerId;
399
- }
400
-
401
- function isFunction<T>(a: any):a is Predicate<T> {
402
- return typeof a === 'function';
403
- }
@@ -1,113 +0,0 @@
1
- import { Observable, Timestamp, combineLatest, map, scan, tap, timestamp } from "rxjs";
2
- import { SortState } from "./sort-state.helpers";
3
- import { FilterPredicateState } from "./filter-state.helpers";
4
- import { filterData, getFactory, sortData, tbNoShowSymbol } from "../../../functions/sort-data-function";
5
- import { defaultShareReplay } from "../../../../rxjs/defaultShareReplay";
6
- import { FieldType, MetaData } from "../../../interfaces/report-def";
7
- import { set } from "lodash";
8
-
9
- export const _sortAndFilterData = <T>(data: Observable<T[]>, sortState: Observable<SortState>, filterState: Observable<FilterPredicateState<T>>) => combineLatest([
10
- data.pipe(timestamp()),
11
- sortState.pipe(timestamp()),
12
- filterState.pipe(timestamp())
13
- ]).pipe(
14
- scan((mappedData, [data, sort, f], index) => {
15
- return mapDataSortsAndFilters( data, f, sort, index === 0, mappedData);
16
- }, [] as T[])
17
- ).pipe(
18
- map((resultData) => resultData.filter(item => !item[tbNoShowSymbol])),
19
- defaultShareReplay()
20
- );
21
-
22
- const mapDataSortsAndFilters = <T>(allData: Timestamp<T[]>, filters: Timestamp<FilterPredicateState<T>>, sort: Timestamp<SortState>, firstRun: boolean, filteredAndSortedData: T[]) => {
23
- const fresh = firstRun || (allData.timestamp > sort.timestamp && allData.timestamp > filters.timestamp);
24
- const sortChanged = !fresh && sort.timestamp > filters.timestamp;
25
- const filterRemoved = !fresh && !sortChanged && !filters.value.onlyAddedFilters;
26
- const runAllOnAllData = fresh || filterRemoved;
27
- const resetFilters = !fresh && filterRemoved;
28
-
29
- if(runAllOnAllData){
30
- const filteredData = filterData(sortData(allData.value, sort.value.allSorts ), filters.value.allFilters, resetFilters);
31
- return filteredData;
32
- }
33
- if(sortChanged){
34
- return (sortData(filteredAndSortedData, sort.value.sortsToRun));
35
- }
36
- return (filterData(filteredAndSortedData, filters.value.onlyAddedFilters || filters.value.allFilters, resetFilters));
37
- }
38
-
39
- export const sortAndFilterData = <T>(data: Timestamp<T[]>, filters: Timestamp<FilterPredicateState<T>>, sort: Timestamp<SortState>, firstRun: boolean, resultData: T[]) => {
40
- const markedAndSortedData = mapDataSortsAndFilters( data, filters, sort, firstRun, resultData);
41
- const filteredData = markedAndSortedData.filter(item => !item[tbNoShowSymbol]);
42
- return filteredData;
43
- }
44
- export const createDataCleaners = <T>(metadatas: MetaData<T>[], mutate = false) => {
45
- const transforms = createCleaners(metadatas);
46
- return (data: T) => {
47
- if(!mutate){
48
- data = { ...data }
49
- }
50
- for(const transform of transforms){
51
- transform(data);
52
- }
53
- return data;
54
- }
55
- }
56
-
57
- const createCleaners = <T>(metadatas: MetaData<T> []) => {
58
- return metadatas.reduce((transforms, metaData) => {
59
- const getter = getFactory(metaData.key);
60
- const setter = metaData.key.includes('.') ? (t, val) => set(t, metaData.key, val) : (t, val) => t[metaData.key as unknown as keyof T] = val
61
- switch ( metaData.fieldType ) {
62
- case FieldType.Currency:
63
- case FieldType.Number: {
64
- const transform = (t:T) => {
65
- const val = getter(t);
66
- const num = Number( val );
67
- setter(t, isNaN(num) || val == null ? null : num)
68
- };
69
- transforms.push(transform);
70
- break;
71
- }
72
- case FieldType.Date: {
73
- const transform = (t:T) => {
74
- const val = getter(t);
75
- const date = Date.parse(val);
76
- let mappedDate: Date;
77
- if(isNaN(date)){
78
- mappedDate = null as any;
79
- } else {
80
- mappedDate = new Date(date);
81
- mappedDate.setHours(0, 0, 0, 0);
82
- }
83
- setter(t, mappedDate);
84
- };
85
- transforms.push(transform);
86
- break;
87
- }
88
-
89
- case FieldType.DateTime: {
90
- const transform = (t:T) => {
91
- const val = getter(t);
92
- const date = Date.parse(val);
93
- let mappedDate: Date;
94
- if(isNaN(date)){
95
- mappedDate = null as any;
96
- } else {
97
- mappedDate = new Date(date);
98
- if(!metaData.additional?.dateTimeOptions?.includeMilliseconds){
99
- if(metaData.additional?.dateTimeOptions?.includeSeconds){
100
- mappedDate.setMilliseconds(0);
101
- } else {
102
- mappedDate.setSeconds(0, 0);
103
- }
104
- }
105
- }
106
- setter(t, mappedDate);
107
- };
108
- transforms.push(transform);
109
- }
110
- }
111
- return transforms;
112
- }, [] as ((t:T) => void)[])
113
- }
@@ -1,125 +0,0 @@
1
- import { Timestamp } from "rxjs";
2
- import { CustomFilter, FilterInfo, createFilterFunc, isCustomFilter, isFilterInfo, needsFilterCreation } from "../../../classes/filter-info";
3
- import { Dictionary } from "../../../interfaces/dictionary";
4
- import { Predicate } from "@angular/core";
5
- import { difference, intersection } from "lodash";
6
- import { TableCustomFilterDirective, TableFilterDirective } from "../../../directives";
7
-
8
- //The idea of this is that if filters were only added, and none were removed or changed, then we only need to tag more rows to not be shown. We don't need to remove any 'dont show' tags.
9
- // So if filters were only added this method will return the added filters, if filters were removed or changed this method will return undefined.
10
- export const updateFilterInfoState = <T>(previousState: FilterInfoState<T>, filterInfos: FilterInfoDict) => {
11
- filterInfos = filterNonActiveOrNotReadyFilters(filterInfos);
12
- const currentState: FilterInfoState<T> = {
13
- allFilters: filterInfos,
14
- onlyAddedFilters: filterInfoOnlyAdded(previousState.allFilters, filterInfos)
15
- }
16
- return currentState;
17
- }
18
-
19
- export const mapFilterInfoStateToPredicateState = <T>(s: FilterInfoState<T>): FilterPredicateState<T> => {
20
- const mappedAddOnly: {[key in keyof T]: Predicate<T>} =
21
- s.onlyAddedFilters
22
- ?
23
- Object.entries(s.onlyAddedFilters).filter(([, v]) => needsFilterCreation(v)).reduce((obj, [key, value]) => {
24
- obj[key] = createFilterFunc(value);
25
- return obj;
26
- }, {} as {[key in keyof T]: Predicate<T>})
27
- : {} as {[key in keyof T]: Predicate<T>};
28
- const mappedAll = Object.entries(s.allFilters).filter(([, v]) => needsFilterCreation(v))
29
- .filter(([, v]) => !isCustomFilter(v) || !!v.predicate)
30
- .map(([key, value]) => {
31
- return mappedAddOnly[key] || createFilterFunc(value);
32
- });
33
- return ({
34
- allFilters: mappedAll,
35
- onlyAddedFilters: s.onlyAddedFilters ? Object.values(mappedAddOnly) : undefined
36
- })
37
- }
38
-
39
- export const updateFilterPredicateState = <T>(previousState: FilterPredicateState<T>, filters: Predicate<any>[]) => {
40
- const currentState: FilterPredicateState<T> = {
41
- allFilters: filters,
42
- onlyAddedFilters: predicatesOnlyAdded(previousState.allFilters, filters)
43
- }
44
- return currentState;
45
- }
46
-
47
- export const updateFilterState = <T>(filterInfos: Timestamp<FilterInfoState<T>>, predicates: Timestamp<FilterPredicateState<T>>): FilterPredicateState<T> => {
48
- const infos = mapFilterInfoStateToPredicateState(filterInfos.value);
49
- const filtersState: FilterPredicateState<T> = {
50
- allFilters: [...infos.allFilters, ...predicates.value.allFilters]
51
- }
52
- if(filterInfos.timestamp > predicates.timestamp && !!filterInfos.value.onlyAddedFilters){
53
- filtersState.onlyAddedFilters = infos.onlyAddedFilters;
54
- } else {
55
- filtersState.onlyAddedFilters = predicates.value.onlyAddedFilters
56
- }
57
- return filtersState
58
- }
59
-
60
-
61
- const filterNonActiveOrNotReadyFilters = (filtersDict : FilterInfoDict) => Object.entries(filtersDict).reduce((obj, [key, value]) => {
62
- if(value.active !== false && (!isCustomFilter(value) || !!value.predicate)){
63
- obj[key] = value
64
- }
65
- return obj;
66
- }, {} as Dictionary<FilterInfo | CustomFilter>);
67
-
68
-
69
- function filterInfoOnlyAdded(previousFilterInfos: FilterInfoDict, currentFilterInfos: FilterInfoDict): FilterInfoDict | undefined{
70
- const previousKeys = Object.keys(previousFilterInfos);
71
- const currentKeys = Object.keys(currentFilterInfos);
72
- const keysInBoth = intersection(previousKeys, currentKeys);
73
- const someRemoved = previousKeys.length > keysInBoth.length;
74
- if(someRemoved || !previousKeys.length){
75
- return undefined;
76
- }
77
- if(filtersInfosUpdated(previousFilterInfos, currentFilterInfos)){
78
- return undefined;
79
- }
80
- const addedFilters = difference(currentKeys, keysInBoth).reduce((dict, key) => {
81
- dict[key] = currentFilterInfos[key];
82
- return dict;
83
- }, {} as FilterInfoDict);
84
- return addedFilters;
85
- }
86
-
87
- function predicatesOnlyAdded(previousPredicates: Predicate<any>[], currentPredicates: Predicate<any>[]){
88
- if(!previousPredicates.length){
89
- return undefined;
90
- }
91
- const predicateFiltersRemoved = difference(previousPredicates, currentPredicates).length;
92
- if(predicateFiltersRemoved){
93
- return undefined;
94
- }
95
- return difference(currentPredicates, previousPredicates);
96
- }
97
-
98
- function filtersInfosUpdated(previousFilterInfos: FilterInfoDict<any>, currentFilterInfos: FilterInfoDict<any>){
99
- return !Object.entries(previousFilterInfos).every(([key, val]) => {
100
- return currentFilterInfos[key].filterType === val.filterType && currentFilterInfos[key].filterValue === val.filterValue
101
- })
102
- }
103
-
104
- export function patchDirectiveFromState(directive: (TableCustomFilterDirective | TableFilterDirective), stateFilter: FilterInfo | CustomFilter){
105
- if(isFilterInfo(stateFilter)) {
106
- const filterDirective: TableFilterDirective = directive as TableFilterDirective;
107
- filterDirective.setFilterValue(stateFilter.filterValue);
108
- filterDirective.update();
109
- }
110
- if(isCustomFilter(stateFilter)) {
111
- directive.active = stateFilter.active ?? false;
112
- }
113
- }
114
-
115
- export interface FilterInfoState<T> {
116
- allFilters: FilterInfoDict<T>,
117
- onlyAddedFilters?: FilterInfoDict<T> | undefined,
118
- }
119
-
120
- export interface FilterPredicateState<T> {
121
- allFilters: Predicate<T>[],
122
- onlyAddedFilters?: Predicate<T>[] | undefined,
123
- }
124
-
125
- export type FilterInfoDict<T = any> = Dictionary<FilterInfo<any, T> | CustomFilter<any>>;