@one-paragon/angular-utilities 2.0.0-beta.2 → 2.0.0-beta.4

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 (290) 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 +6 -0
  6. package/src/action-state/action-state-spinner/action-state-spinner.component.spec.ts +25 -0
  7. package/src/action-state/action-state-spinner/action-state-spinner.component.ts +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 +15 -0
  11. package/src/action-state/ngrx.ts +69 -0
  12. package/src/http-request-state/HttpRequestStateFactory.ts +66 -0
  13. package/src/http-request-state/HttpRequestStateStore.ts +191 -0
  14. package/src/http-request-state/directives/HttpStateDirectiveBase.ts +29 -0
  15. package/src/http-request-state/directives/http-error-state-directive.ts +21 -0
  16. package/src/http-request-state/directives/http-inProgress-state-directive.ts +19 -0
  17. package/src/http-request-state/directives/http-notStarted-state-directive.ts +19 -0
  18. package/src/http-request-state/directives/http-success-state-directive.ts +29 -0
  19. package/{http-request-state/directives/index.d.ts → src/http-request-state/directives/index.ts} +5 -5
  20. package/src/http-request-state/directives/request-state-directive.spec.ts +72 -0
  21. package/src/http-request-state/directives/request-state-directive.ts +78 -0
  22. package/src/http-request-state/helpers.ts +30 -0
  23. package/src/http-request-state/http-request-state.ts +69 -0
  24. package/src/http-request-state/http-state-module.ts +23 -0
  25. package/{http-request-state/index.d.ts → src/http-request-state/index.ts} +6 -6
  26. package/src/http-request-state/observable.spec.ts +43 -0
  27. package/src/http-request-state/rxjs/getRequestorBody.ts +10 -0
  28. package/src/http-request-state/rxjs/getRequestorState.ts +8 -0
  29. package/{http-request-state/rxjs/index.d.ts → src/http-request-state/rxjs/index.ts} +4 -4
  30. package/src/http-request-state/rxjs/tapError.ts +16 -0
  31. package/src/http-request-state/rxjs/tapSuccess.ts +16 -0
  32. package/src/http-request-state/strategies.spec.ts +42 -0
  33. package/src/http-request-state/types.ts +55 -0
  34. package/src/ngrx/actionable-selector.ts +150 -0
  35. package/src/ngrx/index.ts +1 -0
  36. package/{public-api.d.ts → src/public-api.ts} +35 -16
  37. package/src/rxjs/defaultShareReplay.ts +8 -0
  38. package/{rxjs/index.d.ts → src/rxjs/index.ts} +5 -5
  39. package/src/rxjs/mapError.ts +8 -0
  40. package/src/rxjs/rxjs-operators.ts +132 -0
  41. package/src/rxjs/subjectifier.ts +17 -0
  42. package/src/rxjs/subscriber.directive.ts +57 -0
  43. package/src/specs/clickSubject.spec.ts +95 -0
  44. package/src/specs/dialog.spec.ts +101 -0
  45. package/src/specs/toggleGroupDirective.spec.ts +229 -0
  46. package/src/table-builder/classes/DefaultSettings.ts +11 -0
  47. package/src/table-builder/classes/MatTableObservableDataSource.ts +23 -0
  48. package/src/table-builder/classes/TableBuilderConfig.ts +42 -0
  49. package/src/table-builder/classes/TableBuilderDataSource.ts +66 -0
  50. package/src/table-builder/classes/TableState.ts +93 -0
  51. package/src/table-builder/classes/data-store.ts +10 -0
  52. package/{table-builder/classes/display-col.d.ts → src/table-builder/classes/display-col.ts} +5 -5
  53. package/src/table-builder/classes/filter-info.ts +123 -0
  54. package/src/table-builder/classes/table-builder-general-settings.ts +141 -0
  55. package/src/table-builder/classes/table-builder.ts +95 -0
  56. package/src/table-builder/classes/table-store.helpers.ts +102 -0
  57. package/src/table-builder/classes/table-store.ts +355 -0
  58. package/src/table-builder/components/array-column.component.ts +34 -0
  59. package/src/table-builder/components/column-builder/column-builder.component.html +69 -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 +128 -0
  63. package/src/table-builder/components/column-builder/column-helpers.ts +52 -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 +22 -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 +20 -0
  68. package/src/table-builder/components/filter/filter.component.html +91 -0
  69. package/src/table-builder/components/filter/filter.component.scss +60 -0
  70. package/src/table-builder/components/filter/filter.component.spec.ts +87 -0
  71. package/src/table-builder/components/filter/filter.component.ts +59 -0
  72. package/src/table-builder/components/filter/in-list/in-list-filter.component.ts +85 -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 +44 -0
  76. package/src/table-builder/components/generic-table/generic-table.component.html +77 -0
  77. package/src/table-builder/components/generic-table/generic-table.component.scss +38 -0
  78. package/src/table-builder/components/generic-table/generic-table.component.ts +330 -0
  79. package/src/table-builder/components/generic-table/paginator.component.ts +97 -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 +18 -0
  84. package/src/table-builder/components/header-menu/header-menu.component.html +105 -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 +93 -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 +19 -0
  89. package/src/table-builder/components/in-filter/in-filter.component.ts +65 -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 +22 -0
  93. package/src/table-builder/components/link-column.component.ts +45 -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 +22 -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 +73 -0
  99. package/src/table-builder/components/profiles-menu/profiles-menu.component.scss +126 -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 +63 -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 +57 -0
  104. package/src/table-builder/components/sort-menu/sort-menu.component.html +109 -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 +88 -0
  107. package/{table-builder/components/table-container/table-container-imports.d.ts → src/table-builder/components/table-container/table-container-imports.ts} +27 -13
  108. package/src/table-builder/components/table-container/table-container.helpers/data-state.helpers.ts +141 -0
  109. package/src/table-builder/components/table-container/table-container.helpers/filter-state.helpers.ts +126 -0
  110. package/src/table-builder/components/table-container/table-container.helpers/groupBy.helpers.ts +86 -0
  111. package/src/table-builder/components/table-container/table-container.helpers/meta-data.helpers.ts +15 -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 +94 -0
  114. package/src/table-builder/components/table-container/table-container.scss +47 -0
  115. package/src/table-builder/components/table-container/table-container.spec.ts +154 -0
  116. package/src/table-builder/components/table-container/table-container.ts +307 -0
  117. package/src/table-builder/components/table-container/tableProps.ts +18 -0
  118. package/src/table-builder/components/table-container/virtual-scroll-container.ts +155 -0
  119. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.html +31 -0
  120. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.ts +44 -0
  121. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.css +42 -0
  122. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.html +10 -0
  123. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.spec.ts +85 -0
  124. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.ts +32 -0
  125. package/src/table-builder/components/table-container-filter/table-wrapper-filter-store.ts +23 -0
  126. package/src/table-builder/directives/custom-cell-directive.ts +58 -0
  127. package/{table-builder/directives/index.d.ts → src/table-builder/directives/index.ts} +6 -5
  128. package/src/table-builder/directives/multi-sort.directive.spec.ts +124 -0
  129. package/src/table-builder/directives/multi-sort.directive.ts +50 -0
  130. package/src/table-builder/directives/resize-column.directive.ts +107 -0
  131. package/src/table-builder/directives/table-wrapper.directive.ts +13 -0
  132. package/src/table-builder/directives/tb-filter.directive.ts +372 -0
  133. package/src/table-builder/enums/filterTypes.ts +40 -0
  134. package/src/table-builder/functions/boolean-filter-function.ts +12 -0
  135. package/src/table-builder/functions/date-filter-function.ts +68 -0
  136. package/src/table-builder/functions/download-data.ts +11 -0
  137. package/src/table-builder/functions/null-filter-function.ts +9 -0
  138. package/src/table-builder/functions/number-filter-function.ts +41 -0
  139. package/src/table-builder/functions/sort-data-function.ts +23 -0
  140. package/src/table-builder/functions/string-filter-function.ts +51 -0
  141. package/{table-builder/interfaces/ColumnInfo.d.ts → src/table-builder/interfaces/ColumnInfo.ts} +7 -6
  142. package/src/table-builder/interfaces/column-template.ts +9 -0
  143. package/{table-builder/interfaces/dictionary.d.ts → src/table-builder/interfaces/dictionary.ts} +3 -3
  144. package/src/table-builder/interfaces/report-def.ts +160 -0
  145. package/src/table-builder/ngrx/tableBuilderStateStore.ts +199 -0
  146. package/src/table-builder/pipes/column-total.pipe.ts +16 -0
  147. package/src/table-builder/pipes/format-filter-type.pipe.ts +12 -0
  148. package/src/table-builder/pipes/format-filter-value.pipe.ts +42 -0
  149. package/src/table-builder/pipes/key-display.ts +13 -0
  150. package/src/table-builder/services/export-to-csv.service.ts +75 -0
  151. package/src/table-builder/services/link-creator.service.ts +67 -0
  152. package/src/table-builder/services/table-template-service.ts +59 -0
  153. package/src/table-builder/services/transform-creator.ts +94 -0
  154. package/src/table-builder/specs/table-custom-filters.spec.ts +262 -0
  155. package/src/table-builder/styles/collapser.styles.scss +16 -0
  156. package/src/table-builder/table-builder.module.ts +73 -0
  157. package/src/test.ts +17 -0
  158. package/src/utilities/array-helpers.ts +13 -0
  159. package/src/utilities/directives/auto-focus.directive.ts +20 -0
  160. package/src/utilities/directives/clickEmitterDirective.ts +15 -0
  161. package/src/utilities/directives/clickSubject.ts +19 -0
  162. package/src/utilities/directives/conditional-classes.directive.ts +35 -0
  163. package/src/utilities/directives/dialog-service.ts +19 -0
  164. package/src/utilities/directives/dialog.ts +142 -0
  165. package/src/utilities/directives/mat-toggle-group-directive.ts +60 -0
  166. package/src/utilities/directives/prevent-enter.directive.ts +12 -0
  167. package/src/utilities/directives/stop-propagation.directive.ts +19 -0
  168. package/src/utilities/directives/styler.ts +39 -0
  169. package/src/utilities/directives/trim-whitespace.directive.ts +20 -0
  170. package/{utilities/index.d.ts → src/utilities/index.ts} +22 -15
  171. package/src/utilities/module.ts +55 -0
  172. package/src/utilities/pipes/function.pipe.ts +21 -0
  173. package/src/utilities/pipes/phone.pipe.ts +15 -0
  174. package/src/utilities/pipes/space-case.pipes.spec.ts +47 -0
  175. package/src/utilities/pipes/space-case.pipes.ts +26 -0
  176. package/tsconfig.lib.json +19 -0
  177. package/tsconfig.lib.prod.json +10 -0
  178. package/tsconfig.spec.json +17 -0
  179. package/action-state/action-state-spinner/action-state-spinner.component.d.ts +0 -12
  180. package/action-state/action-state-ui/action-state-ui.module.d.ts +0 -7
  181. package/action-state/ngrx-ext/ngrx-ext.module.d.ts +0 -8
  182. package/action-state/ngrx.d.ts +0 -31
  183. package/fesm2022/one-paragon-angular-utilities.mjs +0 -5681
  184. package/fesm2022/one-paragon-angular-utilities.mjs.map +0 -1
  185. package/http-request-state/HttpRequestStateFactory.d.ts +0 -17
  186. package/http-request-state/HttpRequestStateStore.d.ts +0 -58
  187. package/http-request-state/directives/HttpStateDirectiveBase.d.ts +0 -14
  188. package/http-request-state/directives/http-error-state-directive.d.ts +0 -9
  189. package/http-request-state/directives/http-inProgress-state-directive.d.ts +0 -9
  190. package/http-request-state/directives/http-notStarted-state-directive.d.ts +0 -9
  191. package/http-request-state/directives/http-success-state-directive.d.ts +0 -16
  192. package/http-request-state/directives/request-state-directive.d.ts +0 -34
  193. package/http-request-state/helpers.d.ts +0 -9
  194. package/http-request-state/http-request-state.d.ts +0 -12
  195. package/http-request-state/http-state-module.d.ts +0 -11
  196. package/http-request-state/rxjs/getRequestorBody.d.ts +0 -3
  197. package/http-request-state/rxjs/getRequestorState.d.ts +0 -3
  198. package/http-request-state/rxjs/tapError.d.ts +0 -3
  199. package/http-request-state/rxjs/tapSuccess.d.ts +0 -3
  200. package/http-request-state/types.d.ts +0 -41
  201. package/index.d.ts +0 -5
  202. package/ngrx/actionable-selector.d.ts +0 -31
  203. package/ngrx/index.d.ts +0 -1
  204. package/rxjs/defaultShareReplay.d.ts +0 -2
  205. package/rxjs/mapError.d.ts +0 -2
  206. package/rxjs/rxjs-operators.d.ts +0 -13
  207. package/rxjs/subjectifier.d.ts +0 -8
  208. package/rxjs/subscriber.directive.d.ts +0 -14
  209. package/table-builder/classes/DefaultSettings.d.ts +0 -9
  210. package/table-builder/classes/MatTableObservableDataSource.d.ts +0 -9
  211. package/table-builder/classes/TableBuilderConfig.d.ts +0 -23
  212. package/table-builder/classes/TableBuilderDataSource.d.ts +0 -18
  213. package/table-builder/classes/TableState.d.ts +0 -66
  214. package/table-builder/classes/data-store.d.ts +0 -8
  215. package/table-builder/classes/filter-info.d.ts +0 -37
  216. package/table-builder/classes/table-builder-general-settings.d.ts +0 -85
  217. package/table-builder/classes/table-builder.d.ts +0 -18
  218. package/table-builder/classes/table-store.d.ts +0 -130
  219. package/table-builder/classes/table-store.helpers.d.ts +0 -28
  220. package/table-builder/components/array-column.component.d.ts +0 -15
  221. package/table-builder/components/column-builder/column-builder.component.d.ts +0 -40
  222. package/table-builder/components/column-builder/column-helpers.d.ts +0 -36
  223. package/table-builder/components/date-filter/date-filter.component.d.ts +0 -37
  224. package/table-builder/components/date-time-filter/date-time-filter.component.d.ts +0 -37
  225. package/table-builder/components/filter/filter.component.d.ts +0 -46
  226. package/table-builder/components/filter/in-list/in-list-filter.component.d.ts +0 -23
  227. package/table-builder/components/gen-col-displayer/gen-col-displayer.component.d.ts +0 -17
  228. package/table-builder/components/generic-table/generic-table.component.d.ts +0 -72
  229. package/table-builder/components/generic-table/paginator.component.d.ts +0 -28
  230. package/table-builder/components/group-by-list/group-by-list.component.d.ts +0 -7
  231. package/table-builder/components/header-menu/header-menu.component.d.ts +0 -49
  232. package/table-builder/components/in-filter/in-filter.component.d.ts +0 -20
  233. package/table-builder/components/initialization-component/initialization-component.d.ts +0 -13
  234. package/table-builder/components/link-column.component.d.ts +0 -25
  235. package/table-builder/components/number-filter/number-filter.component.d.ts +0 -39
  236. package/table-builder/components/profiles-menu/profiles-menu.component.d.ts +0 -32
  237. package/table-builder/components/scroll-strategy.d.ts +0 -22
  238. package/table-builder/components/sort-menu/sort-menu.component-store.d.ts +0 -24
  239. package/table-builder/components/sort-menu/sort-menu.component.d.ts +0 -19
  240. package/table-builder/components/table-container/table-container.d.ts +0 -83
  241. package/table-builder/components/table-container/table-container.helpers/data-state.helpers.d.ts +0 -6
  242. package/table-builder/components/table-container/table-container.helpers/filter-state.helpers.d.ts +0 -19
  243. package/table-builder/components/table-container/table-container.helpers/groupBy.helpers.d.ts +0 -17
  244. package/table-builder/components/table-container/table-container.helpers/meta-data.helpers.d.ts +0 -2
  245. package/table-builder/components/table-container/table-container.helpers/sort-state.helpers.d.ts +0 -8
  246. package/table-builder/components/table-container/tableProps.d.ts +0 -10
  247. package/table-builder/components/table-container/virtual-scroll-container.d.ts +0 -36
  248. package/table-builder/components/table-container-filter/filter-list/filter-list.component.d.ts +0 -15
  249. package/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.d.ts +0 -12
  250. package/table-builder/components/table-container-filter/table-wrapper-filter-store.d.ts +0 -14
  251. package/table-builder/directives/custom-cell-directive.d.ts +0 -32
  252. package/table-builder/directives/multi-sort.directive.d.ts +0 -10
  253. package/table-builder/directives/resize-column.directive.d.ts +0 -43
  254. package/table-builder/directives/table-wrapper.directive.d.ts +0 -8
  255. package/table-builder/directives/tb-filter.directive.d.ts +0 -113
  256. package/table-builder/enums/filterTypes.d.ts +0 -36
  257. package/table-builder/functions/boolean-filter-function.d.ts +0 -3
  258. package/table-builder/functions/date-filter-function.d.ts +0 -4
  259. package/table-builder/functions/download-data.d.ts +0 -1
  260. package/table-builder/functions/null-filter-function.d.ts +0 -2
  261. package/table-builder/functions/number-filter-function.d.ts +0 -4
  262. package/table-builder/functions/sort-data-function.d.ts +0 -6
  263. package/table-builder/functions/string-filter-function.d.ts +0 -5
  264. package/table-builder/interfaces/report-def.d.ts +0 -151
  265. package/table-builder/ngrx/tableBuilderStateStore.d.ts +0 -70
  266. package/table-builder/pipes/column-total.pipe.d.ts +0 -8
  267. package/table-builder/pipes/format-filter-type.pipe.d.ts +0 -8
  268. package/table-builder/pipes/format-filter-value.pipe.d.ts +0 -11
  269. package/table-builder/pipes/key-display.d.ts +0 -9
  270. package/table-builder/services/export-to-csv.service.d.ts +0 -14
  271. package/table-builder/services/link-creator.service.d.ts +0 -16
  272. package/table-builder/services/table-template-service.d.ts +0 -14
  273. package/table-builder/services/transform-creator.d.ts +0 -15
  274. package/table-builder/table-builder.module.d.ts +0 -21
  275. package/utilities/array-helpers.d.ts +0 -1
  276. package/utilities/directives/auto-focus.directive.d.ts +0 -9
  277. package/utilities/directives/clickEmitterDirective.d.ts +0 -7
  278. package/utilities/directives/clickSubject.d.ts +0 -9
  279. package/utilities/directives/conditional-classes.directive.d.ts +0 -13
  280. package/utilities/directives/dialog-service.d.ts +0 -10
  281. package/utilities/directives/dialog.d.ts +0 -44
  282. package/utilities/directives/mat-toggle-group-directive.d.ts +0 -21
  283. package/utilities/directives/prevent-enter.directive.d.ts +0 -6
  284. package/utilities/directives/stop-propagation.directive.d.ts +0 -7
  285. package/utilities/directives/styler.d.ts +0 -15
  286. package/utilities/directives/trim-whitespace.directive.d.ts +0 -7
  287. package/utilities/module.d.ts +0 -19
  288. package/utilities/pipes/function.pipe.d.ts +0 -11
  289. package/utilities/pipes/phone.pipe.d.ts +0 -7
  290. package/utilities/pipes/space-case.pipes.d.ts +0 -17
