@one-paragon/angular-utilities 1.2.10 → 1.2.12

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 (406) hide show
  1. package/README.md +24 -24
  2. package/karma.conf.js +44 -0
  3. package/ng-package.json +7 -0
  4. package/package.json +16 -30
  5. package/src/action-state/action-state-spinner/action-state-spinner.component.css +16 -0
  6. package/src/action-state/action-state-spinner/action-state-spinner.component.html +6 -0
  7. package/src/action-state/action-state-spinner/action-state-spinner.component.spec.ts +25 -0
  8. package/src/action-state/action-state-spinner/action-state-spinner.component.ts +26 -0
  9. package/src/action-state/action-state-ui/action-state-ui.module.ts +13 -0
  10. package/{action-state/index.d.ts → src/action-state/index.ts} +8 -4
  11. package/src/action-state/ngrx-ext/ngrx-ext.module.ts +15 -0
  12. package/src/action-state/ngrx.ts +69 -0
  13. package/src/http-request-state/HttpRequestStateFactory.ts +66 -0
  14. package/src/http-request-state/HttpRequestStateStore.ts +173 -0
  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 +72 -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-request-state.ts +69 -0
  25. package/src/http-request-state/http-state-module.ts +23 -0
  26. package/{http-request-state/index.d.ts → src/http-request-state/index.ts} +6 -6
  27. package/src/http-request-state/observable.spec.ts +43 -0
  28. package/src/http-request-state/rxjs/getRequestorBody.ts +10 -0
  29. package/src/http-request-state/rxjs/getRequestorState.ts +8 -0
  30. package/{http-request-state/rxjs/index.d.ts → src/http-request-state/rxjs/index.ts} +4 -4
  31. package/src/http-request-state/rxjs/tapError.ts +16 -0
  32. package/src/http-request-state/rxjs/tapSuccess.ts +16 -0
  33. package/src/http-request-state/strategies.spec.ts +42 -0
  34. package/src/http-request-state/types.ts +55 -0
  35. package/src/ngrx/actionable-selector.ts +95 -0
  36. package/src/ngrx/index.ts +1 -0
  37. package/{public-api.d.ts → src/public-api.ts} +35 -16
  38. package/src/rxjs/defaultShareReplay.ts +8 -0
  39. package/{rxjs/index.d.ts → src/rxjs/index.ts} +5 -5
  40. package/src/rxjs/mapError.ts +8 -0
  41. package/src/rxjs/rxjs-operators.ts +132 -0
  42. package/src/rxjs/subjectifier.ts +17 -0
  43. package/src/rxjs/subscriber.directive.ts +57 -0
  44. package/src/specs/clickSubject.spec.ts +95 -0
  45. package/src/specs/dialog.spec.ts +101 -0
  46. package/src/specs/toggleGroupDirective.spec.ts +229 -0
  47. package/src/table-builder/classes/DefaultSettings.ts +11 -0
  48. package/src/table-builder/classes/MatTableObservableDataSource.ts +23 -0
  49. package/src/table-builder/classes/TableBuilderConfig.ts +35 -0
  50. package/src/table-builder/classes/TableBuilderDataSource.ts +80 -0
  51. package/src/table-builder/classes/TableState.ts +96 -0
  52. package/src/table-builder/classes/data-store.ts +10 -0
  53. package/{table-builder/classes/display-col.d.ts → src/table-builder/classes/display-col.ts} +5 -5
  54. package/src/table-builder/classes/filter-info.ts +108 -0
  55. package/src/table-builder/classes/table-builder-general-settings.ts +129 -0
  56. package/src/table-builder/classes/table-builder.ts +94 -0
  57. package/src/table-builder/classes/table-store.ts +471 -0
  58. package/src/table-builder/components/array-column.component.ts +36 -0
  59. package/src/table-builder/components/column-builder/column-builder.component.html +61 -0
  60. package/src/table-builder/components/column-builder/column-builder.component.scss +43 -0
  61. package/src/table-builder/components/column-builder/column-builder.component.spec.ts +49 -0
  62. package/src/table-builder/components/column-builder/column-builder.component.ts +135 -0
  63. package/src/table-builder/components/column-builder/column-helpers.ts +53 -0
  64. package/src/table-builder/components/date-filter/date-filter.component.html +23 -0
  65. package/src/table-builder/components/date-filter/date-filter.component.ts +24 -0
  66. package/src/table-builder/components/date-time-filter/date-time-filter.component.html +9 -0
  67. package/src/table-builder/components/date-time-filter/date-time-filter.component.ts +22 -0
  68. package/src/table-builder/components/filter/filter.component.html +91 -0
  69. package/src/table-builder/components/filter/filter.component.scss +64 -0
  70. package/src/table-builder/components/filter/filter.component.spec.ts +87 -0
  71. package/src/table-builder/components/filter/filter.component.ts +60 -0
  72. package/src/table-builder/components/filter/in-list/in-list-filter.component.ts +93 -0
  73. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.html +55 -0
  74. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.scss +57 -0
  75. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.ts +59 -0
  76. package/src/table-builder/components/generic-table/generic-table.component.html +78 -0
  77. package/src/table-builder/components/generic-table/generic-table.component.scss +42 -0
  78. package/src/table-builder/components/generic-table/generic-table.component.ts +299 -0
  79. package/src/table-builder/components/generic-table/paginator.component.ts +99 -0
  80. package/src/table-builder/components/group-by-list/group-by-list.component.css +8 -0
  81. package/src/table-builder/components/group-by-list/group-by-list.component.html +12 -0
  82. package/src/table-builder/components/group-by-list/group-by-list.component.spec.ts +23 -0
  83. package/src/table-builder/components/group-by-list/group-by-list.component.ts +21 -0
  84. package/src/table-builder/components/header-menu/header-menu.component.html +104 -0
  85. package/src/table-builder/components/header-menu/header-menu.component.scss +96 -0
  86. package/src/table-builder/components/header-menu/header-menu.component.ts +99 -0
  87. package/src/table-builder/components/in-filter/in-filter.component.css +3 -0
  88. package/src/table-builder/components/in-filter/in-filter.component.html +20 -0
  89. package/src/table-builder/components/in-filter/in-filter.component.ts +66 -0
  90. package/{table-builder/components/index.d.ts → src/table-builder/components/index.ts} +9 -9
  91. package/src/table-builder/components/initialization-component/initialization-component.html +29 -0
  92. package/src/table-builder/components/initialization-component/initialization-component.ts +24 -0
  93. package/src/table-builder/components/link-column.component.ts +47 -0
  94. package/src/table-builder/components/number-filter/number-filter.component.css +10 -0
  95. package/src/table-builder/components/number-filter/number-filter.component.html +19 -0
  96. package/src/table-builder/components/number-filter/number-filter.component.spec.ts +30 -0
  97. package/src/table-builder/components/number-filter/number-filter.component.ts +25 -0
  98. package/src/table-builder/components/profiles-menu/profiles-menu.component.html +74 -0
  99. package/src/table-builder/components/profiles-menu/profiles-menu.component.scss +98 -0
  100. package/src/table-builder/components/profiles-menu/profiles-menu.component.spec.ts +23 -0
  101. package/src/table-builder/components/profiles-menu/profiles-menu.component.ts +65 -0
  102. package/src/table-builder/components/scroll-strategy.ts +76 -0
  103. package/src/table-builder/components/sort-menu/sort-menu.component-store.ts +66 -0
  104. package/src/table-builder/components/sort-menu/sort-menu.component.html +111 -0
  105. package/src/table-builder/components/sort-menu/sort-menu.component.scss +119 -0
  106. package/src/table-builder/components/sort-menu/sort-menu.component.ts +98 -0
  107. package/{table-builder/components/table-container/table-container-imports.d.ts → src/table-builder/components/table-container/table-container-imports.ts} +32 -14
  108. package/src/table-builder/components/table-container/table-container.css +54 -0
  109. package/src/table-builder/components/table-container/table-container.helpers/data-state.helpers.ts +141 -0
  110. package/src/table-builder/components/table-container/table-container.helpers/filter-state.helpers.ts +106 -0
  111. package/src/table-builder/components/table-container/table-container.helpers/groupBy.helpers.ts +86 -0
  112. package/src/table-builder/components/table-container/table-container.helpers/sort-state.helpers.ts +45 -0
  113. package/src/table-builder/components/table-container/table-container.html +95 -0
  114. package/src/table-builder/components/table-container/table-container.spec.ts +154 -0
  115. package/src/table-builder/components/table-container/table-container.ts +356 -0
  116. package/src/table-builder/components/table-container/tableProps.ts +20 -0
  117. package/src/table-builder/components/table-container/virtual-scroll-container.ts +145 -0
  118. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.html +31 -0
  119. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.ts +46 -0
  120. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.css +42 -0
  121. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.html +10 -0
  122. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.spec.ts +86 -0
  123. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.ts +34 -0
  124. package/src/table-builder/components/table-container-filter/table-wrapper-filter-store.ts +23 -0
  125. package/src/table-builder/directives/custom-cell-directive.ts +58 -0
  126. package/{table-builder/directives/index.d.ts → src/table-builder/directives/index.ts} +6 -5
  127. package/src/table-builder/directives/multi-sort.directive.spec.ts +124 -0
  128. package/src/table-builder/directives/multi-sort.directive.ts +51 -0
  129. package/src/table-builder/directives/resize-column.directive.ts +108 -0
  130. package/src/table-builder/directives/table-wrapper.directive.ts +14 -0
  131. package/src/table-builder/directives/tb-filter.directive.ts +396 -0
  132. package/src/table-builder/enums/filterTypes.ts +40 -0
  133. package/src/table-builder/functions/boolean-filter-function.ts +12 -0
  134. package/src/table-builder/functions/date-filter-function.ts +68 -0
  135. package/src/table-builder/functions/download-data.ts +11 -0
  136. package/src/table-builder/functions/null-filter-function.ts +9 -0
  137. package/src/table-builder/functions/number-filter-function.ts +41 -0
  138. package/src/table-builder/functions/sort-data-function.ts +23 -0
  139. package/src/table-builder/functions/string-filter-function.ts +51 -0
  140. package/{table-builder/interfaces/ColumnInfo.d.ts → src/table-builder/interfaces/ColumnInfo.ts} +7 -6
  141. package/src/table-builder/interfaces/column-template.ts +9 -0
  142. package/{table-builder/interfaces/dictionary.d.ts → src/table-builder/interfaces/dictionary.ts} +3 -3
  143. package/src/table-builder/interfaces/report-def.ts +155 -0
  144. package/src/table-builder/ngrx/tableBuilderStateStore.ts +199 -0
  145. package/src/table-builder/pipes/column-total.pipe.ts +17 -0
  146. package/src/table-builder/pipes/format-filter-type.pipe.ts +12 -0
  147. package/src/table-builder/pipes/format-filter-value.pipe.ts +42 -0
  148. package/src/table-builder/pipes/key-display.ts +16 -0
  149. package/src/table-builder/services/export-to-csv.service.ts +97 -0
  150. package/src/table-builder/services/link-creator.service.ts +67 -0
  151. package/src/table-builder/services/table-template-service.ts +59 -0
  152. package/src/table-builder/services/transform-creator.ts +95 -0
  153. package/src/table-builder/specs/table-custom-filters.spec.ts +262 -0
  154. package/src/table-builder/styles/collapser.styles.scss +16 -0
  155. package/src/table-builder/table-builder.module.ts +73 -0
  156. package/src/test.ts +17 -0
  157. package/src/utilities/array-helpers.ts +13 -0
  158. package/src/utilities/directives/auto-focus.directive.ts +21 -0
  159. package/src/utilities/directives/clickEmitterDirective.ts +16 -0
  160. package/src/utilities/directives/clickSubject.ts +20 -0
  161. package/src/utilities/directives/conditional-classes.directive.ts +36 -0
  162. package/src/utilities/directives/dialog-service.ts +19 -0
  163. package/src/utilities/directives/dialog.ts +144 -0
  164. package/src/utilities/directives/mat-toggle-group-directive.ts +61 -0
  165. package/src/utilities/directives/prevent-enter.directive.ts +13 -0
  166. package/src/utilities/directives/stop-propagation.directive.ts +20 -0
  167. package/src/utilities/directives/styler.ts +40 -0
  168. package/src/utilities/directives/trim-whitespace.directive.ts +21 -0
  169. package/{utilities/index.d.ts → src/utilities/index.ts} +22 -15
  170. package/src/utilities/module.ts +55 -0
  171. package/src/utilities/pipes/function.pipe.ts +16 -0
  172. package/src/utilities/pipes/phone.pipe.ts +15 -0
  173. package/src/utilities/pipes/space-case.pipes.spec.ts +47 -0
  174. package/src/utilities/pipes/space-case.pipes.ts +23 -0
  175. package/tsconfig.lib.json +19 -0
  176. package/tsconfig.lib.prod.json +10 -0
  177. package/tsconfig.spec.json +17 -0
  178. package/action-state/action-state-spinner/action-state-spinner.component.d.ts +0 -12
  179. package/action-state/action-state-ui/action-state-ui.module.d.ts +0 -7
  180. package/action-state/ngrx-ext/ngrx-ext.module.d.ts +0 -8
  181. package/action-state/ngrx.d.ts +0 -31
  182. package/esm2022/action-state/action-state-spinner/action-state-spinner.component.mjs +0 -24
  183. package/esm2022/action-state/action-state-ui/action-state-ui.module.mjs +0 -20
  184. package/esm2022/action-state/index.mjs +0 -8
  185. package/esm2022/action-state/ngrx-ext/ngrx-ext.module.mjs +0 -23
  186. package/esm2022/action-state/ngrx.mjs +0 -47
  187. package/esm2022/http-request-state/HttpRequestStateFactory.mjs +0 -51
  188. package/esm2022/http-request-state/HttpRequestStateStore.mjs +0 -121
  189. package/esm2022/http-request-state/directives/HttpStateDirectiveBase.mjs +0 -30
  190. package/esm2022/http-request-state/directives/http-error-state-directive.mjs +0 -23
  191. package/esm2022/http-request-state/directives/http-inProgress-state-directive.mjs +0 -23
  192. package/esm2022/http-request-state/directives/http-notStarted-state-directive.mjs +0 -23
  193. package/esm2022/http-request-state/directives/http-success-state-directive.mjs +0 -29
  194. package/esm2022/http-request-state/directives/index.mjs +0 -6
  195. package/esm2022/http-request-state/directives/request-state-directive.mjs +0 -61
  196. package/esm2022/http-request-state/helpers.mjs +0 -22
  197. package/esm2022/http-request-state/http-request-state.mjs +0 -39
  198. package/esm2022/http-request-state/http-state-module.mjs +0 -40
  199. package/esm2022/http-request-state/index.mjs +0 -7
  200. package/esm2022/http-request-state/rxjs/getRequestorBody.mjs +0 -4
  201. package/esm2022/http-request-state/rxjs/getRequestorState.mjs +0 -3
  202. package/esm2022/http-request-state/rxjs/index.mjs +0 -5
  203. package/esm2022/http-request-state/rxjs/tapError.mjs +0 -12
  204. package/esm2022/http-request-state/rxjs/tapSuccess.mjs +0 -12
  205. package/esm2022/http-request-state/types.mjs +0 -16
  206. package/esm2022/ngrx/actionable-selector.mjs +0 -71
  207. package/esm2022/ngrx/index.mjs +0 -2
  208. package/esm2022/one-paragon-angular-utilities.mjs +0 -5
  209. package/esm2022/public-api.mjs +0 -20
  210. package/esm2022/rxjs/defaultShareReplay.mjs +0 -7
  211. package/esm2022/rxjs/index.mjs +0 -6
  212. package/esm2022/rxjs/mapError.mjs +0 -8
  213. package/esm2022/rxjs/rxjs-operators.mjs +0 -92
  214. package/esm2022/rxjs/subjectifier.mjs +0 -15
  215. package/esm2022/rxjs/subscriber.directive.mjs +0 -50
  216. package/esm2022/table-builder/classes/DefaultSettings.mjs +0 -6
  217. package/esm2022/table-builder/classes/MatTableObservableDataSource.mjs +0 -23
  218. package/esm2022/table-builder/classes/TableBuilderConfig.mjs +0 -18
  219. package/esm2022/table-builder/classes/TableBuilderDataSource.mjs +0 -48
  220. package/esm2022/table-builder/classes/TableState.mjs +0 -47
  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 -102
  224. package/esm2022/table-builder/classes/table-builder.mjs +0 -77
  225. package/esm2022/table-builder/classes/table-store.mjs +0 -362
  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 -47
  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 -53
  234. package/esm2022/table-builder/components/generic-table/generic-table.component.mjs +0 -261
  235. package/esm2022/table-builder/components/generic-table/paginator.component.mjs +0 -96
  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 -44
  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 -305
  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 -126
  255. package/esm2022/table-builder/components/table-container-filter/filter-list/filter-list.component.mjs +0 -45
  256. package/esm2022/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.mjs +0 -38
  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 -74
  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 -405
  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 -85
  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 -5564
  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 -21
  331. package/table-builder/classes/TableBuilderDataSource.d.ts +0 -13
  332. package/table-builder/classes/TableState.d.ts +0 -57
  333. package/table-builder/classes/filter-info.d.ts +0 -35
  334. package/table-builder/classes/table-builder-general-settings.d.ts +0 -74
  335. package/table-builder/classes/table-builder.d.ts +0 -18
  336. package/table-builder/classes/table-store.d.ts +0 -148
  337. package/table-builder/components/array-column.component.d.ts +0 -15
  338. package/table-builder/components/column-builder/column-builder.component.d.ts +0 -47
  339. package/table-builder/components/column-builder/column-helpers.d.ts +0 -36
  340. package/table-builder/components/date-filter/date-filter.component.d.ts +0 -37
  341. package/table-builder/components/date-time-filter/date-time-filter.component.d.ts +0 -37
  342. package/table-builder/components/filter/filter.component.d.ts +0 -46
  343. package/table-builder/components/filter/in-list/in-list-filter.component.d.ts +0 -24
  344. package/table-builder/components/gen-col-displayer/gen-col-displayer.component.d.ts +0 -15
  345. package/table-builder/components/generic-table/generic-table.component.d.ts +0 -72
  346. package/table-builder/components/generic-table/paginator.component.d.ts +0 -28
  347. package/table-builder/components/group-by-list/group-by-list.component.d.ts +0 -7
  348. package/table-builder/components/header-menu/header-menu.component.d.ts +0 -51
  349. package/table-builder/components/in-filter/in-filter.component.d.ts +0 -20
  350. package/table-builder/components/initialization-component/initialization-component.d.ts +0 -13
  351. package/table-builder/components/link-column.component.d.ts +0 -25
  352. package/table-builder/components/number-filter/number-filter.component.d.ts +0 -39
  353. package/table-builder/components/profiles-menu/profiles-menu.component.d.ts +0 -32
  354. package/table-builder/components/scroll-strategy.d.ts +0 -22
  355. package/table-builder/components/sort-menu/sort-menu.component-store.d.ts +0 -23
  356. package/table-builder/components/sort-menu/sort-menu.component.d.ts +0 -24
  357. package/table-builder/components/table-container/table-container.d.ts +0 -77
  358. package/table-builder/components/table-container/table-container.helpers/data-state.helpers.d.ts +0 -6
  359. package/table-builder/components/table-container/table-container.helpers/filter-state.helpers.d.ts +0 -17
  360. package/table-builder/components/table-container/table-container.helpers/groupBy.helpers.d.ts +0 -17
  361. package/table-builder/components/table-container/table-container.helpers/sort-state.helpers.d.ts +0 -8
  362. package/table-builder/components/table-container/tableProps.d.ts +0 -12
  363. package/table-builder/components/table-container/virtual-scroll-container.d.ts +0 -21
  364. package/table-builder/components/table-container-filter/filter-list/filter-list.component.d.ts +0 -16
  365. package/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.d.ts +0 -14
  366. package/table-builder/components/table-container-filter/table-wrapper-filter-store.d.ts +0 -14
  367. package/table-builder/directives/custom-cell-directive.d.ts +0 -31
  368. package/table-builder/directives/multi-sort.directive.d.ts +0 -10
  369. package/table-builder/directives/resize-column.directive.d.ts +0 -43
  370. package/table-builder/directives/table-wrapper.directive.d.ts +0 -8
  371. package/table-builder/directives/tb-filter.directive.d.ts +0 -116
  372. package/table-builder/enums/filterTypes.d.ts +0 -36
  373. package/table-builder/functions/boolean-filter-function.d.ts +0 -3
  374. package/table-builder/functions/date-filter-function.d.ts +0 -4
  375. package/table-builder/functions/download-data.d.ts +0 -1
  376. package/table-builder/functions/null-filter-function.d.ts +0 -2
  377. package/table-builder/functions/number-filter-function.d.ts +0 -4
  378. package/table-builder/functions/sort-data-function.d.ts +0 -6
  379. package/table-builder/functions/string-filter-function.d.ts +0 -5
  380. package/table-builder/interfaces/report-def.d.ts +0 -147
  381. package/table-builder/ngrx/tableBuilderStateStore.d.ts +0 -70
  382. package/table-builder/pipes/column-total.pipe.d.ts +0 -8
  383. package/table-builder/pipes/format-filter-type.pipe.d.ts +0 -8
  384. package/table-builder/pipes/format-filter-value.pipe.d.ts +0 -12
  385. package/table-builder/pipes/key-display.d.ts +0 -10
  386. package/table-builder/services/export-to-csv.service.d.ts +0 -19
  387. package/table-builder/services/link-creator.service.d.ts +0 -16
  388. package/table-builder/services/table-template-service.d.ts +0 -14
  389. package/table-builder/services/transform-creator.d.ts +0 -16
  390. package/table-builder/table-builder.module.d.ts +0 -21
  391. package/utilities/array-helpers.d.ts +0 -1
  392. package/utilities/directives/auto-focus.directive.d.ts +0 -9
  393. package/utilities/directives/clickEmitterDirective.d.ts +0 -7
  394. package/utilities/directives/clickSubject.d.ts +0 -9
  395. package/utilities/directives/conditional-classes.directive.d.ts +0 -13
  396. package/utilities/directives/dialog-service.d.ts +0 -10
  397. package/utilities/directives/dialog.d.ts +0 -44
  398. package/utilities/directives/mat-toggle-group-directive.d.ts +0 -21
  399. package/utilities/directives/prevent-enter.directive.d.ts +0 -6
  400. package/utilities/directives/stop-propagation.directive.d.ts +0 -7
  401. package/utilities/directives/styler.d.ts +0 -15
  402. package/utilities/directives/trim-whitespace.directive.d.ts +0 -7
  403. package/utilities/module.d.ts +0 -19
  404. package/utilities/pipes/function.pipe.d.ts +0 -7
  405. package/utilities/pipes/phone.pipe.d.ts +0 -7
  406. package/utilities/pipes/space-case.pipes.d.ts +0 -17
