@one-paragon/angular-utilities 2.2.4 → 2.2.6

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/karma.conf.js +44 -0
  2. package/ng-package.json +7 -0
  3. package/package.json +15 -27
  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 +7 -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 +25 -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 +14 -0
  11. package/src/action-state/ngrx.ts +69 -0
  12. package/src/http-request-state/RequestStateFactory.ts +56 -0
  13. package/src/http-request-state/RequestStateStore.ts +284 -0
  14. package/{http-request-state/deprecated.d.ts → src/http-request-state/deprecated.ts} +20 -20
  15. package/src/http-request-state/directives/HttpStateDirectiveBase.ts +29 -0
  16. package/src/http-request-state/directives/http-error-state-directive.ts +21 -0
  17. package/src/http-request-state/directives/http-inProgress-state-directive.ts +19 -0
  18. package/src/http-request-state/directives/http-notStarted-state-directive.ts +19 -0
  19. package/src/http-request-state/directives/http-success-state-directive.ts +29 -0
  20. package/{http-request-state/directives/index.d.ts → src/http-request-state/directives/index.ts} +5 -5
  21. package/src/http-request-state/directives/request-state-directive.spec.ts +73 -0
  22. package/src/http-request-state/directives/request-state-directive.ts +78 -0
  23. package/src/http-request-state/helpers.ts +30 -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} +7 -7
  26. package/src/http-request-state/models/view-context.ts +18 -0
  27. package/src/http-request-state/observable.spec.ts +43 -0
  28. package/src/http-request-state/request-state.ts +66 -0
  29. package/src/http-request-state/rxjs/getRequestorBody.ts +10 -0
  30. package/src/http-request-state/rxjs/getRequestorState.ts +8 -0
  31. package/{http-request-state/rxjs/index.d.ts → src/http-request-state/rxjs/index.ts} +4 -4
  32. package/src/http-request-state/rxjs/tapError.ts +16 -0
  33. package/src/http-request-state/rxjs/tapSuccess.ts +16 -0
  34. package/src/http-request-state/strategies.spec.ts +42 -0
  35. package/src/http-request-state/types.ts +54 -0
  36. package/src/ngrx/actionable-selector.ts +160 -0
  37. package/src/ngrx/index.ts +1 -0
  38. package/{public-api.d.ts → src/public-api.ts} +35 -16
  39. package/src/rxjs/defaultShareReplay.ts +8 -0
  40. package/{rxjs/index.d.ts → src/rxjs/index.ts} +5 -5
  41. package/src/rxjs/mapError.ts +8 -0
  42. package/src/rxjs/rxjs-operators.ts +130 -0
  43. package/src/rxjs/subjectifier.ts +17 -0
  44. package/src/rxjs/subscriber.directive.ts +57 -0
  45. package/src/specs/clickSubject.spec.ts +95 -0
  46. package/src/specs/dialog.spec.ts +101 -0
  47. package/src/specs/toggleGroupDirective.spec.ts +229 -0
  48. package/src/table-builder/classes/DefaultSettings.ts +11 -0
  49. package/src/table-builder/classes/MatTableObservableDataSource.ts +23 -0
  50. package/src/table-builder/classes/TableBuilderConfig.ts +50 -0
  51. package/src/table-builder/classes/TableBuilderDataSource.ts +64 -0
  52. package/src/table-builder/classes/TableState.ts +125 -0
  53. package/src/table-builder/classes/data-store.ts +10 -0
  54. package/{table-builder/classes/display-col.d.ts → src/table-builder/classes/display-col.ts} +5 -5
  55. package/src/table-builder/classes/filter-info.ts +125 -0
  56. package/src/table-builder/classes/table-builder-general-settings.ts +205 -0
  57. package/src/table-builder/classes/table-builder.ts +105 -0
  58. package/src/table-builder/classes/table-store.helpers.ts +104 -0
  59. package/src/table-builder/classes/table-store.ts +440 -0
  60. package/src/table-builder/components/array-column.component.ts +34 -0
  61. package/src/table-builder/components/column-builder/column-builder.component.html +87 -0
  62. package/src/table-builder/components/column-builder/column-builder.component.scss +43 -0
  63. package/src/table-builder/components/column-builder/column-builder.component.spec.ts +49 -0
  64. package/src/table-builder/components/column-builder/column-builder.component.ts +129 -0
  65. package/src/table-builder/components/column-builder/column-helpers.ts +54 -0
  66. package/src/table-builder/components/column-header-menu/column-header-menu.component.html +110 -0
  67. package/src/table-builder/components/column-header-menu/column-header-menu.component.scss +97 -0
  68. package/src/table-builder/components/column-header-menu/column-header-menu.component.ts +94 -0
  69. package/src/table-builder/components/date-filter/date-filter.component.html +25 -0
  70. package/src/table-builder/components/date-filter/date-filter.component.ts +22 -0
  71. package/src/table-builder/components/date-time-filter/date-time-filter.component.html +11 -0
  72. package/src/table-builder/components/date-time-filter/date-time-filter.component.ts +20 -0
  73. package/src/table-builder/components/filter/filter.component.html +109 -0
  74. package/src/table-builder/components/filter/filter.component.scss +60 -0
  75. package/src/table-builder/components/filter/filter.component.spec.ts +86 -0
  76. package/src/table-builder/components/filter/filter.component.ts +64 -0
  77. package/src/table-builder/components/filter/in-list/in-list-filter.component.ts +102 -0
  78. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.html +60 -0
  79. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.scss +57 -0
  80. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.ts +44 -0
  81. package/src/table-builder/components/generic-table/generic-table.component.html +97 -0
  82. package/src/table-builder/components/generic-table/generic-table.component.scss +38 -0
  83. package/src/table-builder/components/generic-table/generic-table.component.ts +403 -0
  84. package/src/table-builder/components/generic-table/paginator.component.ts +112 -0
  85. package/src/table-builder/components/group-by-list/group-by-list.component.css +17 -0
  86. package/src/table-builder/components/group-by-list/group-by-list.component.html +14 -0
  87. package/src/table-builder/components/group-by-list/group-by-list.component.spec.ts +23 -0
  88. package/src/table-builder/components/group-by-list/group-by-list.component.ts +25 -0
  89. package/src/table-builder/components/in-filter/in-filter.component.css +3 -0
  90. package/src/table-builder/components/in-filter/in-filter.component.html +23 -0
  91. package/src/table-builder/components/in-filter/in-filter.component.ts +65 -0
  92. package/{table-builder/components/index.d.ts → src/table-builder/components/index.ts} +9 -9
  93. package/src/table-builder/components/initialization-component/initialization.component.html +78 -0
  94. package/src/table-builder/components/initialization-component/initialization.component.ts +27 -0
  95. package/src/table-builder/components/link-column.component.ts +42 -0
  96. package/src/table-builder/components/number-filter/number-filter.component.css +10 -0
  97. package/src/table-builder/components/number-filter/number-filter.component.html +25 -0
  98. package/src/table-builder/components/number-filter/number-filter.component.spec.ts +30 -0
  99. package/src/table-builder/components/number-filter/number-filter.component.ts +25 -0
  100. package/src/table-builder/components/profiles-menu/profiles-menu.component.html +77 -0
  101. package/src/table-builder/components/profiles-menu/profiles-menu.component.scss +126 -0
  102. package/src/table-builder/components/profiles-menu/profiles-menu.component.spec.ts +23 -0
  103. package/src/table-builder/components/profiles-menu/profiles-menu.component.ts +63 -0
  104. package/src/table-builder/components/reset-menu/reset-menu.component.css +3 -0
  105. package/src/table-builder/components/reset-menu/reset-menu.component.html +10 -0
  106. package/src/table-builder/components/reset-menu/reset-menu.component.ts +87 -0
  107. package/src/table-builder/components/scroll-strategy.ts +139 -0
  108. package/src/table-builder/components/sort-menu/sort-menu.component-store.ts +57 -0
  109. package/src/table-builder/components/sort-menu/sort-menu.component.html +115 -0
  110. package/src/table-builder/components/sort-menu/sort-menu.component.scss +119 -0
  111. package/src/table-builder/components/sort-menu/sort-menu.component.ts +88 -0
  112. package/src/table-builder/components/table-container/table-container.component.html +81 -0
  113. package/src/table-builder/components/table-container/table-container.component.ts +403 -0
  114. package/src/table-builder/components/table-container/table-container.helpers/data-state.helpers.ts +113 -0
  115. package/src/table-builder/components/table-container/table-container.helpers/filter-state.helpers.ts +125 -0
  116. package/src/table-builder/components/table-container/table-container.helpers/groupBy.helpers.ts +122 -0
  117. package/src/table-builder/components/table-container/table-container.helpers/meta-data.helpers.ts +16 -0
  118. package/src/table-builder/components/table-container/table-container.helpers/sort-state.helpers.ts +47 -0
  119. package/src/table-builder/components/table-container/table-container.scss +47 -0
  120. package/src/table-builder/components/table-container/tableProps.ts +18 -0
  121. package/src/table-builder/components/table-container/virtual-scroll-container.ts +216 -0
  122. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.html +35 -0
  123. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.ts +44 -0
  124. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.css +40 -0
  125. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.html +11 -0
  126. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.spec.ts +85 -0
  127. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.ts +36 -0
  128. package/src/table-builder/components/table-container-filter/table-wrapper-filter-store.ts +23 -0
  129. package/src/table-builder/components/table-header-menu/table-header-menu.component.css +21 -0
  130. package/src/table-builder/components/table-header-menu/table-header-menu.component.html +50 -0
  131. package/src/table-builder/components/table-header-menu/table-header-menu.component.ts +35 -0
  132. package/src/table-builder/directives/custom-cell-directive.ts +57 -0
  133. package/{table-builder/directives/index.d.ts → src/table-builder/directives/index.ts} +6 -5
  134. package/src/table-builder/directives/multi-sort.directive.spec.ts +124 -0
  135. package/src/table-builder/directives/multi-sort.directive.ts +50 -0
  136. package/src/table-builder/directives/resize-column.directive.ts +107 -0
  137. package/src/table-builder/directives/table-wrapper.directive.ts +13 -0
  138. package/src/table-builder/directives/tb-filter.directive.ts +376 -0
  139. package/src/table-builder/enums/filterTypes.ts +40 -0
  140. package/src/table-builder/functions/boolean-filter-function.ts +12 -0
  141. package/src/table-builder/functions/date-filter-function.ts +78 -0
  142. package/src/table-builder/functions/download-data.ts +11 -0
  143. package/src/table-builder/functions/null-filter-function.ts +9 -0
  144. package/src/table-builder/functions/number-filter-function.ts +41 -0
  145. package/src/table-builder/functions/sort-data-function.ts +80 -0
  146. package/src/table-builder/functions/string-filter-function.ts +53 -0
  147. package/{table-builder/interfaces/ColumnInfo.d.ts → src/table-builder/interfaces/ColumnInfo.ts} +7 -6
  148. package/{table-builder/interfaces/dictionary.d.ts → src/table-builder/interfaces/dictionary.ts} +3 -3
  149. package/src/table-builder/interfaces/report-def.ts +254 -0
  150. package/src/table-builder/ngrx/tableBuilderStateStore.ts +197 -0
  151. package/src/table-builder/pipes/column-total.pipe.ts +16 -0
  152. package/src/table-builder/pipes/format-filter-type.pipe.ts +12 -0
  153. package/src/table-builder/pipes/format-filter-value.pipe.ts +67 -0
  154. package/src/table-builder/pipes/key-display.ts +13 -0
  155. package/src/table-builder/services/export-to-csv.service.ts +113 -0
  156. package/src/table-builder/services/link-creator.service.ts +98 -0
  157. package/src/table-builder/services/table-template-service.ts +47 -0
  158. package/src/table-builder/services/transform-creator.ts +96 -0
  159. package/src/table-builder/specs/table-custom-filters.spec.ts +262 -0
  160. package/src/table-builder/styles/collapser.styles.scss +16 -0
  161. package/src/table-builder/table-builder.module.ts +38 -0
  162. package/src/test.ts +17 -0
  163. package/src/utilities/array-helpers.ts +13 -0
  164. package/src/utilities/directives/auto-focus.directive.ts +20 -0
  165. package/src/utilities/directives/clickEmitterDirective.ts +15 -0
  166. package/src/utilities/directives/clickSubject.ts +19 -0
  167. package/src/utilities/directives/conditional-classes.directive.ts +36 -0
  168. package/src/utilities/directives/dialog-service.ts +19 -0
  169. package/src/utilities/directives/dialog.ts +144 -0
  170. package/src/utilities/directives/mat-toggle-group-directive.ts +60 -0
  171. package/src/utilities/directives/prevent-enter.directive.ts +12 -0
  172. package/src/utilities/directives/stop-propagation.directive.ts +19 -0
  173. package/src/utilities/directives/styler.ts +44 -0
  174. package/src/utilities/directives/trim-whitespace.directive.ts +20 -0
  175. package/{utilities/index.d.ts → src/utilities/index.ts} +22 -15
  176. package/src/utilities/module.ts +53 -0
  177. package/src/utilities/pipes/function.pipe.ts +21 -0
  178. package/src/utilities/pipes/phone.pipe.ts +20 -0
  179. package/src/utilities/pipes/space-case.pipes.spec.ts +47 -0
  180. package/src/utilities/pipes/space-case.pipes.ts +26 -0
  181. package/tsconfig.lib.json +20 -0
  182. package/tsconfig.lib.prod.json +10 -0
  183. package/tsconfig.spec.json +17 -0
  184. package/action-state/action-state-spinner/action-state-spinner.component.d.ts +0 -12
  185. package/action-state/action-state-ui/action-state-ui.module.d.ts +0 -7
  186. package/action-state/ngrx-ext/ngrx-ext.module.d.ts +0 -8
  187. package/action-state/ngrx.d.ts +0 -31
  188. package/fesm2022/one-paragon-angular-utilities.mjs +0 -6531
  189. package/fesm2022/one-paragon-angular-utilities.mjs.map +0 -1
  190. package/http-request-state/RequestStateFactory.d.ts +0 -17
  191. package/http-request-state/RequestStateStore.d.ts +0 -101
  192. package/http-request-state/directives/HttpStateDirectiveBase.d.ts +0 -14
  193. package/http-request-state/directives/http-error-state-directive.d.ts +0 -10
  194. package/http-request-state/directives/http-inProgress-state-directive.d.ts +0 -10
  195. package/http-request-state/directives/http-notStarted-state-directive.d.ts +0 -10
  196. package/http-request-state/directives/http-success-state-directive.d.ts +0 -17
  197. package/http-request-state/directives/request-state-directive.d.ts +0 -34
  198. package/http-request-state/helpers.d.ts +0 -9
  199. package/http-request-state/http-state-module.d.ts +0 -11
  200. package/http-request-state/request-state.d.ts +0 -12
  201. package/http-request-state/rxjs/getRequestorBody.d.ts +0 -3
  202. package/http-request-state/rxjs/getRequestorState.d.ts +0 -3
  203. package/http-request-state/rxjs/tapError.d.ts +0 -3
  204. package/http-request-state/rxjs/tapSuccess.d.ts +0 -3
  205. package/http-request-state/types.d.ts +0 -41
  206. package/index.d.ts +0 -5
  207. package/ngrx/actionable-selector.d.ts +0 -32
  208. package/ngrx/index.d.ts +0 -1
  209. package/rxjs/defaultShareReplay.d.ts +0 -2
  210. package/rxjs/mapError.d.ts +0 -2
  211. package/rxjs/rxjs-operators.d.ts +0 -13
  212. package/rxjs/subjectifier.d.ts +0 -10
  213. package/rxjs/subscriber.directive.d.ts +0 -14
  214. package/table-builder/classes/DefaultSettings.d.ts +0 -9
  215. package/table-builder/classes/MatTableObservableDataSource.d.ts +0 -9
  216. package/table-builder/classes/TableBuilderConfig.d.ts +0 -23
  217. package/table-builder/classes/TableBuilderDataSource.d.ts +0 -18
  218. package/table-builder/classes/TableState.d.ts +0 -81
  219. package/table-builder/classes/data-store.d.ts +0 -8
  220. package/table-builder/classes/filter-info.d.ts +0 -39
  221. package/table-builder/classes/table-builder-general-settings.d.ts +0 -119
  222. package/table-builder/classes/table-builder.d.ts +0 -22
  223. package/table-builder/classes/table-store.d.ts +0 -146
  224. package/table-builder/classes/table-store.helpers.d.ts +0 -31
  225. package/table-builder/components/array-column.component.d.ts +0 -15
  226. package/table-builder/components/column-builder/column-builder.component.d.ts +0 -41
  227. package/table-builder/components/column-builder/column-helpers.d.ts +0 -38
  228. package/table-builder/components/column-header-menu/column-header-menu.component.d.ts +0 -50
  229. package/table-builder/components/date-filter/date-filter.component.d.ts +0 -37
  230. package/table-builder/components/date-time-filter/date-time-filter.component.d.ts +0 -37
  231. package/table-builder/components/filter/filter.component.d.ts +0 -48
  232. package/table-builder/components/filter/in-list/in-list-filter.component.d.ts +0 -22
  233. package/table-builder/components/gen-col-displayer/gen-col-displayer.component.d.ts +0 -17
  234. package/table-builder/components/generic-table/generic-table.component.d.ts +0 -85
  235. package/table-builder/components/generic-table/paginator.component.d.ts +0 -26
  236. package/table-builder/components/group-by-list/group-by-list.component.d.ts +0 -11
  237. package/table-builder/components/in-filter/in-filter.component.d.ts +0 -20
  238. package/table-builder/components/initialization-component/initialization.component.d.ts +0 -15
  239. package/table-builder/components/link-column.component.d.ts +0 -23
  240. package/table-builder/components/number-filter/number-filter.component.d.ts +0 -39
  241. package/table-builder/components/profiles-menu/profiles-menu.component.d.ts +0 -33
  242. package/table-builder/components/reset-menu/reset-menu.component.d.ts +0 -25
  243. package/table-builder/components/scroll-strategy.d.ts +0 -45
  244. package/table-builder/components/sort-menu/sort-menu.component-store.d.ts +0 -24
  245. package/table-builder/components/sort-menu/sort-menu.component.d.ts +0 -19
  246. package/table-builder/components/table-container/table-container.component.d.ts +0 -104
  247. package/table-builder/components/table-container/table-container.helpers/data-state.helpers.d.ts +0 -7
  248. package/table-builder/components/table-container/table-container.helpers/filter-state.helpers.d.ts +0 -19
  249. package/table-builder/components/table-container/table-container.helpers/groupBy.helpers.d.ts +0 -19
  250. package/table-builder/components/table-container/table-container.helpers/meta-data.helpers.d.ts +0 -2
  251. package/table-builder/components/table-container/table-container.helpers/sort-state.helpers.d.ts +0 -12
  252. package/table-builder/components/table-container/tableProps.d.ts +0 -10
  253. package/table-builder/components/table-container/virtual-scroll-container.d.ts +0 -40
  254. package/table-builder/components/table-container-filter/filter-list/filter-list.component.d.ts +0 -15
  255. package/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.d.ts +0 -12
  256. package/table-builder/components/table-container-filter/table-wrapper-filter-store.d.ts +0 -14
  257. package/table-builder/components/table-header-menu/table-header-menu.component.d.ts +0 -15
  258. package/table-builder/directives/custom-cell-directive.d.ts +0 -34
  259. package/table-builder/directives/multi-sort.directive.d.ts +0 -10
  260. package/table-builder/directives/resize-column.directive.d.ts +0 -43
  261. package/table-builder/directives/table-wrapper.directive.d.ts +0 -8
  262. package/table-builder/directives/tb-filter.directive.d.ts +0 -116
  263. package/table-builder/enums/filterTypes.d.ts +0 -36
  264. package/table-builder/functions/boolean-filter-function.d.ts +0 -3
  265. package/table-builder/functions/date-filter-function.d.ts +0 -4
  266. package/table-builder/functions/download-data.d.ts +0 -1
  267. package/table-builder/functions/null-filter-function.d.ts +0 -2
  268. package/table-builder/functions/number-filter-function.d.ts +0 -4
  269. package/table-builder/functions/sort-data-function.d.ts +0 -6
  270. package/table-builder/functions/string-filter-function.d.ts +0 -5
  271. package/table-builder/interfaces/report-def.d.ts +0 -223
  272. package/table-builder/ngrx/tableBuilderStateStore.d.ts +0 -69
  273. package/table-builder/pipes/column-total.pipe.d.ts +0 -8
  274. package/table-builder/pipes/format-filter-type.pipe.d.ts +0 -8
  275. package/table-builder/pipes/format-filter-value.pipe.d.ts +0 -11
  276. package/table-builder/pipes/key-display.d.ts +0 -9
  277. package/table-builder/services/export-to-csv.service.d.ts +0 -14
  278. package/table-builder/services/link-creator.service.d.ts +0 -16
  279. package/table-builder/services/table-template-service.d.ts +0 -14
  280. package/table-builder/services/transform-creator.d.ts +0 -9
  281. package/table-builder/table-builder.module.d.ts +0 -14
  282. package/utilities/array-helpers.d.ts +0 -1
  283. package/utilities/directives/auto-focus.directive.d.ts +0 -9
  284. package/utilities/directives/clickEmitterDirective.d.ts +0 -7
  285. package/utilities/directives/clickSubject.d.ts +0 -9
  286. package/utilities/directives/conditional-classes.directive.d.ts +0 -12
  287. package/utilities/directives/dialog-service.d.ts +0 -10
  288. package/utilities/directives/dialog.d.ts +0 -45
  289. package/utilities/directives/mat-toggle-group-directive.d.ts +0 -21
  290. package/utilities/directives/prevent-enter.directive.d.ts +0 -6
  291. package/utilities/directives/stop-propagation.directive.d.ts +0 -7
  292. package/utilities/directives/styler.d.ts +0 -16
  293. package/utilities/directives/trim-whitespace.directive.d.ts +0 -7
  294. package/utilities/module.d.ts +0 -19
  295. package/utilities/pipes/function.pipe.d.ts +0 -11
  296. package/utilities/pipes/phone.pipe.d.ts +0 -8
  297. package/utilities/pipes/space-case.pipes.d.ts +0 -17
