@one-paragon/angular-utilities 1.2.16 → 1.2.18

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 (407) hide show
  1. package/karma.conf.js +44 -0
  2. package/ng-package.json +7 -0
  3. package/package.json +16 -30
  4. package/src/action-state/action-state-spinner/action-state-spinner.component.css +16 -0
  5. package/src/action-state/action-state-spinner/action-state-spinner.component.html +6 -0
  6. package/src/action-state/action-state-spinner/action-state-spinner.component.spec.ts +25 -0
  7. package/src/action-state/action-state-spinner/action-state-spinner.component.ts +26 -0
  8. package/src/action-state/action-state-ui/action-state-ui.module.ts +13 -0
  9. package/{action-state/index.d.ts → src/action-state/index.ts} +8 -4
  10. package/src/action-state/ngrx-ext/ngrx-ext.module.ts +15 -0
  11. package/src/action-state/ngrx.ts +69 -0
  12. package/src/http-request-state/HttpRequestStateFactory.ts +66 -0
  13. package/src/http-request-state/HttpRequestStateStore.ts +191 -0
  14. package/src/http-request-state/directives/HttpStateDirectiveBase.ts +29 -0
  15. package/src/http-request-state/directives/http-error-state-directive.ts +21 -0
  16. package/src/http-request-state/directives/http-inProgress-state-directive.ts +19 -0
  17. package/src/http-request-state/directives/http-notStarted-state-directive.ts +19 -0
  18. package/src/http-request-state/directives/http-success-state-directive.ts +29 -0
  19. package/{http-request-state/directives/index.d.ts → src/http-request-state/directives/index.ts} +5 -5
  20. package/src/http-request-state/directives/request-state-directive.spec.ts +72 -0
  21. package/src/http-request-state/directives/request-state-directive.ts +78 -0
  22. package/src/http-request-state/helpers.ts +30 -0
  23. package/src/http-request-state/http-request-state.ts +69 -0
  24. package/src/http-request-state/http-state-module.ts +23 -0
  25. package/{http-request-state/index.d.ts → src/http-request-state/index.ts} +6 -6
  26. package/src/http-request-state/observable.spec.ts +43 -0
  27. package/src/http-request-state/rxjs/getRequestorBody.ts +10 -0
  28. package/src/http-request-state/rxjs/getRequestorState.ts +8 -0
  29. package/{http-request-state/rxjs/index.d.ts → src/http-request-state/rxjs/index.ts} +4 -4
  30. package/src/http-request-state/rxjs/tapError.ts +16 -0
  31. package/src/http-request-state/rxjs/tapSuccess.ts +16 -0
  32. package/src/http-request-state/strategies.spec.ts +42 -0
  33. package/src/http-request-state/types.ts +55 -0
  34. package/src/ngrx/actionable-selector.ts +152 -0
  35. package/src/ngrx/index.ts +1 -0
  36. package/{public-api.d.ts → src/public-api.ts} +35 -16
  37. package/src/rxjs/defaultShareReplay.ts +8 -0
  38. package/{rxjs/index.d.ts → src/rxjs/index.ts} +5 -5
  39. package/src/rxjs/mapError.ts +8 -0
  40. package/src/rxjs/rxjs-operators.ts +132 -0
  41. package/src/rxjs/subjectifier.ts +17 -0
  42. package/src/rxjs/subscriber.directive.ts +57 -0
  43. package/src/specs/clickSubject.spec.ts +95 -0
  44. package/src/specs/dialog.spec.ts +101 -0
  45. package/src/specs/toggleGroupDirective.spec.ts +229 -0
  46. package/src/table-builder/classes/DefaultSettings.ts +11 -0
  47. package/src/table-builder/classes/MatTableObservableDataSource.ts +23 -0
  48. package/src/table-builder/classes/TableBuilderConfig.ts +36 -0
  49. package/src/table-builder/classes/TableBuilderDataSource.ts +61 -0
  50. package/src/table-builder/classes/TableState.ts +93 -0
  51. package/src/table-builder/classes/data-store.ts +10 -0
  52. package/{table-builder/classes/display-col.d.ts → src/table-builder/classes/display-col.ts} +5 -5
  53. package/src/table-builder/classes/filter-info.ts +108 -0
  54. package/src/table-builder/classes/table-builder-general-settings.ts +141 -0
  55. package/src/table-builder/classes/table-builder.ts +95 -0
  56. package/src/table-builder/classes/table-store.ts +476 -0
  57. package/src/table-builder/components/array-column.component.ts +36 -0
  58. package/src/table-builder/components/column-builder/column-builder.component.html +61 -0
  59. package/src/table-builder/components/column-builder/column-builder.component.scss +43 -0
  60. package/src/table-builder/components/column-builder/column-builder.component.spec.ts +49 -0
  61. package/src/table-builder/components/column-builder/column-builder.component.ts +146 -0
  62. package/src/table-builder/components/column-builder/column-helpers.ts +52 -0
  63. package/src/table-builder/components/date-filter/date-filter.component.html +23 -0
  64. package/src/table-builder/components/date-filter/date-filter.component.ts +24 -0
  65. package/src/table-builder/components/date-time-filter/date-time-filter.component.html +9 -0
  66. package/src/table-builder/components/date-time-filter/date-time-filter.component.ts +22 -0
  67. package/src/table-builder/components/filter/filter.component.html +91 -0
  68. package/src/table-builder/components/filter/filter.component.scss +60 -0
  69. package/src/table-builder/components/filter/filter.component.spec.ts +87 -0
  70. package/src/table-builder/components/filter/filter.component.ts +60 -0
  71. package/src/table-builder/components/filter/in-list/in-list-filter.component.ts +93 -0
  72. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.html +55 -0
  73. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.scss +57 -0
  74. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.ts +46 -0
  75. package/src/table-builder/components/generic-table/generic-table.component.html +77 -0
  76. package/src/table-builder/components/generic-table/generic-table.component.scss +38 -0
  77. package/src/table-builder/components/generic-table/generic-table.component.ts +325 -0
  78. package/src/table-builder/components/generic-table/paginator.component.ts +99 -0
  79. package/src/table-builder/components/group-by-list/group-by-list.component.css +8 -0
  80. package/src/table-builder/components/group-by-list/group-by-list.component.html +12 -0
  81. package/src/table-builder/components/group-by-list/group-by-list.component.spec.ts +23 -0
  82. package/src/table-builder/components/group-by-list/group-by-list.component.ts +21 -0
  83. package/src/table-builder/components/header-menu/header-menu.component.html +104 -0
  84. package/src/table-builder/components/header-menu/header-menu.component.scss +96 -0
  85. package/src/table-builder/components/header-menu/header-menu.component.ts +99 -0
  86. package/src/table-builder/components/in-filter/in-filter.component.css +3 -0
  87. package/src/table-builder/components/in-filter/in-filter.component.html +20 -0
  88. package/src/table-builder/components/in-filter/in-filter.component.ts +66 -0
  89. package/{table-builder/components/index.d.ts → src/table-builder/components/index.ts} +9 -9
  90. package/src/table-builder/components/initialization-component/initialization-component.html +29 -0
  91. package/src/table-builder/components/initialization-component/initialization-component.ts +24 -0
  92. package/src/table-builder/components/link-column.component.ts +47 -0
  93. package/src/table-builder/components/number-filter/number-filter.component.css +10 -0
  94. package/src/table-builder/components/number-filter/number-filter.component.html +19 -0
  95. package/src/table-builder/components/number-filter/number-filter.component.spec.ts +30 -0
  96. package/src/table-builder/components/number-filter/number-filter.component.ts +25 -0
  97. package/src/table-builder/components/profiles-menu/profiles-menu.component.html +78 -0
  98. package/src/table-builder/components/profiles-menu/profiles-menu.component.scss +126 -0
  99. package/src/table-builder/components/profiles-menu/profiles-menu.component.spec.ts +23 -0
  100. package/src/table-builder/components/profiles-menu/profiles-menu.component.ts +65 -0
  101. package/src/table-builder/components/scroll-strategy.ts +76 -0
  102. package/src/table-builder/components/sort-menu/sort-menu.component-store.ts +66 -0
  103. package/src/table-builder/components/sort-menu/sort-menu.component.html +111 -0
  104. package/src/table-builder/components/sort-menu/sort-menu.component.scss +119 -0
  105. package/src/table-builder/components/sort-menu/sort-menu.component.ts +98 -0
  106. package/{table-builder/components/table-container/table-container-imports.d.ts → src/table-builder/components/table-container/table-container-imports.ts} +32 -14
  107. package/src/table-builder/components/table-container/table-container.helpers/data-state.helpers.ts +141 -0
  108. package/src/table-builder/components/table-container/table-container.helpers/filter-state.helpers.ts +106 -0
  109. package/src/table-builder/components/table-container/table-container.helpers/groupBy.helpers.ts +86 -0
  110. package/src/table-builder/components/table-container/table-container.helpers/sort-state.helpers.ts +45 -0
  111. package/src/table-builder/components/table-container/table-container.html +94 -0
  112. package/src/table-builder/components/table-container/table-container.scss +47 -0
  113. package/src/table-builder/components/table-container/table-container.spec.ts +154 -0
  114. package/src/table-builder/components/table-container/table-container.ts +356 -0
  115. package/src/table-builder/components/table-container/tableProps.ts +20 -0
  116. package/src/table-builder/components/table-container/virtual-scroll-container.ts +156 -0
  117. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.html +31 -0
  118. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.ts +46 -0
  119. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.css +42 -0
  120. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.html +10 -0
  121. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.spec.ts +85 -0
  122. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.ts +33 -0
  123. package/src/table-builder/components/table-container-filter/table-wrapper-filter-store.ts +23 -0
  124. package/src/table-builder/directives/custom-cell-directive.ts +58 -0
  125. package/{table-builder/directives/index.d.ts → src/table-builder/directives/index.ts} +6 -5
  126. package/src/table-builder/directives/multi-sort.directive.spec.ts +124 -0
  127. package/src/table-builder/directives/multi-sort.directive.ts +51 -0
  128. package/src/table-builder/directives/resize-column.directive.ts +108 -0
  129. package/src/table-builder/directives/table-wrapper.directive.ts +14 -0
  130. package/src/table-builder/directives/tb-filter.directive.ts +382 -0
  131. package/src/table-builder/enums/filterTypes.ts +40 -0
  132. package/src/table-builder/functions/boolean-filter-function.ts +12 -0
  133. package/src/table-builder/functions/date-filter-function.ts +68 -0
  134. package/src/table-builder/functions/download-data.ts +11 -0
  135. package/src/table-builder/functions/null-filter-function.ts +9 -0
  136. package/src/table-builder/functions/number-filter-function.ts +41 -0
  137. package/src/table-builder/functions/sort-data-function.ts +23 -0
  138. package/src/table-builder/functions/string-filter-function.ts +51 -0
  139. package/{table-builder/interfaces/ColumnInfo.d.ts → src/table-builder/interfaces/ColumnInfo.ts} +7 -6
  140. package/src/table-builder/interfaces/column-template.ts +9 -0
  141. package/{table-builder/interfaces/dictionary.d.ts → src/table-builder/interfaces/dictionary.ts} +3 -3
  142. package/src/table-builder/interfaces/report-def.ts +155 -0
  143. package/src/table-builder/ngrx/tableBuilderStateStore.ts +199 -0
  144. package/src/table-builder/pipes/column-total.pipe.ts +17 -0
  145. package/src/table-builder/pipes/format-filter-type.pipe.ts +12 -0
  146. package/src/table-builder/pipes/format-filter-value.pipe.ts +42 -0
  147. package/src/table-builder/pipes/key-display.ts +16 -0
  148. package/src/table-builder/services/export-to-csv.service.ts +78 -0
  149. package/src/table-builder/services/link-creator.service.ts +67 -0
  150. package/src/table-builder/services/table-template-service.ts +59 -0
  151. package/src/table-builder/services/transform-creator.ts +95 -0
  152. package/src/table-builder/specs/table-custom-filters.spec.ts +262 -0
  153. package/src/table-builder/styles/collapser.styles.scss +16 -0
  154. package/src/table-builder/table-builder.module.ts +73 -0
  155. package/src/test.ts +17 -0
  156. package/src/utilities/array-helpers.ts +13 -0
  157. package/src/utilities/directives/auto-focus.directive.ts +21 -0
  158. package/src/utilities/directives/clickEmitterDirective.ts +16 -0
  159. package/src/utilities/directives/clickSubject.ts +20 -0
  160. package/src/utilities/directives/conditional-classes.directive.ts +36 -0
  161. package/src/utilities/directives/dialog-service.ts +19 -0
  162. package/src/utilities/directives/dialog.ts +144 -0
  163. package/src/utilities/directives/mat-toggle-group-directive.ts +61 -0
  164. package/src/utilities/directives/prevent-enter.directive.ts +13 -0
  165. package/src/utilities/directives/stop-propagation.directive.ts +20 -0
  166. package/src/utilities/directives/styler.ts +40 -0
  167. package/src/utilities/directives/trim-whitespace.directive.ts +21 -0
  168. package/{utilities/index.d.ts → src/utilities/index.ts} +22 -15
  169. package/src/utilities/module.ts +55 -0
  170. package/src/utilities/pipes/function.pipe.ts +16 -0
  171. package/src/utilities/pipes/phone.pipe.ts +15 -0
  172. package/src/utilities/pipes/space-case.pipes.spec.ts +47 -0
  173. package/src/utilities/pipes/space-case.pipes.ts +23 -0
  174. package/tsconfig.lib.json +19 -0
  175. package/tsconfig.lib.prod.json +10 -0
  176. package/tsconfig.spec.json +17 -0
  177. package/action-state/action-state-spinner/action-state-spinner.component.d.ts +0 -12
  178. package/action-state/action-state-ui/action-state-ui.module.d.ts +0 -7
  179. package/action-state/ngrx-ext/ngrx-ext.module.d.ts +0 -8
  180. package/action-state/ngrx.d.ts +0 -31
  181. package/esm2022/action-state/action-state-spinner/action-state-spinner.component.mjs +0 -24
  182. package/esm2022/action-state/action-state-ui/action-state-ui.module.mjs +0 -20
  183. package/esm2022/action-state/index.mjs +0 -8
  184. package/esm2022/action-state/ngrx-ext/ngrx-ext.module.mjs +0 -23
  185. package/esm2022/action-state/ngrx.mjs +0 -47
  186. package/esm2022/http-request-state/HttpRequestStateFactory.mjs +0 -51
  187. package/esm2022/http-request-state/HttpRequestStateStore.mjs +0 -121
  188. package/esm2022/http-request-state/directives/HttpStateDirectiveBase.mjs +0 -30
  189. package/esm2022/http-request-state/directives/http-error-state-directive.mjs +0 -23
  190. package/esm2022/http-request-state/directives/http-inProgress-state-directive.mjs +0 -23
  191. package/esm2022/http-request-state/directives/http-notStarted-state-directive.mjs +0 -23
  192. package/esm2022/http-request-state/directives/http-success-state-directive.mjs +0 -29
  193. package/esm2022/http-request-state/directives/index.mjs +0 -6
  194. package/esm2022/http-request-state/directives/request-state-directive.mjs +0 -61
  195. package/esm2022/http-request-state/helpers.mjs +0 -22
  196. package/esm2022/http-request-state/http-request-state.mjs +0 -39
  197. package/esm2022/http-request-state/http-state-module.mjs +0 -40
  198. package/esm2022/http-request-state/index.mjs +0 -7
  199. package/esm2022/http-request-state/rxjs/getRequestorBody.mjs +0 -4
  200. package/esm2022/http-request-state/rxjs/getRequestorState.mjs +0 -3
  201. package/esm2022/http-request-state/rxjs/index.mjs +0 -5
  202. package/esm2022/http-request-state/rxjs/tapError.mjs +0 -12
  203. package/esm2022/http-request-state/rxjs/tapSuccess.mjs +0 -12
  204. package/esm2022/http-request-state/types.mjs +0 -16
  205. package/esm2022/ngrx/actionable-selector.mjs +0 -71
  206. package/esm2022/ngrx/index.mjs +0 -2
  207. package/esm2022/one-paragon-angular-utilities.mjs +0 -5
  208. package/esm2022/public-api.mjs +0 -20
  209. package/esm2022/rxjs/defaultShareReplay.mjs +0 -7
  210. package/esm2022/rxjs/index.mjs +0 -6
  211. package/esm2022/rxjs/mapError.mjs +0 -8
  212. package/esm2022/rxjs/rxjs-operators.mjs +0 -92
  213. package/esm2022/rxjs/subjectifier.mjs +0 -15
  214. package/esm2022/rxjs/subscriber.directive.mjs +0 -50
  215. package/esm2022/table-builder/classes/DefaultSettings.mjs +0 -6
  216. package/esm2022/table-builder/classes/MatTableObservableDataSource.mjs +0 -23
  217. package/esm2022/table-builder/classes/TableBuilderConfig.mjs +0 -18
  218. package/esm2022/table-builder/classes/TableBuilderDataSource.mjs +0 -48
  219. package/esm2022/table-builder/classes/TableState.mjs +0 -48
  220. package/esm2022/table-builder/classes/data-store.mjs +0 -15
  221. package/esm2022/table-builder/classes/display-col.mjs +0 -2
  222. package/esm2022/table-builder/classes/filter-info.mjs +0 -61
  223. package/esm2022/table-builder/classes/table-builder-general-settings.mjs +0 -116
  224. package/esm2022/table-builder/classes/table-builder.mjs +0 -77
  225. package/esm2022/table-builder/classes/table-store.mjs +0 -388
  226. package/esm2022/table-builder/components/array-column.component.mjs +0 -53
  227. package/esm2022/table-builder/components/column-builder/column-builder.component.mjs +0 -134
  228. package/esm2022/table-builder/components/column-builder/column-helpers.mjs +0 -45
  229. package/esm2022/table-builder/components/date-filter/date-filter.component.mjs +0 -29
  230. package/esm2022/table-builder/components/date-time-filter/date-time-filter.component.mjs +0 -24
  231. package/esm2022/table-builder/components/filter/filter.component.mjs +0 -64
  232. package/esm2022/table-builder/components/filter/in-list/in-list-filter.component.mjs +0 -102
  233. package/esm2022/table-builder/components/gen-col-displayer/gen-col-displayer.component.mjs +0 -47
  234. package/esm2022/table-builder/components/generic-table/generic-table.component.mjs +0 -310
  235. package/esm2022/table-builder/components/generic-table/paginator.component.mjs +0 -100
  236. package/esm2022/table-builder/components/group-by-list/group-by-list.component.mjs +0 -21
  237. package/esm2022/table-builder/components/header-menu/header-menu.component.mjs +0 -103
  238. package/esm2022/table-builder/components/in-filter/in-filter.component.mjs +0 -65
  239. package/esm2022/table-builder/components/index.mjs +0 -10
  240. package/esm2022/table-builder/components/initialization-component/initialization-component.mjs +0 -47
  241. package/esm2022/table-builder/components/link-column.component.mjs +0 -74
  242. package/esm2022/table-builder/components/number-filter/number-filter.component.mjs +0 -29
  243. package/esm2022/table-builder/components/profiles-menu/profiles-menu.component.mjs +0 -64
  244. package/esm2022/table-builder/components/scroll-strategy.mjs +0 -60
  245. package/esm2022/table-builder/components/sort-menu/sort-menu.component-store.mjs +0 -46
  246. package/esm2022/table-builder/components/sort-menu/sort-menu.component.mjs +0 -82
  247. package/esm2022/table-builder/components/table-container/table-container-imports.mjs +0 -26
  248. package/esm2022/table-builder/components/table-container/table-container.helpers/data-state.helpers.mjs +0 -135
  249. package/esm2022/table-builder/components/table-container/table-container.helpers/filter-state.helpers.mjs +0 -83
  250. package/esm2022/table-builder/components/table-container/table-container.helpers/groupBy.helpers.mjs +0 -71
  251. package/esm2022/table-builder/components/table-container/table-container.helpers/sort-state.helpers.mjs +0 -36
  252. package/esm2022/table-builder/components/table-container/table-container.mjs +0 -336
  253. package/esm2022/table-builder/components/table-container/tableProps.mjs +0 -8
  254. package/esm2022/table-builder/components/table-container/virtual-scroll-container.mjs +0 -155
  255. package/esm2022/table-builder/components/table-container-filter/filter-list/filter-list.component.mjs +0 -44
  256. package/esm2022/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.mjs +0 -36
  257. package/esm2022/table-builder/components/table-container-filter/table-wrapper-filter-store.mjs +0 -25
  258. package/esm2022/table-builder/directives/custom-cell-directive.mjs +0 -73
  259. package/esm2022/table-builder/directives/index.mjs +0 -6
  260. package/esm2022/table-builder/directives/multi-sort.directive.mjs +0 -50
  261. package/esm2022/table-builder/directives/resize-column.directive.mjs +0 -87
  262. package/esm2022/table-builder/directives/table-wrapper.directive.mjs +0 -18
  263. package/esm2022/table-builder/directives/tb-filter.directive.mjs +0 -396
  264. package/esm2022/table-builder/enums/filterTypes.mjs +0 -29
  265. package/esm2022/table-builder/functions/boolean-filter-function.mjs +0 -10
  266. package/esm2022/table-builder/functions/date-filter-function.mjs +0 -58
  267. package/esm2022/table-builder/functions/download-data.mjs +0 -12
  268. package/esm2022/table-builder/functions/null-filter-function.mjs +0 -8
  269. package/esm2022/table-builder/functions/number-filter-function.mjs +0 -32
  270. package/esm2022/table-builder/functions/sort-data-function.mjs +0 -17
  271. package/esm2022/table-builder/functions/string-filter-function.mjs +0 -41
  272. package/esm2022/table-builder/interfaces/ColumnInfo.mjs +0 -2
  273. package/esm2022/table-builder/interfaces/dictionary.mjs +0 -2
  274. package/esm2022/table-builder/interfaces/report-def.mjs +0 -50
  275. package/esm2022/table-builder/ngrx/tableBuilderStateStore.mjs +0 -154
  276. package/esm2022/table-builder/pipes/column-total.pipe.mjs +0 -22
  277. package/esm2022/table-builder/pipes/format-filter-type.pipe.mjs +0 -18
  278. package/esm2022/table-builder/pipes/format-filter-value.pipe.mjs +0 -43
  279. package/esm2022/table-builder/pipes/key-display.mjs +0 -18
  280. package/esm2022/table-builder/services/export-to-csv.service.mjs +0 -75
  281. package/esm2022/table-builder/services/link-creator.service.mjs +0 -50
  282. package/esm2022/table-builder/services/table-template-service.mjs +0 -60
  283. package/esm2022/table-builder/services/transform-creator.mjs +0 -100
  284. package/esm2022/table-builder/table-builder.module.mjs +0 -124
  285. package/esm2022/utilities/array-helpers.mjs +0 -14
  286. package/esm2022/utilities/directives/auto-focus.directive.mjs +0 -25
  287. package/esm2022/utilities/directives/clickEmitterDirective.mjs +0 -22
  288. package/esm2022/utilities/directives/clickSubject.mjs +0 -29
  289. package/esm2022/utilities/directives/conditional-classes.directive.mjs +0 -36
  290. package/esm2022/utilities/directives/dialog-service.mjs +0 -21
  291. package/esm2022/utilities/directives/dialog.mjs +0 -145
  292. package/esm2022/utilities/directives/mat-toggle-group-directive.mjs +0 -59
  293. package/esm2022/utilities/directives/prevent-enter.directive.mjs +0 -20
  294. package/esm2022/utilities/directives/stop-propagation.directive.mjs +0 -26
  295. package/esm2022/utilities/directives/styler.mjs +0 -41
  296. package/esm2022/utilities/directives/trim-whitespace.directive.mjs +0 -28
  297. package/esm2022/utilities/index.mjs +0 -16
  298. package/esm2022/utilities/module.mjs +0 -90
  299. package/esm2022/utilities/pipes/function.pipe.mjs +0 -22
  300. package/esm2022/utilities/pipes/phone.pipe.mjs +0 -20
  301. package/esm2022/utilities/pipes/space-case.pipes.mjs +0 -28
  302. package/fesm2022/one-paragon-angular-utilities.mjs +0 -5700
  303. package/fesm2022/one-paragon-angular-utilities.mjs.map +0 -1
  304. package/http-request-state/HttpRequestStateFactory.d.ts +0 -17
  305. package/http-request-state/HttpRequestStateStore.d.ts +0 -54
  306. package/http-request-state/directives/HttpStateDirectiveBase.d.ts +0 -14
  307. package/http-request-state/directives/http-error-state-directive.d.ts +0 -9
  308. package/http-request-state/directives/http-inProgress-state-directive.d.ts +0 -9
  309. package/http-request-state/directives/http-notStarted-state-directive.d.ts +0 -9
  310. package/http-request-state/directives/http-success-state-directive.d.ts +0 -16
  311. package/http-request-state/directives/request-state-directive.d.ts +0 -34
  312. package/http-request-state/helpers.d.ts +0 -9
  313. package/http-request-state/http-request-state.d.ts +0 -12
  314. package/http-request-state/http-state-module.d.ts +0 -11
  315. package/http-request-state/rxjs/getRequestorBody.d.ts +0 -3
  316. package/http-request-state/rxjs/getRequestorState.d.ts +0 -3
  317. package/http-request-state/rxjs/tapError.d.ts +0 -3
  318. package/http-request-state/rxjs/tapSuccess.d.ts +0 -3
  319. package/http-request-state/types.d.ts +0 -41
  320. package/index.d.ts +0 -5
  321. package/ngrx/actionable-selector.d.ts +0 -17
  322. package/ngrx/index.d.ts +0 -1
  323. package/rxjs/defaultShareReplay.d.ts +0 -2
  324. package/rxjs/mapError.d.ts +0 -2
  325. package/rxjs/rxjs-operators.d.ts +0 -13
  326. package/rxjs/subjectifier.d.ts +0 -8
  327. package/rxjs/subscriber.directive.d.ts +0 -14
  328. package/table-builder/classes/DefaultSettings.d.ts +0 -9
  329. package/table-builder/classes/MatTableObservableDataSource.d.ts +0 -9
  330. package/table-builder/classes/TableBuilderConfig.d.ts +0 -23
  331. package/table-builder/classes/TableBuilderDataSource.d.ts +0 -12
  332. package/table-builder/classes/TableState.d.ts +0 -66
  333. package/table-builder/classes/data-store.d.ts +0 -8
  334. package/table-builder/classes/filter-info.d.ts +0 -35
  335. package/table-builder/classes/table-builder-general-settings.d.ts +0 -85
  336. package/table-builder/classes/table-builder.d.ts +0 -18
  337. package/table-builder/classes/table-store.d.ts +0 -138
  338. package/table-builder/components/array-column.component.d.ts +0 -15
  339. package/table-builder/components/column-builder/column-builder.component.d.ts +0 -47
  340. package/table-builder/components/column-builder/column-helpers.d.ts +0 -36
  341. package/table-builder/components/date-filter/date-filter.component.d.ts +0 -37
  342. package/table-builder/components/date-time-filter/date-time-filter.component.d.ts +0 -37
  343. package/table-builder/components/filter/filter.component.d.ts +0 -46
  344. package/table-builder/components/filter/in-list/in-list-filter.component.d.ts +0 -24
  345. package/table-builder/components/gen-col-displayer/gen-col-displayer.component.d.ts +0 -17
  346. package/table-builder/components/generic-table/generic-table.component.d.ts +0 -89
  347. package/table-builder/components/generic-table/paginator.component.d.ts +0 -30
  348. package/table-builder/components/group-by-list/group-by-list.component.d.ts +0 -7
  349. package/table-builder/components/header-menu/header-menu.component.d.ts +0 -51
  350. package/table-builder/components/in-filter/in-filter.component.d.ts +0 -20
  351. package/table-builder/components/initialization-component/initialization-component.d.ts +0 -13
  352. package/table-builder/components/link-column.component.d.ts +0 -25
  353. package/table-builder/components/number-filter/number-filter.component.d.ts +0 -39
  354. package/table-builder/components/profiles-menu/profiles-menu.component.d.ts +0 -32
  355. package/table-builder/components/scroll-strategy.d.ts +0 -22
  356. package/table-builder/components/sort-menu/sort-menu.component-store.d.ts +0 -24
  357. package/table-builder/components/sort-menu/sort-menu.component.d.ts +0 -24
  358. package/table-builder/components/table-container/table-container.d.ts +0 -80
  359. package/table-builder/components/table-container/table-container.helpers/data-state.helpers.d.ts +0 -6
  360. package/table-builder/components/table-container/table-container.helpers/filter-state.helpers.d.ts +0 -17
  361. package/table-builder/components/table-container/table-container.helpers/groupBy.helpers.d.ts +0 -17
  362. package/table-builder/components/table-container/table-container.helpers/sort-state.helpers.d.ts +0 -8
  363. package/table-builder/components/table-container/tableProps.d.ts +0 -12
  364. package/table-builder/components/table-container/virtual-scroll-container.d.ts +0 -36
  365. package/table-builder/components/table-container-filter/filter-list/filter-list.component.d.ts +0 -15
  366. package/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.d.ts +0 -12
  367. package/table-builder/components/table-container-filter/table-wrapper-filter-store.d.ts +0 -14
  368. package/table-builder/directives/custom-cell-directive.d.ts +0 -33
  369. package/table-builder/directives/multi-sort.directive.d.ts +0 -10
  370. package/table-builder/directives/resize-column.directive.d.ts +0 -43
  371. package/table-builder/directives/table-wrapper.directive.d.ts +0 -8
  372. package/table-builder/directives/tb-filter.directive.d.ts +0 -115
  373. package/table-builder/enums/filterTypes.d.ts +0 -36
  374. package/table-builder/functions/boolean-filter-function.d.ts +0 -3
  375. package/table-builder/functions/date-filter-function.d.ts +0 -4
  376. package/table-builder/functions/download-data.d.ts +0 -1
  377. package/table-builder/functions/null-filter-function.d.ts +0 -2
  378. package/table-builder/functions/number-filter-function.d.ts +0 -4
  379. package/table-builder/functions/sort-data-function.d.ts +0 -6
  380. package/table-builder/functions/string-filter-function.d.ts +0 -5
  381. package/table-builder/interfaces/report-def.d.ts +0 -147
  382. package/table-builder/ngrx/tableBuilderStateStore.d.ts +0 -70
  383. package/table-builder/pipes/column-total.pipe.d.ts +0 -8
  384. package/table-builder/pipes/format-filter-type.pipe.d.ts +0 -8
  385. package/table-builder/pipes/format-filter-value.pipe.d.ts +0 -12
  386. package/table-builder/pipes/key-display.d.ts +0 -10
  387. package/table-builder/services/export-to-csv.service.d.ts +0 -14
  388. package/table-builder/services/link-creator.service.d.ts +0 -16
  389. package/table-builder/services/table-template-service.d.ts +0 -14
  390. package/table-builder/services/transform-creator.d.ts +0 -16
  391. package/table-builder/table-builder.module.d.ts +0 -21
  392. package/utilities/array-helpers.d.ts +0 -1
  393. package/utilities/directives/auto-focus.directive.d.ts +0 -9
  394. package/utilities/directives/clickEmitterDirective.d.ts +0 -7
  395. package/utilities/directives/clickSubject.d.ts +0 -9
  396. package/utilities/directives/conditional-classes.directive.d.ts +0 -13
  397. package/utilities/directives/dialog-service.d.ts +0 -10
  398. package/utilities/directives/dialog.d.ts +0 -44
  399. package/utilities/directives/mat-toggle-group-directive.d.ts +0 -21
  400. package/utilities/directives/prevent-enter.directive.d.ts +0 -6
  401. package/utilities/directives/stop-propagation.directive.d.ts +0 -7
  402. package/utilities/directives/styler.d.ts +0 -15
  403. package/utilities/directives/trim-whitespace.directive.d.ts +0 -7
  404. package/utilities/module.d.ts +0 -19
  405. package/utilities/pipes/function.pipe.d.ts +0 -7
  406. package/utilities/pipes/phone.pipe.d.ts +0 -7
  407. package/utilities/pipes/space-case.pipes.d.ts +0 -17
