@one-paragon/angular-utilities 2.1.5 → 2.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. package/action-state/action-state-spinner/action-state-spinner.component.d.ts +12 -0
  2. package/action-state/action-state-ui/action-state-ui.module.d.ts +7 -0
  3. package/{src/action-state/index.ts → action-state/index.d.ts} +4 -8
  4. package/action-state/ngrx-ext/ngrx-ext.module.d.ts +8 -0
  5. package/action-state/ngrx.d.ts +31 -0
  6. package/fesm2022/one-paragon-angular-utilities.mjs +6346 -0
  7. package/fesm2022/one-paragon-angular-utilities.mjs.map +1 -0
  8. package/http-request-state/RequestStateFactory.d.ts +17 -0
  9. package/http-request-state/RequestStateStore.d.ts +101 -0
  10. package/{src/http-request-state/deprecated.ts → http-request-state/deprecated.d.ts} +20 -20
  11. package/http-request-state/directives/HttpStateDirectiveBase.d.ts +14 -0
  12. package/http-request-state/directives/http-error-state-directive.d.ts +9 -0
  13. package/http-request-state/directives/http-inProgress-state-directive.d.ts +9 -0
  14. package/http-request-state/directives/http-notStarted-state-directive.d.ts +9 -0
  15. package/http-request-state/directives/http-success-state-directive.d.ts +16 -0
  16. package/{src/http-request-state/directives/index.ts → http-request-state/directives/index.d.ts} +5 -5
  17. package/http-request-state/directives/request-state-directive.d.ts +34 -0
  18. package/http-request-state/helpers.d.ts +9 -0
  19. package/http-request-state/http-state-module.d.ts +11 -0
  20. package/{src/http-request-state/index.ts → http-request-state/index.d.ts} +7 -7
  21. package/http-request-state/request-state.d.ts +12 -0
  22. package/http-request-state/rxjs/getRequestorBody.d.ts +3 -0
  23. package/http-request-state/rxjs/getRequestorState.d.ts +3 -0
  24. package/{src/http-request-state/rxjs/index.ts → http-request-state/rxjs/index.d.ts} +4 -4
  25. package/http-request-state/rxjs/tapError.d.ts +3 -0
  26. package/http-request-state/rxjs/tapSuccess.d.ts +3 -0
  27. package/http-request-state/types.d.ts +41 -0
  28. package/index.d.ts +5 -0
  29. package/ngrx/actionable-selector.d.ts +32 -0
  30. package/ngrx/index.d.ts +1 -0
  31. package/package.json +27 -15
  32. package/{src/public-api.ts → public-api.d.ts} +16 -35
  33. package/rxjs/defaultShareReplay.d.ts +2 -0
  34. package/{src/rxjs/index.ts → rxjs/index.d.ts} +5 -5
  35. package/rxjs/mapError.d.ts +2 -0
  36. package/rxjs/rxjs-operators.d.ts +13 -0
  37. package/rxjs/subjectifier.d.ts +10 -0
  38. package/rxjs/subscriber.directive.d.ts +14 -0
  39. package/table-builder/classes/DefaultSettings.d.ts +9 -0
  40. package/table-builder/classes/MatTableObservableDataSource.d.ts +9 -0
  41. package/table-builder/classes/TableBuilderConfig.d.ts +23 -0
  42. package/table-builder/classes/TableBuilderDataSource.d.ts +18 -0
  43. package/table-builder/classes/TableState.d.ts +81 -0
  44. package/table-builder/classes/data-store.d.ts +8 -0
  45. package/{src/table-builder/classes/display-col.ts → table-builder/classes/display-col.d.ts} +5 -5
  46. package/table-builder/classes/filter-info.d.ts +39 -0
  47. package/table-builder/classes/table-builder-general-settings.d.ts +117 -0
  48. package/table-builder/classes/table-builder.d.ts +22 -0
  49. package/table-builder/classes/table-store.d.ts +146 -0
  50. package/table-builder/classes/table-store.helpers.d.ts +31 -0
  51. package/table-builder/components/array-column.component.d.ts +15 -0
  52. package/table-builder/components/column-builder/column-builder.component.d.ts +41 -0
  53. package/table-builder/components/column-builder/column-helpers.d.ts +38 -0
  54. package/table-builder/components/column-header-menu/column-header-menu.component.d.ts +50 -0
  55. package/table-builder/components/date-filter/date-filter.component.d.ts +37 -0
  56. package/table-builder/components/date-time-filter/date-time-filter.component.d.ts +37 -0
  57. package/table-builder/components/filter/filter.component.d.ts +48 -0
  58. package/table-builder/components/filter/in-list/in-list-filter.component.d.ts +23 -0
  59. package/table-builder/components/gen-col-displayer/gen-col-displayer.component.d.ts +17 -0
  60. package/table-builder/components/generic-table/generic-table.component.d.ts +84 -0
  61. package/table-builder/components/generic-table/paginator.component.d.ts +26 -0
  62. package/table-builder/components/group-by-list/group-by-list.component.d.ts +11 -0
  63. package/table-builder/components/in-filter/in-filter.component.d.ts +20 -0
  64. package/{src/table-builder/components/index.ts → table-builder/components/index.d.ts} +9 -9
  65. package/table-builder/components/initialization-component/initialization-component.d.ts +15 -0
  66. package/table-builder/components/link-column.component.d.ts +23 -0
  67. package/table-builder/components/number-filter/number-filter.component.d.ts +39 -0
  68. package/table-builder/components/profiles-menu/profiles-menu.component.d.ts +33 -0
  69. package/table-builder/components/reset-menu/reset-menu.component.d.ts +25 -0
  70. package/table-builder/components/scroll-strategy.d.ts +45 -0
  71. package/table-builder/components/sort-menu/sort-menu.component-store.d.ts +24 -0
  72. package/table-builder/components/sort-menu/sort-menu.component.d.ts +19 -0
  73. package/table-builder/components/table-container/table-container.d.ts +104 -0
  74. package/table-builder/components/table-container/table-container.helpers/data-state.helpers.d.ts +7 -0
  75. package/table-builder/components/table-container/table-container.helpers/filter-state.helpers.d.ts +19 -0
  76. package/table-builder/components/table-container/table-container.helpers/groupBy.helpers.d.ts +19 -0
  77. package/table-builder/components/table-container/table-container.helpers/meta-data.helpers.d.ts +2 -0
  78. package/table-builder/components/table-container/table-container.helpers/sort-state.helpers.d.ts +12 -0
  79. package/table-builder/components/table-container/tableProps.d.ts +10 -0
  80. package/table-builder/components/table-container/virtual-scroll-container.d.ts +40 -0
  81. package/table-builder/components/table-container-filter/filter-list/filter-list.component.d.ts +15 -0
  82. package/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.d.ts +12 -0
  83. package/table-builder/components/table-container-filter/table-wrapper-filter-store.d.ts +14 -0
  84. package/table-builder/components/table-header-menu/table-header-menu.component.d.ts +15 -0
  85. package/table-builder/directives/custom-cell-directive.d.ts +34 -0
  86. package/{src/table-builder/directives/index.ts → table-builder/directives/index.d.ts} +5 -6
  87. package/table-builder/directives/multi-sort.directive.d.ts +10 -0
  88. package/table-builder/directives/resize-column.directive.d.ts +43 -0
  89. package/table-builder/directives/table-wrapper.directive.d.ts +8 -0
  90. package/table-builder/directives/tb-filter.directive.d.ts +116 -0
  91. package/table-builder/enums/filterTypes.d.ts +36 -0
  92. package/table-builder/functions/boolean-filter-function.d.ts +3 -0
  93. package/table-builder/functions/date-filter-function.d.ts +4 -0
  94. package/table-builder/functions/download-data.d.ts +1 -0
  95. package/table-builder/functions/null-filter-function.d.ts +2 -0
  96. package/table-builder/functions/number-filter-function.d.ts +4 -0
  97. package/table-builder/functions/sort-data-function.d.ts +6 -0
  98. package/table-builder/functions/string-filter-function.d.ts +5 -0
  99. package/{src/table-builder/interfaces/ColumnInfo.ts → table-builder/interfaces/ColumnInfo.d.ts} +6 -7
  100. package/{src/table-builder/interfaces/dictionary.ts → table-builder/interfaces/dictionary.d.ts} +3 -3
  101. package/table-builder/interfaces/report-def.d.ts +171 -0
  102. package/table-builder/ngrx/tableBuilderStateStore.d.ts +69 -0
  103. package/table-builder/pipes/column-total.pipe.d.ts +8 -0
  104. package/table-builder/pipes/format-filter-type.pipe.d.ts +8 -0
  105. package/table-builder/pipes/format-filter-value.pipe.d.ts +11 -0
  106. package/table-builder/pipes/key-display.d.ts +9 -0
  107. package/table-builder/services/export-to-csv.service.d.ts +14 -0
  108. package/table-builder/services/link-creator.service.d.ts +16 -0
  109. package/table-builder/services/table-template-service.d.ts +14 -0
  110. package/table-builder/services/transform-creator.d.ts +7 -0
  111. package/table-builder/table-builder.module.d.ts +14 -0
  112. package/utilities/array-helpers.d.ts +1 -0
  113. package/utilities/directives/auto-focus.directive.d.ts +9 -0
  114. package/utilities/directives/clickEmitterDirective.d.ts +7 -0
  115. package/utilities/directives/clickSubject.d.ts +9 -0
  116. package/utilities/directives/conditional-classes.directive.d.ts +12 -0
  117. package/utilities/directives/dialog-service.d.ts +10 -0
  118. package/utilities/directives/dialog.d.ts +45 -0
  119. package/utilities/directives/mat-toggle-group-directive.d.ts +21 -0
  120. package/utilities/directives/prevent-enter.directive.d.ts +6 -0
  121. package/utilities/directives/stop-propagation.directive.d.ts +7 -0
  122. package/utilities/directives/styler.d.ts +16 -0
  123. package/utilities/directives/trim-whitespace.directive.d.ts +7 -0
  124. package/{src/utilities/index.ts → utilities/index.d.ts} +15 -22
  125. package/utilities/module.d.ts +19 -0
  126. package/utilities/pipes/function.pipe.d.ts +11 -0
  127. package/utilities/pipes/phone.pipe.d.ts +8 -0
  128. package/utilities/pipes/space-case.pipes.d.ts +17 -0
  129. package/karma.conf.js +0 -44
  130. package/ng-package.json +0 -7
  131. package/src/action-state/action-state-spinner/action-state-spinner.component.css +0 -16
  132. package/src/action-state/action-state-spinner/action-state-spinner.component.html +0 -6
  133. package/src/action-state/action-state-spinner/action-state-spinner.component.spec.ts +0 -25
  134. package/src/action-state/action-state-spinner/action-state-spinner.component.ts +0 -25
  135. package/src/action-state/action-state-ui/action-state-ui.module.ts +0 -13
  136. package/src/action-state/ngrx-ext/ngrx-ext.module.ts +0 -15
  137. package/src/action-state/ngrx.ts +0 -69
  138. package/src/http-request-state/RequestStateFactory.ts +0 -56
  139. package/src/http-request-state/RequestStateStore.ts +0 -284
  140. package/src/http-request-state/directives/HttpStateDirectiveBase.ts +0 -29
  141. package/src/http-request-state/directives/http-error-state-directive.ts +0 -21
  142. package/src/http-request-state/directives/http-inProgress-state-directive.ts +0 -19
  143. package/src/http-request-state/directives/http-notStarted-state-directive.ts +0 -19
  144. package/src/http-request-state/directives/http-success-state-directive.ts +0 -29
  145. package/src/http-request-state/directives/request-state-directive.spec.ts +0 -73
  146. package/src/http-request-state/directives/request-state-directive.ts +0 -78
  147. package/src/http-request-state/helpers.ts +0 -30
  148. package/src/http-request-state/http-state-module.ts +0 -23
  149. package/src/http-request-state/models/view-context.ts +0 -18
  150. package/src/http-request-state/observable.spec.ts +0 -43
  151. package/src/http-request-state/request-state.ts +0 -69
  152. package/src/http-request-state/rxjs/getRequestorBody.ts +0 -10
  153. package/src/http-request-state/rxjs/getRequestorState.ts +0 -8
  154. package/src/http-request-state/rxjs/tapError.ts +0 -16
  155. package/src/http-request-state/rxjs/tapSuccess.ts +0 -16
  156. package/src/http-request-state/strategies.spec.ts +0 -42
  157. package/src/http-request-state/types.ts +0 -54
  158. package/src/ngrx/actionable-selector.ts +0 -160
  159. package/src/ngrx/index.ts +0 -1
  160. package/src/rxjs/defaultShareReplay.ts +0 -8
  161. package/src/rxjs/mapError.ts +0 -8
  162. package/src/rxjs/rxjs-operators.ts +0 -130
  163. package/src/rxjs/subjectifier.ts +0 -17
  164. package/src/rxjs/subscriber.directive.ts +0 -57
  165. package/src/specs/clickSubject.spec.ts +0 -95
  166. package/src/specs/dialog.spec.ts +0 -101
  167. package/src/specs/toggleGroupDirective.spec.ts +0 -229
  168. package/src/table-builder/classes/DefaultSettings.ts +0 -11
  169. package/src/table-builder/classes/MatTableObservableDataSource.ts +0 -23
  170. package/src/table-builder/classes/TableBuilderConfig.ts +0 -42
  171. package/src/table-builder/classes/TableBuilderDataSource.ts +0 -65
  172. package/src/table-builder/classes/TableState.ts +0 -125
  173. package/src/table-builder/classes/data-store.ts +0 -10
  174. package/src/table-builder/classes/filter-info.ts +0 -126
  175. package/src/table-builder/classes/table-builder-general-settings.ts +0 -198
  176. package/src/table-builder/classes/table-builder.ts +0 -105
  177. package/src/table-builder/classes/table-store.helpers.ts +0 -104
  178. package/src/table-builder/classes/table-store.ts +0 -440
  179. package/src/table-builder/components/array-column.component.ts +0 -34
  180. package/src/table-builder/components/column-builder/column-builder.component.html +0 -73
  181. package/src/table-builder/components/column-builder/column-builder.component.scss +0 -43
  182. package/src/table-builder/components/column-builder/column-builder.component.spec.ts +0 -49
  183. package/src/table-builder/components/column-builder/column-builder.component.ts +0 -129
  184. package/src/table-builder/components/column-builder/column-helpers.ts +0 -54
  185. package/src/table-builder/components/column-header-menu/column-header-menu.component.html +0 -109
  186. package/src/table-builder/components/column-header-menu/column-header-menu.component.scss +0 -97
  187. package/src/table-builder/components/column-header-menu/column-header-menu.component.ts +0 -94
  188. package/src/table-builder/components/date-filter/date-filter.component.html +0 -23
  189. package/src/table-builder/components/date-filter/date-filter.component.ts +0 -22
  190. package/src/table-builder/components/date-time-filter/date-time-filter.component.html +0 -9
  191. package/src/table-builder/components/date-time-filter/date-time-filter.component.ts +0 -20
  192. package/src/table-builder/components/filter/filter.component.html +0 -103
  193. package/src/table-builder/components/filter/filter.component.scss +0 -60
  194. package/src/table-builder/components/filter/filter.component.spec.ts +0 -87
  195. package/src/table-builder/components/filter/filter.component.ts +0 -64
  196. package/src/table-builder/components/filter/in-list/in-list-filter.component.ts +0 -85
  197. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.html +0 -60
  198. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.scss +0 -57
  199. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.ts +0 -44
  200. package/src/table-builder/components/generic-table/generic-table.component.html +0 -96
  201. package/src/table-builder/components/generic-table/generic-table.component.scss +0 -38
  202. package/src/table-builder/components/generic-table/generic-table.component.ts +0 -399
  203. package/src/table-builder/components/generic-table/paginator.component.ts +0 -106
  204. package/src/table-builder/components/group-by-list/group-by-list.component.css +0 -17
  205. package/src/table-builder/components/group-by-list/group-by-list.component.html +0 -14
  206. package/src/table-builder/components/group-by-list/group-by-list.component.spec.ts +0 -23
  207. package/src/table-builder/components/group-by-list/group-by-list.component.ts +0 -18
  208. package/src/table-builder/components/in-filter/in-filter.component.css +0 -3
  209. package/src/table-builder/components/in-filter/in-filter.component.html +0 -19
  210. package/src/table-builder/components/in-filter/in-filter.component.ts +0 -65
  211. package/src/table-builder/components/initialization-component/initialization-component.html +0 -78
  212. package/src/table-builder/components/initialization-component/initialization-component.ts +0 -27
  213. package/src/table-builder/components/link-column.component.ts +0 -42
  214. package/src/table-builder/components/number-filter/number-filter.component.css +0 -10
  215. package/src/table-builder/components/number-filter/number-filter.component.html +0 -22
  216. package/src/table-builder/components/number-filter/number-filter.component.spec.ts +0 -30
  217. package/src/table-builder/components/number-filter/number-filter.component.ts +0 -25
  218. package/src/table-builder/components/profiles-menu/profiles-menu.component.html +0 -76
  219. package/src/table-builder/components/profiles-menu/profiles-menu.component.scss +0 -126
  220. package/src/table-builder/components/profiles-menu/profiles-menu.component.spec.ts +0 -23
  221. package/src/table-builder/components/profiles-menu/profiles-menu.component.ts +0 -63
  222. package/src/table-builder/components/reset-menu/reset-menu.component.css +0 -3
  223. package/src/table-builder/components/reset-menu/reset-menu.component.html +0 -10
  224. package/src/table-builder/components/reset-menu/reset-menu.component.ts +0 -87
  225. package/src/table-builder/components/scroll-strategy.ts +0 -139
  226. package/src/table-builder/components/sort-menu/sort-menu.component-store.ts +0 -57
  227. package/src/table-builder/components/sort-menu/sort-menu.component.html +0 -109
  228. package/src/table-builder/components/sort-menu/sort-menu.component.scss +0 -119
  229. package/src/table-builder/components/sort-menu/sort-menu.component.ts +0 -88
  230. package/src/table-builder/components/table-container/table-container.helpers/data-state.helpers.ts +0 -112
  231. package/src/table-builder/components/table-container/table-container.helpers/filter-state.helpers.ts +0 -125
  232. package/src/table-builder/components/table-container/table-container.helpers/groupBy.helpers.ts +0 -120
  233. package/src/table-builder/components/table-container/table-container.helpers/meta-data.helpers.ts +0 -16
  234. package/src/table-builder/components/table-container/table-container.helpers/sort-state.helpers.ts +0 -47
  235. package/src/table-builder/components/table-container/table-container.html +0 -79
  236. package/src/table-builder/components/table-container/table-container.scss +0 -47
  237. package/src/table-builder/components/table-container/table-container.ts +0 -403
  238. package/src/table-builder/components/table-container/tableProps.ts +0 -18
  239. package/src/table-builder/components/table-container/virtual-scroll-container.ts +0 -216
  240. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.html +0 -34
  241. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.ts +0 -44
  242. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.css +0 -42
  243. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.html +0 -11
  244. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.spec.ts +0 -85
  245. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.ts +0 -36
  246. package/src/table-builder/components/table-container-filter/table-wrapper-filter-store.ts +0 -23
  247. package/src/table-builder/components/table-header-menu/table-header-menu.component.css +0 -21
  248. package/src/table-builder/components/table-header-menu/table-header-menu.component.html +0 -48
  249. package/src/table-builder/components/table-header-menu/table-header-menu.component.ts +0 -35
  250. package/src/table-builder/directives/custom-cell-directive.ts +0 -59
  251. package/src/table-builder/directives/multi-sort.directive.spec.ts +0 -124
  252. package/src/table-builder/directives/multi-sort.directive.ts +0 -50
  253. package/src/table-builder/directives/resize-column.directive.ts +0 -107
  254. package/src/table-builder/directives/table-wrapper.directive.ts +0 -13
  255. package/src/table-builder/directives/tb-filter.directive.ts +0 -376
  256. package/src/table-builder/enums/filterTypes.ts +0 -40
  257. package/src/table-builder/functions/boolean-filter-function.ts +0 -12
  258. package/src/table-builder/functions/date-filter-function.ts +0 -68
  259. package/src/table-builder/functions/download-data.ts +0 -11
  260. package/src/table-builder/functions/null-filter-function.ts +0 -9
  261. package/src/table-builder/functions/number-filter-function.ts +0 -41
  262. package/src/table-builder/functions/sort-data-function.ts +0 -80
  263. package/src/table-builder/functions/string-filter-function.ts +0 -51
  264. package/src/table-builder/interfaces/column-template.ts +0 -9
  265. package/src/table-builder/interfaces/report-def.ts +0 -186
  266. package/src/table-builder/ngrx/tableBuilderStateStore.ts +0 -197
  267. package/src/table-builder/pipes/column-total.pipe.ts +0 -16
  268. package/src/table-builder/pipes/format-filter-type.pipe.ts +0 -12
  269. package/src/table-builder/pipes/format-filter-value.pipe.ts +0 -40
  270. package/src/table-builder/pipes/key-display.ts +0 -13
  271. package/src/table-builder/services/export-to-csv.service.ts +0 -75
  272. package/src/table-builder/services/link-creator.service.ts +0 -98
  273. package/src/table-builder/services/table-template-service.ts +0 -47
  274. package/src/table-builder/services/transform-creator.ts +0 -96
  275. package/src/table-builder/specs/table-custom-filters.spec.ts +0 -262
  276. package/src/table-builder/styles/collapser.styles.scss +0 -16
  277. package/src/table-builder/table-builder.module.ts +0 -38
  278. package/src/test.ts +0 -17
  279. package/src/utilities/array-helpers.ts +0 -13
  280. package/src/utilities/directives/auto-focus.directive.ts +0 -20
  281. package/src/utilities/directives/clickEmitterDirective.ts +0 -15
  282. package/src/utilities/directives/clickSubject.ts +0 -19
  283. package/src/utilities/directives/conditional-classes.directive.ts +0 -36
  284. package/src/utilities/directives/dialog-service.ts +0 -19
  285. package/src/utilities/directives/dialog.ts +0 -144
  286. package/src/utilities/directives/mat-toggle-group-directive.ts +0 -60
  287. package/src/utilities/directives/prevent-enter.directive.ts +0 -12
  288. package/src/utilities/directives/stop-propagation.directive.ts +0 -19
  289. package/src/utilities/directives/styler.ts +0 -44
  290. package/src/utilities/directives/trim-whitespace.directive.ts +0 -20
  291. package/src/utilities/module.ts +0 -55
  292. package/src/utilities/pipes/function.pipe.ts +0 -21
  293. package/src/utilities/pipes/phone.pipe.ts +0 -20
  294. package/src/utilities/pipes/space-case.pipes.spec.ts +0 -47
  295. package/src/utilities/pipes/space-case.pipes.ts +0 -26
  296. package/tsconfig.lib.json +0 -20
  297. package/tsconfig.lib.prod.json +0 -10
  298. package/tsconfig.spec.json +0 -17