@@ -1,13 +1,27 @@
1
- import { NgTemplateOutlet } from "@angular/common";
2
- import { MultiSortDirective } from "../../directives";
3
- import { GroupByListComponent } from "../group-by-list/group-by-list.component";
4
- import { FilterChipsComponent } from "../table-container-filter/filter-list/filter-list.component";
5
- import { MatButtonModule } from "@angular/material/button";
6
- import { GenericTableComponent } from "../generic-table/generic-table.component";
7
- import { GenFilterDisplayerComponent } from "../table-container-filter/gen-filter-displayer/gen-filter-displayer.component";
8
- import { GenColDisplayerComponent } from "../gen-col-displayer/gen-col-displayer.component";
9
- import { SortMenuComponent } from "../sort-menu/sort-menu.component";
10
- import { StopPropagationDirective } from "../../../utilities";
11
- import { PaginatorComponent } from "../generic-table/paginator.component";
12
- import { VirtualScrollContainer } from "./virtual-scroll-container";
13
- export declare const containerImports: (typeof PaginatorComponent | typeof GenericTableComponent | typeof NgTemplateOutlet | typeof MultiSortDirective | typeof GroupByListComponent | typeof FilterChipsComponent | typeof GenFilterDisplayerComponent | typeof GenColDisplayerComponent | typeof SortMenuComponent | typeof StopPropagationDirective | typeof MatButtonModule | typeof VirtualScrollContainer)[];
1
+ import { NgTemplateOutlet } from "@angular/common";
2
+ import { MultiSortDirective } from "../../directives";
3
+ import { GroupByListComponent } from "../group-by-list/group-by-list.component";
4
+ import { FilterChipsComponent } from "../table-container-filter/filter-list/filter-list.component";
5
+ import { MatButtonModule } from "@angular/material/button";
6
+ import { MatMenuModule } from "@angular/material/menu";
7
+ import { MatIconModule } from "@angular/material/icon";
8
+ import { MatTooltipModule } from "@angular/material/tooltip";
9
+ import { GenericTableComponent } from "../generic-table/generic-table.component";
10
+ import { GenFilterDisplayerComponent } from "../table-container-filter/gen-filter-displayer/gen-filter-displayer.component";
11
+ import { GenColDisplayerComponent } from "../gen-col-displayer/gen-col-displayer.component";
12
+ import { SortMenuComponent } from "../sort-menu/sort-menu.component";
13
+ import { StopPropagationDirective } from "../../../utilities";
14
+ import { PaginatorComponent } from "../generic-table/paginator.component";
15
+ import { VirtualScrollContainer } from "./virtual-scroll-container";
16
+ import { ProfilesMenuComponent } from "../profiles-menu/profiles-menu.component";
17
+
18
+ export const containerImports = [
19
+ NgTemplateOutlet,
20
+ PaginatorComponent,
21
+
22
+ MultiSortDirective, GroupByListComponent, FilterChipsComponent, GenFilterDisplayerComponent, GenColDisplayerComponent,
23
+ SortMenuComponent, GenericTableComponent, StopPropagationDirective, ProfilesMenuComponent,
24
+
25
+ MatButtonModule, MatMenuModule, MatIconModule, MatTooltipModule, VirtualScrollContainer
26
+
27
+ ]
@@ -0,0 +1,141 @@
1
+ import { Observable, combineLatest, map, scan, timestamp } from "rxjs";
2
+ import { SortState } from "./sort-state.helpers";
3
+ import { FilterPredicateState } from "./filter-state.helpers";
4
+ import { filterData, sortData, tbNoShowSymbol } from "../../../functions/sort-data-function";
5
+ import { defaultShareReplay } from "../../../../rxjs/defaultShareReplay";
6
+ import { FieldType, MetaData } from "../../../interfaces/report-def";
7
+ import { get, set } from "lodash";
8
+
9
+ export const sortAndFilterData = <T>(data: Observable<T[]>, sortState: Observable<SortState>, filterState: Observable<FilterPredicateState<T>>) => combineLatest([
10
+ data.pipe(timestamp()),
11
+ sortState.pipe(timestamp()),
12
+ filterState.pipe(timestamp())
13
+ ]).pipe(
14
+ scan(({ mappedData: resultData }, [data, sort, f], index)=> {
15
+ if(index === 0 || (data.timestamp > sort.timestamp && data.timestamp > f.timestamp)){
16
+ return ({ mappedData: filterData(sortData(data.value , sort.value.sortsToRun ), f.value.allFilters)});
17
+ }
18
+
19
+ if(sort.timestamp > f.timestamp){
20
+ return ({ mappedData: sortData(resultData, sort.value.sortsToRun)});
21
+ }
22
+ return ({ mappedData: filterData(resultData, f.value.onlyAddedFilters || f.value.allFilters, !f.value.onlyAddedFilters)});
23
+ }, { mappedData: []} as { mappedData: T[]})
24
+ ).pipe(
25
+ map(({ mappedData: resultData }) => resultData.filter(item => !item[tbNoShowSymbol])),
26
+ defaultShareReplay()
27
+ );
28
+
29
+ export const createDataCleaners = <T>(metadatas: MetaData<T>[], mutate = false) => {
30
+ const transforms = createCleaners(metadatas);
31
+ return (data: T) => {
32
+ if(!mutate){
33
+ data = { ...data }
34
+ }
35
+ for(const transform of transforms){
36
+ transform(data);
37
+ }
38
+ return data;
39
+ }
40
+ }
41
+
42
+ const createCleaners = <T>(metadatas: MetaData<T> []) => {
43
+ return metadatas.reduce((transforms,metaData) => {
44
+ switch ( metaData.fieldType ) {
45
+ case FieldType.Currency:
46
+ case FieldType.Number:{
47
+ const nested = metaData.key.includes('.');
48
+ if(nested){
49
+ transforms.push( (t:T) => {
50
+ const val = get(t, metaData.key);
51
+ const num = Number( val );
52
+ set(t as {}, metaData.key, isNaN(num) || val == null ? null : num)
53
+ t[metaData.key] = (isNaN(num) || val == null ? null : num) as any});
54
+ } else {
55
+ transforms.push( (t:T) => {
56
+ const val = t[metaData.key];
57
+ const num = Number( val );
58
+ t[metaData.key] = (isNaN(num) || val == null ? null : num) as any});
59
+ }
60
+ break;
61
+ }
62
+ case FieldType.Date:{
63
+ const nested = metaData.key.includes('.');
64
+ if(nested){
65
+ transforms.push( (t:T) => {
66
+ const val = get(t, metaData.key) as string;
67
+ const date = Date.parse(val);
68
+ if(isNaN(date)){
69
+ set(t as {}, metaData.key, null as any);
70
+ return
71
+ }
72
+ const d = new Date(date);
73
+ d.setHours(0,0,0,0);
74
+ set(t as {}, metaData.key, d as any);
75
+ })
76
+ } else {
77
+ transforms.push( (t:T) => {
78
+ const val = t[metaData.key] as string;
79
+ const date = Date.parse(val);
80
+ if(isNaN(date)){
81
+ t[metaData.key] = null as any;
82
+ return
83
+ }
84
+ const d = new Date(date);
85
+ d.setHours(0,0,0,0);
86
+ t[metaData.key] = d as any;
87
+ })
88
+ }
89
+ break;
90
+ }
91
+
92
+ case FieldType.DateTime:{
93
+ const nested = metaData.key.includes('.');
94
+ if(nested){
95
+ transforms.push( (t:T) => {
96
+ const val = get(t, metaData.key);
97
+ const dateTime = Date.parse(val as string);
98
+ if(isNaN(dateTime)){
99
+ set(t as {}, metaData.key, null as any);
100
+ return
101
+ }
102
+ const dt = new Date(dateTime);
103
+ if(metaData.additional?.dateTimeOptions?.includeMilliseconds){
104
+ set(t as {}, metaData.key, dt as any);
105
+ return
106
+ }
107
+ if(metaData.additional?.dateTimeOptions?.includeSeconds){
108
+ dt.setMilliseconds(0);
109
+ set(t as {}, metaData.key, dt as any);
110
+ return
111
+ }
112
+ dt.setSeconds(0, 0);
113
+ set(t as {}, metaData.key, dt as any);
114
+ })
115
+ } else {
116
+ transforms.push((t:T) => {
117
+ const val = t[metaData.key] as string;
118
+ const dateTime = Date.parse(val);
119
+ if(isNaN(dateTime)){
120
+ t[metaData.key] = null as any;
121
+ return;
122
+ }
123
+ const dt = new Date(dateTime);
124
+ if(metaData.additional?.dateTimeOptions?.includeMilliseconds){
125
+ t[metaData.key] = dt as any;
126
+ return;
127
+ }
128
+ if(metaData.additional?.dateTimeOptions?.includeSeconds){
129
+ dt.setMilliseconds(0);
130
+ t[metaData.key] = dt as any;
131
+ return;
132
+ }
133
+ dt.setSeconds(0, 0);
134
+ t[metaData.key] = dt as any;
135
+ })
136
+ }
137
+ }
138
+ }
139
+ return transforms;
140
+ }, [] as ((t:T) => void)[])
141
+ }
@@ -0,0 +1,126 @@
1
+ import { Timestamp } from "rxjs";
2
+ import { CustomFilter, FilterInfo, createFilterFunc, isCustomFilter, isFilterInfo, needsFilterCreation } from "../../../classes/filter-info";
3
+ import { Dictionary } from "../../../interfaces/dictionary";
4
+ import { Predicate } from "@angular/core";
5
+ import { difference, intersection } from "lodash";
6
+ import { TableCustomFilterDirective, TableFilterDirective } from "../../../directives";
7
+
8
+ //The idea of this is that if filters were only added, and none were removed or changed, then we only need to tag more rows to not be shown. We don't need to remove any 'dont show' tags.
9
+ // So if filters were only added this method will return the added filters, if filters were removed or changed this method will return undefined.
10
+
11
+ export const updateFilterInfoState = <T>(previousState: FilterInfoState<T>, filterInfos: FilterInfoDict) => {
12
+ filterInfos = filterNonActiveOrNotReadyFilters(filterInfos);
13
+ const currentState: FilterInfoState<T> = {
14
+ allFilters: filterInfos,
15
+ onlyAddedFilters: filterInfoOnlyAdded(previousState.allFilters, filterInfos)
16
+ }
17
+ return currentState;
18
+ }
19
+
20
+ export const mapFilterInfoStateToPredicateState = <T>(s: FilterInfoState<T>): FilterPredicateState<T> => {
21
+ const mappedAddOnly: {[key in keyof T]: Predicate<T>} =
22
+ s.onlyAddedFilters
23
+ ?
24
+ Object.entries(s.onlyAddedFilters).filter(([, v]) => needsFilterCreation(v)).reduce((obj, [key, value]) => {
25
+ obj[key] = createFilterFunc(value);
26
+ return obj;
27
+ }, {} as {[key in keyof T]: Predicate<T>})
28
+ : {} as {[key in keyof T]: Predicate<T>};
29
+ const mappedAll = Object.entries(s.allFilters).filter(([, v]) => needsFilterCreation(v))
30
+ .filter(([,v])=> !isCustomFilter(v) || !!v.predicate)
31
+ .map(([key, value]) => {
32
+ return mappedAddOnly[key] || createFilterFunc(value);
33
+ });
34
+ return ({
35
+ allFilters: mappedAll,
36
+ onlyAddedFilters: s.onlyAddedFilters ? Object.values(mappedAddOnly) : undefined
37
+ })
38
+ }
39
+
40
+ export const updateFilterPredicateState = <T>(previousState: FilterPredicateState<T>, filters: Predicate<any>[]) => {
41
+ const currentState: FilterPredicateState<T> = {
42
+ allFilters: filters,
43
+ onlyAddedFilters: predicatesOnlyAdded(previousState.allFilters, filters)
44
+ }
45
+ return currentState;
46
+ }
47
+
48
+ export const updateFilterState = <T>(filterInfos: Timestamp<FilterInfoState<T>>, predicates: Timestamp<FilterPredicateState<T>>): FilterPredicateState<T> => {
49
+ const infos = mapFilterInfoStateToPredicateState(filterInfos.value);
50
+ const filtersState: FilterPredicateState<T> = {
51
+ allFilters: [...infos.allFilters, ...predicates.value.allFilters]
52
+ }
53
+ if(filterInfos.timestamp > predicates.timestamp && !!filterInfos.value.onlyAddedFilters){
54
+ filtersState.onlyAddedFilters = infos.onlyAddedFilters;
55
+ } else {
56
+ filtersState.onlyAddedFilters = predicates.value.onlyAddedFilters
57
+ }
58
+ return filtersState
59
+ }
60
+
61
+
62
+ const filterNonActiveOrNotReadyFilters = (filtersDict : FilterInfoDict) => Object.entries(filtersDict).reduce((obj ,[key, value]) => {
63
+ if(value.active !== false && (!isCustomFilter(value) || !!value.predicate)){
64
+ obj[key] = value
65
+ };
66
+ return obj;
67
+ }, {} as Dictionary<FilterInfo | CustomFilter>);
68
+
69
+
70
+ function filterInfoOnlyAdded(previousFilterInfos: FilterInfoDict, currentFilterInfos: FilterInfoDict): FilterInfoDict | undefined{
71
+ const previousKeys = Object.keys(previousFilterInfos);
72
+ const currentKeys = Object.keys(currentFilterInfos);
73
+ const keysInBoth = intersection(previousKeys, currentKeys);
74
+ const someRemoved = previousKeys.length > keysInBoth.length;
75
+ if(someRemoved || !previousKeys.length){
76
+ return undefined;
77
+ }
78
+ if(filtersInfosUpdated(previousFilterInfos, currentFilterInfos)){
79
+ return undefined;
80
+ }
81
+ const addedFilters = difference(currentKeys, keysInBoth).reduce((dict, key) => {
82
+ dict[key] = currentFilterInfos[key];
83
+ return dict;
84
+ }, {} as FilterInfoDict);
85
+ return addedFilters;
86
+ }
87
+
88
+ function predicatesOnlyAdded(previousPredicates: Predicate<any>[], currentPredicates: Predicate<any>[]){
89
+ if(!previousPredicates.length){
90
+ return undefined;
91
+ }
92
+ const predicateFiltersRemoved = difference(previousPredicates, currentPredicates).length;
93
+ if(predicateFiltersRemoved){
94
+ return undefined;
95
+ }
96
+ return difference(currentPredicates, previousPredicates);
97
+ }
98
+
99
+ function filtersInfosUpdated(previousFilterInfos: FilterInfoDict<any>, currentFilterInfos: FilterInfoDict<any>){
100
+ return !Object.entries(previousFilterInfos).every(([key, val]) => {
101
+ return currentFilterInfos[key].filterType === val.filterType && currentFilterInfos[key].filterValue === val.filterValue
102
+ })
103
+ }
104
+
105
+ export function patchDirectiveFromState(directive: (TableCustomFilterDirective | TableFilterDirective), stateFilter: FilterInfo | CustomFilter){
106
+ if(isFilterInfo(stateFilter)) {
107
+ const filterDirective: TableFilterDirective = directive as TableFilterDirective;
108
+ filterDirective.setFilterValue(stateFilter.filterValue);
109
+ filterDirective.update();
110
+ }
111
+ if(isCustomFilter(stateFilter)) {
112
+ directive.active = stateFilter.active ?? false;
113
+ }
114
+ }
115
+
116
+ export interface FilterInfoState<T> {
117
+ allFilters: FilterInfoDict<T>,
118
+ onlyAddedFilters?: FilterInfoDict<T> | undefined,
119
+ }
120
+
121
+ export interface FilterPredicateState<T> {
122
+ allFilters: Predicate<T>[],
123
+ onlyAddedFilters?: Predicate<T>[] | undefined,
124
+ }
125
+
126
+ export type FilterInfoDict<T = any> = Dictionary<FilterInfo<any, T> | CustomFilter<any>>;
@@ -0,0 +1,86 @@
1
+ import { groupBy } from "lodash";
2
+ import { Timestamp } from "rxjs";
3
+ import { Group, GroupedData } from "../../../classes/TableState";
4
+ import { initIndexSymbol } from "./sort-state.helpers";
5
+
6
+ function getGroupedData(data: any[], groupByKeys: string[]): any[] {
7
+ return tbGroupBy(data, groupByKeys);
8
+ }
9
+
10
+ const tbGroupBy = (data: any[], groupByKeys: string[], parentGroupName?: any): any[] => {
11
+ const currentKey = groupByKeys[0];
12
+ const res = groupBy(data, currentKey);
13
+ const remainingGroupByKeys = groupByKeys.slice(1);
14
+ const finalGroups = !remainingGroupByKeys.length;
15
+ if (remainingGroupByKeys.length) {
16
+ Object.keys(res).forEach(key => res[key] = tbGroupBy(res[key], remainingGroupByKeys, key))
17
+ }
18
+ return Object.keys(res).map((groupName, i) => {
19
+ const uniqName = parentGroupName ? `${parentGroupName}-${groupName}` : `${groupName}`;
20
+ const groupHeaders = res[groupName]?.filter(row => row.isGroupHeader) ?? [];
21
+ return ({
22
+ isGroupHeader: true,
23
+ groupHeaderDisplay: groupName,
24
+ hasTheData: finalGroups,
25
+ children: finalGroups ? res[groupName] : res[groupName].map(d => {d.padding += 20; return d}),
26
+ groupName: `tb_group_${uniqName}`,
27
+ padding: 1,
28
+ key: currentKey,
29
+ length : groupHeaders.reduce((acc, curr) => curr.length + acc,0) + ((res[groupName] ?? []).length - groupHeaders.length),
30
+ [initIndexSymbol]: uniqName,
31
+ } as Group
32
+ );
33
+ })
34
+ }
35
+
36
+ export function updateGroupByState({ groupedData }:GroupByState, [data, groups, expandedGroups] : [Timestamp<any[]>, Timestamp<string[]>, Timestamp<GroupedData[]>], index: number){
37
+ if(
38
+ index === 0
39
+ || dataUpdated(data, groups, expandedGroups)
40
+ || groupsUpdated(groups, expandedGroups)
41
+ ){
42
+ groupedData = groups.value.length ? getGroupedData(data.value, groups.value) : data.value;
43
+ }
44
+ const newDisplayData = expandedGroups.value.length === 0
45
+ ? groupedData
46
+ : groupedData.map(group => mapGroupHeader(group, expandedGroups.value)).flat();
47
+ return ({displayData: newDisplayData, groupedData});
48
+ }
49
+
50
+ function mapGroupHeader(obj: any, data: GroupedData[]){
51
+ const showChildren = data.find(a => a.expandedHeaders.includes(obj.groupName));
52
+ const children = !showChildren ? [] :
53
+ obj.hasTheData ? obj.children
54
+ : obj.children.map(a => mapGroupHeader(a, data))
55
+
56
+ return [obj, ...children].flat()
57
+ }
58
+
59
+ function dataUpdated(data: Timestamp<any[]>, groups: Timestamp<string[]>, expandedGroups: Timestamp<GroupedData[]>){
60
+ return data.timestamp > groups.timestamp && data.timestamp > expandedGroups.timestamp;
61
+ }
62
+
63
+ function groupsUpdated(groups: Timestamp<string[]>, expandedGroups: Timestamp<GroupedData[]>){
64
+ return groups.timestamp > expandedGroups.timestamp;
65
+ }
66
+
67
+ interface GroupByState { displayData: any[], groupedData: any[]};
68
+
69
+ export const initialGroupByState = { displayData: [], groupedData: []}
70
+
71
+ export const getAllGroupHeaderNames = (data: any[]) => {
72
+ const groups = getGroupHeaders(data, (d:any) => d.isGroupHeader);
73
+ return groupBy(groups, 'key')
74
+ }
75
+
76
+ export const getAllGroupHeaderNamesByKeys = (data: any[], keys: string[]) => {
77
+ const groups = getGroupHeaders(data, (d:any) => d.isGroupHeader && keys.includes(d.key));
78
+ return groupBy(groups, 'key')
79
+ }
80
+
81
+ const getGroupHeaders = (data: any[], filterFunc: (d:any) => boolean, arr:any[] = []): Group[] => {
82
+ const headers = data.filter(filterFunc);
83
+ arr.push(...headers);
84
+ headers.forEach(h => {if(!!h.children.length) getGroupHeaders(h.children, filterFunc, arr)});
85
+ return arr;
86
+ }
@@ -0,0 +1,15 @@
1
+ import { CustomCellMeta, MetaData } from "../../../interfaces/report-def";
2
+
3
+ export function mergeCustomCellMetaData(metaData1: CustomCellMeta, metaData2?: MetaData): MetaData {
4
+ if(!metaData2){
5
+ metaData1.noExport = true;
6
+ return metaData1
7
+ }
8
+ if(!metaData1.displayName) metaData1.displayName = metaData2.displayName;
9
+ if(!metaData1.preSort) metaData1.preSort = metaData2.preSort;
10
+ if(!metaData1.order) metaData1.order = metaData2.order;
11
+ if(!metaData1.width) metaData1.width = metaData2.width;
12
+ if(metaData2.fieldType) metaData1.fieldType = metaData2.fieldType;
13
+ metaData1.noExport = metaData2.noExport;
14
+ return metaData1;
15
+ }
@@ -0,0 +1,45 @@
1
+ import { Sort } from "@angular/material/sort";
2
+ import { SortDirection } from "../../../interfaces/report-def";
3
+ import { difference } from "lodash";
4
+
5
+ // If we are only sorting due to a change in the Sorts[] we can 'optimize'. If the sort array was first by column a asc then by column b desc then by column c asc,
6
+ // and now it is first by column d asc then by column a desc then by column b desc then by column c asc, we dont need to rerun the tail, i.e. for culumn b and c.
7
+ // So we need to calculate the matching tail of the sort array. Then sortsToRun will be the non-matching head.
8
+ // But if any sorts were removed the only way to 'unsort' is to start by the original data and run all the existing sorts again, so 'sorts to run' will be all
9
+ // the sorts.
10
+ // We always pass allSorts to the container because if the table data changes all the sorts will need to be run.
11
+ export function updateSortState(previousSorts: SortState, currentSorts: Sort[]): SortState{
12
+ currentSorts = addInitSort(currentSorts);
13
+ if(sortsRemoved(previousSorts.allSorts, currentSorts)){
14
+ return ({sortsToRun: currentSorts, allSorts: currentSorts});
15
+ }
16
+ const sameTailLength = getSameTailLength(previousSorts.allSorts, currentSorts);
17
+ const sortsToRun = currentSorts.slice(0, currentSorts.length - sameTailLength);
18
+ return ({sortsToRun, allSorts: currentSorts});
19
+ }
20
+
21
+ export interface SortState { sortsToRun: Sort[], allSorts: Sort[]}
22
+
23
+ function addInitSort(sorts: Sort[]){
24
+ return [...sorts, {active: initIndexSymbol as unknown as string, direction: 'asc' as SortDirection}];
25
+ }
26
+
27
+ function sortsRemoved(previousSorts: Sort[], currentSorts: Sort[]): boolean{
28
+ const previousSortedColumns = previousSorts.map(s => s.active);
29
+ const currentSortedColumns = currentSorts.map(s => s.active);
30
+ const sortsRemoved = !!difference(previousSortedColumns, currentSortedColumns).length;
31
+ return sortsRemoved;
32
+ }
33
+
34
+
35
+ function getSameTailLength(previousSorts: Sort[], currentSorts: Sort[]){
36
+ previousSorts = [...previousSorts].reverse();
37
+ currentSorts = [...currentSorts].reverse();
38
+ let indexOfChange = currentSorts.findIndex((s, i) => s.active !== previousSorts[i]?.active || s.direction !== previousSorts[i]?.direction);
39
+ if(indexOfChange === -1) return indexOfChange = currentSorts.length;
40
+ return indexOfChange;
41
+ }
42
+
43
+ export const initIndexSymbol = Symbol('tb_init_index');
44
+
45
+ export const initialSortState: SortState = { sortsToRun: [], allSorts: []};
@@ -0,0 +1,94 @@
1
+ @let tableId = $tableId();
2
+ @let tableSettings = state.$tableSettings();
3
+
4
+ <ng-content select="[before]" />
5
+ <ng-container multiSort>
6
+ <div class="header-wrapper">
7
+ <div class="title">
8
+ @if ((!$collapsedHeader()) || tableSettings.showTitleWhenHeaderCollapsed) {
9
+ <ng-content select=".tb-header-title"/>
10
+ }
11
+ @if(state.$groupByKeys().length){
12
+ <group-by-list />
13
+ }
14
+ </div>
15
+ <div class="flx-row-end">
16
+ <lib-filter-list />
17
+ @if (!tableSettings.hideHeader) {
18
+ @if (!$collapsedHeader()) {
19
+ <ng-container *ngTemplateOutlet="headerMenu"/>
20
+ <button mat-icon-button color='primary' [matMenuTriggerFor]="mainMenu">
21
+ <mat-icon>more_vert</mat-icon>
22
+ </button>
23
+ <mat-menu #mainMenu='matMenu'>
24
+ <ng-container *ngTemplateOutlet="headerMenuExtra"/>
25
+ </mat-menu>
26
+ }
27
+ @else {
28
+ <mat-icon color="primary" [matMenuTriggerFor]="mainMenu" class="flat-menu-button pointer">more_horiz</mat-icon>
29
+ <mat-menu #mainMenu='matMenu'>
30
+ <div class="flex-column">
31
+ <ng-container *ngTemplateOutlet="headerMenu"/>
32
+ </div>
33
+ <ng-container *ngTemplateOutlet="headerMenuExtra"/>
34
+ </mat-menu>
35
+ }
36
+ <mat-icon [matTooltip]="$collapsedHeader() ? 'expand' : 'collapse'" class="collapse-icon header"
37
+ (click)="state.toggleCollapseHeader()">
38
+ {{$collapsedHeader() ? 'expand_less' : 'expand_more'}}
39
+ </mat-icon>
40
+ }
41
+
42
+ </div>
43
+ </div>
44
+ @if($useVirtual())
45
+ {
46
+ <tb-virtual-scroll-container class="scrollable">
47
+ <tb-generic-table [rows]="$customRows()" [data]="$data()!" [displayDataLength]="$displayDataLength()"
48
+ (selection)='selection$.emit($event)' [columnInfos]='$myColumns()' [trackBy]="$trackBy()" [dataSource]="dataSource" />
49
+ </tb-virtual-scroll-container>
50
+ }
51
+ @else
52
+ {
53
+ <tb-generic-table [rows]="$customRows()" [data]="$data()!" [displayDataLength]="$displayDataLength()"
54
+ (selection)='selection$.emit($event)' [columnInfos]='$myColumns()' [trackBy]="$trackBy()" [dataSource]="dataSource" />
55
+ }
56
+ @if(tableSettings.usePaginator)
57
+ {
58
+ <div class="paginator">
59
+ <tb-paginator #tbPaginator />
60
+
61
+ <mat-icon [matTooltip]="$collapsedFooter() ? 'expand' : 'collapse'" class="collapse-icon footer"
62
+ (click)="state.toggleCollapseFooter()">
63
+ {{$collapsedFooter() ? 'expand_more' : 'expand_less'}}
64
+ </mat-icon>
65
+ </div>
66
+ }
67
+
68
+ <ng-template #headerMenu>
69
+ @if (!tableSettings.hideFilter) {<tb-filter-displayer/>}
70
+ @if (!tableSettings.hideColumnSettings) {<tb-col-displayer/>}
71
+ @if (!tableSettings.hideSort) {<tb-sort-menu/>}
72
+ @if (!!tableId) {<tb-profiles-menu [$tableId]="tableId" (onSaveState)="onSaveState$.emit($event)"/>}
73
+ </ng-template>
74
+
75
+ <ng-template #headerMenuExtra>
76
+ <button mat-menu-item (click)="resetState()">
77
+ <mat-icon color="primary">autorenew</mat-icon>
78
+ <span>Reset table</span>
79
+ </button>
80
+ @if (!tableSettings.hideExport) {
81
+ <button mat-menu-item (click)="exportToCsv()">
82
+ <mat-icon color="primary">file_download</mat-icon>
83
+ <span>Export Table</span>
84
+ </button>
85
+ }
86
+ @if (tableId) {
87
+ <button stop-propagation mat-menu-item (click)="pm.trigger()?.toggleMenu()">
88
+ <mat-icon color="primary">people</mat-icon>
89
+ <span>Profiles</span>
90
+ </button>
91
+ <tb-profiles-menu class="profiles-menu" #pm [$tableId]="tableId" (onSaveState)="onSaveState$.emit($event)"/>
92
+ }
93
+ </ng-template>
94
+ </ng-container>
@@ -0,0 +1,47 @@
1
+ .header-wrapper{
2
+ display: flex;
3
+ flex-direction: row;
4
+ justify-content: space-between;
5
+ width:100%;
6
+ }
7
+
8
+
9
+ .flx-row-end{
10
+ display: flex;
11
+ flex-direction: row;
12
+ justify-content: flex-end;
13
+ align-items: center;
14
+ }
15
+
16
+ .flat-menu{
17
+ line-height: initial;
18
+ height: initial;
19
+ }
20
+
21
+ .pointer{
22
+ cursor: pointer;
23
+ }
24
+
25
+ .add-key{
26
+ width: 90%;
27
+ }
28
+
29
+ .paginator{
30
+ display: flex;
31
+ flex-direction: row;
32
+ justify-content: flex-end;
33
+ align-items: center;
34
+ background-color: white;
35
+ bottom: 0px;
36
+ position: sticky;
37
+ border-top: .5px solid rgba(0,0,0,.12);
38
+ }
39
+ .profiles-menu{
40
+ visibility: hidden;
41
+ width: 0px;
42
+ height: 0px;
43
+ display: block;
44
+ overflow: hidden;
45
+ position: absolute;
46
+ top: 50px;
47
+ }