@@ -0,0 +1,94 @@
1
+ @let tableId = $tableId();
2
+
3
+ <ng-content select="[before]" />
4
+
5
+ <ng-container multiSort *ngrxLet="state.tableSettings$ as tableSettings">
6
+ <div class="header-wrapper">
7
+ <div class="title">
8
+ @if ((!$collapseHeader()) || tableSettings.showTitleWhenHeaderCollapsed) {
9
+ <ng-content select=".tb-header-title"/>
10
+ }
11
+ @if((state.groupByKeys$ | async)?.length){
12
+ <group-by-list />
13
+ }
14
+ </div>
15
+ <div class="flx-row-end">
16
+ <lib-filter-list />
17
+ @if (!tableSettings.hideHeader) {
18
+ @if (!$collapseHeader()) {
19
+ <ng-container *ngTemplateOutlet="headerMenu"/>
20
+ <button mat-icon-button color='primary' [matMenuTriggerFor]="mainMenu">
21
+ <mat-icon>more_vert</mat-icon>
22
+ </button>
23
+ <mat-menu #mainMenu='matMenu'>
24
+ <ng-container *ngTemplateOutlet="headerMenuExtra"/>
25
+ </mat-menu>
26
+ }
27
+ @else {
28
+ <mat-icon color="primary" [matMenuTriggerFor]="mainMenu" class="flat-menu-button pointer">more_horiz</mat-icon>
29
+ <mat-menu #mainMenu='matMenu'>
30
+ <div class="flex-column">
31
+ <ng-container *ngTemplateOutlet="headerMenu"/>
32
+ </div>
33
+ <ng-container *ngTemplateOutlet="headerMenuExtra"/>
34
+ </mat-menu>
35
+ }
36
+ <mat-icon [matTooltip]="$collapseHeader() ? 'expand' : 'collapse'" class="collapse-icon header"
37
+ (click)="state.toggleCollapseHeader()">
38
+ {{$collapseHeader() ? 'expand_less' : 'expand_more'}}
39
+ </mat-icon>
40
+ }
41
+
42
+ </div>
43
+ </div>
44
+ @if($useVirtual())
45
+ {
46
+ <tb-virtual-scroll-container class="scrollable">
47
+ <tb-generic-table [rows]="$customRows()" [data]="(data | async)!" [displayData]="$displayData()"
48
+ (selection$)='selection$.emit($event)' [columnInfos]='$myColumns()' [trackBy]="trackBy" />
49
+ </tb-virtual-scroll-container>
50
+ }
51
+ @else
52
+ {
53
+ <tb-generic-table [rows]="$customRows()" [data]="(data | async)!" [displayData]="$displayData()"
54
+ (selection$)='selection$.emit($event)' [columnInfos]='$myColumns()' [trackBy]="trackBy" />
55
+ }
56
+ @if(tableSettings.usePaginator)
57
+ {
58
+ <div class="paginator">
59
+ <tb-paginator #tbPaginator [tableElRef]="tableElRef" />
60
+
61
+ <mat-icon [matTooltip]="$collapseFooter() ? 'expand' : 'collapse'" class="collapse-icon footer"
62
+ (click)="state.toggleCollapseFooter()">
63
+ {{$collapseFooter() ? 'expand_more' : 'expand_less'}}
64
+ </mat-icon>
65
+ </div>
66
+ }
67
+
68
+ <ng-template #headerMenu>
69
+ @if (!tableSettings.hideFilter) {<tb-filter-displayer/>}
70
+ @if (!tableSettings.hideColumnSettings) {<tb-col-displayer/>}
71
+ @if (!tableSettings.hideSort) {<tb-sort-menu/>}
72
+ @if (!!tableId) {<tb-profiles-menu [$tableId]="tableId" (onSaveState)="onSaveState.emit($event)"/>}
73
+ </ng-template>
74
+
75
+ <ng-template #headerMenuExtra>
76
+ <button mat-menu-item (click)="resetState()">
77
+ <mat-icon color="primary">autorenew</mat-icon>
78
+ <span>Reset table</span>
79
+ </button>
80
+ @if (!tableSettings.hideExport) {
81
+ <button mat-menu-item (click)="exportToCsv()">
82
+ <mat-icon color="primary">file_download</mat-icon>
83
+ <span>Export Table</span>
84
+ </button>
85
+ }
86
+ @if (tableId) {
87
+ <button stop-propagation mat-menu-item (click)="pm.trigger()?.toggleMenu()">
88
+ <mat-icon color="primary">people</mat-icon>
89
+ <span>Profiles</span>
90
+ </button>
91
+ <tb-profiles-menu class="profiles-menu" #pm [$tableId]="tableId" (onSaveState)="onSaveState.emit($event)"/>
92
+ }
93
+ </ng-template>
94
+ </ng-container>
@@ -0,0 +1,47 @@
1
+ .header-wrapper{
2
+ display: flex;
3
+ flex-direction: row;
4
+ justify-content: space-between;
5
+ width:100%;
6
+ }
7
+
8
+
9
+ .flx-row-end{
10
+ display: flex;
11
+ flex-direction: row;
12
+ justify-content: flex-end;
13
+ align-items: center;
14
+ }
15
+
16
+ .flat-menu{
17
+ line-height: initial;
18
+ height: initial;
19
+ }
20
+
21
+ .pointer{
22
+ cursor: pointer;
23
+ }
24
+
25
+ .add-key{
26
+ width: 90%;
27
+ }
28
+
29
+ .paginator{
30
+ display: flex;
31
+ flex-direction: row;
32
+ justify-content: flex-end;
33
+ align-items: center;
34
+ background-color: white;
35
+ bottom: 0px;
36
+ position: sticky;
37
+ border-top: .5px solid rgba(0,0,0,.12);
38
+ }
39
+ .profiles-menu{
40
+ visibility: hidden;
41
+ width: 0px;
42
+ height: 0px;
43
+ display: block;
44
+ overflow: hidden;
45
+ position: absolute;
46
+ top: 50px;
47
+ }
@@ -0,0 +1,154 @@
1
+ import { BehaviorSubject, of } from 'rxjs';
2
+ import { TestBed, ComponentFixture } from '@angular/core/testing';
3
+ import { SpaceCasePipe, PhoneNumberPipe } from '../../../utilities';
4
+ import { FilterComponent } from '../filter/filter.component';
5
+ import { CommonModule, CurrencyPipe, DatePipe } from '@angular/common';
6
+ import { FormsModule } from '@angular/forms';
7
+ import { FieldType } from '../../interfaces/report-def';
8
+ import { NoopAnimationsModule } from '@angular/platform-browser/animations';
9
+ import { DateFilterComponent } from '../date-filter/date-filter.component';
10
+ import { TableContainerComponent } from './table-container';
11
+ import { GenFilterDisplayerComponent } from '../table-container-filter/gen-filter-displayer/gen-filter-displayer.component';
12
+ import { GenericTableComponent } from '../generic-table/generic-table.component';
13
+ import { GenColDisplayerComponent } from '../gen-col-displayer/gen-col-displayer.component';
14
+ import { ColumnTotalPipe } from '../../pipes/column-total.pipe';
15
+ import { TableBuilder } from '../../classes/table-builder';
16
+ import { MultiSortDirective } from '../../directives/multi-sort.directive';
17
+ import { TableBuilderConfigToken } from '../../classes/TableBuilderConfig';
18
+ import { provideMockStore } from '@ngrx/store/testing';
19
+ import { PaginatorComponent } from '../generic-table/paginator.component';
20
+ import { LetModule, PushModule } from '@ngrx/component';
21
+ import { HarnessLoader, parallel } from '@angular/cdk/testing';
22
+ import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
23
+ import {MatTableHarness} from '@angular/material/table/testing';
24
+ import { TransformCreator } from '../../services/transform-creator';
25
+
26
+ const data = [
27
+ {
28
+ name: 'Joe',
29
+ age: 10,
30
+ balance: 25
31
+ },
32
+ {
33
+ name: 'Jane',
34
+ age: 20,
35
+ balance: 35
36
+ }
37
+ ];
38
+ const metaData = [
39
+ {
40
+ key: 'name',
41
+ fieldType: FieldType.String,
42
+ additional: {},
43
+ order : 1
44
+ },
45
+ {
46
+ key: 'age',
47
+ fieldType: FieldType.Number,
48
+ additional: {},
49
+ order : 2
50
+ },
51
+ {
52
+ key: 'balance',
53
+ fieldType: FieldType.Number,
54
+ additional: {},
55
+ order : 3
56
+ }
57
+ ];
58
+
59
+ const initialState = {fullTableState: {
60
+ 'test-id': {
61
+ metaData,
62
+ hiddenKeys: [],
63
+ pageSize: 10,
64
+ initialized : true ,
65
+ filters: [],
66
+ }
67
+ },
68
+ globalStorageState : {
69
+ localProfiles: {}
70
+ }};
71
+ describe('table container', () => {
72
+ let fixture: ComponentFixture<TableContainerComponent>;
73
+ let component: TableContainerComponent;
74
+ let loader: HarnessLoader;
75
+
76
+ beforeEach(() => {
77
+
78
+ TestBed.configureTestingModule({
79
+ declarations: [
80
+ TableContainerComponent,
81
+ FilterComponent,
82
+ GenFilterDisplayerComponent,
83
+ GenericTableComponent,
84
+ PaginatorComponent,
85
+ GenColDisplayerComponent,
86
+ SpaceCasePipe,
87
+ CurrencyPipe,
88
+ ColumnTotalPipe,
89
+ DateFilterComponent,
90
+ MultiSortDirective,
91
+ ],
92
+ providers: [
93
+ { provide : TableBuilderConfigToken , useValue: {defaultTableState: { }}},
94
+ provideMockStore({ initialState }),
95
+ DatePipe,
96
+ TransformCreator,
97
+ CurrencyPipe,
98
+ PhoneNumberPipe,
99
+ ],
100
+ imports: [
101
+ NoopAnimationsModule,
102
+ CommonModule,
103
+ FormsModule,
104
+ LetModule,
105
+ ]
106
+ })
107
+ .compileComponents();
108
+ fixture = TestBed.createComponent(TableContainerComponent);
109
+ component = fixture.componentInstance;
110
+ loader = TestbedHarnessEnvironment.loader(fixture);
111
+ });
112
+
113
+ it('can create component', () => {
114
+ component.tableId = 'test-id';
115
+ component.tableBuilder = new TableBuilder(of(data));
116
+ fixture.detectChanges();
117
+ expect(component).toBeDefined();
118
+ });
119
+
120
+ it('can add metadata dynamicaly after the table has already been rendered', async () => {
121
+ const md = new BehaviorSubject(metaData);
122
+ component.tableId = 'test-id';
123
+ component.tableBuilder = new TableBuilder(of(data), md);
124
+
125
+ fixture.detectChanges();
126
+ expect(component).toBeDefined();
127
+
128
+ const tables = await loader.getAllHarnesses(MatTableHarness);
129
+ expect(tables.length).toBe(1);
130
+ const table = tables[0];
131
+
132
+ let rows = await table.getRows();
133
+
134
+ let cells = (await parallel(() => rows.map(row => row.getCells()))).map(row => row.length);
135
+
136
+ expect(cells).toEqual([3, 3]);
137
+
138
+ md.next([...metaData, {
139
+ key: 'dynamic',
140
+ fieldType: FieldType.String,
141
+ order : 4,
142
+ additional: {},
143
+ }]);
144
+
145
+ fixture.detectChanges();
146
+
147
+ rows = await table.getRows();
148
+
149
+ cells = (await parallel(() => rows.map(row => row.getCells()))).map(row => row.length);
150
+
151
+ expect(cells).toEqual([4, 4]);
152
+
153
+ });
154
+ });
@@ -0,0 +1,356 @@
1
+ import {
2
+ Component,
3
+ Input,
4
+ EventEmitter,
5
+ Output,
6
+ ContentChildren,
7
+ QueryList,
8
+ ChangeDetectionStrategy,
9
+ Predicate,
10
+ ViewChild,
11
+ inject,
12
+ TemplateRef,
13
+ ContentChild,
14
+ ElementRef,
15
+ OnInit,
16
+ OnDestroy,
17
+ Injector,
18
+ contentChildren,
19
+ computed,
20
+ effect,
21
+ untracked,
22
+ runInInjectionContext,
23
+ input,
24
+ } from '@angular/core';
25
+ import { BehaviorSubject, Observable, ReplaySubject, combineLatest, of } from 'rxjs';
26
+ import { ArrayAdditional, FieldType, MetaData } from '../../interfaces/report-def';
27
+ import { map, mergeAll, scan, startWith, timestamp, mergeMap, switchMap } from 'rxjs/operators';
28
+ import { TableBuilder } from '../../classes/table-builder';
29
+ import { MatRowDef } from '@angular/material/table';
30
+ import { CustomCellDirective, TableCustomFilterDirective, TableFilterDirective } from '../../directives';
31
+ import { stateIs, TableStore } from '../../classes/table-store';
32
+ import { ExportToCsvService } from '../../services/export-to-csv.service';
33
+ import { ArrayDefaults } from '../../classes/DefaultSettings';
34
+ import { TableBuilderConfigToken } from '../../classes/TableBuilderConfig';
35
+ import { InitializationState, TableState } from '../../classes/TableState';
36
+ import { WrapperFilterStore } from '../table-container-filter/table-wrapper-filter-store';
37
+ import { cloneDeep } from 'lodash';
38
+ import { defaultShareReplay } from '../../../rxjs';
39
+ import { createFilterFunc, isCustomFilter, isFilterInfo } from '../../classes/filter-info';
40
+ import { Dictionary } from '../../interfaces/dictionary';
41
+ import { TableWrapperDirective } from '../../directives/table-wrapper.directive';
42
+ import { createLinkCreatorDict } from '../../services/link-creator.service';
43
+ import { TableBuilderStateStore } from '../../ngrx/tableBuilderStateStore';
44
+ import { containerImports } from './table-container-imports';
45
+ import { updateFilterInfoState, updateFilterPredicateState, updateFilterState } from './table-container.helpers/filter-state.helpers';
46
+ import { initialSortState, updateSortState } from './table-container.helpers/sort-state.helpers';
47
+ import { getAllGroupHeaderNames, initialGroupByState, updateGroupByState } from './table-container.helpers/groupBy.helpers';
48
+ import { sortAndFilterData } from './table-container.helpers/data-state.helpers';
49
+ import { TableProps, defaultProps } from './tableProps';
50
+ import { PaginatorComponent } from '../generic-table/paginator.component';
51
+ import { TableBuilderDataSource } from '../../classes/TableBuilderDataSource';
52
+ import { GenericTableComponent } from '../generic-table/generic-table.component';
53
+ import { toObservable, toSignal } from '@angular/core/rxjs-interop';
54
+ import { DataStore } from '../../classes/data-store';
55
+ import { PersistedTableSettings } from '../../classes/table-builder-general-settings';
56
+
57
+
58
+ @Component({
59
+ selector: 'tb-table-container',
60
+ templateUrl: './table-container.html',
61
+ styleUrls: ['./table-container.scss', '../../styles/collapser.styles.scss'],
62
+ changeDetection: ChangeDetectionStrategy.OnPush,
63
+ providers: [TableStore, ExportToCsvService, WrapperFilterStore, DataStore],
64
+ standalone: true,
65
+ imports: containerImports
66
+ }) export class TableContainerComponent<T = any> implements OnInit, OnDestroy {
67
+ props: TableProps = { ...defaultProps };
68
+ @Output() data = new BehaviorSubject<T[]>([]);
69
+
70
+ public state = inject(TableStore);
71
+ private dataStore = inject(DataStore);
72
+ public config = inject(TableBuilderConfigToken);
73
+ public exportToCsvService = inject(ExportToCsvService<T>);
74
+ public wrapper = inject(TableWrapperDirective, { optional: true });
75
+ public stateService = inject(TableBuilderStateStore);
76
+ public injector = inject(Injector);
77
+
78
+ filterDirectives = contentChildren(TableFilterDirective, {descendants: true});
79
+ customFilterDirectives = contentChildren(TableCustomFilterDirective, {descendants: true});
80
+
81
+ $allFilterDirectives = computed( () => {
82
+ if(this.wrapper) {
83
+ return [...this.filterDirectives(), ...this.customFilterDirectives(), ...this.wrapper.$registrations()];
84
+ } {
85
+ return [...this.filterDirectives(), ...this.customFilterDirectives()];
86
+ }
87
+ }
88
+ );
89
+
90
+ $isInitializationState = (state: InitializationState) => computed(() =>
91
+ this.state.selectSignal(s => s.initializationState >= state)()) ;
92
+
93
+ allFilterDirectivesEffect = effect(() => {
94
+ const loaded = this.$isInitializationState(InitializationState.LoadedFromStore)();
95
+ const stateFilters = this.state.$filters();
96
+ const filterDirectives = this.$allFilterDirectives();
97
+ untracked(() => {
98
+ if(loaded) {
99
+ filterDirectives.filter( f => !f.used).forEach( f => {
100
+ f.used = true;
101
+ if(f.savable) {
102
+ var filter = stateFilters[f.filterId];
103
+ if(isFilterInfo(filter)) {
104
+ const filterDirective: TableFilterDirective = f as TableFilterDirective;
105
+ filterDirective.fieldType = filter.fieldType;
106
+ filterDirective.filterType = filter.filterType;
107
+ filterDirective.setFilterValue(filter.filterValue);
108
+ filterDirective.key = filter.key;
109
+ filterDirective.update();
110
+ }
111
+ if(isCustomFilter(filter)) {
112
+ f.active = filter.active ?? false;
113
+ }
114
+ this.state.addFilter((f.filter$ as any));
115
+ }
116
+ });
117
+ }
118
+ })
119
+ });
120
+
121
+ @ViewChild(PaginatorComponent) paginatorComponent?: PaginatorComponent;
122
+ @ViewChild(GenericTableComponent) genericTable?: GenericTableComponent;
123
+ _$customRows = contentChildren(MatRowDef<any>);
124
+ $customRows = computed(() => [...this._$customRows()]);
125
+ $customCells = contentChildren(CustomCellDirective);
126
+ $myColumns = computed(() => {
127
+ return this.state.$metaDataArray().map( metaData => ({metaData, customCell: this.$customCells().find(cc => cc.customCell === metaData.key)}))
128
+ })
129
+ @ContentChild('table', {read: ElementRef}) tableElRef!: ElementRef;
130
+
131
+ @Input({ required: true }) tableBuilder!: TableBuilder;
132
+ $tableId = input<string | undefined>(undefined, { alias: 'tableId'})
133
+ @Input() set indexColumn(val: boolean) {
134
+ this.props.indexColumn = val;
135
+ }
136
+ @Input() set selectionColumn(val: boolean) {
137
+ this.props.selectionColumn = val;
138
+ }
139
+ @Input() set isSticky(val: boolean) {
140
+ this.props.isSticky = val;
141
+ }
142
+ @Input() set stickyFooter(val: boolean) {
143
+ this.props.stickyFooter = val;
144
+ }
145
+ @Input() set pageSize(value: number) {
146
+ this.state.setPageSize(value);
147
+ }
148
+ @Input() set groupHeaderTemplate( template: TemplateRef<any>) {
149
+ this.props.groupHeaderTemplate = template;
150
+ }
151
+ @Input() set groupHeaderHeight(value: number) {
152
+ this.props.groupHeaderHeight = value;
153
+ }
154
+ @Input() trackBy!: string;
155
+ @Input() inputFilters?: Observable<Array<Predicate<T>>>;
156
+
157
+ @Output() selection$ = new EventEmitter();
158
+ $data = toSignal(this.data, { initialValue: [] });
159
+ @Output() onStateReset = new EventEmitter();
160
+ @Output() onSaveState = new EventEmitter();
161
+ @Output() state$ = this.state.getSavableState().pipe(
162
+ map(state => cloneDeep(state)),
163
+ defaultShareReplay(),
164
+ );
165
+
166
+ clearSelections(){
167
+ this.genericTable?.selection.clear(true);
168
+ }
169
+ displayData = new ReplaySubject<T[]>(1);
170
+
171
+ $displayData = toSignal(this.displayData, { initialValue: [] });
172
+
173
+ $collapseFooter = this.state.$collapseFooter;
174
+ $collapseHeader = this.state.$collapseHeader;
175
+
176
+ ngOnDestroy(){
177
+ const tableId = this.$tableId();
178
+ if(tableId) {
179
+ this.stateService.saveTableStateToLocal({ tableId, tableState: this.state.getSavableStateSignal() });
180
+ }
181
+ }
182
+
183
+ firstPage(): void {
184
+ this.paginatorComponent?.$paginator()?.firstPage();
185
+ }
186
+
187
+ lastPage(): void {
188
+ this.paginatorComponent?.$paginator()?.lastPage();
189
+ }
190
+
191
+ resetState() {
192
+ this.customFilterDirectives().forEach( cf => cf.reset());
193
+ this.filterDirectives().forEach( cf => cf.reset() );
194
+ this.state.resetState();
195
+ this.onStateReset.next(null)
196
+ }
197
+ $persistedState = computed(() => {
198
+ const tableId = this.$tableId();
199
+ if(tableId) {
200
+ return this.stateService.$selectLocalTableStateForView(tableId)();
201
+ }
202
+ return undefined
203
+ });
204
+
205
+ private initializeStateEffect = effect(() => {
206
+ const metaLoaded = this.$isInitializationState(InitializationState.MetaDataLoaded)();
207
+ const tableId = this.$tableId();
208
+ const persistedState = this.$persistedState();
209
+ untracked(() => {
210
+ if(metaLoaded) {
211
+ this.state.setTableSettings(this.tableBuilder.settings);
212
+ if(tableId){
213
+ if(persistedState){
214
+ persistedState.persistedTableSettings = new PersistedTableSettings(persistedState.persistedTableSettings);
215
+ this.state.updateStateFromPersistedState(persistedState);
216
+ return;
217
+ }
218
+ }
219
+ this.state.setInitializationState(InitializationState.LoadedFromStore);
220
+ }
221
+ });
222
+ });
223
+ customFilters$ = new BehaviorSubject<Predicate<T>[]>([]);
224
+ initializeData() {
225
+
226
+ const predicateFilters$ = combineLatest([this.inputFilters?.pipe(startWith([])) ?? of([] as Predicate<T>[]), this.customFilters$])
227
+ .pipe(map(([a, b]) => [...a, ...b]));
228
+
229
+ const filters$ = combineLatest([
230
+ this.state.filters$.pipe(scan(updateFilterInfoState, { allFilters: {} }), timestamp()),
231
+ predicateFilters$.pipe(scan(updateFilterPredicateState, {allFilters: [] as Predicate<T>[]}), timestamp())
232
+ ])
233
+ .pipe(
234
+ map(([filterInfo, pred]) => updateFilterState(filterInfo, pred))
235
+ );
236
+
237
+ const sortsState$ = this.state.sort$.pipe(scan(updateSortState, initialSortState));
238
+
239
+ const sortedAndFilteredData$ = sortAndFilterData(this.tableBuilder.getData$(), sortsState$, filters$);
240
+
241
+ const flatGrouped$ = combineLatest([sortedAndFilteredData$.pipe(timestamp()), this.state.groupByKeys$.pipe(timestamp()), this.state.expandedGroups$.pipe(timestamp())]).pipe(
242
+ scan(updateGroupByState, initialGroupByState),
243
+ map(({displayData}) => displayData),
244
+ defaultShareReplay(),
245
+ );
246
+
247
+ this.state.on(sortedAndFilteredData$, (data) => {
248
+ this.data.next(data);
249
+ this.dataStore.patchState({dataLen: data.length});
250
+ });
251
+
252
+ this.state.on(flatGrouped$, (data) => {
253
+ this.displayData.next(data);
254
+ });
255
+ }
256
+ ngOnInit() {
257
+ const customCells$ = toObservable(this.$customCells, { injector: this.injector });
258
+ this.state.setLinkMaps(this.tableBuilder.metaData$!.pipe(
259
+ map(createLinkCreatorDict)
260
+ ));
261
+ const customCellMeta = customCells$.pipe(switchMap(c => c.length ? combineLatest(c.map(c => c.$metaData)) : of([] as MetaData[])));
262
+ const metaForState = combineLatest([this.tableBuilder.metaData$, customCellMeta]).pipe(map(([mds, customCells]) => {
263
+ mds = mds.map(this.mapArrayFieldsMetaDatas);
264
+ return [
265
+ ...mds,
266
+ ...customCells.map( md => this.mergeMetaData(md, mds.find( item => item.key === md.key ) ))
267
+ ]
268
+ }));
269
+ this.state.setMetaData(metaForState);
270
+ runInInjectionContext(this.injector, () => {
271
+ const ds = new TableBuilderDataSource<T>(
272
+ this.$displayData,
273
+ this.state,
274
+ this.dataStore
275
+ );
276
+ this.state.updateState({
277
+ props: {
278
+ dataSource: ds,
279
+ ...this.props
280
+ }
281
+ })
282
+ })
283
+ this.initializeData();
284
+ }
285
+
286
+ mergeMetaData(metaData1: MetaData, metaData2?: MetaData) {
287
+ if(!metaData2){
288
+ metaData1.noExport = true;
289
+ return metaData1
290
+ }
291
+ if(!metaData1.displayName) metaData1.displayName = metaData2.displayName;
292
+ if(!metaData1.preSort) metaData1.preSort = metaData2.preSort;
293
+ if(!metaData1.order) metaData1.order = metaData2.order;
294
+ if(!metaData1.width) metaData1.width = metaData2.width;
295
+ if(metaData2.fieldType) metaData1.fieldType = metaData2.fieldType;
296
+ metaData1.noExport = !metaData2;
297
+ return metaData1;
298
+ }
299
+
300
+ exportToCsv(): void {
301
+ this.exportToCsvService.exportToCsv(this.$data());
302
+ }
303
+
304
+ expandAllGroups = () => {
305
+ const groupHeaders = getAllGroupHeaderNames(this.$displayData());
306
+ this.state.expandAllOfGroup({ groupHeadersByKey: groupHeaders });
307
+ }
308
+
309
+ collapseAllGroups = () => this.state.collapseAll();
310
+
311
+ ngAfterContentInit() {
312
+ this.state.runOnceWhen(
313
+ stateIs(InitializationState.LoadedFromStore),
314
+ state => {
315
+ this.addFilterDirectives(state);
316
+ this.state.updateState({ initializationState: InitializationState.Ready });
317
+ });
318
+ }
319
+
320
+
321
+ mapArrayFieldsMetaDatas = (meta : MetaData<T>) => {
322
+ if(meta.fieldType === FieldType.Array){
323
+ const additional = {...meta.additional} as ArrayAdditional;
324
+ additional.arrayStyle = additional?.arrayStyle ?? ArrayDefaults.arrayStyle;
325
+ additional.limit = additional.limit ?? this.config.arrayDefaults?.limit ?? ArrayDefaults.limit;
326
+ return {...meta,additional}
327
+ }
328
+ return meta;
329
+ }
330
+
331
+
332
+ addFilterDirectives = (state: TableState) => {
333
+ const customFilters$ = toObservable(this.$allFilterDirectives, {injector: this.injector}).pipe(
334
+ mergeMap( customerFilters => customerFilters
335
+ .filter( filter => !filter.savable )
336
+ .map(filter => filter.filter$ )
337
+ ),
338
+ mergeAll(),
339
+ scan( (a,b)=> {
340
+ if(b.active) {
341
+ a[b.filterId] = isCustomFilter(b) ? b.predicate : createFilterFunc(b);
342
+ } else {
343
+ delete a[b.filterId] ;
344
+ }
345
+ return a;
346
+ }, {} as Dictionary<Predicate<any>>),
347
+ map( f => Object.values(f))
348
+ );
349
+
350
+ this.state.on(customFilters$, (f) => {
351
+ this.customFilters$.next(f);
352
+ });
353
+ }
354
+
355
+ $useVirtual = this.state.$isVirtual;
356
+ }
@@ -0,0 +1,20 @@
1
+ import { TemplateRef } from '@angular/core';
2
+ import { TableBuilderDataSource } from '../../classes/TableBuilderDataSource';
3
+
4
+ export interface TableProps {
5
+ indexColumn: boolean;
6
+ selectionColumn: boolean;
7
+ isSticky: boolean;
8
+ stickyFooter:boolean;
9
+ groupHeaderTemplate?: TemplateRef<any>;
10
+ dataSource?: TableBuilderDataSource<any>;
11
+ groupHeaderHeight?: number;
12
+ }
13
+
14
+ export const defaultProps: TableProps = {
15
+ indexColumn: false,
16
+ selectionColumn: false,
17
+ isSticky: true,
18
+ stickyFooter: false,
19
+ groupHeaderHeight: undefined,
20
+ }