@@ -0,0 +1,205 @@
1
+ import { Predicate } from "@angular/core";
2
+ import { merge } from "lodash";
3
+ import { Dictionary } from "../interfaces/dictionary";
4
+ import { StylerStyle } from "../../utilities/directives/styler";
5
+ import { TableBuilderExport } from "./TableBuilderConfig";
6
+
7
+ export interface TableBuilderSettings<T = any> {
8
+ headerSettings? : Partial<TableWrapperHeaderSettings>;
9
+ footerSettings? : Partial<TableWrapperFooterSettings>;
10
+ columnHeaderSettings? : Partial<TableColumnHeaderSettings>;
11
+ columnFooterSettings? : Partial<TableColumnFooterSettings>;
12
+ tableSettings? : Partial<TableSettings<T>>;
13
+ }
14
+
15
+ export class GeneralTableSettings implements TableBuilderSettings {
16
+ headerSettings = new TableWrapperHeaderSettings();
17
+ footerSettings = new TableWrapperFooterSettings();
18
+ columnHeaderSettings = new TableColumnHeaderSettings();
19
+ columnFooterSettings = new TableColumnFooterSettings();
20
+ tableSettings = new TableSettings();
21
+ }
22
+
23
+ export class TableWrapperHeaderSettings {
24
+ hideExport = false
25
+ hideFilter = false
26
+ hideColumnSettings = false
27
+ hideHeader = false
28
+ hideSort = false
29
+ collapse = false
30
+ showTitleWhenCollapsed = true;
31
+ headerHeight: TbSize | undefined = undefined;
32
+ }
33
+
34
+ export class TableWrapperFooterSettings {
35
+ collapse = false
36
+ }
37
+
38
+ export class TableColumnHeaderSettings {
39
+ stickyHeaderRow = true;
40
+ noFilters = false;
41
+ noHeader = false;
42
+ }
43
+
44
+ export class TableColumnFooterSettings {
45
+ stickyFooterRow = false;
46
+ }
47
+
48
+ export class TableSettings<T = any> {
49
+ tableId?: string | undefined = undefined;
50
+ trackBy?: string | undefined = undefined;
51
+ includeIndexColumn = false;
52
+ includeSelectionColumn = false;
53
+ usePaginator: boolean | undefined = undefined;
54
+ useVirtualScroll: boolean | undefined = undefined;
55
+ paginatorSettings: Partial<PaginatorOptions> | undefined = undefined;
56
+ virtualScrollSettings: Partial<VirtualScrollOptions> | undefined = undefined;
57
+ rowHeight: TbSize | undefined = undefined;
58
+ groupHeaderHeight?: TbSize = undefined;
59
+ minColumnWidth: TbSize | undefined;
60
+ rowClasses: Dictionary<Predicate<T> | true> | undefined;
61
+ rowStyles: StylerStyle<T> | undefined;
62
+ rowClick: ((row: T, event?: MouseEvent) => void) | undefined = undefined;
63
+ exportSettings: TableBuilderExport | undefined = undefined;
64
+ }
65
+
66
+ export class PersistedTableSettings {
67
+ constructor(tableSettings?: NonFunctionProperties<PersistedTableSettings>){
68
+ if(tableSettings){
69
+ this.collapseHeader = tableSettings.collapseHeader;
70
+ this.collapseFooter = tableSettings.collapseFooter;
71
+ }
72
+ }
73
+
74
+ merge(tableSettings?: TableBuilderSettings){
75
+ const newPts = new PersistedTableSettings(this);
76
+ if(tableSettings){
77
+ newPts.collapseHeader = tableSettings.headerSettings?.collapse ?? newPts.collapseHeader;
78
+ newPts.collapseFooter = tableSettings.footerSettings?.collapse ?? newPts.collapseFooter;
79
+ }
80
+ return newPts;
81
+ }
82
+
83
+ collapseHeader = false;
84
+ collapseFooter = false;
85
+ }
86
+
87
+ export class NotPersistedTableSettings {
88
+ merge(tableSettings?: TableBuilderSettings){
89
+ const newNpts = merge(this, new NotPersistedTableSettings());
90
+ if(tableSettings){
91
+ newNpts.hideExport = tableSettings.headerSettings?.hideExport ?? newNpts.hideExport;
92
+ newNpts.hideColumnSettings = tableSettings.headerSettings?.hideColumnSettings ?? newNpts.hideColumnSettings;
93
+ newNpts.hideFilter = tableSettings.headerSettings?.hideFilter ?? newNpts.hideFilter;
94
+ newNpts.hideSort = tableSettings.headerSettings?.hideSort ?? newNpts.hideSort;
95
+ newNpts.showTitleWhenHeaderCollapsed = tableSettings.headerSettings?.showTitleWhenCollapsed ?? newNpts.showTitleWhenHeaderCollapsed;
96
+ newNpts.hideHeader = tableSettings.headerSettings?.hideHeader ?? newNpts.hideHeader;
97
+ newNpts.hideColumnHeaderFilters = tableSettings.columnHeaderSettings?.noFilters ?? newNpts.hideColumnHeaderFilters;
98
+ newNpts.hideColumnHeader = tableSettings.columnHeaderSettings?.noHeader ?? newNpts.hideColumnHeader;
99
+ newNpts.usePaginator = tableSettings.tableSettings?.usePaginator ?? newNpts.usePaginator;
100
+ newNpts.useVirtualScroll = tableSettings.tableSettings?.useVirtualScroll != undefined ? tableSettings.tableSettings?.useVirtualScroll :
101
+ tableSettings.tableSettings?.virtualScrollSettings ? true
102
+ : newNpts.useVirtualScroll;
103
+ newNpts.rowHeight = tableSettings.tableSettings?.rowHeight ?? newNpts.rowHeight;
104
+ newNpts.headerHeight = tableSettings.headerSettings?.headerHeight ?? newNpts.headerHeight;
105
+ newNpts.groupHeaderHeight = tableSettings.tableSettings?.groupHeaderHeight ?? newNpts.groupHeaderHeight;
106
+ newNpts.minColumnWidth = tableSettings.tableSettings?.minColumnWidth ?? newNpts.minColumnWidth;
107
+ newNpts.rowClasses = tableSettings.tableSettings?.rowClasses ?? newNpts.rowClasses;
108
+ newNpts.rowStyles = tableSettings.tableSettings?.rowStyles ?? newNpts.rowStyles;
109
+ newNpts.rowClick = tableSettings.tableSettings?.rowClick ?? newNpts.rowClick;
110
+ newNpts.exportSettings = tableSettings.tableSettings?.exportSettings ?? newNpts.exportSettings;
111
+
112
+ if(tableSettings.tableSettings?.virtualScrollSettings){
113
+ const currVirt = tableSettings.tableSettings?.virtualScrollSettings || newNpts.virtualSettings;
114
+ if(!currVirt.headerHeight){
115
+ currVirt.headerHeight = tableSettings.headerSettings?.headerHeight || DefaultVirtualScrollOptions.headerHeight;
116
+ }
117
+ if(!currVirt.rowHeight){
118
+ currVirt.rowHeight = tableSettings.tableSettings?.rowHeight || DefaultVirtualScrollOptions.rowHeight;
119
+ }
120
+ newNpts.virtualSettings = { ...new VirtualScrollOptions(), ...currVirt }
121
+ } else newNpts.virtualSettings ??= new VirtualScrollOptions();
122
+ if(tableSettings.tableSettings?.paginatorSettings){
123
+ const currPag = tableSettings.tableSettings?.paginatorSettings ? merge(newNpts.paginatorSettings, tableSettings.tableSettings?.paginatorSettings) : (newNpts.paginatorSettings ?? new PaginatorOptions());
124
+ currPag.includeAllInOptions = (currPag.defaultAll && currPag.includeAllInOptions !== false) || currPag.includeAllInOptions;
125
+ newNpts.paginatorSettings = { ...new PaginatorOptions(), ...currPag };
126
+ } else newNpts.paginatorSettings ??= new PaginatorOptions();
127
+ }
128
+ return newNpts;
129
+ }
130
+ hideExport = false
131
+ hideFilter = false
132
+ hideColumnSettings = false
133
+ hideSort = false
134
+ showTitleWhenHeaderCollapsed = true;
135
+ hideHeader = false
136
+ hideColumnHeaderFilters = false;
137
+ hideColumnHeader = false;
138
+ usePaginator: boolean = true;
139
+ useVirtualScroll: boolean = false;
140
+ paginatorSettings: PaginatorOptions | undefined = undefined;
141
+ virtualSettings: VirtualScrollOptions | undefined = undefined;
142
+ groupHeaderHeight?: TbSize = undefined;
143
+ rowHeight?: TbSize | undefined;
144
+ headerHeight?: TbSize = undefined;
145
+ minColumnWidth?: TbSize | undefined;
146
+ rowClasses?: Dictionary<Predicate<any> | true> | undefined;
147
+ rowStyles?: StylerStyle | undefined;
148
+ rowClick?: ((row: any, event?: MouseEvent) => void) | undefined = undefined;
149
+ exportSettings: TableBuilderExport | undefined = undefined;
150
+ }
151
+
152
+ export class VirtualScrollOptions {
153
+ rowHeight: TbSize = 48;
154
+ enforceRowHeight = true;
155
+ headerHeight: TbSize = 56;
156
+ enforceHeaderHeight = true;
157
+ amountOfVisibleItems = 10;
158
+ /**
159
+ * This will win over `amountOfVisibleItems`
160
+ */
161
+ maxViewPortHeight: TbSize | undefined = undefined;
162
+ /**
163
+ * Will try to bring the table to the bottom of the screen
164
+ * If `amountOfVisibleItems` is set that will be the minimum number of rows
165
+ * If `maxViewPortHeight` is set that will be the max table size
166
+ */
167
+ dynamicHeight = false;
168
+
169
+ /**
170
+ * If `dynamicHeight` is set to true, we will try to add this amount of space from the bottom of view port
171
+ */
172
+ dynamicalHeightBuffer: TbSize = 0;
173
+ }
174
+
175
+ export class PaginatorOptions {
176
+ pageSize: number | undefined = undefined;
177
+ defaultAll = false;
178
+ includeAllInOptions = false;
179
+ }
180
+
181
+ export const DefaultVirtualScrollOptions = {
182
+ rowHeight: 48,
183
+ headerHeight: 56,
184
+ };
185
+
186
+ type NonFunctionPropertyNames<T> = {
187
+ [K in keyof T]: T[K] extends Function ? never : K
188
+ }[keyof T];
189
+
190
+ export type NonFunctionProperties<T> = Pick<T, NonFunctionPropertyNames<T>>;
191
+ export type TbSize = number | `${number}${'px' | 'rem' }`
192
+
193
+ export function parseTbSizeToPixels(size?: TbSize) {
194
+ if(!size) return undefined;
195
+ if(typeof size === 'number') return size;
196
+ if(size.endsWith('px')) return Number(size.replace('px', ''));
197
+ if(size.endsWith('rem')) {
198
+ const htmlElement = document.documentElement;
199
+ const remSize = window.getComputedStyle(htmlElement).getPropertyValue('font-size');
200
+ const remSizeNum = Number(remSize.replace('px', ''));
201
+ const num = Number(size.replace('rem', ''));
202
+ return num * remSizeNum;
203
+ }
204
+ return undefined;
205
+ }
@@ -0,0 +1,105 @@
1
+ import { isObservable, Observable } from 'rxjs';
2
+ import { MetaData, FieldType, ReportDef } from '../interfaces/report-def';
3
+ import { map } from 'rxjs/operators';
4
+ import { GeneralTableSettings, TableBuilderSettings } from './table-builder-general-settings';
5
+ import { defaultShareReplay } from '../../rxjs';
6
+ import { initIndexSymbol } from '../components/table-container/table-container.helpers/sort-state.helpers';
7
+ import { createDataCleaners } from '../components/table-container/table-container.helpers/data-state.helpers';
8
+ import { assertInInjectionContext, computed, inject, Injector, isSignal, signal, Signal } from '@angular/core';
9
+ import { toSignal } from '@angular/core/rxjs-interop';
10
+ import { TableContainerComponent } from '../components/table-container/table-container.component';
11
+
12
+ export class TableBuilder<T = any> {
13
+ #$metaData!: Signal<MetaData<T>[]>;
14
+ #$data!: Signal<T[]>;
15
+ #$settings! : Signal<TableBuilderSettings>;
16
+
17
+ container = signal<TableContainerComponent | undefined>(undefined);
18
+
19
+ $metaData = computed(() => this.$initialized() ? this.#$metaData() : undefined);
20
+ $settings = computed(() => this.$initialized() ? this.#$settings() : undefined);
21
+ #$metaNeedsPrep = signal(false);
22
+ #$dataIsObservable = signal(false);
23
+ #$settingsIsObservable = signal(false);
24
+ #$needsPrep = computed(() => this.#$dataIsObservable() || this.#$metaNeedsPrep() || this.#$settingsIsObservable());
25
+ $initialized = signal(false);
26
+
27
+ constructor(
28
+ private data: TableBuilderArgs<T[]>,
29
+ private metaData?: TableBuilderArgs<MetaData<T, any>[]>,
30
+ private settings: TableBuilderArgs<TableBuilderSettings<T>> = new GeneralTableSettings()
31
+ ) {
32
+ if(isObservable(data)){
33
+ this.#$dataIsObservable.set(true);
34
+ } else {
35
+ this.#$data = isSignal( data ) ? data : signal(data);
36
+ }
37
+ if(isObservable(metaData) || !metaData){
38
+ this.#$metaNeedsPrep.set(true);
39
+ } else {
40
+ this.#$metaData = isSignal( metaData ) ? metaData : signal(metaData);
41
+ }
42
+ if(isObservable(settings)){
43
+ this.#$settingsIsObservable.set(true);
44
+ } else {
45
+ this.#$settings = isSignal( settings ) ? settings : signal(settings);
46
+ }
47
+ if(!this.#$needsPrep()){
48
+ this.$initialized.set(true);
49
+ } else {
50
+ try {
51
+ assertInInjectionContext(TableBuilder);
52
+ const injector = inject(Injector);
53
+ this.prep(injector);
54
+ } catch { }
55
+ }
56
+ }
57
+ prep(injector: Injector){
58
+ if(this.#$settingsIsObservable()){
59
+ this.#$settings = toSignal(this.settings as any, { injector, requireSync: true });
60
+ }
61
+ if(this.#$dataIsObservable()){
62
+ this.#$data = toSignal(this.data as any, { injector, initialValue: [] });
63
+ }
64
+ if(this.#$metaNeedsPrep()){
65
+ if(this.metaData){
66
+ this.#$metaData = toSignal(this.metaData as any, { injector, initialValue: [] });
67
+ } else {
68
+ this.#$metaData = computed(() => this.createMetaData(this.#$data()[0]))
69
+ }
70
+ }
71
+ this.$initialized.set(true);
72
+ }
73
+ #dataCleaners = computed(() => {
74
+ const metaData = this.$metaData();
75
+ if(!metaData) return undefined;
76
+ return createDataCleaners(metaData);
77
+ });
78
+ $data = computed(() => {
79
+ const data = this.#$data();
80
+ const cleaners = this.#dataCleaners();
81
+ if(!data || !cleaners) return [];
82
+ const cleanedData = data.map((data, i) => {
83
+ const cleaned = cleaners(data);
84
+ cleaned[initIndexSymbol] = i;
85
+ return cleaned;
86
+ })
87
+ return cleanedData;
88
+ });
89
+
90
+ createMetaData(obj: any): MetaData [] {
91
+ return Object.keys(obj ?? {})
92
+ .map( key => ({
93
+ key,
94
+ fieldType: FieldType.Unknown,
95
+ order: -1
96
+ }));
97
+ }
98
+ }
99
+
100
+ export const CreateTableBuilder = (reportDef$: Observable<ReportDef> ): TableBuilder => {
101
+ reportDef$ = reportDef$.pipe(defaultShareReplay());
102
+ return new TableBuilder(reportDef$.pipe(map( r => r.data) ), reportDef$.pipe( map( r => r.metaData) ));
103
+ };
104
+
105
+ type TableBuilderArgs<T> = T | Observable<T> | Signal<T>;
@@ -0,0 +1,104 @@
1
+ import { Dictionary } from "../interfaces/dictionary";
2
+ import { FieldType, MetaData, SortDef } from "../interfaces/report-def";
3
+ import { isCustomFilter } from "./filter-info";
4
+ import { keysToDelete, PersistedTableState, TableState } from "./TableState";
5
+ import { TableBuilderSort } from "../components/table-container/table-container.helpers/sort-state.helpers";
6
+
7
+ export const orderedStateVisibleMetaData = (state: TableState) => {
8
+ const ordered = orderStateMetaData(state);
9
+ const orderedVisible = ordered
10
+ .filter(metaData => !state.hiddenKeys.includes(metaData.key) && state.metaData[metaData.key].fieldType !== FieldType.Hidden);
11
+ return orderedVisible;
12
+ }
13
+
14
+ export const orderedCodeVisibleMetaData = (state: TableState) =>
15
+ orderStateMetaData(state).filter(md => md.fieldType !== FieldType.Hidden);
16
+
17
+ export const orderStateMetaData = (state:TableState) => {
18
+ return orderMetaData(state.metaData, state.userDefined.order);
19
+ }
20
+
21
+ export const orderMetaData = (metaData: Dictionary<MetaData>, userDefined: Dictionary<number>) => {
22
+ const userOrderArr = Object.entries(userDefined);
23
+ return userOrderArr.length ?
24
+ Object.values(metaData).sort((a, b) => {
25
+ const orderA = userDefined[a.key];
26
+ const orderB = userDefined[b.key];
27
+ return order(orderA, orderB);
28
+ })
29
+ :
30
+ Object.values(metaData).sort((a, b) => {
31
+ const orderA = a.order;
32
+ const orderB = b.order;
33
+ return order(orderA, orderB);
34
+ })
35
+ }
36
+
37
+ export function order(orderA: number | undefined, orderB: number | undefined){
38
+ if(orderA == null && orderB == null) {
39
+ return 0;
40
+ }
41
+ if(orderA == null) {
42
+ return 1;
43
+ }
44
+ if(orderB == null) {
45
+ return -1;
46
+ }
47
+ return orderA - orderB;
48
+ }
49
+
50
+ export function cleanPersistedState(state: TableState, pState: PersistedTableState) {
51
+ const metas = Object.values(state.metaData);
52
+ const filters = Object.values(pState.filters).filter(fltr => isCustomFilter(fltr) || metas.some(m => m.key === fltr.key)).reduce((obj: any, filter) => {
53
+ obj[filter.filterId!] = pState.filters[filter.filterId!];
54
+ return obj;
55
+ }, {});
56
+ const sorted = pState.sorted.filter(s => metas.some(m => m.key === s.active));
57
+ return ({ ...pState, filters, sorted })
58
+ }
59
+
60
+ export const mapSaveableState = (s: PersistedTableState) => {
61
+ const savableState = { ...s } as Partial<TableState>;
62
+ keysToDelete.forEach(key => delete savableState[key]);
63
+ return savableState as PersistedTableState;
64
+ }
65
+
66
+ export const createPreSort = (metaDatas: Dictionary<MetaData>): TableBuilderSort[] => {
67
+ return Object.values(metaDatas).filter(( metaData ) : metaData is MetaData & {preSort: SortDef} => !!metaData.preSort)
68
+ .sort(({ preSort: ps1 }, { preSort: ps2 } ) => (ps1.precedence || Number.MAX_VALUE) - ( ps2.precedence || Number.MAX_VALUE))
69
+ .map(( { key, preSort: { direction } } ) => ({ active: key, direction }))
70
+ }
71
+
72
+ export const mergeMeta = (orig: MetaData, merge: MetaData): MetaData => {
73
+ return {
74
+ key: orig.key,
75
+ displayName: merge.displayName ?? orig.displayName,
76
+ fieldType: merge.fieldType || orig.fieldType,
77
+ additional: { ...orig.additional, ...merge.additional },
78
+ order: merge.order ?? orig.order,
79
+ preSort: merge.preSort ?? orig.preSort,
80
+ width: merge.width ?? orig.width,
81
+ noExport: merge.noExport || orig.noExport,
82
+ noFilter: merge.noFilter || orig.noFilter,
83
+ customCell: merge.customCell ?? orig.customCell,
84
+ transform: merge.transform ?? orig.transform,
85
+ map: merge.map ?? orig.map,
86
+ click: merge.click ?? orig.click,
87
+ classes: merge.classes ?? orig.classes,
88
+ noSort: merge.noSort ?? orig.noSort,
89
+ template: merge.template ?? orig.template,
90
+ toolTip: merge.toolTip ?? orig.toolTip,
91
+ useIcon: merge.useIcon ?? orig.useIcon,
92
+ filterLogic: merge.filterLogic ?? orig.filterLogic,
93
+ sortLogic: merge.sortLogic ?? orig.sortLogic
94
+ } as MetaData;
95
+ }
96
+
97
+ export const initializeOrder = (state:TableState, mds: Dictionary<MetaData>) : Dictionary<number> => {
98
+ const viewableMetaDataArr = Object.values(mds).filter(a => a.fieldType !== FieldType.Hidden);
99
+ let userDefinedOrder = state.userDefined.order;
100
+ if(viewableMetaDataArr.some(meta => userDefinedOrder[meta.key] == null)){
101
+ return {}
102
+ }
103
+ return userDefinedOrder;
104
+ }