@one-paragon/angular-utilities 1.2.12 → 1.2.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (407) hide show
  1. package/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/esm2022/action-state/action-state-spinner/action-state-spinner.component.mjs +24 -0
  7. package/esm2022/action-state/action-state-ui/action-state-ui.module.mjs +20 -0
  8. package/esm2022/action-state/index.mjs +8 -0
  9. package/esm2022/action-state/ngrx-ext/ngrx-ext.module.mjs +23 -0
  10. package/esm2022/action-state/ngrx.mjs +47 -0
  11. package/esm2022/http-request-state/HttpRequestStateFactory.mjs +51 -0
  12. package/esm2022/http-request-state/HttpRequestStateStore.mjs +121 -0
  13. package/esm2022/http-request-state/directives/HttpStateDirectiveBase.mjs +30 -0
  14. package/esm2022/http-request-state/directives/http-error-state-directive.mjs +23 -0
  15. package/esm2022/http-request-state/directives/http-inProgress-state-directive.mjs +23 -0
  16. package/esm2022/http-request-state/directives/http-notStarted-state-directive.mjs +23 -0
  17. package/esm2022/http-request-state/directives/http-success-state-directive.mjs +29 -0
  18. package/esm2022/http-request-state/directives/index.mjs +6 -0
  19. package/esm2022/http-request-state/directives/request-state-directive.mjs +61 -0
  20. package/esm2022/http-request-state/helpers.mjs +22 -0
  21. package/esm2022/http-request-state/http-request-state.mjs +39 -0
  22. package/esm2022/http-request-state/http-state-module.mjs +40 -0
  23. package/esm2022/http-request-state/index.mjs +7 -0
  24. package/esm2022/http-request-state/rxjs/getRequestorBody.mjs +4 -0
  25. package/esm2022/http-request-state/rxjs/getRequestorState.mjs +3 -0
  26. package/esm2022/http-request-state/rxjs/index.mjs +5 -0
  27. package/esm2022/http-request-state/rxjs/tapError.mjs +12 -0
  28. package/esm2022/http-request-state/rxjs/tapSuccess.mjs +12 -0
  29. package/esm2022/http-request-state/types.mjs +16 -0
  30. package/esm2022/ngrx/actionable-selector.mjs +71 -0
  31. package/esm2022/ngrx/index.mjs +2 -0
  32. package/esm2022/one-paragon-angular-utilities.mjs +5 -0
  33. package/esm2022/public-api.mjs +20 -0
  34. package/esm2022/rxjs/defaultShareReplay.mjs +7 -0
  35. package/esm2022/rxjs/index.mjs +6 -0
  36. package/esm2022/rxjs/mapError.mjs +8 -0
  37. package/esm2022/rxjs/rxjs-operators.mjs +92 -0
  38. package/esm2022/rxjs/subjectifier.mjs +15 -0
  39. package/esm2022/rxjs/subscriber.directive.mjs +50 -0
  40. package/esm2022/table-builder/classes/DefaultSettings.mjs +6 -0
  41. package/esm2022/table-builder/classes/MatTableObservableDataSource.mjs +23 -0
  42. package/esm2022/table-builder/classes/TableBuilderConfig.mjs +18 -0
  43. package/esm2022/table-builder/classes/TableBuilderDataSource.mjs +45 -0
  44. package/esm2022/table-builder/classes/TableState.mjs +49 -0
  45. package/esm2022/table-builder/classes/data-store.mjs +15 -0
  46. package/esm2022/table-builder/classes/display-col.mjs +2 -0
  47. package/esm2022/table-builder/classes/filter-info.mjs +61 -0
  48. package/esm2022/table-builder/classes/table-builder-general-settings.mjs +112 -0
  49. package/esm2022/table-builder/classes/table-builder.mjs +77 -0
  50. package/esm2022/table-builder/classes/table-store.mjs +383 -0
  51. package/esm2022/table-builder/components/array-column.component.mjs +53 -0
  52. package/esm2022/table-builder/components/column-builder/column-builder.component.mjs +134 -0
  53. package/esm2022/table-builder/components/column-builder/column-helpers.mjs +45 -0
  54. package/esm2022/table-builder/components/date-filter/date-filter.component.mjs +29 -0
  55. package/esm2022/table-builder/components/date-time-filter/date-time-filter.component.mjs +24 -0
  56. package/esm2022/table-builder/components/filter/filter.component.mjs +64 -0
  57. package/esm2022/table-builder/components/filter/in-list/in-list-filter.component.mjs +102 -0
  58. package/esm2022/table-builder/components/gen-col-displayer/gen-col-displayer.component.mjs +47 -0
  59. package/esm2022/table-builder/components/generic-table/generic-table.component.mjs +301 -0
  60. package/esm2022/table-builder/components/generic-table/paginator.component.mjs +100 -0
  61. package/esm2022/table-builder/components/group-by-list/group-by-list.component.mjs +21 -0
  62. package/esm2022/table-builder/components/header-menu/header-menu.component.mjs +103 -0
  63. package/esm2022/table-builder/components/in-filter/in-filter.component.mjs +65 -0
  64. package/esm2022/table-builder/components/index.mjs +10 -0
  65. package/esm2022/table-builder/components/initialization-component/initialization-component.mjs +47 -0
  66. package/esm2022/table-builder/components/link-column.component.mjs +74 -0
  67. package/esm2022/table-builder/components/number-filter/number-filter.component.mjs +29 -0
  68. package/esm2022/table-builder/components/profiles-menu/profiles-menu.component.mjs +64 -0
  69. package/esm2022/table-builder/components/scroll-strategy.mjs +60 -0
  70. package/esm2022/table-builder/components/sort-menu/sort-menu.component-store.mjs +46 -0
  71. package/esm2022/table-builder/components/sort-menu/sort-menu.component.mjs +82 -0
  72. package/esm2022/table-builder/components/table-container/table-container-imports.mjs +26 -0
  73. package/esm2022/table-builder/components/table-container/table-container.helpers/data-state.helpers.mjs +135 -0
  74. package/esm2022/table-builder/components/table-container/table-container.helpers/filter-state.helpers.mjs +83 -0
  75. package/esm2022/table-builder/components/table-container/table-container.helpers/groupBy.helpers.mjs +71 -0
  76. package/esm2022/table-builder/components/table-container/table-container.helpers/sort-state.helpers.mjs +36 -0
  77. package/esm2022/table-builder/components/table-container/table-container.mjs +327 -0
  78. package/esm2022/table-builder/components/table-container/tableProps.mjs +8 -0
  79. package/esm2022/table-builder/components/table-container/virtual-scroll-container.mjs +151 -0
  80. package/esm2022/table-builder/components/table-container-filter/filter-list/filter-list.component.mjs +44 -0
  81. package/esm2022/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.mjs +36 -0
  82. package/esm2022/table-builder/components/table-container-filter/table-wrapper-filter-store.mjs +25 -0
  83. package/esm2022/table-builder/directives/custom-cell-directive.mjs +73 -0
  84. package/esm2022/table-builder/directives/index.mjs +6 -0
  85. package/esm2022/table-builder/directives/multi-sort.directive.mjs +50 -0
  86. package/esm2022/table-builder/directives/resize-column.directive.mjs +87 -0
  87. package/esm2022/table-builder/directives/table-wrapper.directive.mjs +18 -0
  88. package/esm2022/table-builder/directives/tb-filter.directive.mjs +396 -0
  89. package/esm2022/table-builder/enums/filterTypes.mjs +29 -0
  90. package/esm2022/table-builder/functions/boolean-filter-function.mjs +10 -0
  91. package/esm2022/table-builder/functions/date-filter-function.mjs +58 -0
  92. package/esm2022/table-builder/functions/download-data.mjs +12 -0
  93. package/esm2022/table-builder/functions/null-filter-function.mjs +8 -0
  94. package/esm2022/table-builder/functions/number-filter-function.mjs +32 -0
  95. package/esm2022/table-builder/functions/sort-data-function.mjs +17 -0
  96. package/esm2022/table-builder/functions/string-filter-function.mjs +41 -0
  97. package/esm2022/table-builder/interfaces/ColumnInfo.mjs +2 -0
  98. package/esm2022/table-builder/interfaces/dictionary.mjs +2 -0
  99. package/esm2022/table-builder/interfaces/report-def.mjs +50 -0
  100. package/esm2022/table-builder/ngrx/tableBuilderStateStore.mjs +154 -0
  101. package/esm2022/table-builder/pipes/column-total.pipe.mjs +22 -0
  102. package/esm2022/table-builder/pipes/format-filter-type.pipe.mjs +18 -0
  103. package/esm2022/table-builder/pipes/format-filter-value.pipe.mjs +43 -0
  104. package/esm2022/table-builder/pipes/key-display.mjs +18 -0
  105. package/esm2022/table-builder/services/export-to-csv.service.mjs +75 -0
  106. package/esm2022/table-builder/services/link-creator.service.mjs +50 -0
  107. package/esm2022/table-builder/services/table-template-service.mjs +60 -0
  108. package/esm2022/table-builder/services/transform-creator.mjs +100 -0
  109. package/esm2022/table-builder/table-builder.module.mjs +124 -0
  110. package/esm2022/utilities/array-helpers.mjs +14 -0
  111. package/esm2022/utilities/directives/auto-focus.directive.mjs +25 -0
  112. package/esm2022/utilities/directives/clickEmitterDirective.mjs +22 -0
  113. package/esm2022/utilities/directives/clickSubject.mjs +29 -0
  114. package/esm2022/utilities/directives/conditional-classes.directive.mjs +36 -0
  115. package/esm2022/utilities/directives/dialog-service.mjs +21 -0
  116. package/esm2022/utilities/directives/dialog.mjs +145 -0
  117. package/esm2022/utilities/directives/mat-toggle-group-directive.mjs +59 -0
  118. package/esm2022/utilities/directives/prevent-enter.directive.mjs +20 -0
  119. package/esm2022/utilities/directives/stop-propagation.directive.mjs +26 -0
  120. package/esm2022/utilities/directives/styler.mjs +41 -0
  121. package/esm2022/utilities/directives/trim-whitespace.directive.mjs +28 -0
  122. package/esm2022/utilities/index.mjs +16 -0
  123. package/esm2022/utilities/module.mjs +90 -0
  124. package/esm2022/utilities/pipes/function.pipe.mjs +22 -0
  125. package/esm2022/utilities/pipes/phone.pipe.mjs +20 -0
  126. package/esm2022/utilities/pipes/space-case.pipes.mjs +28 -0
  127. package/fesm2022/one-paragon-angular-utilities.mjs +5670 -0
  128. package/fesm2022/one-paragon-angular-utilities.mjs.map +1 -0
  129. package/http-request-state/HttpRequestStateFactory.d.ts +17 -0
  130. package/http-request-state/HttpRequestStateStore.d.ts +54 -0
  131. package/http-request-state/directives/HttpStateDirectiveBase.d.ts +14 -0
  132. package/http-request-state/directives/http-error-state-directive.d.ts +9 -0
  133. package/http-request-state/directives/http-inProgress-state-directive.d.ts +9 -0
  134. package/http-request-state/directives/http-notStarted-state-directive.d.ts +9 -0
  135. package/http-request-state/directives/http-success-state-directive.d.ts +16 -0
  136. package/{src/http-request-state/directives/index.ts → http-request-state/directives/index.d.ts} +5 -5
  137. package/http-request-state/directives/request-state-directive.d.ts +34 -0
  138. package/http-request-state/helpers.d.ts +9 -0
  139. package/http-request-state/http-request-state.d.ts +12 -0
  140. package/http-request-state/http-state-module.d.ts +11 -0
  141. package/{src/http-request-state/index.ts → http-request-state/index.d.ts} +6 -6
  142. package/http-request-state/rxjs/getRequestorBody.d.ts +3 -0
  143. package/http-request-state/rxjs/getRequestorState.d.ts +3 -0
  144. package/{src/http-request-state/rxjs/index.ts → http-request-state/rxjs/index.d.ts} +4 -4
  145. package/http-request-state/rxjs/tapError.d.ts +3 -0
  146. package/http-request-state/rxjs/tapSuccess.d.ts +3 -0
  147. package/http-request-state/types.d.ts +41 -0
  148. package/index.d.ts +5 -0
  149. package/ngrx/actionable-selector.d.ts +17 -0
  150. package/ngrx/index.d.ts +1 -0
  151. package/package.json +30 -16
  152. package/{src/public-api.ts → public-api.d.ts} +16 -35
  153. package/rxjs/defaultShareReplay.d.ts +2 -0
  154. package/{src/rxjs/index.ts → rxjs/index.d.ts} +5 -5
  155. package/rxjs/mapError.d.ts +2 -0
  156. package/rxjs/rxjs-operators.d.ts +13 -0
  157. package/rxjs/subjectifier.d.ts +8 -0
  158. package/rxjs/subscriber.directive.d.ts +14 -0
  159. package/table-builder/classes/DefaultSettings.d.ts +9 -0
  160. package/table-builder/classes/MatTableObservableDataSource.d.ts +9 -0
  161. package/table-builder/classes/TableBuilderConfig.d.ts +21 -0
  162. package/table-builder/classes/TableBuilderDataSource.d.ts +12 -0
  163. package/table-builder/classes/TableState.d.ts +67 -0
  164. package/table-builder/classes/data-store.d.ts +8 -0
  165. package/{src/table-builder/classes/display-col.ts → table-builder/classes/display-col.d.ts} +5 -5
  166. package/table-builder/classes/filter-info.d.ts +35 -0
  167. package/table-builder/classes/table-builder-general-settings.d.ts +78 -0
  168. package/table-builder/classes/table-builder.d.ts +18 -0
  169. package/table-builder/classes/table-store.d.ts +138 -0
  170. package/table-builder/components/array-column.component.d.ts +15 -0
  171. package/table-builder/components/column-builder/column-builder.component.d.ts +47 -0
  172. package/table-builder/components/column-builder/column-helpers.d.ts +36 -0
  173. package/table-builder/components/date-filter/date-filter.component.d.ts +37 -0
  174. package/table-builder/components/date-time-filter/date-time-filter.component.d.ts +37 -0
  175. package/table-builder/components/filter/filter.component.d.ts +46 -0
  176. package/table-builder/components/filter/in-list/in-list-filter.component.d.ts +24 -0
  177. package/table-builder/components/gen-col-displayer/gen-col-displayer.component.d.ts +17 -0
  178. package/table-builder/components/generic-table/generic-table.component.d.ts +83 -0
  179. package/table-builder/components/generic-table/paginator.component.d.ts +30 -0
  180. package/table-builder/components/group-by-list/group-by-list.component.d.ts +7 -0
  181. package/table-builder/components/header-menu/header-menu.component.d.ts +51 -0
  182. package/table-builder/components/in-filter/in-filter.component.d.ts +20 -0
  183. package/{src/table-builder/components/index.ts → table-builder/components/index.d.ts} +9 -9
  184. package/table-builder/components/initialization-component/initialization-component.d.ts +13 -0
  185. package/table-builder/components/link-column.component.d.ts +25 -0
  186. package/table-builder/components/number-filter/number-filter.component.d.ts +39 -0
  187. package/table-builder/components/profiles-menu/profiles-menu.component.d.ts +32 -0
  188. package/table-builder/components/scroll-strategy.d.ts +22 -0
  189. package/table-builder/components/sort-menu/sort-menu.component-store.d.ts +24 -0
  190. package/table-builder/components/sort-menu/sort-menu.component.d.ts +24 -0
  191. package/{src/table-builder/components/table-container/table-container-imports.ts → table-builder/components/table-container/table-container-imports.d.ts} +14 -32
  192. package/table-builder/components/table-container/table-container.d.ts +79 -0
  193. package/table-builder/components/table-container/table-container.helpers/data-state.helpers.d.ts +6 -0
  194. package/table-builder/components/table-container/table-container.helpers/filter-state.helpers.d.ts +17 -0
  195. package/table-builder/components/table-container/table-container.helpers/groupBy.helpers.d.ts +17 -0
  196. package/table-builder/components/table-container/table-container.helpers/sort-state.helpers.d.ts +8 -0
  197. package/table-builder/components/table-container/tableProps.d.ts +12 -0
  198. package/table-builder/components/table-container/virtual-scroll-container.d.ts +35 -0
  199. package/table-builder/components/table-container-filter/filter-list/filter-list.component.d.ts +15 -0
  200. package/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.d.ts +12 -0
  201. package/table-builder/components/table-container-filter/table-wrapper-filter-store.d.ts +14 -0
  202. package/table-builder/directives/custom-cell-directive.d.ts +33 -0
  203. package/{src/table-builder/directives/index.ts → table-builder/directives/index.d.ts} +5 -6
  204. package/table-builder/directives/multi-sort.directive.d.ts +10 -0
  205. package/table-builder/directives/resize-column.directive.d.ts +43 -0
  206. package/table-builder/directives/table-wrapper.directive.d.ts +8 -0
  207. package/table-builder/directives/tb-filter.directive.d.ts +115 -0
  208. package/table-builder/enums/filterTypes.d.ts +36 -0
  209. package/table-builder/functions/boolean-filter-function.d.ts +3 -0
  210. package/table-builder/functions/date-filter-function.d.ts +4 -0
  211. package/table-builder/functions/download-data.d.ts +1 -0
  212. package/table-builder/functions/null-filter-function.d.ts +2 -0
  213. package/table-builder/functions/number-filter-function.d.ts +4 -0
  214. package/table-builder/functions/sort-data-function.d.ts +6 -0
  215. package/table-builder/functions/string-filter-function.d.ts +5 -0
  216. package/{src/table-builder/interfaces/ColumnInfo.ts → table-builder/interfaces/ColumnInfo.d.ts} +6 -7
  217. package/{src/table-builder/interfaces/dictionary.ts → table-builder/interfaces/dictionary.d.ts} +3 -3
  218. package/table-builder/interfaces/report-def.d.ts +147 -0
  219. package/table-builder/ngrx/tableBuilderStateStore.d.ts +70 -0
  220. package/table-builder/pipes/column-total.pipe.d.ts +8 -0
  221. package/table-builder/pipes/format-filter-type.pipe.d.ts +8 -0
  222. package/table-builder/pipes/format-filter-value.pipe.d.ts +12 -0
  223. package/table-builder/pipes/key-display.d.ts +10 -0
  224. package/table-builder/services/export-to-csv.service.d.ts +14 -0
  225. package/table-builder/services/link-creator.service.d.ts +16 -0
  226. package/table-builder/services/table-template-service.d.ts +14 -0
  227. package/table-builder/services/transform-creator.d.ts +16 -0
  228. package/table-builder/table-builder.module.d.ts +21 -0
  229. package/utilities/array-helpers.d.ts +1 -0
  230. package/utilities/directives/auto-focus.directive.d.ts +9 -0
  231. package/utilities/directives/clickEmitterDirective.d.ts +7 -0
  232. package/utilities/directives/clickSubject.d.ts +9 -0
  233. package/utilities/directives/conditional-classes.directive.d.ts +13 -0
  234. package/utilities/directives/dialog-service.d.ts +10 -0
  235. package/utilities/directives/dialog.d.ts +44 -0
  236. package/utilities/directives/mat-toggle-group-directive.d.ts +21 -0
  237. package/utilities/directives/prevent-enter.directive.d.ts +6 -0
  238. package/utilities/directives/stop-propagation.directive.d.ts +7 -0
  239. package/utilities/directives/styler.d.ts +15 -0
  240. package/utilities/directives/trim-whitespace.directive.d.ts +7 -0
  241. package/{src/utilities/index.ts → utilities/index.d.ts} +15 -22
  242. package/utilities/module.d.ts +19 -0
  243. package/utilities/pipes/function.pipe.d.ts +7 -0
  244. package/utilities/pipes/phone.pipe.d.ts +7 -0
  245. package/utilities/pipes/space-case.pipes.d.ts +17 -0
  246. package/karma.conf.js +0 -44
  247. package/ng-package.json +0 -7
  248. package/src/action-state/action-state-spinner/action-state-spinner.component.css +0 -16
  249. package/src/action-state/action-state-spinner/action-state-spinner.component.html +0 -6
  250. package/src/action-state/action-state-spinner/action-state-spinner.component.spec.ts +0 -25
  251. package/src/action-state/action-state-spinner/action-state-spinner.component.ts +0 -26
  252. package/src/action-state/action-state-ui/action-state-ui.module.ts +0 -13
  253. package/src/action-state/ngrx-ext/ngrx-ext.module.ts +0 -15
  254. package/src/action-state/ngrx.ts +0 -69
  255. package/src/http-request-state/HttpRequestStateFactory.ts +0 -66
  256. package/src/http-request-state/HttpRequestStateStore.ts +0 -173
  257. package/src/http-request-state/directives/HttpStateDirectiveBase.ts +0 -29
  258. package/src/http-request-state/directives/http-error-state-directive.ts +0 -21
  259. package/src/http-request-state/directives/http-inProgress-state-directive.ts +0 -19
  260. package/src/http-request-state/directives/http-notStarted-state-directive.ts +0 -19
  261. package/src/http-request-state/directives/http-success-state-directive.ts +0 -29
  262. package/src/http-request-state/directives/request-state-directive.spec.ts +0 -72
  263. package/src/http-request-state/directives/request-state-directive.ts +0 -78
  264. package/src/http-request-state/helpers.ts +0 -30
  265. package/src/http-request-state/http-request-state.ts +0 -69
  266. package/src/http-request-state/http-state-module.ts +0 -23
  267. package/src/http-request-state/observable.spec.ts +0 -43
  268. package/src/http-request-state/rxjs/getRequestorBody.ts +0 -10
  269. package/src/http-request-state/rxjs/getRequestorState.ts +0 -8
  270. package/src/http-request-state/rxjs/tapError.ts +0 -16
  271. package/src/http-request-state/rxjs/tapSuccess.ts +0 -16
  272. package/src/http-request-state/strategies.spec.ts +0 -42
  273. package/src/http-request-state/types.ts +0 -55
  274. package/src/ngrx/actionable-selector.ts +0 -95
  275. package/src/ngrx/index.ts +0 -1
  276. package/src/rxjs/defaultShareReplay.ts +0 -8
  277. package/src/rxjs/mapError.ts +0 -8
  278. package/src/rxjs/rxjs-operators.ts +0 -132
  279. package/src/rxjs/subjectifier.ts +0 -17
  280. package/src/rxjs/subscriber.directive.ts +0 -57
  281. package/src/specs/clickSubject.spec.ts +0 -95
  282. package/src/specs/dialog.spec.ts +0 -101
  283. package/src/specs/toggleGroupDirective.spec.ts +0 -229
  284. package/src/table-builder/classes/DefaultSettings.ts +0 -11
  285. package/src/table-builder/classes/MatTableObservableDataSource.ts +0 -23
  286. package/src/table-builder/classes/TableBuilderConfig.ts +0 -35
  287. package/src/table-builder/classes/TableBuilderDataSource.ts +0 -80
  288. package/src/table-builder/classes/TableState.ts +0 -96
  289. package/src/table-builder/classes/data-store.ts +0 -10
  290. package/src/table-builder/classes/filter-info.ts +0 -108
  291. package/src/table-builder/classes/table-builder-general-settings.ts +0 -129
  292. package/src/table-builder/classes/table-builder.ts +0 -94
  293. package/src/table-builder/classes/table-store.ts +0 -471
  294. package/src/table-builder/components/array-column.component.ts +0 -36
  295. package/src/table-builder/components/column-builder/column-builder.component.html +0 -61
  296. package/src/table-builder/components/column-builder/column-builder.component.scss +0 -43
  297. package/src/table-builder/components/column-builder/column-builder.component.spec.ts +0 -49
  298. package/src/table-builder/components/column-builder/column-builder.component.ts +0 -135
  299. package/src/table-builder/components/column-builder/column-helpers.ts +0 -53
  300. package/src/table-builder/components/date-filter/date-filter.component.html +0 -23
  301. package/src/table-builder/components/date-filter/date-filter.component.ts +0 -24
  302. package/src/table-builder/components/date-time-filter/date-time-filter.component.html +0 -9
  303. package/src/table-builder/components/date-time-filter/date-time-filter.component.ts +0 -22
  304. package/src/table-builder/components/filter/filter.component.html +0 -91
  305. package/src/table-builder/components/filter/filter.component.scss +0 -64
  306. package/src/table-builder/components/filter/filter.component.spec.ts +0 -87
  307. package/src/table-builder/components/filter/filter.component.ts +0 -60
  308. package/src/table-builder/components/filter/in-list/in-list-filter.component.ts +0 -93
  309. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.html +0 -55
  310. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.scss +0 -57
  311. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.ts +0 -59
  312. package/src/table-builder/components/generic-table/generic-table.component.html +0 -78
  313. package/src/table-builder/components/generic-table/generic-table.component.scss +0 -42
  314. package/src/table-builder/components/generic-table/generic-table.component.ts +0 -299
  315. package/src/table-builder/components/generic-table/paginator.component.ts +0 -99
  316. package/src/table-builder/components/group-by-list/group-by-list.component.css +0 -8
  317. package/src/table-builder/components/group-by-list/group-by-list.component.html +0 -12
  318. package/src/table-builder/components/group-by-list/group-by-list.component.spec.ts +0 -23
  319. package/src/table-builder/components/group-by-list/group-by-list.component.ts +0 -21
  320. package/src/table-builder/components/header-menu/header-menu.component.html +0 -104
  321. package/src/table-builder/components/header-menu/header-menu.component.scss +0 -96
  322. package/src/table-builder/components/header-menu/header-menu.component.ts +0 -99
  323. package/src/table-builder/components/in-filter/in-filter.component.css +0 -3
  324. package/src/table-builder/components/in-filter/in-filter.component.html +0 -20
  325. package/src/table-builder/components/in-filter/in-filter.component.ts +0 -66
  326. package/src/table-builder/components/initialization-component/initialization-component.html +0 -29
  327. package/src/table-builder/components/initialization-component/initialization-component.ts +0 -24
  328. package/src/table-builder/components/link-column.component.ts +0 -47
  329. package/src/table-builder/components/number-filter/number-filter.component.css +0 -10
  330. package/src/table-builder/components/number-filter/number-filter.component.html +0 -19
  331. package/src/table-builder/components/number-filter/number-filter.component.spec.ts +0 -30
  332. package/src/table-builder/components/number-filter/number-filter.component.ts +0 -25
  333. package/src/table-builder/components/profiles-menu/profiles-menu.component.html +0 -74
  334. package/src/table-builder/components/profiles-menu/profiles-menu.component.scss +0 -98
  335. package/src/table-builder/components/profiles-menu/profiles-menu.component.spec.ts +0 -23
  336. package/src/table-builder/components/profiles-menu/profiles-menu.component.ts +0 -65
  337. package/src/table-builder/components/scroll-strategy.ts +0 -76
  338. package/src/table-builder/components/sort-menu/sort-menu.component-store.ts +0 -66
  339. package/src/table-builder/components/sort-menu/sort-menu.component.html +0 -111
  340. package/src/table-builder/components/sort-menu/sort-menu.component.scss +0 -119
  341. package/src/table-builder/components/sort-menu/sort-menu.component.ts +0 -98
  342. package/src/table-builder/components/table-container/table-container.css +0 -54
  343. package/src/table-builder/components/table-container/table-container.helpers/data-state.helpers.ts +0 -141
  344. package/src/table-builder/components/table-container/table-container.helpers/filter-state.helpers.ts +0 -106
  345. package/src/table-builder/components/table-container/table-container.helpers/groupBy.helpers.ts +0 -86
  346. package/src/table-builder/components/table-container/table-container.helpers/sort-state.helpers.ts +0 -45
  347. package/src/table-builder/components/table-container/table-container.html +0 -95
  348. package/src/table-builder/components/table-container/table-container.spec.ts +0 -154
  349. package/src/table-builder/components/table-container/table-container.ts +0 -356
  350. package/src/table-builder/components/table-container/tableProps.ts +0 -20
  351. package/src/table-builder/components/table-container/virtual-scroll-container.ts +0 -145
  352. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.html +0 -31
  353. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.ts +0 -46
  354. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.css +0 -42
  355. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.html +0 -10
  356. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.spec.ts +0 -86
  357. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.ts +0 -34
  358. package/src/table-builder/components/table-container-filter/table-wrapper-filter-store.ts +0 -23
  359. package/src/table-builder/directives/custom-cell-directive.ts +0 -58
  360. package/src/table-builder/directives/multi-sort.directive.spec.ts +0 -124
  361. package/src/table-builder/directives/multi-sort.directive.ts +0 -51
  362. package/src/table-builder/directives/resize-column.directive.ts +0 -108
  363. package/src/table-builder/directives/table-wrapper.directive.ts +0 -14
  364. package/src/table-builder/directives/tb-filter.directive.ts +0 -396
  365. package/src/table-builder/enums/filterTypes.ts +0 -40
  366. package/src/table-builder/functions/boolean-filter-function.ts +0 -12
  367. package/src/table-builder/functions/date-filter-function.ts +0 -68
  368. package/src/table-builder/functions/download-data.ts +0 -11
  369. package/src/table-builder/functions/null-filter-function.ts +0 -9
  370. package/src/table-builder/functions/number-filter-function.ts +0 -41
  371. package/src/table-builder/functions/sort-data-function.ts +0 -23
  372. package/src/table-builder/functions/string-filter-function.ts +0 -51
  373. package/src/table-builder/interfaces/column-template.ts +0 -9
  374. package/src/table-builder/interfaces/report-def.ts +0 -155
  375. package/src/table-builder/ngrx/tableBuilderStateStore.ts +0 -199
  376. package/src/table-builder/pipes/column-total.pipe.ts +0 -17
  377. package/src/table-builder/pipes/format-filter-type.pipe.ts +0 -12
  378. package/src/table-builder/pipes/format-filter-value.pipe.ts +0 -42
  379. package/src/table-builder/pipes/key-display.ts +0 -16
  380. package/src/table-builder/services/export-to-csv.service.ts +0 -97
  381. package/src/table-builder/services/link-creator.service.ts +0 -67
  382. package/src/table-builder/services/table-template-service.ts +0 -59
  383. package/src/table-builder/services/transform-creator.ts +0 -95
  384. package/src/table-builder/specs/table-custom-filters.spec.ts +0 -262
  385. package/src/table-builder/styles/collapser.styles.scss +0 -16
  386. package/src/table-builder/table-builder.module.ts +0 -73
  387. package/src/test.ts +0 -17
  388. package/src/utilities/array-helpers.ts +0 -13
  389. package/src/utilities/directives/auto-focus.directive.ts +0 -21
  390. package/src/utilities/directives/clickEmitterDirective.ts +0 -16
  391. package/src/utilities/directives/clickSubject.ts +0 -20
  392. package/src/utilities/directives/conditional-classes.directive.ts +0 -36
  393. package/src/utilities/directives/dialog-service.ts +0 -19
  394. package/src/utilities/directives/dialog.ts +0 -144
  395. package/src/utilities/directives/mat-toggle-group-directive.ts +0 -61
  396. package/src/utilities/directives/prevent-enter.directive.ts +0 -13
  397. package/src/utilities/directives/stop-propagation.directive.ts +0 -20
  398. package/src/utilities/directives/styler.ts +0 -40
  399. package/src/utilities/directives/trim-whitespace.directive.ts +0 -21
  400. package/src/utilities/module.ts +0 -55
  401. package/src/utilities/pipes/function.pipe.ts +0 -16
  402. package/src/utilities/pipes/phone.pipe.ts +0 -15
  403. package/src/utilities/pipes/space-case.pipes.spec.ts +0 -47
  404. package/src/utilities/pipes/space-case.pipes.ts +0 -23
  405. package/tsconfig.lib.json +0 -19
  406. package/tsconfig.lib.prod.json +0 -10
  407. package/tsconfig.spec.json +0 -17