@@ -1,112 +0,0 @@
1
- import { Observable, Timestamp, combineLatest, map, scan, timestamp } from "rxjs";
2
- import { SortState } from "./sort-state.helpers";
3
- import { FilterPredicateState } from "./filter-state.helpers";
4
- import { filterData, getFactory, sortData, tbNoShowSymbol } from "../../../functions/sort-data-function";
5
- import { defaultShareReplay } from "../../../../rxjs/defaultShareReplay";
6
- import { FieldType, MetaData } from "../../../interfaces/report-def";
7
- import { set } from "lodash";
8
-
9
- export const _sortAndFilterData = <T>(data: Observable<T[]>, sortState: Observable<SortState>, filterState: Observable<FilterPredicateState<T>>) => combineLatest([
10
- data.pipe(timestamp()),
11
- sortState.pipe(timestamp()),
12
- filterState.pipe(timestamp())
13
- ]).pipe(
14
- scan((mappedData, [data, sort, f], index)=> {
15
- return mapDataSortsAndFilters( data, f, sort, index === 0, mappedData);
16
- }, [] as T[])
17
- ).pipe(
18
- map((resultData) => resultData.filter(item => !item[tbNoShowSymbol])),
19
- defaultShareReplay()
20
- );
21
-
22
- const mapDataSortsAndFilters = <T>(allData: Timestamp<T[]>, filters: Timestamp<FilterPredicateState<T>>, sort: Timestamp<SortState>, firstRun: boolean, filteredData: T[]) => {
23
- const fresh = firstRun || (allData.timestamp > sort.timestamp && allData.timestamp > filters.timestamp);
24
- const sortChanged = !fresh && sort.timestamp > filters.timestamp;
25
- const filterRemoved = !fresh && !sortChanged && !filters.value.onlyAddedFilters;
26
- const runAllOnAllData = fresh || filterRemoved;
27
- const resetFilters = !fresh && filterRemoved;
28
- if(runAllOnAllData){
29
- const filteredData = filterData(sortData(allData.value , sort.value.sortsToRun ), filters.value.allFilters, resetFilters);
30
- return filteredData;
31
- }
32
- if(sortChanged){
33
- return (sortData(filteredData, sort.value.sortsToRun));
34
- }
35
- return (filterData(filteredData, filters.value.onlyAddedFilters || filters.value.allFilters, resetFilters));
36
- }
37
-
38
- export const sortAndFilterData = <T>(data: Timestamp<T[]>, filters: Timestamp<FilterPredicateState<T>>, sort: Timestamp<SortState>, firstRun: boolean, resultData: T[]) => {
39
- const markedAndSortedData = mapDataSortsAndFilters( data, filters, sort, firstRun, resultData);
40
- const filteredData = markedAndSortedData.filter(item => !item[tbNoShowSymbol]);
41
- return filteredData;
42
- }
43
- export const createDataCleaners = <T>(metadatas: MetaData<T>[], mutate = false) => {
44
- const transforms = createCleaners(metadatas);
45
- return (data: T) => {
46
- if(!mutate){
47
- data = { ...data }
48
- }
49
- for(const transform of transforms){
50
- transform(data);
51
- }
52
- return data;
53
- }
54
- }
55
-
56
- const createCleaners = <T>(metadatas: MetaData<T> []) => {
57
- return metadatas.reduce((transforms,metaData) => {
58
- const getter = getFactory(metaData.key);
59
- const setter = metaData.key.includes('.') ? (t, val) => set(t, metaData.key, val) : (t, val) => t[metaData.key as unknown as keyof T] = val
60
- switch ( metaData.fieldType ) {
61
- case FieldType.Currency:
62
- case FieldType.Number:{
63
- const transform = (t:T) => {
64
- const val = getter(t);
65
- const num = Number( val );
66
- setter(t, isNaN(num) || val == null ? null : num)
67
- };
68
- transforms.push(transform);
69
- break;
70
- }
71
- case FieldType.Date:{
72
- const transform = (t:T) => {
73
- const val = getter(t);
74
- const date = Date.parse(val);
75
- let mappedDate: Date;
76
- if(isNaN(date)){
77
- mappedDate = null as any;
78
- } else {
79
- mappedDate = new Date(date);
80
- mappedDate.setHours(0, 0, 0, 0);
81
- }
82
- setter(t, mappedDate);
83
- };
84
- transforms.push(transform);
85
- break;
86
- }
87
-
88
- case FieldType.DateTime:{
89
- const transform = (t:T) => {
90
- const val = getter(t);
91
- const date = Date.parse(val);
92
- let mappedDate: Date;
93
- if(isNaN(date)){
94
- mappedDate = null as any;
95
- } else {
96
- mappedDate = new Date(date);
97
- if(!metaData.additional?.dateTimeOptions?.includeMilliseconds){
98
- if(metaData.additional?.dateTimeOptions?.includeSeconds){
99
- mappedDate.setMilliseconds(0);
100
- } else {
101
- mappedDate.setSeconds(0, 0);
102
- }
103
- }
104
- }
105
- setter(t, mappedDate);
106
- };
107
- transforms.push(transform);
108
- }
109
- }
110
- return transforms;
111
- }, [] as ((t:T) => void)[])
112
- }
@@ -1,125 +0,0 @@
1
- import { Timestamp } from "rxjs";
2
- import { CustomFilter, FilterInfo, createFilterFunc, isCustomFilter, isFilterInfo, needsFilterCreation } from "../../../classes/filter-info";
3
- import { Dictionary } from "../../../interfaces/dictionary";
4
- import { Predicate } from "@angular/core";
5
- import { difference, intersection } from "lodash";
6
- import { TableCustomFilterDirective, TableFilterDirective } from "../../../directives";
7
-
8
- //The idea of this is that if filters were only added, and none were removed or changed, then we only need to tag more rows to not be shown. We don't need to remove any 'dont show' tags.
9
- // So if filters were only added this method will return the added filters, if filters were removed or changed this method will return undefined.
10
- export const updateFilterInfoState = <T>(previousState: FilterInfoState<T>, filterInfos: FilterInfoDict) => {
11
- filterInfos = filterNonActiveOrNotReadyFilters(filterInfos);
12
- const currentState: FilterInfoState<T> = {
13
- allFilters: filterInfos,
14
- onlyAddedFilters: filterInfoOnlyAdded(previousState.allFilters, filterInfos)
15
- }
16
- return currentState;
17
- }
18
-
19
- export const mapFilterInfoStateToPredicateState = <T>(s: FilterInfoState<T>): FilterPredicateState<T> => {
20
- const mappedAddOnly: {[key in keyof T]: Predicate<T>} =
21
- s.onlyAddedFilters
22
- ?
23
- Object.entries(s.onlyAddedFilters).filter(([, v]) => needsFilterCreation(v)).reduce((obj, [key, value]) => {
24
- obj[key] = createFilterFunc(value);
25
- return obj;
26
- }, {} as {[key in keyof T]: Predicate<T>})
27
- : {} as {[key in keyof T]: Predicate<T>};
28
- const mappedAll = Object.entries(s.allFilters).filter(([, v]) => needsFilterCreation(v))
29
- .filter(([,v])=> !isCustomFilter(v) || !!v.predicate)
30
- .map(([key, value]) => {
31
- return mappedAddOnly[key] || createFilterFunc(value);
32
- });
33
- return ({
34
- allFilters: mappedAll,
35
- onlyAddedFilters: s.onlyAddedFilters ? Object.values(mappedAddOnly) : undefined
36
- })
37
- }
38
-
39
- export const updateFilterPredicateState = <T>(previousState: FilterPredicateState<T>, filters: Predicate<any>[]) => {
40
- const currentState: FilterPredicateState<T> = {
41
- allFilters: filters,
42
- onlyAddedFilters: predicatesOnlyAdded(previousState.allFilters, filters)
43
- }
44
- return currentState;
45
- }
46
-
47
- export const updateFilterState = <T>(filterInfos: Timestamp<FilterInfoState<T>>, predicates: Timestamp<FilterPredicateState<T>>): FilterPredicateState<T> => {
48
- const infos = mapFilterInfoStateToPredicateState(filterInfos.value);
49
- const filtersState: FilterPredicateState<T> = {
50
- allFilters: [...infos.allFilters, ...predicates.value.allFilters]
51
- }
52
- if(filterInfos.timestamp > predicates.timestamp && !!filterInfos.value.onlyAddedFilters){
53
- filtersState.onlyAddedFilters = infos.onlyAddedFilters;
54
- } else {
55
- filtersState.onlyAddedFilters = predicates.value.onlyAddedFilters
56
- }
57
- return filtersState
58
- }
59
-
60
-
61
- const filterNonActiveOrNotReadyFilters = (filtersDict : FilterInfoDict) => Object.entries(filtersDict).reduce((obj ,[key, value]) => {
62
- if(value.active !== false && (!isCustomFilter(value) || !!value.predicate)){
63
- obj[key] = value
64
- };
65
- return obj;
66
- }, {} as Dictionary<FilterInfo | CustomFilter>);
67
-
68
-
69
- function filterInfoOnlyAdded(previousFilterInfos: FilterInfoDict, currentFilterInfos: FilterInfoDict): FilterInfoDict | undefined{
70
- const previousKeys = Object.keys(previousFilterInfos);
71
- const currentKeys = Object.keys(currentFilterInfos);
72
- const keysInBoth = intersection(previousKeys, currentKeys);
73
- const someRemoved = previousKeys.length > keysInBoth.length;
74
- if(someRemoved || !previousKeys.length){
75
- return undefined;
76
- }
77
- if(filtersInfosUpdated(previousFilterInfos, currentFilterInfos)){
78
- return undefined;
79
- }
80
- const addedFilters = difference(currentKeys, keysInBoth).reduce((dict, key) => {
81
- dict[key] = currentFilterInfos[key];
82
- return dict;
83
- }, {} as FilterInfoDict);
84
- return addedFilters;
85
- }
86
-
87
- function predicatesOnlyAdded(previousPredicates: Predicate<any>[], currentPredicates: Predicate<any>[]){
88
- if(!previousPredicates.length){
89
- return undefined;
90
- }
91
- const predicateFiltersRemoved = difference(previousPredicates, currentPredicates).length;
92
- if(predicateFiltersRemoved){
93
- return undefined;
94
- }
95
- return difference(currentPredicates, previousPredicates);
96
- }
97
-
98
- function filtersInfosUpdated(previousFilterInfos: FilterInfoDict<any>, currentFilterInfos: FilterInfoDict<any>){
99
- return !Object.entries(previousFilterInfos).every(([key, val]) => {
100
- return currentFilterInfos[key].filterType === val.filterType && currentFilterInfos[key].filterValue === val.filterValue
101
- })
102
- }
103
-
104
- export function patchDirectiveFromState(directive: (TableCustomFilterDirective | TableFilterDirective), stateFilter: FilterInfo | CustomFilter){
105
- if(isFilterInfo(stateFilter)) {
106
- const filterDirective: TableFilterDirective = directive as TableFilterDirective;
107
- filterDirective.setFilterValue(stateFilter.filterValue);
108
- filterDirective.update();
109
- }
110
- if(isCustomFilter(stateFilter)) {
111
- directive.active = stateFilter.active ?? false;
112
- }
113
- }
114
-
115
- export interface FilterInfoState<T> {
116
- allFilters: FilterInfoDict<T>,
117
- onlyAddedFilters?: FilterInfoDict<T> | undefined,
118
- }
119
-
120
- export interface FilterPredicateState<T> {
121
- allFilters: Predicate<T>[],
122
- onlyAddedFilters?: Predicate<T>[] | undefined,
123
- }
124
-
125
- export type FilterInfoDict<T = any> = Dictionary<FilterInfo<any, T> | CustomFilter<any>>;
@@ -1,120 +0,0 @@
1
- import { groupBy } from "lodash";
2
- import { Timestamp } from "rxjs";
3
- import { DataGroup, Group, GroupedData, GroupGroup, NoneGroupHeader } from "../../../classes/TableState";
4
- import { initIndexSymbol } from "./sort-state.helpers";
5
- import { Dictionary } from "@ngrx/entity";
6
-
7
- const supportsGroupBy = typeof Object.groupBy === 'function'
8
-
9
- function getGroupedData<T extends NoneGroupHeader>(data: T[], groupByKeys: string[]) {
10
- return tbGroupBy(data, groupByKeys);
11
- }
12
-
13
- const tbGroupBy = <T extends NoneGroupHeader = any>(data: T[], groupByKeys: string[], level= 1, parentGroupName?: string) => {
14
- const currentKey = groupByKeys[0];
15
- const groupedDataArr = groupData(currentKey, data, level, parentGroupName);
16
-
17
- const remainingGroupByKeys = groupByKeys.slice(1);
18
- const hasChildrenGroups = !!remainingGroupByKeys.length;
19
-
20
- if (hasChildrenGroups) {
21
- //group the children by iterating over each group and grouping it by the next keys
22
- const groupOfGroups = groupedDataArr.map((group: DataGroup<T>) => {
23
- const children = group.children;
24
- const groupGroup = {
25
- groupName: group.groupName,
26
- groupHeaderDisplay: group.groupHeaderDisplay,
27
- uniqueName: group.uniqueName,
28
- key: currentKey,
29
- hasTheData: false,
30
- isGroupHeader: true,
31
- padding : group.padding,
32
- level: group.level,
33
- length: group.length,
34
- groups: tbGroupBy(children as T[], remainingGroupByKeys, level + 1, group.groupName),
35
- [initIndexSymbol]: group[initIndexSymbol],
36
- } as GroupGroup<T>;
37
- return groupGroup;
38
- });
39
- return groupOfGroups;
40
- }
41
-
42
- return groupedDataArr;
43
- }
44
-
45
- function groupData<T extends NoneGroupHeader = any>(groupByKey: string, groupData: T[], level = 1, parentGroupName?: string){
46
- const groupedDataDict: Record<string, (T)[]> = supportsGroupBy ? Object.groupBy(groupData, d => d[groupByKey]) as Record<string, T[]> : groupBy(groupData, groupByKey);
47
- const groupedDataArr = Object.entries(groupedDataDict).map(([name, groupData]) => {
48
- const uniqueName = parentGroupName ? `${parentGroupName}-${name}` : `${name}`;
49
-
50
- return ({
51
- isGroupHeader: true,
52
- groupHeaderDisplay: name,
53
- hasTheData: true,
54
- children: groupData,
55
- groupName: `tb_group_${uniqueName}`,
56
- padding: 1 + (20 * (level - 1)),
57
- key: groupByKey,
58
- length : groupData.length,
59
- uniqueName,
60
- level,
61
- [initIndexSymbol]: uniqueName,
62
- } as DataGroup<T>)
63
- });
64
- return groupedDataArr;
65
- }
66
-
67
- export function updateGroupByState<T extends NoneGroupHeader = any>(groupedData: any[], { data, groups, expanded}: { data: Timestamp<T[]>, groups: Timestamp<string[]>, expanded: Timestamp<GroupedData[]>}, firstRun: boolean){
68
- if(
69
- firstRun
70
- || dataUpdated(data, groups, expanded)
71
- || groupsUpdated(groups, expanded)
72
- ){
73
- groupedData = groups.value.length ? getGroupedData(data.value, groups.value) : data.value;
74
- }
75
- const newDisplayData = expanded.value.length === 0
76
- ? groupedData
77
- : groupedData.map(group => mapGroupHeader(group, expanded.value.flatMap(g => g.expandedHeaders))).flat();
78
- return ({displayData: newDisplayData, groupedData}) as GroupByState;
79
- }
80
-
81
- export function mapGroupHeader(obj: DataGroup | GroupGroup, expandedHeaders: string[] | true): any[]{
82
- const showChildren = expandedHeaders === true || expandedHeaders.includes(obj.groupName);
83
- const children = !showChildren ? [] :
84
- obj.hasTheData ? obj.children
85
- : obj.groups.map(a => mapGroupHeader(a, expandedHeaders))
86
- return [obj, ...children].flat() as any[]
87
- }
88
-
89
- function dataUpdated(data: Timestamp<any[]>, groups: Timestamp<string[]>, expandedGroups: Timestamp<GroupedData[]>){
90
- return data.timestamp > groups.timestamp && data.timestamp > expandedGroups.timestamp;
91
- }
92
-
93
- function groupsUpdated(groups: Timestamp<string[]>, expandedGroups: Timestamp<GroupedData[]>){
94
- return groups.timestamp >= expandedGroups.timestamp;
95
- }
96
-
97
- export interface GroupByState { displayData: any[], groupedData: DataGroup[]};
98
-
99
- export const initialGroupByState = { displayData: [], groupedData: []}
100
-
101
- export const getAllGroupHeaderNames = (data: any[]) => {
102
- const groups = getGroupHeaders(data, (d:any) => d.isGroupHeader);
103
- const a = supportsGroupBy ? Object.groupBy(groups, group => group.key) as Dictionary<Group[]> : groupBy(groups, 'key');
104
- return Object.entries(a).reduce((names, [key, groups]) => {
105
- names[key] = groups!.map(g => ({groupName: g.groupName, key: g.key}));
106
- return names;
107
- }, {})
108
- }
109
-
110
- export const getAllGroupHeaderNamesByKeys = (data: any[], keys: string[]) => {
111
- const groups = getGroupHeaders(data, (d:any) => d.isGroupHeader && keys.includes(d.key));
112
- return supportsGroupBy ? Object.groupBy(groups, group => group.key) as Dictionary<Group[]> : groupBy(groups, 'key');
113
- }
114
-
115
- const getGroupHeaders = (data: any[], filterFunc: (d:any) => boolean, arr:Group[] = []) => {
116
- const headers: Group[] = data.filter(filterFunc);
117
- arr.push(...headers);
118
- headers.forEach(h => {if(h.hasTheData === false && !!h.groups.length) getGroupHeaders(h.groups, filterFunc, arr)});
119
- return arr;
120
- }
@@ -1,16 +0,0 @@
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
-
15
- return ({ ...metaData2, ...metaData1 });
16
- }
@@ -1,47 +0,0 @@
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: TableBuilderSort[]): 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: TableBuilderSort[], allSorts: TableBuilderSort[]}
22
-
23
- function addInitSort(sorts: TableBuilderSort[]){
24
- return [...sorts, {active: initIndexSymbol as unknown as string, direction: 'asc' as SortDirection}];
25
- }
26
-
27
- function sortsRemoved(previousSorts: TableBuilderSort[], currentSorts: TableBuilderSort[]): 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: TableBuilderSort[], currentSorts: TableBuilderSort[]){
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: []};
46
-
47
- export type TableBuilderSort = Sort & { nulls?: 'first' | 'last' , sortBy?: (t) => any }
@@ -1,79 +0,0 @@
1
- @let tableId = $tableId();
2
- @let tableSettings = state.$tableSettings();
3
-
4
- <ng-content select="[before]" />
5
- <ng-container multiSort>
6
- <div class="tb-header-wrapper" [id]="headerId">
7
- <div class="title">
8
- @if ((!$collapsedHeader()) || tableSettings.showTitleWhenHeaderCollapsed)
9
- {
10
- <ng-content select=".tb-header-title"/>
11
- }
12
- </div>
13
- @if(state.$groupByKeys().length){
14
- <group-by-list />
15
- }
16
- <div class="flx-row-end">
17
- <lib-filter-list />
18
- @if (!tableSettings.hideHeader)
19
- {
20
- @if (!$collapsedHeader())
21
- {
22
- <ng-container *ngTemplateOutlet="headerMenu"/>
23
- <button mat-icon-button color='primary' [matMenuTriggerFor]="l.menu()">
24
- <mat-icon>more_vert</mat-icon>
25
- </button>
26
-
27
- <lib-table-header-menu #l/>
28
-
29
- }
30
- @else {
31
- <mat-icon color="primary" [matMenuTriggerFor]="mainMenu" class="flat-menu-button pointer">more_horiz</mat-icon>
32
- <mat-menu #mainMenu='matMenu'>
33
- <div class="flex-column">
34
- <ng-container *ngTemplateOutlet="headerMenu; injector menuInjector"/>
35
- </div>
36
- <lib-table-header-menu />
37
- </mat-menu>
38
- }
39
- <mat-icon [matTooltip]="$collapsedHeader() ? 'expand' : 'collapse'" class="collapse-icon header"
40
- (click)="state.toggleCollapseHeader()">
41
- {{$collapsedHeader() ? 'expand_less' : 'expand_more'}}
42
- </mat-icon>
43
- }
44
-
45
- </div>
46
- </div>
47
-
48
- @if($useVirtual())
49
- {
50
- <tb-virtual-scroll-container class="scrollable">
51
- <tb-generic-table [rows]="$customRows()" [data]="$data()!" [displayDataLength]="$displayDataLength()"
52
- (selection)='selection$.emit($event)' [columnInfos]='$myColumns()' [trackBy]="$trackBy()" [dataSource]="dataSource" />
53
- </tb-virtual-scroll-container>
54
- }
55
- @else
56
- {
57
- <tb-generic-table [rows]="$customRows()" [data]="$data()!" [displayDataLength]="$displayDataLength()"
58
- (selection)='selection$.emit($event)' [columnInfos]='$myColumns()' [trackBy]="$trackBy()" [dataSource]="dataSource" />
59
- }
60
- @if(tableSettings.usePaginator)
61
- {
62
- <div class="paginator">
63
- <tb-paginator #tbPaginator />
64
-
65
- <mat-icon [matTooltip]="$collapsedFooter() ? 'expand' : 'collapse'" class="collapse-icon footer"
66
- (click)="state.toggleCollapseFooter()">
67
- {{$collapsedFooter() ? 'expand_more' : 'expand_less'}}
68
- </mat-icon>
69
- </div>
70
- }
71
-
72
- <ng-template #headerMenu>
73
- @if (!tableSettings.hideFilter) {<tb-filter-displayer/>}
74
- @if (!tableSettings.hideColumnSettings) {<tb-col-displayer/>}
75
- @if (!tableSettings.hideSort) {<tb-sort-menu/>}
76
- @if (!!tableId) {<tb-profiles-menu [tableId]="tableId"/>}
77
- </ng-template>
78
-
79
- </ng-container>
@@ -1,47 +0,0 @@
1
- .tb-header-wrapper{
2
- display: flex;
3
- flex-direction: row;
4
- width:100%;
5
- }
6
-
7
-
8
- .flx-row-end{
9
- display: flex;
10
- flex-direction: row;
11
- justify-content: flex-end;
12
- align-items: center;
13
- margin-left: auto;
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
- }