@@ -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
+ } from '@angular/core';
23
+ import { BehaviorSubject, Observable, ReplaySubject, combineLatest, of } from 'rxjs';
24
+ import { ArrayAdditional, FieldType, MetaData } from '../../interfaces/report-def';
25
+ import { map, tap, withLatestFrom, mergeAll, scan, switchAll, startWith, timestamp, mergeMap, filter, switchMap } from 'rxjs/operators';
26
+ import { TableBuilder } from '../../classes/table-builder';
27
+ import { MatRowDef } from '@angular/material/table';
28
+ import { CustomCellDirective, TableCustomFilterDirective, TableFilterDirective } from '../../directives';
29
+ import { stateIs, TableStore } from '../../classes/table-store';
30
+ import { notNull } from '../../../rxjs/rxjs-operators';
31
+ import { ExportToCsvService } from '../../services/export-to-csv.service';
32
+ import { ArrayDefaults } from '../../classes/DefaultSettings';
33
+ import { TableBuilderConfigToken } from '../../classes/TableBuilderConfig';
34
+ import { InitializationState, TableState } from '../../classes/TableState';
35
+ import { sortData } from '../../functions/sort-data-function';
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
+
56
+
57
+ @Component({
58
+ selector: 'tb-table-container',
59
+ templateUrl: './table-container.html',
60
+ styleUrls: ['./table-container.css', '../../styles/collapser.styles.scss'],
61
+ changeDetection: ChangeDetectionStrategy.OnPush,
62
+ providers: [TableStore, ExportToCsvService, WrapperFilterStore, DataStore],
63
+ standalone: true,
64
+ imports: containerImports
65
+ }) export class TableContainerComponent<T = any> implements OnInit, OnDestroy {
66
+ props: TableProps = { ...defaultProps };
67
+ dataSubject = new ReplaySubject<Observable<T[]>>(1);
68
+
69
+ public state = inject(TableStore);
70
+ private dataStore = inject(DataStore);
71
+ public config = inject(TableBuilderConfigToken);
72
+ public exportToCsvService = inject(ExportToCsvService<T>);
73
+ public wrapper = inject(TableWrapperDirective, { optional: true });
74
+ public stateService = inject(TableBuilderStateStore);
75
+ public injector = inject(Injector);
76
+
77
+ filterDirectives = contentChildren(TableFilterDirective, {descendants: true});
78
+ customFilterDirectives = contentChildren(TableCustomFilterDirective, {descendants: true});
79
+
80
+ allFilterDirectives = computed( () => {
81
+ if(this.wrapper) {
82
+ return [...this.filterDirectives(), ...this.customFilterDirectives(), ...this.wrapper.$registrations()];
83
+ } {
84
+ return [...this.filterDirectives(), ...this.customFilterDirectives()];
85
+ }
86
+ }
87
+ );
88
+
89
+
90
+ tableState = toSignal(this.state.state$.pipe(filter(stateIs(InitializationState.LoadedFromStore)))) ;
91
+
92
+ allFilterDirectivesEffect = effect(() => {
93
+ const state = this.tableState();
94
+ untracked(() => {
95
+ if(state) {
96
+ this.allFilterDirectives().filter( f => !f.used).forEach( f => {
97
+ f.used = true;
98
+ if(f.savable) {
99
+ var filter = state.filters[f.filterId];
100
+ if(isFilterInfo(filter)) {
101
+ const filterDirective: TableFilterDirective = f as TableFilterDirective;
102
+ filterDirective.fieldType = filter.fieldType;
103
+ filterDirective.filterType = filter.filterType;
104
+ filterDirective.setFilterValue(filter.filterValue);
105
+ filterDirective.key = filter.key;
106
+ filterDirective.update();
107
+ }
108
+ if(isCustomFilter(filter)) {
109
+ f.active = filter.active ?? false;
110
+ }
111
+ this.state.addFilter((f.filter$ as any));
112
+ }
113
+ });
114
+ }
115
+ })
116
+ });
117
+
118
+ @ViewChild(PaginatorComponent) paginatorComponent?: PaginatorComponent;
119
+ @ViewChild(GenericTableComponent) genericTable?: GenericTableComponent;
120
+ @ContentChildren(MatRowDef) customRows!: QueryList<MatRowDef<any>>;
121
+ $customCells = contentChildren(CustomCellDirective);
122
+ $myColumns = computed(() => {
123
+ return this.state.$metaDataArray().map( metaData => ({metaData, customCell: this.$customCells().find(cc => cc.customCell === metaData.key)}))
124
+ })
125
+ @ContentChild('table', {read: ElementRef}) tableElRef!: ElementRef;
126
+
127
+ @Input({ required: true }) tableBuilder!: TableBuilder;
128
+ @Input() tableId!: string;
129
+ @Input() set indexColumn(val: boolean) {
130
+ this.props.indexColumn = val;
131
+ }
132
+ @Input() set selectionColumn(val: boolean) {
133
+ this.props.selectionColumn = val;
134
+ }
135
+ @Input() set isSticky(val: boolean) {
136
+ this.props.isSticky = val;
137
+ }
138
+ @Input() set stickyFooter(val: boolean) {
139
+ this.props.stickyFooter = val;
140
+ }
141
+ @Input() set pageSize(value: number) {
142
+ this.state.setPageSize(value);
143
+ }
144
+ @Input() set groupHeaderTemplate( template: TemplateRef<any>) {
145
+ this.props.groupHeaderTemplate = template;
146
+ }
147
+ @Input() set groupHeaderHeight(value: number) {
148
+ this.props.groupHeaderHeight = value;
149
+ }
150
+ @Input() trackBy!: string;
151
+ @Input() inputFilters?: Observable<Array<Predicate<T>>>;
152
+
153
+ @Output() selection$ = new EventEmitter();
154
+ @Output() data = this.dataSubject.pipe(
155
+ switchAll(),
156
+ startWith([] as T[]),
157
+ defaultShareReplay(),
158
+ );
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
+ displayDataSubject = new ReplaySubject<Observable<T[]>>(1);
170
+ displayData = this.displayDataSubject.pipe(
171
+ switchAll(),
172
+ defaultShareReplay(),
173
+ );
174
+ $displayData = toSignal(this.displayData, { initialValue: [] });
175
+
176
+
177
+
178
+ collapseFooter$ = this.state.state$.pipe(map(state => state.persistedTableSettings.collapseFooter));
179
+
180
+
181
+
182
+
183
+ ngOnDestroy(){
184
+ if(this.tableId) {
185
+ this.stateService.saveTableStateToLocal({ tableId:this.tableId, tableState: this.state.getSavableStateSignal() });
186
+ }
187
+ }
188
+
189
+ firstPage(): void {
190
+ this.paginatorComponent?.paginator?.firstPage();
191
+ }
192
+
193
+ lastPage(): void {
194
+ this.paginatorComponent?.paginator?.lastPage();
195
+ }
196
+
197
+ resetState() {
198
+ this.customFilterDirectives().forEach( cf => cf.reset());
199
+ this.filterDirectives().forEach( cf => cf.reset() );
200
+ this.state.resetState();
201
+ this.onStateReset.next(null)
202
+ }
203
+
204
+ initializeState() {
205
+ this.state.setTableSettings(this.tableBuilder.settings);
206
+ this.state.runOnceWhen(
207
+ stateIs(InitializationState.MetaDataLoaded),
208
+ () => {
209
+ if(this.tableId) {
210
+ const persistedState$ = toObservable(this.stateService.$selectLocalTableStateForView(this.tableId), {injector: this.injector}).pipe(
211
+ tap( persistedState => {
212
+ if(!persistedState) {
213
+ this.state.setInitializationState(InitializationState.LoadedFromStore);
214
+ }
215
+ }),
216
+ notNull(),
217
+ );
218
+ this.state.updateStateFromPersistedState(persistedState$.pipe(notNull()));
219
+ } else {
220
+ this.state.setInitializationState(InitializationState.LoadedFromStore);
221
+ }
222
+ });
223
+ }
224
+ customFilters$ = new BehaviorSubject<Predicate<T>[]>([]);
225
+ initializeData() {
226
+
227
+ const predicateFilters$ = combineLatest([this.inputFilters?.pipe(startWith([])) ?? of([] as Predicate<T>[]), this.customFilters$])
228
+ .pipe(map(([a, b]) => [...a, ...b]));
229
+
230
+ const filters$ = combineLatest([
231
+ this.state.filters$.pipe(scan(updateFilterInfoState, { allFilters: {} }), timestamp()),
232
+ predicateFilters$.pipe(scan(updateFilterPredicateState, {allFilters: [] as Predicate<T>[]}), timestamp())
233
+ ])
234
+ .pipe(
235
+ map(([filterInfo, pred]) => updateFilterState(filterInfo, pred))
236
+ );
237
+
238
+ const sortsState$ = this.state.sort$.pipe(scan(updateSortState, initialSortState));
239
+
240
+ const sortedAndFilteredData$ = sortAndFilterData(this.tableBuilder.getData$(), sortsState$, filters$);
241
+
242
+ const flatGrouped$ = combineLatest([sortedAndFilteredData$.pipe(timestamp()), this.state.groupByKeys$.pipe(timestamp()), this.state.expandedGroups$.pipe(timestamp())]).pipe(
243
+ scan(updateGroupByState, initialGroupByState),
244
+ map(({displayData}) => displayData),
245
+ defaultShareReplay(),
246
+ );
247
+
248
+ this.displayDataSubject.next(flatGrouped$);
249
+ this.dataSubject.next(sortedAndFilteredData$);
250
+
251
+ this.state.on(this.displayData, (data) => {
252
+ this.dataStore.patchState({dataLen: data.length})
253
+ });
254
+ }
255
+ ngOnInit() {
256
+ const customCells$ = toObservable(this.$customCells, { injector: this.injector });
257
+ this.state.setLinkMaps(this.tableBuilder.metaData$!.pipe(
258
+ map(createLinkCreatorDict)
259
+ ));
260
+ const c = customCells$.pipe(switchMap(c => c.length ? combineLatest(c.map(c => c.$metaData)) : of([] as MetaData[])));
261
+ this.state.setMetaData(combineLatest([this.tableBuilder.metaData$, c]).pipe(map(([mds, customCells]) => {
262
+ mds = mds.map(this.mapArrayFieldsMetaDatas);
263
+ return [
264
+ ...mds,
265
+ ...customCells.map( md => this.mergeMetaData(md, mds.find( item => item.key === md.key ) ))
266
+ ]
267
+ })))
268
+ const ds = new TableBuilderDataSource<T>(
269
+ this.displayData,
270
+ this.state,
271
+ this.dataStore
272
+ );
273
+ this.state.updateState({props: {
274
+ dataSource: ds,
275
+ ...this.props
276
+ }})
277
+ this.initializeState();
278
+ this.initializeData();
279
+ }
280
+
281
+ mergeMetaData(metaData1: MetaData, metaData2?: MetaData) {
282
+ if(!metaData2){
283
+ metaData1.noExport = true;
284
+ return metaData1
285
+ }
286
+ if(!metaData1.displayName) metaData1.displayName = metaData2.displayName;
287
+ if(!metaData1.preSort) metaData1.preSort = metaData2.preSort;
288
+ if(!metaData1.order) metaData1.order = metaData2.order;
289
+ if(!metaData1.width) metaData1.width = metaData2.width;
290
+ if(metaData2.fieldType) metaData1.fieldType = metaData2.fieldType;
291
+ metaData1.noExport = !metaData2;
292
+ return metaData1;
293
+ }
294
+
295
+ exportToCsv(): void {
296
+ const sorted = this.data.pipe(
297
+ withLatestFrom(this.state.sort$),
298
+ map(([data, sorted]) => sortData(data, sorted))
299
+ );
300
+ this.exportToCsvService.exportToCsv(sorted);
301
+ }
302
+
303
+ expandAllGroups = () => {
304
+ const groupHeaders = getAllGroupHeaderNames(this.$displayData());
305
+ this.state.expandAllOfGroup({ groupHeadersByKey: groupHeaders });
306
+ }
307
+
308
+ collapseAllGroups = () => this.state.collapseAll();
309
+
310
+ ngAfterContentInit() {
311
+ this.state.runOnceWhen(
312
+ stateIs(InitializationState.LoadedFromStore),
313
+ state => {
314
+ this.addFilterDirectives(state);
315
+ this.state.updateState({ initializationState: InitializationState.Ready });
316
+ });
317
+ }
318
+
319
+
320
+ mapArrayFieldsMetaDatas = (meta : MetaData<T>) => {
321
+ if(meta.fieldType === FieldType.Array){
322
+ const additional = {...meta.additional} as ArrayAdditional;
323
+ additional.arrayStyle = additional?.arrayStyle ?? ArrayDefaults.arrayStyle;
324
+ additional.limit = additional.limit ?? this.config.arrayInfo?.limit ?? ArrayDefaults.limit;
325
+ return {...meta,additional}
326
+ }
327
+ return meta;
328
+ }
329
+
330
+ collapseHeader$ = this.state.state$.pipe(map(state => state.persistedTableSettings.collapseHeader));
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
+ }
@@ -0,0 +1,145 @@
1
+ import { ChangeDetectionStrategy, Component, ElementRef, OnDestroy, effect, forwardRef, untracked, viewChild, inject } from '@angular/core';
2
+ import {
3
+ CdkVirtualScrollViewport,
4
+ ScrollingModule,
5
+ VIRTUAL_SCROLL_STRATEGY,
6
+ } from '@angular/cdk/scrolling';
7
+ import { combineLatest, distinctUntilChanged, map } from 'rxjs';
8
+ import { defaultShareReplay, subscriber } from '../../../rxjs';
9
+ import { TableStore } from '../../classes/table-store';
10
+ import { TableVirtualScrollStrategy } from '../scroll-strategy';
11
+ import { VirtualScrollOptions } from '../../classes/table-builder-general-settings';
12
+ import { DataStore } from '../../classes/data-store';
13
+
14
+ @Component({
15
+ selector: 'tb-virtual-scroll-container',
16
+ template: `
17
+ <cdk-virtual-scroll-viewport>
18
+ <ng-content/>
19
+ </cdk-virtual-scroll-viewport>
20
+ `,
21
+ changeDetection: ChangeDetectionStrategy.OnPush,
22
+ standalone: true,
23
+ imports: [ScrollingModule],
24
+ viewProviders: [
25
+ {
26
+ provide: VIRTUAL_SCROLL_STRATEGY,
27
+ useFactory: (c: VirtualScrollContainer) => c.scrollStrategy,
28
+ deps: [forwardRef(() => VirtualScrollContainer)],
29
+ },
30
+ ],
31
+ })
32
+ export class VirtualScrollContainer implements OnDestroy {
33
+ private state = inject(TableStore);
34
+ private dataStore = inject(DataStore);
35
+
36
+ viewport = viewChild(CdkVirtualScrollViewport);
37
+
38
+ defaultOptions = new VirtualScrollOptions();
39
+ scrollStrategy = new TableVirtualScrollStrategy(
40
+ this.computedRowHeight(),
41
+ this.computedHeaderHeight()
42
+ );
43
+
44
+
45
+ dataLength$ = combineLatest([this.state.state$, this.dataStore.state$]).pipe(
46
+ map(([s, d]) => ({
47
+ paginated: s.notPersistedTableSettings.usePaginator && !s.showAll,
48
+ pageSize: s.userDefined?.pageSize || s.pageSize,
49
+ pageNumber: s.currentPage,
50
+ dataLen: d.dataLen
51
+ })),
52
+ distinctUntilChanged((a, b) =>
53
+ a.dataLen === b.dataLen &&
54
+ a.pageSize === b.pageSize &&
55
+ a.pageNumber === b.pageNumber &&
56
+ a.paginated === b.paginated),
57
+ map(({dataLen, pageNumber, pageSize, paginated}) => {
58
+ if(paginated) return Math.min(dataLen - (pageNumber * pageSize), pageSize);
59
+ return dataLen;
60
+ }),
61
+ distinctUntilChanged()
62
+ );
63
+
64
+
65
+ subscriber = subscriber(this.dataLength$, (dataLength) => {
66
+ this.scrollStrategy.setDataLength(dataLength);
67
+
68
+ if(this.viewport()){
69
+ this.setSize(this.viewport()!.elementRef);
70
+ }
71
+ });
72
+
73
+
74
+ _ = effect(() => {
75
+ const viewport = this.viewport();
76
+ untracked(() => {
77
+ if(!!viewport){
78
+ addEventListener('resize', this.resizeHandler);
79
+ this.subscriber.on(viewport.renderedRangeStream, (range) => {
80
+ this.dataStore.patchState({
81
+ virtualEnds: {
82
+ start: range.start,
83
+ end: range.end + 25,
84
+ }
85
+ });
86
+ });
87
+ var offset$ = viewport.scrolledIndexChange.pipe(
88
+ map(() => viewport.getOffsetToRenderedContentStart() ?? 0),
89
+ distinctUntilChanged(),
90
+ defaultShareReplay()
91
+ );
92
+
93
+ this.subscriber.on(offset$, (offset) => {
94
+ this.dataStore.patchState({ virtualScrollOffset: offset });
95
+ });
96
+ this.setSize(this.viewport()!.elementRef);
97
+ };
98
+ })
99
+
100
+ })
101
+
102
+
103
+ ngOnDestroy(): void {
104
+ removeEventListener('resize', this.resizeHandler);
105
+ }
106
+
107
+ setSize(el: ElementRef<HTMLElement>) {
108
+ const vsViewport = el.nativeElement;
109
+ const virtualScrollOptions = this.state.tableSettings().useVirtualScroll! as VirtualScrollOptions;
110
+ const rowHeight = this.computedRowHeight();
111
+ let amountOfVisibleItems = virtualScrollOptions?.amountOfVisibleItems || this.defaultOptions.amountOfVisibleItems;
112
+ virtualScrollOptions?.amountOfVisibleItems || this.defaultOptions.amountOfVisibleItems;
113
+ let height = (rowHeight * amountOfVisibleItems);
114
+ if(!this.state.tableSettings().hideHeader){
115
+ const headerHeight = this.computedHeaderHeight();
116
+ height += headerHeight;
117
+ }
118
+ if(virtualScrollOptions?.maxViewPortHeight && virtualScrollOptions.maxViewPortHeight < height) height = virtualScrollOptions.maxViewPortHeight;
119
+ vsViewport.setAttribute(
120
+ 'style',
121
+ `height: ${height}px !important;`,
122
+ );
123
+ this.viewport()?.checkViewportSize();
124
+ const virtualScrollOffset = this.viewport()?.getOffsetToRenderedContentStart() ?? 0
125
+ this.dataStore.patchState({ virtualScrollOffset });
126
+ }
127
+
128
+ resizeHandler = () => {
129
+ if (this.viewport()) {
130
+ this.setSize(this.viewport()!.elementRef);
131
+ }
132
+ };
133
+
134
+ computedRowHeight(){
135
+ const virtualScrollOptions = this.state.tableSettings().useVirtualScroll! as VirtualScrollOptions;
136
+ const rowHeight = virtualScrollOptions?.rowHeight|| (typeof this.state.tableSettings().rowHeight === 'number' && this.state.tableSettings().rowHeight as number) || this.defaultOptions.rowHeight;
137
+ return rowHeight;
138
+ }
139
+
140
+ computedHeaderHeight(){
141
+ const virtualScrollOptions = this.state.tableSettings().useVirtualScroll! as VirtualScrollOptions;
142
+ const headerHeight = virtualScrollOptions?.headerHeight|| (typeof this.state.tableSettings().headerHeight === 'number' && this.state.tableSettings().headerHeight as number) || this.defaultOptions.headerHeight;
143
+ return headerHeight;
144
+ }
145
+ }
@@ -0,0 +1,31 @@
1
+ <div class="d-w" *ngrxLet="currentFilters$ as currentFilters" >
2
+
3
+ @if (currentFilters.length) {
4
+ <button class="cancel-button" mat-icon-button (click)="clearAll()" matTooltip="Close all Filters Cards">
5
+ <mat-icon class="cancel-button" color="primary">close</mat-icon>
6
+ </button>
7
+ <div class="float">
8
+ @for (filter of currentFilters; track filter.key) {
9
+ <div class="filter">
10
+ <tb-filter [filter]="filter" (close)="deleteByIndex($index)" />
11
+ </div>
12
+ }
13
+ </div>
14
+ }
15
+
16
+ <mat-chip-set>
17
+ @for (filter of $filters(); track filter.key) {
18
+ <mat-chip (dblclick)="addFilter(filter)" (removed)="tableState.removeFilter(filter.filterId!)">
19
+ {{ filter.key | keyDisplay | async }} {{filter.filterType | formatFilterType : filter.filterValue}} {{ filter.filterValue | formatFilterValue: filter.key : filter.filterType | async }}
20
+ <mat-icon matChipRemove>cancel</mat-icon>
21
+ </mat-chip>
22
+ }
23
+ @if ($filters().length > 1) {
24
+ <mat-chip (removed)="tableState.clearFilters()">
25
+ Clear All
26
+ <mat-icon matChipRemove>cancel</mat-icon>
27
+ </mat-chip>
28
+ }
29
+ </mat-chip-set>
30
+
31
+ </div>
@@ -0,0 +1,46 @@
1
+ import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';
2
+ import { TableStore } from '../../../classes/table-store';
3
+ import { FilterInfo, isFilterInfo } from '../../../classes/filter-info';
4
+ import { WrapperFilterStore } from '../table-wrapper-filter-store';
5
+ import { LetDirective } from '@ngrx/component';
6
+ import { AsyncPipe } from '@angular/common';
7
+ import { MatButtonModule } from '@angular/material/button';
8
+ import { MatTooltipModule } from '@angular/material/tooltip';
9
+ import { MatIconModule } from '@angular/material/icon';
10
+ import { FilterComponent } from '../../filter/filter.component';
11
+ import { MatChipsModule } from '@angular/material/chips';
12
+ import { KeyDisplayPipe } from '../../../pipes/key-display';
13
+ import { FormatFilterTypePipe } from '../../../pipes/format-filter-type.pipe';
14
+ import { FormatFilterValuePipe } from '../../../pipes/format-filter-value.pipe';
15
+
16
+ @Component({
17
+ selector: 'lib-filter-list',
18
+ templateUrl: './filter-list.component.html',
19
+ styleUrls: ['../gen-filter-displayer/gen-filter-displayer.component.css'],
20
+ changeDetection: ChangeDetectionStrategy.OnPush,
21
+ standalone: true,
22
+ imports: [
23
+ LetDirective, MatButtonModule, MatTooltipModule, MatIconModule, FilterComponent,
24
+ MatChipsModule, AsyncPipe, KeyDisplayPipe, FormatFilterTypePipe, FormatFilterValuePipe
25
+ ]
26
+ })
27
+ export class FilterChipsComponent {
28
+
29
+ tableState = inject(TableStore);
30
+ filterStore = inject(WrapperFilterStore);
31
+
32
+ $filters = computed(() => Object.values(this.tableState.$filters()).filter(f => isFilterInfo(f) && !f._isExternallyManaged) as FilterInfo[])
33
+ deleteByIndex(index: number) {
34
+ this.filterStore.deleteByIndex(index);
35
+ }
36
+
37
+ addFilter(filter:FilterInfo<any>){
38
+ this.filterStore.addFilter(filter);
39
+ }
40
+
41
+ clearAll() {
42
+ this.filterStore.clearAll();
43
+ }
44
+
45
+ currentFilters$ = this.filterStore.currentFilters$;
46
+ }
@@ -0,0 +1,42 @@
1
+ .filter {
2
+ margin: 15px;
3
+ display: inline-block;
4
+ }
5
+ .filter-button {
6
+ color: cornflowerblue;
7
+ font-size: 22px;
8
+ font-weight: 700;
9
+ }
10
+
11
+ .cancel-button {
12
+ margin-right: 30px;
13
+ font-weight: 700;
14
+ }
15
+ .filter-wrapper{
16
+ margin-top: 1em;
17
+ margin-bottom: 1em;
18
+ float: right;
19
+ }
20
+ .menu {
21
+ margin-bottom: 10px;
22
+ width: 109.1%;
23
+ }
24
+
25
+ .filter-labels {
26
+ color: cornflowerblue;
27
+ font-size: 17px;
28
+ font-weight: 600;
29
+ }
30
+ .float{
31
+ position: absolute;
32
+ width: fit-content;
33
+ z-index: 101;
34
+ top: 10px;
35
+ right: 180px;
36
+ max-width: 90vw;
37
+ }
38
+ .d-w{
39
+ display: flex;
40
+ flex-direction: row;
41
+ justify-content: flex-end;
42
+ }
@@ -0,0 +1,10 @@
1
+ <button stop-propagation class="filter-button" mat-icon-button [matMenuTriggerFor]="menu" matTooltip="Add Filter">
2
+ <mat-icon class="filter-icon" color="primary">filter_list</mat-icon>
3
+ </button>
4
+ <mat-menu #menu="matMenu">
5
+ @for (md of $filterCols(); track md.key) {
6
+ <button (click)="addFilter(md)" mat-menu-item>
7
+ <span class="filter-labels">{{md.displayName || (md.key | spaceCase)}}</span>
8
+ </button>
9
+ }
10
+ </mat-menu>