@@ -0,0 +1,135 @@
1
+ import { combineLatest, map, scan, timestamp } from "rxjs";
2
+ import { filterData, sortData, tbNoShowSymbol } from "../../../functions/sort-data-function";
3
+ import { defaultShareReplay } from "../../../../rxjs/defaultShareReplay";
4
+ import { FieldType } from "../../../interfaces/report-def";
5
+ import { get, set } from "lodash";
6
+ export const sortAndFilterData = (data, sortState, filterState) => combineLatest([
7
+ data.pipe(timestamp()),
8
+ sortState.pipe(timestamp()),
9
+ filterState.pipe(timestamp())
10
+ ]).pipe(scan(({ mappedData: resultData }, [data, sort, f], index) => {
11
+ if (index === 0 || (data.timestamp > sort.timestamp && data.timestamp > f.timestamp)) {
12
+ return ({ mappedData: filterData(sortData(data.value, sort.value.sortsToRun), f.value.allFilters) });
13
+ }
14
+ if (sort.timestamp > f.timestamp) {
15
+ return ({ mappedData: sortData(resultData, sort.value.sortsToRun) });
16
+ }
17
+ return ({ mappedData: filterData(resultData, f.value.onlyAddedFilters || f.value.allFilters, !f.value.onlyAddedFilters) });
18
+ }, { mappedData: [] })).pipe(map(({ mappedData: resultData }) => resultData.filter(item => !item[tbNoShowSymbol])), defaultShareReplay());
19
+ export const createDataCleaners = (metadatas, mutate = false) => {
20
+ const transforms = createCleaners(metadatas);
21
+ return (data) => {
22
+ if (!mutate) {
23
+ data = { ...data };
24
+ }
25
+ for (const transform of transforms) {
26
+ transform(data);
27
+ }
28
+ return data;
29
+ };
30
+ };
31
+ const createCleaners = (metadatas) => {
32
+ return metadatas.reduce((transforms, metaData) => {
33
+ switch (metaData.fieldType) {
34
+ case FieldType.Currency:
35
+ case FieldType.Number: {
36
+ const nested = metaData.key.includes('.');
37
+ if (nested) {
38
+ transforms.push((t) => {
39
+ const val = get(t, metaData.key);
40
+ const num = Number(val);
41
+ set(t, metaData.key, isNaN(num) || val == null ? null : num);
42
+ t[metaData.key] = (isNaN(num) || val == null ? null : num);
43
+ });
44
+ }
45
+ else {
46
+ transforms.push((t) => {
47
+ const val = t[metaData.key];
48
+ const num = Number(val);
49
+ t[metaData.key] = (isNaN(num) || val == null ? null : num);
50
+ });
51
+ }
52
+ break;
53
+ }
54
+ case FieldType.Date: {
55
+ const nested = metaData.key.includes('.');
56
+ if (nested) {
57
+ transforms.push((t) => {
58
+ const val = get(t, metaData.key);
59
+ const date = Date.parse(val);
60
+ if (isNaN(date)) {
61
+ set(t, metaData.key, null);
62
+ return;
63
+ }
64
+ const d = new Date(date);
65
+ d.setHours(0, 0, 0, 0);
66
+ set(t, metaData.key, d);
67
+ });
68
+ }
69
+ else {
70
+ transforms.push((t) => {
71
+ const val = t[metaData.key];
72
+ const date = Date.parse(val);
73
+ if (isNaN(date)) {
74
+ t[metaData.key] = null;
75
+ return;
76
+ }
77
+ const d = new Date(date);
78
+ d.setHours(0, 0, 0, 0);
79
+ t[metaData.key] = d;
80
+ });
81
+ }
82
+ break;
83
+ }
84
+ case FieldType.DateTime: {
85
+ const nested = metaData.key.includes('.');
86
+ if (nested) {
87
+ transforms.push((t) => {
88
+ const val = get(t, metaData.key);
89
+ const dateTime = Date.parse(val);
90
+ if (isNaN(dateTime)) {
91
+ set(t, metaData.key, null);
92
+ return;
93
+ }
94
+ const dt = new Date(dateTime);
95
+ if (metaData.additional?.dateTimeOptions?.includeMilliseconds) {
96
+ set(t, metaData.key, dt);
97
+ return;
98
+ }
99
+ if (metaData.additional?.dateTimeOptions?.includeSeconds) {
100
+ dt.setMilliseconds(0);
101
+ set(t, metaData.key, dt);
102
+ return;
103
+ }
104
+ dt.setSeconds(0, 0);
105
+ set(t, metaData.key, dt);
106
+ });
107
+ }
108
+ else {
109
+ transforms.push((t) => {
110
+ const val = t[metaData.key];
111
+ const dateTime = Date.parse(val);
112
+ if (isNaN(dateTime)) {
113
+ t[metaData.key] = null;
114
+ return;
115
+ }
116
+ const dt = new Date(dateTime);
117
+ if (metaData.additional?.dateTimeOptions?.includeMilliseconds) {
118
+ t[metaData.key] = dt;
119
+ return;
120
+ }
121
+ if (metaData.additional?.dateTimeOptions?.includeSeconds) {
122
+ dt.setMilliseconds(0);
123
+ t[metaData.key] = dt;
124
+ return;
125
+ }
126
+ dt.setSeconds(0, 0);
127
+ t[metaData.key] = dt;
128
+ });
129
+ }
130
+ }
131
+ }
132
+ return transforms;
133
+ }, []);
134
+ };
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zdGF0ZS5oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLmhlbHBlcnMvZGF0YS1zdGF0ZS5oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxhQUFhLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHdkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBWSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRWxDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUksSUFBcUIsRUFBRSxTQUFnQyxFQUFFLFdBQWdELEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQztJQUMvSixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3RCLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDM0IsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztDQUM5QixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUMsRUFBRTtJQUU3RCxJQUFHLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxH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QUFXLENBQUM7d0JBQ3RDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ2pDLElBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFDLENBQUM7NEJBQ2xCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUksSUFBVyxDQUFDOzRCQUMvQixPQUFPO3dCQUNULENBQUM7d0JBQ0QsTUFBTSxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQzlCLElBQUcsUUFBUSxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUMsQ0FBQzs0QkFDNUQsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBSSxFQUFTLENBQUM7NEJBQzdCLE9BQU87d0JBQ1QsQ0FBQzt3QkFDRCxJQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBQyxDQUFDOzRCQUN2RCxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUN0QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFJLEVBQVMsQ0FBQzs0QkFDN0IsT0FBTzt3QkFDVCxDQUFDO3dCQUNELEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNwQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFJLEVBQVMsQ0FBQztvQkFDL0IsQ0FBQyxDQUFDLENBQUE7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQyxFQUFFLEVBQXVCLENBQUMsQ0FBQTtBQUM3QixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBjb21iaW5lTGF0ZXN0LCBtYXAsIHNjYW4sIHRpbWVzdGFtcCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFNvcnRTdGF0ZSB9IGZyb20gXCIuL3NvcnQtc3RhdGUuaGVscGVyc1wiO1xyXG5pbXBvcnQgeyBGaWx0ZXJQcmVkaWNhdGVTdGF0ZSB9IGZyb20gXCIuL2ZpbHRlci1zdGF0ZS5oZWxwZXJzXCI7XHJcbmltcG9ydCB7IGZpbHRlckRhdGEsIHNvcnREYXRhLCB0Yk5vU2hvd1N5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi9mdW5jdGlvbnMvc29ydC1kYXRhLWZ1bmN0aW9uXCI7XHJcbmltcG9ydCB7IGRlZmF1bHRTaGFyZVJlcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi9yeGpzL2RlZmF1bHRTaGFyZVJlcGxheVwiO1xyXG5pbXBvcnQgeyBGaWVsZFR5cGUsIE1ldGFEYXRhIH0gZnJvbSBcIi4uLy4uLy4uL2ludGVyZmFjZXMvcmVwb3J0LWRlZlwiO1xyXG5pbXBvcnQgeyBnZXQsIHNldCB9IGZyb20gXCJsb2Rhc2hcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBzb3J0QW5kRmlsdGVyRGF0YSA9IDxUPihkYXRhOiBPYnNlcnZhYmxlPFRbXT4sIHNvcnRTdGF0ZTogT2JzZXJ2YWJsZTxTb3J0U3RhdGU+LCBmaWx0ZXJTdGF0ZTogT2JzZXJ2YWJsZTxGaWx0ZXJQcmVkaWNhdGVTdGF0ZTxUPj4pID0+IGNvbWJpbmVMYXRlc3QoW1xyXG4gIGRhdGEucGlwZSh0aW1lc3RhbXAoKSksXHJcbiAgc29ydFN0YXRlLnBpcGUodGltZXN0YW1wKCkpLFxyXG4gIGZpbHRlclN0YXRlLnBpcGUodGltZXN0YW1wKCkpXHJcbl0pLnBpcGUoc2NhbigoeyBtYXBwZWREYXRhOiByZXN1bHREYXRhIH0sIFtkYXRhLCBzb3J0LCBmXSwgaW5kZXgpPT4ge1xyXG5cclxuICAgICAgaWYoaW5kZXggPT09IDAgfHwgKGRhdGEudGltZXN0YW1wID4gc29ydC50aW1lc3RhbXAgJiYgZGF0YS50aW1lc3RhbXAgPiBmLnRpbWVzdGFtcCkpe1xyXG4gICAgICAgIHJldHVybiAoeyBtYXBwZWREYXRhOiBmaWx0ZXJEYXRhKHNvcnREYXRhKGRhdGEudmFsdWUgLCBzb3J0LnZhbHVlLnNvcnRzVG9SdW4gKSwgZi52YWx1ZS5hbGxGaWx0ZXJzKX0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZihzb3J0LnRpbWVzdGFtcCA+IGYudGltZXN0YW1wKXtcclxuICAgICAgICByZXR1cm4gKHsgbWFwcGVkRGF0YTogc29ydERhdGEocmVzdWx0RGF0YSwgc29ydC52YWx1ZS5zb3J0c1RvUnVuKX0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAoeyBtYXBwZWREYXRhOiBmaWx0ZXJEYXRhKHJlc3VsdERhdGEsIGYudmFsdWUub25seUFkZGVkRmlsdGVycyB8fCBmLnZhbHVlLmFsbEZpbHRlcnMsICFmLnZhbHVlLm9ubHlBZGRlZEZpbHRlcnMpfSk7XHJcbiAgICB9LCB7IG1hcHBlZERhdGE6IFtdfSBhcyB7IG1hcHBlZERhdGE6IFRbXX0pXHJcbiAgKS5waXBlKFxyXG4gICAgbWFwKCh7IG1hcHBlZERhdGE6IHJlc3VsdERhdGEgfSkgPT4gcmVzdWx0RGF0YS5maWx0ZXIoaXRlbSA9PiAhaXRlbVt0Yk5vU2hvd1N5bWJvbF0pKSxcclxuICAgIGRlZmF1bHRTaGFyZVJlcGxheSgpXHJcbiAgKTtcclxuXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVEYXRhQ2xlYW5lcnMgPSA8VD4obWV0YWRhdGFzOiBNZXRhRGF0YTxUPltdLCBtdXRhdGUgPSBmYWxzZSkgPT4ge1xyXG4gIGNvbnN0IHRyYW5zZm9ybXMgPSBjcmVhdGVDbGVhbmVycyhtZXRhZGF0YXMpO1xyXG4gIHJldHVybiAoZGF0YTogVCkgPT4ge1xyXG4gICAgaWYoIW11dGF0ZSl7XHJcbiAgICAgIGRhdGEgPSB7IC4uLmRhdGEgfVxyXG4gICAgfVxyXG4gICAgZm9yKGNvbnN0IHRyYW5zZm9ybSBvZiB0cmFuc2Zvcm1zKXtcclxuICAgICAgdHJhbnNmb3JtKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjcmVhdGVDbGVhbmVycyA9IDxUPihtZXRhZGF0YXM6IE1ldGFEYXRhPFQ+IFtdKSA9PiB7XHJcbiAgcmV0dXJuIG1ldGFkYXRhcy5yZWR1Y2UoKHRyYW5zZm9ybXMsbWV0YURhdGEpID0+IHtcclxuICAgIHN3aXRjaCAoIG1ldGFEYXRhLmZpZWxkVHlwZSApIHtcclxuICAgICAgY2FzZSBGaWVsZFR5cGUuQ3VycmVuY3k6XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlLk51bWJlcjp7XHJcbiAgICAgICAgY29uc3QgbmVzdGVkID0gbWV0YURhdGEua2V5LmluY2x1ZGVzKCcuJyk7XHJcbiAgICAgICAgaWYobmVzdGVkKXtcclxuICAgICAgICAgIHRyYW5zZm9ybXMucHVzaCggKHQ6VCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB2YWwgPSBnZXQodCwgbWV0YURhdGEua2V5KTtcclxuICAgICAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKCB2YWwgKTtcclxuICAgICAgICAgICAgc2V0KHQgYXMge30sIG1ldGFEYXRhLmtleSwgaXNOYU4obnVtKSB8fCB2YWwgPT0gbnVsbCA/IG51bGwgOiBudW0pXHJcbiAgICAgICAgICAgIHRbbWV0YURhdGEua2V5XSA9ICAoaXNOYU4obnVtKSB8fCB2YWwgPT0gbnVsbCA/IG51bGwgOiBudW0pIGFzIGFueX0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0cmFuc2Zvcm1zLnB1c2goICh0OlQpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdmFsID0gdFttZXRhRGF0YS5rZXldO1xyXG4gICAgICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIoIHZhbCApO1xyXG4gICAgICAgICAgICB0W21ldGFEYXRhLmtleV0gPSAgKGlzTmFOKG51bSkgfHwgdmFsID09IG51bGwgPyBudWxsIDogbnVtKSBhcyBhbnl9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBGaWVsZFR5cGUuRGF0ZTp7XHJcbiAgICAgICAgY29uc3QgbmVzdGVkID0gbWV0YURhdGEua2V5LmluY2x1ZGVzKCcuJyk7XHJcbiAgICAgICAgaWYobmVzdGVkKXtcclxuICAgICAgICAgIHRyYW5zZm9ybXMucHVzaCggKHQ6VCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB2YWwgPSBnZXQodCwgbWV0YURhdGEua2V5KSBhcyBzdHJpbmc7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBEYXRlLnBhcnNlKHZhbCk7XHJcbiAgICAgICAgICAgIGlmKGlzTmFOKGRhdGUpKXtcclxuICAgICAgICAgICAgICBzZXQodCBhcyB7fSwgbWV0YURhdGEua2V5LCAgbnVsbCBhcyBhbnkpO1xyXG4gICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlKTtcclxuICAgICAgICAgICAgZC5zZXRIb3VycygwLDAsMCwwKTtcclxuICAgICAgICAgICAgc2V0KHQgYXMge30sIG1ldGFEYXRhLmtleSwgIGQgYXMgYW55KTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRyYW5zZm9ybXMucHVzaCggKHQ6VCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB2YWwgPSB0W21ldGFEYXRhLmtleV0gYXMgc3RyaW5nO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlID0gRGF0ZS5wYXJzZSh2YWwpO1xyXG4gICAgICAgICAgICBpZihpc05hTihkYXRlKSl7XHJcbiAgICAgICAgICAgICAgdFttZXRhRGF0YS5rZXldID0gIG51bGwgYXMgYW55O1xyXG4gICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlKTtcclxuICAgICAgICAgICAgZC5zZXRIb3VycygwLDAsMCwwKTtcclxuICAgICAgICAgICAgdFttZXRhRGF0YS5rZXldID0gIGQgYXMgYW55O1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgY2FzZSBGaWVsZFR5cGUuRGF0ZVRpbWU6e1xyXG4gICAgICAgIGNvbnN0IG5lc3RlZCA9IG1ldGFEYXRhLmtleS5pbmNsdWRlcygnLicpO1xyXG4gICAgICAgIGlmKG5lc3RlZCl7XHJcbiAgICAgICAgICB0cmFuc2Zvcm1zLnB1c2goICh0OlQpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdmFsID0gZ2V0KHQsIG1ldGFEYXRhLmtleSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVUaW1lID0gRGF0ZS5wYXJzZSh2YWwgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgaWYoaXNOYU4oZGF0ZVRpbWUpKXtcclxuICAgICAgICAgICAgICBzZXQodCBhcyB7fSwgbWV0YURhdGEua2V5LCAgbnVsbCBhcyBhbnkpO1xyXG4gICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGR0ID0gbmV3IERhdGUoZGF0ZVRpbWUpO1xyXG4gICAgICAgICAgICBpZihtZXRhRGF0YS5hZGRpdGlvbmFsPy5kYXRlVGltZU9wdGlvbnM/LmluY2x1ZGVNaWxsaXNlY29uZHMpe1xyXG4gICAgICAgICAgICAgIHNldCh0IGFzIHt9LCBtZXRhRGF0YS5rZXksICBkdCBhcyBhbnkpO1xyXG4gICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKG1ldGFEYXRhLmFkZGl0aW9uYWw/LmRhdGVUaW1lT3B0aW9ucz8uaW5jbHVkZVNlY29uZHMpe1xyXG4gICAgICAgICAgICAgIGR0LnNldE1pbGxpc2Vjb25kcygwKTtcclxuICAgICAgICAgICAgICBzZXQodCBhcyB7fSwgbWV0YURhdGEua2V5LCAgZHQgYXMgYW55KTtcclxuICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkdC5zZXRTZWNvbmRzKDAsIDApO1xyXG4gICAgICAgICAgICBzZXQodCBhcyB7fSwgbWV0YURhdGEua2V5LCAgZHQgYXMgYW55KTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRyYW5zZm9ybXMucHVzaCgodDpUKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRbbWV0YURhdGEua2V5XSBhcyBzdHJpbmc7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVUaW1lID0gRGF0ZS5wYXJzZSh2YWwpO1xyXG4gICAgICAgICAgICBpZihpc05hTihkYXRlVGltZSkpe1xyXG4gICAgICAgICAgICAgIHRbbWV0YURhdGEua2V5XSA9ICBudWxsIGFzIGFueTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgZHQgPSBuZXcgRGF0ZShkYXRlVGltZSk7XHJcbiAgICAgICAgICAgIGlmKG1ldGFEYXRhLmFkZGl0aW9uYWw/LmRhdGVUaW1lT3B0aW9ucz8uaW5jbHVkZU1pbGxpc2Vjb25kcyl7XHJcbiAgICAgICAgICAgICAgdFttZXRhRGF0YS5rZXldID0gIGR0IGFzIGFueTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYobWV0YURhdGEuYWRkaXRpb25hbD8uZGF0ZVRpbWVPcHRpb25zPy5pbmNsdWRlU2Vjb25kcyl7XHJcbiAgICAgICAgICAgICAgZHQuc2V0TWlsbGlzZWNvbmRzKDApO1xyXG4gICAgICAgICAgICAgIHRbbWV0YURhdGEua2V5XSA9ICBkdCBhcyBhbnk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGR0LnNldFNlY29uZHMoMCwgMCk7XHJcbiAgICAgICAgICAgIHRbbWV0YURhdGEua2V5XSA9ICBkdCBhcyBhbnk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRyYW5zZm9ybXM7XHJcbiAgfSwgW10gYXMgKCh0OlQpID0+IHZvaWQpW10pXHJcbn0iXX0=
@@ -0,0 +1,83 @@
1
+ import { createFilterFunc } from "../../../classes/filter-info";
2
+ import { difference, intersection } from "lodash";
3
+ //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.
4
+ // So if filters were only added this method will return the added filters, if filters were removed or changed this method will return undefined.
5
+ export const updateFilterInfoState = (previousState, filterInfos) => {
6
+ filterInfos = filterNonActiveFilters(filterInfos);
7
+ const currentState = {
8
+ allFilters: filterInfos,
9
+ onlyAddedFilters: filterInfoOnlyAdded(previousState.allFilters, filterInfos)
10
+ };
11
+ return currentState;
12
+ };
13
+ export const mapFilterInfoStateToPredicateState = (s) => {
14
+ const mappedAddOnly = s.onlyAddedFilters ? Object.entries(s.onlyAddedFilters).reduce((obj, [key, value]) => {
15
+ obj[key] = createFilterFunc(value);
16
+ return obj;
17
+ }, {}) : {};
18
+ const mappedAll = Object.entries(s.allFilters).map(([key, value]) => mappedAddOnly[key] || createFilterFunc(value));
19
+ return ({
20
+ allFilters: mappedAll,
21
+ onlyAddedFilters: s.onlyAddedFilters ? Object.values(mappedAddOnly) : undefined
22
+ });
23
+ };
24
+ export const updateFilterPredicateState = (previousState, filters) => {
25
+ const currentState = {
26
+ allFilters: filters,
27
+ onlyAddedFilters: predicatesOnlyAdded(previousState.allFilters, filters)
28
+ };
29
+ return currentState;
30
+ };
31
+ export const updateFilterState = (filterInfos, predicates) => {
32
+ const infos = mapFilterInfoStateToPredicateState(filterInfos.value);
33
+ const filtersState = {
34
+ allFilters: [...infos.allFilters, ...predicates.value.allFilters]
35
+ };
36
+ if (filterInfos.timestamp > predicates.timestamp && !!filterInfos.value.onlyAddedFilters) {
37
+ filtersState.onlyAddedFilters = infos.onlyAddedFilters;
38
+ }
39
+ else {
40
+ filtersState.onlyAddedFilters = predicates.value.onlyAddedFilters;
41
+ }
42
+ return filtersState;
43
+ };
44
+ const filterNonActiveFilters = (filtersDict) => Object.entries(filtersDict).reduce((obj, [key, value]) => {
45
+ if (value.active !== false) {
46
+ obj[key] = value;
47
+ }
48
+ ;
49
+ return obj;
50
+ }, {});
51
+ function filterInfoOnlyAdded(previousFilterInfos, currentFilterInfos) {
52
+ const previousKeys = Object.keys(previousFilterInfos);
53
+ const currentKeys = Object.keys(currentFilterInfos);
54
+ const keysInBoth = intersection(previousKeys, currentKeys);
55
+ const someRemoved = previousKeys.length > keysInBoth.length;
56
+ if (someRemoved || !previousKeys.length) {
57
+ return undefined;
58
+ }
59
+ if (filtersInfosUpdated(previousFilterInfos, currentFilterInfos)) {
60
+ return undefined;
61
+ }
62
+ const addedFilters = difference(currentKeys, keysInBoth).reduce((dict, key) => {
63
+ dict[key] = currentFilterInfos[key];
64
+ return dict;
65
+ }, {});
66
+ return addedFilters;
67
+ }
68
+ function predicatesOnlyAdded(previousPredicates, currentPredicates) {
69
+ if (!previousPredicates.length) {
70
+ return undefined;
71
+ }
72
+ const predicateFiltersRemoved = difference(previousPredicates, currentPredicates).length;
73
+ if (predicateFiltersRemoved) {
74
+ return undefined;
75
+ }
76
+ return difference(currentPredicates, previousPredicates);
77
+ }
78
+ function filtersInfosUpdated(previousFilterInfos, currentFilterInfos) {
79
+ return !Object.entries(previousFilterInfos).every(([key, val]) => {
80
+ return currentFilterInfos[key].filterType === val.filterType && currentFilterInfos[key].filterValue === val.filterValue;
81
+ });
82
+ }
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXN0YXRlLmhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jb21wb25lbnRzL3RhYmxlLWNvbnRhaW5lci90YWJsZS1jb250YWluZXIuaGVscGVycy9maWx0ZXItc3RhdGUuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQTRCLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHMUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFbEQsMExBQTBMO0FBQzFMLGlKQUFpSjtBQUVqSixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFJLGFBQWlDLEVBQUUsV0FBMkIsRUFBRSxFQUFFO0lBQ3pHLFdBQVcsR0FBRyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxNQUFNLFlBQVksR0FBdUI7UUFDdkMsVUFBVSxFQUFFLFdBQVc7UUFDdkIsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUM7S0FDN0UsQ0FBQTtJQUNELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLENBQUksQ0FBcUIsRUFBMkIsRUFBRTtJQUN0RyxNQUFNLGFBQWEsR0FBcUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1FBQzNJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxP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ekgsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGltZXN0YW1wIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRmlsdGVyLCBGaWx0ZXJJbmZvLCBjcmVhdGVGaWx0ZXJGdW5jIH0gZnJvbSBcIi4uLy4uLy4uL2NsYXNzZXMvZmlsdGVyLWluZm9cIjtcclxuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gXCIuLi8uLi8uLi9pbnRlcmZhY2VzL2RpY3Rpb25hcnlcIjtcclxuaW1wb3J0IHsgUHJlZGljYXRlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgZGlmZmVyZW5jZSwgaW50ZXJzZWN0aW9uIH0gZnJvbSBcImxvZGFzaFwiO1xyXG5cclxuLy9UaGUgaWRlYSBvZiB0aGlzIGlzIHRoYXQgaWYgZmlsdGVycyB3ZXJlIG9ubHkgYWRkZWQsIGFuZCBub25lIHdlcmUgcmVtb3ZlZCBvciBjaGFuZ2VkLCB0aGVuIHdlIG9ubHkgbmVlZCB0byB0YWcgbW9yZSByb3dzIHRvIG5vdCBiZSBzaG93bi4gV2UgZG9uJ3QgbmVlZCB0byByZW1vdmUgYW55ICdkb250IHNob3cnIHRhZ3MuXHJcbi8vIFNvIGlmIGZpbHRlcnMgd2VyZSBvbmx5IGFkZGVkIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBhZGRlZCBmaWx0ZXJzLCBpZiBmaWx0ZXJzIHdlcmUgcmVtb3ZlZCBvciBjaGFuZ2VkIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIHVuZGVmaW5lZC5cclxuXHJcbmV4cG9ydCBjb25zdCB1cGRhdGVGaWx0ZXJJbmZvU3RhdGUgPSA8VD4ocHJldmlvdXNTdGF0ZTogRmlsdGVySW5mb1N0YXRlPFQ+LCBmaWx0ZXJJbmZvczogRmlsdGVySW5mb0RpY3QpID0+IHtcclxuICBmaWx0ZXJJbmZvcyA9IGZpbHRlck5vbkFjdGl2ZUZpbHRlcnMoZmlsdGVySW5mb3MpO1xyXG4gIGNvbnN0IGN1cnJlbnRTdGF0ZTogRmlsdGVySW5mb1N0YXRlPFQ+ID0ge1xyXG4gICAgYWxsRmlsdGVyczogZmlsdGVySW5mb3MsXHJcbiAgICBvbmx5QWRkZWRGaWx0ZXJzOiBmaWx0ZXJJbmZvT25seUFkZGVkKHByZXZpb3VzU3RhdGUuYWxsRmlsdGVycywgZmlsdGVySW5mb3MpXHJcbiAgfVxyXG4gIHJldHVybiBjdXJyZW50U3RhdGU7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBtYXBGaWx0ZXJJbmZvU3RhdGVUb1ByZWRpY2F0ZVN0YXRlID0gPFQ+KHM6IEZpbHRlckluZm9TdGF0ZTxUPik6IEZpbHRlclByZWRpY2F0ZVN0YXRlPFQ+ID0+IHtcclxuICBjb25zdCBtYXBwZWRBZGRPbmx5OiB7W2tleSBpbiBrZXlvZiBUXTogUHJlZGljYXRlPFQ+fSA9IHMub25seUFkZGVkRmlsdGVycyA/IE9iamVjdC5lbnRyaWVzKHMub25seUFkZGVkRmlsdGVycykucmVkdWNlKChvYmosIFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgb2JqW2tleV0gPSBjcmVhdGVGaWx0ZXJGdW5jKHZhbHVlKTtcclxuICAgIHJldHVybiBvYmo7XHJcbiAgfSwge30gYXMge1trZXkgaW4ga2V5b2YgVF06IFByZWRpY2F0ZTxUPn0pIDoge30gYXMge1trZXkgaW4ga2V5b2YgVF06IFByZWRpY2F0ZTxUPn07XHJcbiAgY29uc3QgbWFwcGVkQWxsID0gT2JqZWN0LmVudHJpZXMocy5hbGxGaWx0ZXJzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gbWFwcGVkQWRkT25seVtrZXldIHx8IGNyZWF0ZUZpbHRlckZ1bmModmFsdWUpKTtcclxuICByZXR1cm4gKHtcclxuICAgIGFsbEZpbHRlcnM6IG1hcHBlZEFsbCxcclxuICAgIG9ubHlBZGRlZEZpbHRlcnM6IHMub25seUFkZGVkRmlsdGVycyA/IE9iamVjdC52YWx1ZXMobWFwcGVkQWRkT25seSkgOiB1bmRlZmluZWRcclxuICB9KVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsdGVyUHJlZGljYXRlU3RhdGUgPSA8VD4ocHJldmlvdXNTdGF0ZTogRmlsdGVyUHJlZGljYXRlU3RhdGU8VD4sIGZpbHRlcnM6IFByZWRpY2F0ZTxhbnk+W10pID0+IHtcclxuICBjb25zdCBjdXJyZW50U3RhdGU6IEZpbHRlclByZWRpY2F0ZVN0YXRlPFQ+ID0ge1xyXG4gICAgYWxsRmlsdGVyczogZmlsdGVycyxcclxuICAgIG9ubHlBZGRlZEZpbHRlcnM6IHByZWRpY2F0ZXNPbmx5QWRkZWQocHJldmlvdXNTdGF0ZS5hbGxGaWx0ZXJzLCBmaWx0ZXJzKVxyXG4gIH1cclxuICByZXR1cm4gY3VycmVudFN0YXRlO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsdGVyU3RhdGUgPSA8VD4oZmlsdGVySW5mb3M6IFRpbWVzdGFtcDxGaWx0ZXJJbmZvU3RhdGU8VD4+LCBwcmVkaWNhdGVzOiBUaW1lc3RhbXA8RmlsdGVyUHJlZGljYXRlU3RhdGU8VD4+KTogRmlsdGVyUHJlZGljYXRlU3RhdGU8VD4gPT4ge1xyXG4gIGNvbnN0IGluZm9zID0gbWFwRmlsdGVySW5mb1N0YXRlVG9QcmVkaWNhdGVTdGF0ZShmaWx0ZXJJbmZvcy52YWx1ZSk7XHJcbiAgY29uc3QgZmlsdGVyc1N0YXRlOiBGaWx0ZXJQcmVkaWNhdGVTdGF0ZTxUPiA9IHtcclxuICAgIGFsbEZpbHRlcnM6IFsuLi5pbmZvcy5hbGxGaWx0ZXJzLCAuLi5wcmVkaWNhdGVzLnZhbHVlLmFsbEZpbHRlcnNdXHJcbiAgfVxyXG4gIGlmKGZpbHRlckluZm9zLnRpbWVzdGFtcCA+IHByZWRpY2F0ZXMudGltZXN0YW1wICYmICEhZmlsdGVySW5mb3MudmFsdWUub25seUFkZGVkRmlsdGVycyl7XHJcbiAgICBmaWx0ZXJzU3RhdGUub25seUFkZGVkRmlsdGVycyA9IGluZm9zLm9ubHlBZGRlZEZpbHRlcnM7XHJcbiAgfSBlbHNlIHtcclxuICAgIGZpbHRlcnNTdGF0ZS5vbmx5QWRkZWRGaWx0ZXJzID0gcHJlZGljYXRlcy52YWx1ZS5vbmx5QWRkZWRGaWx0ZXJzXHJcbiAgfVxyXG4gIHJldHVybiBmaWx0ZXJzU3RhdGVcclxufVxyXG5cclxuXHJcbmNvbnN0IGZpbHRlck5vbkFjdGl2ZUZpbHRlcnMgPSA8VD4oZmlsdGVyc0RpY3QgOiBGaWx0ZXJJbmZvRGljdCkgPT4gT2JqZWN0LmVudHJpZXMoZmlsdGVyc0RpY3QpLnJlZHVjZSgob2JqICxba2V5LCB2YWx1ZV0pID0+IHsgXHJcbiAgaWYodmFsdWUuYWN0aXZlICE9PSBmYWxzZSl7XHJcbiAgICBvYmpba2V5XSA9IHZhbHVlXHJcbiAgfTtcclxuICByZXR1cm4gb2JqO1xyXG59LCB7fSBhcyBEaWN0aW9uYXJ5PEZpbHRlckluZm8gfCBDdXN0b21GaWx0ZXI+KTtcclxuXHJcblxyXG5mdW5jdGlvbiBmaWx0ZXJJbmZvT25seUFkZGVkKHByZXZpb3VzRmlsdGVySW5mb3M6IEZpbHRlckluZm9EaWN0LCBjdXJyZW50RmlsdGVySW5mb3M6IEZpbHRlckluZm9EaWN0KTogRmlsdGVySW5mb0RpY3QgfCB1bmRlZmluZWR7XHJcbiAgY29uc3QgcHJldmlvdXNLZXlzID0gT2JqZWN0LmtleXMocHJldmlvdXNGaWx0ZXJJbmZvcyk7XHJcbiAgY29uc3QgY3VycmVudEtleXMgPSBPYmplY3Qua2V5cyhjdXJyZW50RmlsdGVySW5mb3MpO1xyXG4gIGNvbnN0IGtleXNJbkJvdGggPSBpbnRlcnNlY3Rpb24ocHJldmlvdXNLZXlzLCBjdXJyZW50S2V5cyk7XHJcbiAgY29uc3Qgc29tZVJlbW92ZWQgPSBwcmV2aW91c0tleXMubGVuZ3RoID4ga2V5c0luQm90aC5sZW5ndGg7XHJcbiAgaWYoc29tZVJlbW92ZWQgfHwgIXByZXZpb3VzS2V5cy5sZW5ndGgpe1xyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcbiAgaWYoZmlsdGVyc0luZm9zVXBkYXRlZChwcmV2aW91c0ZpbHRlckluZm9zLCBjdXJyZW50RmlsdGVySW5mb3MpKXtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIGNvbnN0IGFkZGVkRmlsdGVycyA9IGRpZmZlcmVuY2UoY3VycmVudEtleXMsIGtleXNJbkJvdGgpLnJlZHVjZSgoZGljdCwga2V5KSA9PiB7XHJcbiAgICBkaWN0W2tleV0gPSBjdXJyZW50RmlsdGVySW5mb3Nba2V5XTtcclxuICAgIHJldHVybiBkaWN0O1xyXG4gIH0sIHt9IGFzIEZpbHRlckluZm9EaWN0KTtcclxuICByZXR1cm4gYWRkZWRGaWx0ZXJzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwcmVkaWNhdGVzT25seUFkZGVkKHByZXZpb3VzUHJlZGljYXRlczogUHJlZGljYXRlPGFueT5bXSwgY3VycmVudFByZWRpY2F0ZXM6IFByZWRpY2F0ZTxhbnk+W10pe1xyXG4gIGlmKCFwcmV2aW91c1ByZWRpY2F0ZXMubGVuZ3RoKXtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIGNvbnN0IHByZWRpY2F0ZUZpbHRlcnNSZW1vdmVkID0gZGlmZmVyZW5jZShwcmV2aW91c1ByZWRpY2F0ZXMsIGN1cnJlbnRQcmVkaWNhdGVzKS5sZW5ndGg7XHJcbiAgaWYocHJlZGljYXRlRmlsdGVyc1JlbW92ZWQpe1xyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcbiAgcmV0dXJuIGRpZmZlcmVuY2UoY3VycmVudFByZWRpY2F0ZXMsIHByZXZpb3VzUHJlZGljYXRlcyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZpbHRlcnNJbmZvc1VwZGF0ZWQocHJldmlvdXNGaWx0ZXJJbmZvczogRmlsdGVySW5mb0RpY3Q8YW55PiwgY3VycmVudEZpbHRlckluZm9zOiBGaWx0ZXJJbmZvRGljdDxhbnk+KXtcclxuICByZXR1cm4gIU9iamVjdC5lbnRyaWVzKHByZXZpb3VzRmlsdGVySW5mb3MpLmV2ZXJ5KChba2V5LCB2YWxdKSA9PiB7XHJcbiAgICByZXR1cm4gY3VycmVudEZpbHRlckluZm9zW2tleV0uZmlsdGVyVHlwZSA9PT0gdmFsLmZpbHRlclR5cGUgJiYgY3VycmVudEZpbHRlckluZm9zW2tleV0uZmlsdGVyVmFsdWUgPT09IHZhbC5maWx0ZXJWYWx1ZVxyXG4gIH0pXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVySW5mb1N0YXRlPFQ+IHtcclxuICBhbGxGaWx0ZXJzOiBGaWx0ZXJJbmZvRGljdDxUPiwgXHJcbiAgb25seUFkZGVkRmlsdGVycz86IEZpbHRlckluZm9EaWN0PFQ+IHwgdW5kZWZpbmVkLFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlclByZWRpY2F0ZVN0YXRlPFQ+IHtcclxuICBhbGxGaWx0ZXJzOiBQcmVkaWNhdGU8VD5bXSwgXHJcbiAgb25seUFkZGVkRmlsdGVycz86IFByZWRpY2F0ZTxUPltdIHwgdW5kZWZpbmVkLFxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBGaWx0ZXJJbmZvRGljdDxUID0gYW55PiA9IERpY3Rpb25hcnk8RmlsdGVySW5mbzxhbnksIFQ+IHwgQ3VzdG9tRmlsdGVyPGFueT4+OyJdfQ==
@@ -0,0 +1,71 @@
1
+ import { groupBy } from "lodash";
2
+ import { initIndexSymbol } from "./sort-state.helpers";
3
+ function getGroupedData(data, groupByKeys) {
4
+ return tbGroupBy(data, groupByKeys);
5
+ }
6
+ const tbGroupBy = (data, groupByKeys, parentGroupName) => {
7
+ const currentKey = groupByKeys[0];
8
+ const res = groupBy(data, currentKey);
9
+ const remainingGroupByKeys = groupByKeys.slice(1);
10
+ const finalGroups = !remainingGroupByKeys.length;
11
+ if (remainingGroupByKeys.length) {
12
+ Object.keys(res).forEach(key => res[key] = tbGroupBy(res[key], remainingGroupByKeys, key));
13
+ }
14
+ return Object.keys(res).map((groupName, i) => {
15
+ const uniqName = parentGroupName ? `${parentGroupName}-${groupName}` : `${groupName}`;
16
+ const groupHeaders = res[groupName]?.filter(row => row.isGroupHeader) ?? [];
17
+ return {
18
+ isGroupHeader: true,
19
+ groupHeaderDisplay: groupName,
20
+ hasTheData: finalGroups,
21
+ children: finalGroups ? res[groupName] : res[groupName].map(d => { d.padding += 20; return d; }),
22
+ groupName: `tb_group_${uniqName}`,
23
+ padding: 1,
24
+ key: currentKey,
25
+ length: groupHeaders.reduce((acc, curr) => curr.length + acc, 0) + ((res[groupName] ?? []).length - groupHeaders.length),
26
+ [initIndexSymbol]: uniqName,
27
+ };
28
+ });
29
+ };
30
+ export function updateGroupByState({ groupedData }, [data, groups, expandedGroups], index) {
31
+ if (index === 0
32
+ || dataUpdated(data, groups, expandedGroups)
33
+ || groupsUpdated(groups, expandedGroups)) {
34
+ groupedData = groups.value.length ? getGroupedData(data.value, groups.value) : data.value;
35
+ }
36
+ const newDisplayData = expandedGroups.value.length === 0
37
+ ? groupedData
38
+ : groupedData.map(group => mapGroupHeader(group, expandedGroups.value)).flat();
39
+ return ({ displayData: newDisplayData, groupedData });
40
+ }
41
+ function mapGroupHeader(obj, data) {
42
+ const showChildren = data.find(a => a.expandedHeaders.includes(obj.groupName));
43
+ const children = !showChildren ? [] :
44
+ obj.hasTheData ? obj.children
45
+ : obj.children.map(a => mapGroupHeader(a, data));
46
+ return [obj, ...children].flat();
47
+ }
48
+ function dataUpdated(data, groups, expandedGroups) {
49
+ return data.timestamp > groups.timestamp && data.timestamp > expandedGroups.timestamp;
50
+ }
51
+ function groupsUpdated(groups, expandedGroups) {
52
+ return groups.timestamp > expandedGroups.timestamp;
53
+ }
54
+ ;
55
+ export const initialGroupByState = { displayData: [], groupedData: [] };
56
+ export const getAllGroupHeaderNames = (data) => {
57
+ const groups = getGroupHeaders(data, (d) => d.isGroupHeader);
58
+ return groupBy(groups, 'key');
59
+ };
60
+ export const getAllGroupHeaderNamesByKeys = (data, keys) => {
61
+ const groups = getGroupHeaders(data, (d) => d.isGroupHeader && keys.includes(d.key));
62
+ return groupBy(groups, 'key');
63
+ };
64
+ const getGroupHeaders = (data, filterFunc, arr = []) => {
65
+ const headers = data.filter(filterFunc);
66
+ arr.push(...headers);
67
+ headers.forEach(h => { if (!!h.children.length)
68
+ getGroupHeaders(h.children, filterFunc, arr); });
69
+ return arr;
70
+ };
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBCeS5oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLmhlbHBlcnMvZ3JvdXBCeS5oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFHakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXZELFNBQVMsY0FBYyxDQUFDLElBQVcsRUFBRSxXQUFxQjtJQUN4RCxPQUFPLFNBQVMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDdEMsQ0FBQztBQUVELE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBVyxFQUFFLFdBQXFCLEVBQUUsZUFBcUIsRUFBUyxFQUFFO0lBQ3JGLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sb0JBQW9CLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRCxNQUFNLFdBQVcsR0FBRyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQztJQUNqRCxJQUFJLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUM1RixDQUFDO0lBQ0QsT0FBTyxN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QUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLE9BQU8sT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQTtBQUMvQixDQUFDLENBQUE7QUFFRCxNQUFNLGVBQWUsR0FBRyxDQUFDLElBQVcsRUFBRSxVQUE4QixFQUFFLE1BQVksRUFBRSxFQUFXLEVBQUU7SUFDL0YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4QyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDckIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFFLElBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTTtRQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQSxDQUFBLENBQUMsQ0FBQyxDQUFDO0lBQzdGLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ3JvdXBCeSB9IGZyb20gXCJsb2Rhc2hcIjtcclxuaW1wb3J0IHsgVGltZXN0YW1wIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgR3JvdXAsIEdyb3VwZWREYXRhIH0gZnJvbSBcIi4uLy4uLy4uL2NsYXNzZXMvVGFibGVTdGF0ZVwiO1xyXG5pbXBvcnQgeyBpbml0SW5kZXhTeW1ib2wgfSBmcm9tIFwiLi9zb3J0LXN0YXRlLmhlbHBlcnNcIjtcclxuXHJcbmZ1bmN0aW9uIGdldEdyb3VwZWREYXRhKGRhdGE6IGFueVtdLCBncm91cEJ5S2V5czogc3RyaW5nW10pOiBhbnlbXSB7XHJcbiAgcmV0dXJuIHRiR3JvdXBCeShkYXRhLCBncm91cEJ5S2V5cyk7XHJcbn1cclxuXHJcbmNvbnN0IHRiR3JvdXBCeSA9IChkYXRhOiBhbnlbXSwgZ3JvdXBCeUtleXM6IHN0cmluZ1tdLCBwYXJlbnRHcm91cE5hbWU/OiBhbnkpOiBhbnlbXSA9PiB7XHJcbiAgY29uc3QgY3VycmVudEtleSA9IGdyb3VwQnlLZXlzWzBdO1xyXG4gIGNvbnN0IHJlcyA9IGdyb3VwQnkoZGF0YSwgY3VycmVudEtleSk7XHJcbiAgY29uc3QgcmVtYWluaW5nR3JvdXBCeUtleXMgPSBncm91cEJ5S2V5cy5zbGljZSgxKTtcclxuICBjb25zdCBmaW5hbEdyb3VwcyA9ICFyZW1haW5pbmdHcm91cEJ5S2V5cy5sZW5ndGg7XHJcbiAgaWYgKHJlbWFpbmluZ0dyb3VwQnlLZXlzLmxlbmd0aCkge1xyXG4gICAgT2JqZWN0LmtleXMocmVzKS5mb3JFYWNoKGtleSA9PiByZXNba2V5XSA9IHRiR3JvdXBCeShyZXNba2V5XSwgcmVtYWluaW5nR3JvdXBCeUtleXMsIGtleSkpXHJcbiAgfVxyXG4gIHJldHVybiBPYmplY3Qua2V5cyhyZXMpLm1hcCgoZ3JvdXBOYW1lLCBpKSA9PiB7XHJcbiAgICBjb25zdCB1bmlxTmFtZSA9IHBhcmVudEdyb3VwTmFtZSA/IGAke3BhcmVudEdyb3VwTmFtZX0tJHtncm91cE5hbWV9YCA6IGAke2dyb3VwTmFtZX1gO1xyXG4gICAgY29uc3QgZ3JvdXBIZWFkZXJzID0gcmVzW2dyb3VwTmFtZV0/LmZpbHRlcihyb3cgPT4gcm93LmlzR3JvdXBIZWFkZXIpID8/IFtdO1xyXG4gICAgcmV0dXJuICh7XHJcbiAgICAgICAgaXNHcm91cEhlYWRlcjogdHJ1ZSxcclxuICAgICAgICBncm91cEhlYWRlckRpc3BsYXk6IGdyb3VwTmFtZSxcclxuICAgICAgICBoYXNUaGVEYXRhOiBmaW5hbEdyb3VwcyxcclxuICAgICAgICBjaGlsZHJlbjogZmluYWxHcm91cHMgPyByZXNbZ3JvdXBOYW1lXSA6IHJlc1tncm91cE5hbWVdLm1hcChkID0+IHtkLnBhZGRpbmcgKz0gMjA7IHJldHVybiBkfSksXHJcbiAgICAgICAgZ3JvdXBOYW1lOiBgdGJfZ3JvdXBfJHt1bmlxTmFtZX1gLFxyXG4gICAgICAgIHBhZGRpbmc6IDEsXHJcbiAgICAgICAga2V5OiBjdXJyZW50S2V5LFxyXG4gICAgICAgIGxlbmd0aCA6IGdyb3VwSGVhZGVycy5yZWR1Y2UoKGFjYywgY3VycikgPT4gY3Vyci5sZW5ndGggKyBhY2MsMCkgKyAoKHJlc1tncm91cE5hbWVdID8/IFtdKS5sZW5ndGggLSBncm91cEhlYWRlcnMubGVuZ3RoKSxcclxuICAgICAgICBbaW5pdEluZGV4U3ltYm9sXTogdW5pcU5hbWUsXHJcbiAgICAgIH0gYXMgR3JvdXBcclxuICAgICk7XHJcbiAgfSlcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUdyb3VwQnlTdGF0ZSh7IGdyb3VwZWREYXRhIH06R3JvdXBCeVN0YXRlLCBbZGF0YSwgZ3JvdXBzLCBleHBhbmRlZEdyb3Vwc10gOiBbVGltZXN0YW1wPGFueVtdPiwgVGltZXN0YW1wPHN0cmluZ1tdPiwgVGltZXN0YW1wPEdyb3VwZWREYXRhW10+XSwgaW5kZXg6IG51bWJlcil7XHJcbiAgaWYoXHJcbiAgICBpbmRleCA9PT0gMFxyXG4gICAgfHwgZGF0YVVwZGF0ZWQoZGF0YSwgZ3JvdXBzLCBleHBhbmRlZEdyb3VwcylcclxuICAgIHx8IGdyb3Vwc1VwZGF0ZWQoZ3JvdXBzLCBleHBhbmRlZEdyb3VwcylcclxuICApe1xyXG4gICAgZ3JvdXBlZERhdGEgPSBncm91cHMudmFsdWUubGVuZ3RoID8gZ2V0R3JvdXBlZERhdGEoZGF0YS52YWx1ZSwgZ3JvdXBzLnZhbHVlKSA6IGRhdGEudmFsdWU7XHJcbiAgfVxyXG4gIGNvbnN0IG5ld0Rpc3BsYXlEYXRhID0gZXhwYW5kZWRHcm91cHMudmFsdWUubGVuZ3RoID09PSAwXHJcbiAgICA/IGdyb3VwZWREYXRhXHJcbiAgICA6IGdyb3VwZWREYXRhLm1hcChncm91cCA9PiBtYXBHcm91cEhlYWRlcihncm91cCwgZXhwYW5kZWRHcm91cHMudmFsdWUpKS5mbGF0KCk7XHJcbiAgcmV0dXJuICh7ZGlzcGxheURhdGE6IG5ld0Rpc3BsYXlEYXRhLCBncm91cGVkRGF0YX0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYXBHcm91cEhlYWRlcihvYmo6IGFueSwgZGF0YTogR3JvdXBlZERhdGFbXSl7XHJcbiAgY29uc3Qgc2hvd0NoaWxkcmVuID0gZGF0YS5maW5kKGEgPT4gYS5leHBhbmRlZEhlYWRlcnMuaW5jbHVkZXMob2JqLmdyb3VwTmFtZSkpO1xyXG4gIGNvbnN0IGNoaWxkcmVuID0gIXNob3dDaGlsZHJlbiA/IFtdIDogXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai5oYXNUaGVEYXRhID8gIG9iai5jaGlsZHJlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogb2JqLmNoaWxkcmVuLm1hcChhID0+IG1hcEdyb3VwSGVhZGVyKGEsIGRhdGEpKVxyXG5cclxuICByZXR1cm4gW29iaiwgLi4uY2hpbGRyZW5dLmZsYXQoKVxyXG59XHJcblxyXG5mdW5jdGlvbiBkYXRhVXBkYXRlZChkYXRhOiBUaW1lc3RhbXA8YW55W10+LCBncm91cHM6IFRpbWVzdGFtcDxzdHJpbmdbXT4sIGV4cGFuZGVkR3JvdXBzOiBUaW1lc3RhbXA8R3JvdXBlZERhdGFbXT4pe1xyXG4gIHJldHVybiBkYXRhLnRpbWVzdGFtcCA+IGdyb3Vwcy50aW1lc3RhbXAgJiYgZGF0YS50aW1lc3RhbXAgPiBleHBhbmRlZEdyb3Vwcy50aW1lc3RhbXA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdyb3Vwc1VwZGF0ZWQoZ3JvdXBzOiBUaW1lc3RhbXA8c3RyaW5nW10+LCBleHBhbmRlZEdyb3VwczogVGltZXN0YW1wPEdyb3VwZWREYXRhW10+KXtcclxuICByZXR1cm4gZ3JvdXBzLnRpbWVzdGFtcCA+IGV4cGFuZGVkR3JvdXBzLnRpbWVzdGFtcDtcclxufVxyXG5cclxuaW50ZXJmYWNlIEdyb3VwQnlTdGF0ZSB7IGRpc3BsYXlEYXRhOiBhbnlbXSwgZ3JvdXBlZERhdGE6IGFueVtdfTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbml0aWFsR3JvdXBCeVN0YXRlID0geyBkaXNwbGF5RGF0YTogW10sIGdyb3VwZWREYXRhOiBbXX1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRBbGxHcm91cEhlYWRlck5hbWVzID0gKGRhdGE6IGFueVtdKSA9PiB7XHJcbiAgY29uc3QgZ3JvdXBzID0gZ2V0R3JvdXBIZWFkZXJzKGRhdGEsIChkOmFueSkgPT4gZC5pc0dyb3VwSGVhZGVyKTtcclxuICByZXR1cm4gZ3JvdXBCeShncm91cHMsICdrZXknKVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0QWxsR3JvdXBIZWFkZXJOYW1lc0J5S2V5cyA9IChkYXRhOiBhbnlbXSwga2V5czogc3RyaW5nW10pID0+IHtcclxuICBjb25zdCBncm91cHMgPSBnZXRHcm91cEhlYWRlcnMoZGF0YSwgKGQ6YW55KSA9PiBkLmlzR3JvdXBIZWFkZXIgJiYga2V5cy5pbmNsdWRlcyhkLmtleSkpO1xyXG4gIHJldHVybiBncm91cEJ5KGdyb3VwcywgJ2tleScpXHJcbn1cclxuXHJcbmNvbnN0IGdldEdyb3VwSGVhZGVycyA9IChkYXRhOiBhbnlbXSwgZmlsdGVyRnVuYzogKGQ6YW55KSA9PiBib29sZWFuLCBhcnI6YW55W10gPSBbXSk6IEdyb3VwW10gPT4ge1xyXG4gIGNvbnN0IGhlYWRlcnMgPSBkYXRhLmZpbHRlcihmaWx0ZXJGdW5jKTtcclxuICBhcnIucHVzaCguLi5oZWFkZXJzKTtcclxuICBoZWFkZXJzLmZvckVhY2goaCA9PiB7aWYoISFoLmNoaWxkcmVuLmxlbmd0aCkgZ2V0R3JvdXBIZWFkZXJzKGguY2hpbGRyZW4sIGZpbHRlckZ1bmMsIGFycil9KTtcclxuICByZXR1cm4gYXJyO1xyXG59Il19
@@ -0,0 +1,36 @@
1
+ import { difference } from "lodash";
2
+ // 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,
3
+ // 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.
4
+ // So we need to calculate the matching tail of the sort array. Then sortsToRun will be the non-matching head.
5
+ // 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
6
+ // the sorts.
7
+ // We always pass allSorts to the container because if the table data changes all the sorts will need to be run.
8
+ export function updateSortState(previousSorts, currentSorts) {
9
+ currentSorts = addInitSort(currentSorts);
10
+ if (sortsRemoved(previousSorts.allSorts, currentSorts)) {
11
+ return ({ sortsToRun: currentSorts, allSorts: currentSorts });
12
+ }
13
+ const sameTailLength = getSameTailLength(previousSorts.allSorts, currentSorts);
14
+ const sortsToRun = currentSorts.slice(0, currentSorts.length - sameTailLength);
15
+ return ({ sortsToRun, allSorts: currentSorts });
16
+ }
17
+ function addInitSort(sorts) {
18
+ return [...sorts, { active: initIndexSymbol, direction: 'asc' }];
19
+ }
20
+ function sortsRemoved(previousSorts, currentSorts) {
21
+ const previousSortedColumns = previousSorts.map(s => s.active);
22
+ const currentSortedColumns = currentSorts.map(s => s.active);
23
+ const sortsRemoved = !!difference(previousSortedColumns, currentSortedColumns).length;
24
+ return sortsRemoved;
25
+ }
26
+ function getSameTailLength(previousSorts, currentSorts) {
27
+ previousSorts = [...previousSorts].reverse();
28
+ currentSorts = [...currentSorts].reverse();
29
+ let indexOfChange = currentSorts.findIndex((s, i) => s.active !== previousSorts[i]?.active || s.direction !== previousSorts[i]?.direction);
30
+ if (indexOfChange === -1)
31
+ return indexOfChange = currentSorts.length;
32
+ return indexOfChange;
33
+ }
34
+ export const initIndexSymbol = Symbol('tb_init_index');
35
+ export const initialSortState = { sortsToRun: [], allSorts: [] };
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC1zdGF0ZS5oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLmhlbHBlcnMvc29ydC1zdGF0ZS5oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFcEMsbUtBQW1LO0FBQ25LLGlLQUFpSztBQUNqSyw4R0FBOEc7QUFDOUcsOEpBQThKO0FBQzlKLGFBQWE7QUFDYixnSEFBZ0g7QUFDaEgsTUFBTSxVQUFVLGVBQWUsQ0FBQyxhQUF3QixFQUFFLFlBQW9CO0lBQzVFLFlBQVksR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDekMsSUFBRyxZQUFZLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsRUFBQyxDQUFDO1FBQ3JELE9BQU8sQ0FBQyxFQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUNELE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDL0UsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsQ0FBQztJQUMvRSxPQUFPLENBQUMsRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBQyxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUlELFNBQVMsV0FBVyxDQUFDLEtBQWE7SUFDaEMsT0FBTyxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUMsTUFBTSxFQUFFLGVBQW9DLEVBQUUsU0FBUyxFQUFFLEtBQXNCLEVBQUMsQ0FBQyxDQUFDO0FBQ3ZHLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxhQUFxQixFQUFFLFlBQW9CO0lBQy9ELE1BQU0scUJBQXFCLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvRCxNQUFNLG9CQUFvQixHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0QsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN0RixPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDO0FBR0QsU0FBUyxpQkFBaUIsQ0FBQyxhQUFxQixFQUFFLFlBQW9CO0lBQ3BFLGFBQWEsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0MsWUFBWSxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQyxJQUFJLGFBQWEsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxTQUFTLEtBQUssYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNJLElBQUcsYUFBYSxLQUFLLENBQUMsQ0FBQztRQUFFLE9BQU8sYUFBYSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDcEUsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQWMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNvcnQgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydFwiO1xyXG5pbXBvcnQgeyBTb3J0RGlyZWN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2ludGVyZmFjZXMvcmVwb3J0LWRlZlwiO1xyXG5pbXBvcnQgeyBkaWZmZXJlbmNlIH0gZnJvbSBcImxvZGFzaFwiO1xyXG5cclxuLy8gSWYgd2UgYXJlIG9ubHkgc29ydGluZyBkdWUgdG8gYSBjaGFuZ2UgaW4gdGhlIFNvcnRzW10gd2UgY2FuICdvcHRpbWl6ZScuIElmIHRoZSBzb3J0IGFycmF5IHdhcyBmaXJzdCBieSBjb2x1bW4gYSBhc2MgdGhlbiBieSBjb2x1bW4gYiBkZXNjIHRoZW4gYnkgY29sdW1uIGMgYXNjLFxyXG4vLyBhbmQgbm93IGl0IGlzIGZpcnN0IGJ5IGNvbHVtbiBkIGFzYyB0aGVuIGJ5IGNvbHVtbiBhIGRlc2MgdGhlbiBieSBjb2x1bW4gYiBkZXNjIHRoZW4gYnkgY29sdW1uIGMgYXNjLCB3ZSBkb250IG5lZWQgdG8gcmVydW4gdGhlIHRhaWwsIGkuZS4gZm9yIGN1bHVtbiBiIGFuZCBjLlxyXG4vLyBTbyB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgbWF0Y2hpbmcgdGFpbCBvZiB0aGUgc29ydCBhcnJheS4gVGhlbiBzb3J0c1RvUnVuIHdpbGwgYmUgdGhlIG5vbi1tYXRjaGluZyBoZWFkLlxyXG4vLyBCdXQgaWYgYW55IHNvcnRzIHdlcmUgcmVtb3ZlZCB0aGUgb25seSB3YXkgdG8gJ3Vuc29ydCcgaXMgdG8gc3RhcnQgYnkgdGhlIG9yaWdpbmFsIGRhdGEgYW5kIHJ1biBhbGwgdGhlIGV4aXN0aW5nIHNvcnRzIGFnYWluLCBzbyAnc29ydHMgdG8gcnVuJyB3aWxsIGJlIGFsbFxyXG4vLyB0aGUgc29ydHMuXHJcbi8vIFdlIGFsd2F5cyBwYXNzIGFsbFNvcnRzIHRvIHRoZSBjb250YWluZXIgYmVjYXVzZSBpZiB0aGUgdGFibGUgZGF0YSBjaGFuZ2VzIGFsbCB0aGUgc29ydHMgd2lsbCBuZWVkIHRvIGJlIHJ1bi5cclxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVNvcnRTdGF0ZShwcmV2aW91c1NvcnRzOiBTb3J0U3RhdGUsIGN1cnJlbnRTb3J0czogU29ydFtdKTogU29ydFN0YXRle1xyXG4gIGN1cnJlbnRTb3J0cyA9IGFkZEluaXRTb3J0KGN1cnJlbnRTb3J0cyk7XHJcbiAgaWYoc29ydHNSZW1vdmVkKHByZXZpb3VzU29ydHMuYWxsU29ydHMsIGN1cnJlbnRTb3J0cykpe1xyXG4gICAgcmV0dXJuICh7c29ydHNUb1J1bjogY3VycmVudFNvcnRzLCBhbGxTb3J0czogY3VycmVudFNvcnRzfSk7XHJcbiAgfVxyXG4gIGNvbnN0IHNhbWVUYWlsTGVuZ3RoID0gZ2V0U2FtZVRhaWxMZW5ndGgocHJldmlvdXNTb3J0cy5hbGxTb3J0cywgY3VycmVudFNvcnRzKTtcclxuICBjb25zdCBzb3J0c1RvUnVuID0gY3VycmVudFNvcnRzLnNsaWNlKDAsIGN1cnJlbnRTb3J0cy5sZW5ndGggLSBzYW1lVGFpbExlbmd0aCk7XHJcbiAgcmV0dXJuICh7c29ydHNUb1J1biwgYWxsU29ydHM6IGN1cnJlbnRTb3J0c30pO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRTdGF0ZSB7IHNvcnRzVG9SdW46IFNvcnRbXSwgYWxsU29ydHM6IFNvcnRbXX1cclxuXHJcbmZ1bmN0aW9uIGFkZEluaXRTb3J0KHNvcnRzOiBTb3J0W10pe1xyXG4gIHJldHVybiBbLi4uc29ydHMsIHthY3RpdmU6IGluaXRJbmRleFN5bWJvbCBhcyB1bmtub3duIGFzIHN0cmluZywgZGlyZWN0aW9uOiAnYXNjJyBhcyBTb3J0RGlyZWN0aW9ufV07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNvcnRzUmVtb3ZlZChwcmV2aW91c1NvcnRzOiBTb3J0W10sIGN1cnJlbnRTb3J0czogU29ydFtdKTogYm9vbGVhbntcclxuICBjb25zdCBwcmV2aW91c1NvcnRlZENvbHVtbnMgPSBwcmV2aW91c1NvcnRzLm1hcChzID0+IHMuYWN0aXZlKTtcclxuICBjb25zdCBjdXJyZW50U29ydGVkQ29sdW1ucyA9IGN1cnJlbnRTb3J0cy5tYXAocyA9PiBzLmFjdGl2ZSk7XHJcbiAgY29uc3Qgc29ydHNSZW1vdmVkID0gISFkaWZmZXJlbmNlKHByZXZpb3VzU29ydGVkQ29sdW1ucywgY3VycmVudFNvcnRlZENvbHVtbnMpLmxlbmd0aDtcclxuICByZXR1cm4gc29ydHNSZW1vdmVkO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gZ2V0U2FtZVRhaWxMZW5ndGgocHJldmlvdXNTb3J0czogU29ydFtdLCBjdXJyZW50U29ydHM6IFNvcnRbXSl7XHJcbiAgcHJldmlvdXNTb3J0cyA9IFsuLi5wcmV2aW91c1NvcnRzXS5yZXZlcnNlKCk7XHJcbiAgY3VycmVudFNvcnRzID0gWy4uLmN1cnJlbnRTb3J0c10ucmV2ZXJzZSgpO1xyXG4gIGxldCBpbmRleE9mQ2hhbmdlID0gY3VycmVudFNvcnRzLmZpbmRJbmRleCgocywgaSkgPT4gcy5hY3RpdmUgIT09IHByZXZpb3VzU29ydHNbaV0/LmFjdGl2ZSB8fCBzLmRpcmVjdGlvbiAhPT0gcHJldmlvdXNTb3J0c1tpXT8uZGlyZWN0aW9uKTtcclxuICBpZihpbmRleE9mQ2hhbmdlID09PSAtMSkgcmV0dXJuIGluZGV4T2ZDaGFuZ2UgPSBjdXJyZW50U29ydHMubGVuZ3RoO1xyXG4gIHJldHVybiBpbmRleE9mQ2hhbmdlO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaW5pdEluZGV4U3ltYm9sID0gU3ltYm9sKCd0Yl9pbml0X2luZGV4Jyk7XHJcblxyXG5leHBvcnQgY29uc3QgaW5pdGlhbFNvcnRTdGF0ZTogU29ydFN0YXRlID0geyBzb3J0c1RvUnVuOiBbXSwgYWxsU29ydHM6IFtdfTsiXX0=