@one-paragon/angular-utilities 0.1.20 → 0.1.21

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 (380) hide show
  1. package/karma.conf.js +44 -0
  2. package/ng-package.json +7 -0
  3. package/package.json +16 -36
  4. package/src/action-state/action-state-spinner/action-state-spinner.component.css +16 -0
  5. package/src/action-state/action-state-spinner/action-state-spinner.component.html +3 -0
  6. package/src/action-state/action-state-spinner/action-state-spinner.component.spec.ts +25 -0
  7. package/src/action-state/action-state-spinner/action-state-spinner.component.ts +22 -0
  8. package/src/action-state/action-state-ui/action-state-ui.module.ts +19 -0
  9. package/{action-state/index.d.ts → src/action-state/index.ts} +8 -4
  10. package/src/action-state/ngrx-ext/ngrx-ext.module.ts +15 -0
  11. package/src/action-state/ngrx.ts +69 -0
  12. package/src/http-request-state/HttpRequestStateFactory.ts +26 -0
  13. package/src/http-request-state/HttpRequestStateStore.ts +147 -0
  14. package/src/http-request-state/directives/HttpStateDirectiveBase.ts +38 -0
  15. package/src/http-request-state/directives/http-error-state-directive.ts +32 -0
  16. package/src/http-request-state/directives/http-inProgress-state-directive.ts +32 -0
  17. package/src/http-request-state/directives/http-notStarted-state-directive.ts +31 -0
  18. package/src/http-request-state/directives/http-success-state-directive.ts +31 -0
  19. package/{http-request-state/directives/index.d.ts → src/http-request-state/directives/index.ts} +0 -0
  20. package/src/http-request-state/directives/request-state-directive.spec.ts +72 -0
  21. package/src/http-request-state/directives/request-state-directive.ts +70 -0
  22. package/src/http-request-state/helpers.ts +30 -0
  23. package/src/http-request-state/http-request-state.ts +69 -0
  24. package/src/http-request-state/http-state-module.ts +26 -0
  25. package/{http-request-state/index.d.ts → src/http-request-state/index.ts} +1 -1
  26. package/src/http-request-state/observable.spec.ts +43 -0
  27. package/src/http-request-state/rxjs/getRequestorBody.ts +10 -0
  28. package/src/http-request-state/rxjs/getRequestorState.ts +8 -0
  29. package/{http-request-state/rxjs/index.d.ts → src/http-request-state/rxjs/index.ts} +0 -0
  30. package/src/http-request-state/rxjs/tapError.ts +16 -0
  31. package/src/http-request-state/rxjs/tapSuccess.ts +16 -0
  32. package/src/http-request-state/strategies.spec.ts +42 -0
  33. package/src/http-request-state/types.ts +50 -0
  34. package/src/ngrx/actionable-selector.ts +95 -0
  35. package/src/ngrx/index.ts +1 -0
  36. package/{public-api.d.ts → src/public-api.ts} +33 -15
  37. package/src/rxjs/defaultShareReplay.ts +8 -0
  38. package/{rxjs/index.d.ts → src/rxjs/index.ts} +4 -4
  39. package/src/rxjs/mapError.ts +8 -0
  40. package/src/rxjs/rxjs-operators.ts +130 -0
  41. package/src/rxjs/subjectifier.ts +15 -0
  42. package/src/specs/clickSubject.spec.ts +95 -0
  43. package/src/specs/dialog.spec.ts +101 -0
  44. package/src/specs/toggleGroupDirective.spec.ts +231 -0
  45. package/src/table-builder/classes/DefaultSettings.ts +10 -0
  46. package/src/table-builder/classes/GenericTableDataSource.ts +22 -0
  47. package/src/table-builder/classes/MatTableObservableDataSource.ts +23 -0
  48. package/src/table-builder/classes/TableBuilderConfig.ts +19 -0
  49. package/src/table-builder/classes/TableState.ts +63 -0
  50. package/src/table-builder/classes/data-filter.spec.ts +72 -0
  51. package/src/table-builder/classes/data-filter.ts +32 -0
  52. package/{table-builder/classes/display-col.d.ts → src/table-builder/classes/display-col.ts} +0 -0
  53. package/src/table-builder/classes/filter-info.ts +132 -0
  54. package/src/table-builder/classes/table-builder-general-settings.ts +73 -0
  55. package/src/table-builder/classes/table-builder.ts +71 -0
  56. package/src/table-builder/classes/table-store.ts +360 -0
  57. package/src/table-builder/components/array-column.component.ts +39 -0
  58. package/src/table-builder/components/column-builder/column-builder.component.html +66 -0
  59. package/src/table-builder/components/column-builder/column-builder.component.scss +43 -0
  60. package/src/table-builder/components/column-builder/column-builder.component.spec.ts +51 -0
  61. package/src/table-builder/components/column-builder/column-builder.component.ts +126 -0
  62. package/src/table-builder/components/date-filter/date-filter.component.html +24 -0
  63. package/src/table-builder/components/date-filter/date-filter.component.ts +17 -0
  64. package/src/table-builder/components/filter/filter.component.html +78 -0
  65. package/src/table-builder/components/filter/filter.component.scss +64 -0
  66. package/src/table-builder/components/filter/filter.component.spec.ts +89 -0
  67. package/src/table-builder/components/filter/filter.component.ts +35 -0
  68. package/src/table-builder/components/filter/in-list/in-list-filter.component.ts +82 -0
  69. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.html +52 -0
  70. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.scss +57 -0
  71. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.ts +44 -0
  72. package/src/table-builder/components/generic-table/generic-table.component.html +77 -0
  73. package/src/table-builder/components/generic-table/generic-table.component.scss +45 -0
  74. package/src/table-builder/components/generic-table/generic-table.component.ts +221 -0
  75. package/src/table-builder/components/generic-table/paginator.component.ts +89 -0
  76. package/src/table-builder/components/group-by-list/group-by-list.component.css +8 -0
  77. package/src/table-builder/components/group-by-list/group-by-list.component.html +10 -0
  78. package/src/table-builder/components/group-by-list/group-by-list.component.spec.ts +23 -0
  79. package/src/table-builder/components/group-by-list/group-by-list.component.ts +16 -0
  80. package/src/table-builder/components/header-menu/header-menu.component.html +117 -0
  81. package/src/table-builder/components/header-menu/header-menu.component.scss +92 -0
  82. package/src/table-builder/components/header-menu/header-menu.component.ts +81 -0
  83. package/src/table-builder/components/in-filter/in-filter.component.css +3 -0
  84. package/src/table-builder/components/in-filter/in-filter.component.html +13 -0
  85. package/src/table-builder/components/in-filter/in-filter.component.ts +60 -0
  86. package/{table-builder/components/index.d.ts → src/table-builder/components/index.ts} +9 -9
  87. package/src/table-builder/components/initialization-component/initialization-component.html +21 -0
  88. package/src/table-builder/components/initialization-component/initialization-component.ts +15 -0
  89. package/src/table-builder/components/link-column.component.ts +33 -0
  90. package/src/table-builder/components/number-filter/number-filter.component.css +10 -0
  91. package/src/table-builder/components/number-filter/number-filter.component.html +21 -0
  92. package/src/table-builder/components/number-filter/number-filter.component.spec.ts +30 -0
  93. package/src/table-builder/components/number-filter/number-filter.component.ts +19 -0
  94. package/src/table-builder/components/sort-menu/sort-menu.component-store.ts +59 -0
  95. package/src/table-builder/components/sort-menu/sort-menu.component.html +101 -0
  96. package/src/table-builder/components/sort-menu/sort-menu.component.scss +119 -0
  97. package/src/table-builder/components/sort-menu/sort-menu.component.ts +82 -0
  98. package/src/table-builder/components/table-container/table-container.css +26 -0
  99. package/src/table-builder/components/table-container/table-container.html +113 -0
  100. package/src/table-builder/components/table-container/table-container.spec.ts +157 -0
  101. package/src/table-builder/components/table-container/table-container.ts +344 -0
  102. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.html +26 -0
  103. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.ts +38 -0
  104. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.css +37 -0
  105. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.html +8 -0
  106. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.spec.ts +88 -0
  107. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.ts +27 -0
  108. package/src/table-builder/components/table-container-filter/table-wrapper-filter-store.ts +23 -0
  109. package/src/table-builder/directives/custom-cell-directive.ts +45 -0
  110. package/{table-builder/directives/index.d.ts → src/table-builder/directives/index.ts} +6 -5
  111. package/src/table-builder/directives/multi-sort.directive.spec.ts +124 -0
  112. package/src/table-builder/directives/multi-sort.directive.ts +41 -0
  113. package/src/table-builder/directives/resize-column.directive.ts +104 -0
  114. package/src/table-builder/directives/table-wrapper.directive.ts +16 -0
  115. package/src/table-builder/directives/tb-filter.directive.ts +363 -0
  116. package/src/table-builder/enums/filterTypes.ts +65 -0
  117. package/src/table-builder/functions/boolean-filter-function.ts +13 -0
  118. package/src/table-builder/functions/date-filter-function.ts +40 -0
  119. package/src/table-builder/functions/download-data.ts +11 -0
  120. package/src/table-builder/functions/null-filter-function.ts +9 -0
  121. package/src/table-builder/functions/number-filter-function.ts +42 -0
  122. package/src/table-builder/functions/sort-data-function.ts +8 -0
  123. package/src/table-builder/functions/string-filter-function.ts +52 -0
  124. package/{table-builder/interfaces/ColumnInfo.d.ts → src/table-builder/interfaces/ColumnInfo.ts} +3 -2
  125. package/src/table-builder/interfaces/column-template.ts +9 -0
  126. package/{table-builder/interfaces/dictionary.d.ts → src/table-builder/interfaces/dictionary.ts} +3 -3
  127. package/src/table-builder/interfaces/report-def.ts +131 -0
  128. package/src/table-builder/material.module.ts +95 -0
  129. package/src/table-builder/ngrx/actions.ts +7 -0
  130. package/src/table-builder/ngrx/effects.ts +54 -0
  131. package/src/table-builder/ngrx/reducer.ts +72 -0
  132. package/src/table-builder/ngrx/selectors.ts +37 -0
  133. package/src/table-builder/pipes/column-total.pipe.ts +15 -0
  134. package/src/table-builder/pipes/format-filter-type.pipe.ts +12 -0
  135. package/src/table-builder/pipes/format-filter-value.pipe.ts +40 -0
  136. package/src/table-builder/pipes/key-display.ts +16 -0
  137. package/src/table-builder/services/export-to-csv.service.ts +92 -0
  138. package/src/table-builder/services/link-creator.service.ts +48 -0
  139. package/src/table-builder/services/table-template-service.ts +44 -0
  140. package/src/table-builder/services/transform-creator.ts +61 -0
  141. package/src/table-builder/specs/table-custom-filters.spec.ts +262 -0
  142. package/src/table-builder/styles/collapser.styles.scss +21 -0
  143. package/src/table-builder/table-builder.module.ts +138 -0
  144. package/src/test.ts +17 -0
  145. package/src/utilities/directives/auto-focus.directive.ts +19 -0
  146. package/src/utilities/directives/clickEmitterDirective.ts +15 -0
  147. package/src/utilities/directives/clickSubject.ts +19 -0
  148. package/src/utilities/directives/conditional-classes.directive.ts +35 -0
  149. package/src/utilities/directives/dialog-service.ts +22 -0
  150. package/src/utilities/directives/dialog.ts +142 -0
  151. package/src/utilities/directives/mat-toggle-group-directive.ts +60 -0
  152. package/src/utilities/directives/prevent-enter.directive.ts +12 -0
  153. package/src/utilities/directives/stop-propagation.directive.ts +19 -0
  154. package/src/utilities/directives/styler.ts +16 -0
  155. package/src/utilities/directives/trim-whitespace.directive.ts +20 -0
  156. package/{utilities/index.d.ts → src/utilities/index.ts} +22 -15
  157. package/src/utilities/module.ts +58 -0
  158. package/src/utilities/pipes/function.pipe.ts +15 -0
  159. package/src/utilities/pipes/phone.pipe.ts +15 -0
  160. package/src/utilities/pipes/space-case.pipes.spec.ts +47 -0
  161. package/src/utilities/pipes/space-case.pipes.ts +23 -0
  162. package/tsconfig.lib.json +19 -0
  163. package/tsconfig.lib.prod.json +10 -0
  164. package/tsconfig.spec.json +17 -0
  165. package/action-state/action-state-spinner/action-state-spinner.component.d.ts +0 -12
  166. package/action-state/action-state-ui/action-state-ui.module.d.ts +0 -9
  167. package/action-state/ngrx-ext/ngrx-ext.module.d.ts +0 -8
  168. package/action-state/ngrx.d.ts +0 -31
  169. package/esm2020/action-state/action-state-spinner/action-state-spinner.component.mjs +0 -23
  170. package/esm2020/action-state/action-state-ui/action-state-ui.module.mjs +0 -28
  171. package/esm2020/action-state/index.mjs +0 -8
  172. package/esm2020/action-state/ngrx-ext/ngrx-ext.module.mjs +0 -23
  173. package/esm2020/action-state/ngrx.mjs +0 -42
  174. package/esm2020/http-request-state/HttpRequestStateFactory.mjs +0 -27
  175. package/esm2020/http-request-state/HttpRequestStateStore.mjs +0 -97
  176. package/esm2020/http-request-state/directives/HttpStateDirectiveBase.mjs +0 -34
  177. package/esm2020/http-request-state/directives/http-error-state-directive.mjs +0 -29
  178. package/esm2020/http-request-state/directives/http-inProgress-state-directive.mjs +0 -29
  179. package/esm2020/http-request-state/directives/http-notStarted-state-directive.mjs +0 -29
  180. package/esm2020/http-request-state/directives/http-success-state-directive.mjs +0 -29
  181. package/esm2020/http-request-state/directives/index.mjs +0 -6
  182. package/esm2020/http-request-state/directives/request-state-directive.mjs +0 -57
  183. package/esm2020/http-request-state/helpers.mjs +0 -22
  184. package/esm2020/http-request-state/http-request-state.mjs +0 -39
  185. package/esm2020/http-request-state/http-state-module.mjs +0 -41
  186. package/esm2020/http-request-state/index.mjs +0 -7
  187. package/esm2020/http-request-state/rxjs/getRequestorBody.mjs +0 -4
  188. package/esm2020/http-request-state/rxjs/getRequestorState.mjs +0 -3
  189. package/esm2020/http-request-state/rxjs/index.mjs +0 -5
  190. package/esm2020/http-request-state/rxjs/tapError.mjs +0 -12
  191. package/esm2020/http-request-state/rxjs/tapSuccess.mjs +0 -12
  192. package/esm2020/http-request-state/types.mjs +0 -16
  193. package/esm2020/ngrx/actionable-selector.mjs +0 -76
  194. package/esm2020/ngrx/index.mjs +0 -2
  195. package/esm2020/one-paragon-angular-utilities.mjs +0 -5
  196. package/esm2020/public-api.mjs +0 -19
  197. package/esm2020/rxjs/defaultShareReplay.mjs +0 -7
  198. package/esm2020/rxjs/index.mjs +0 -5
  199. package/esm2020/rxjs/mapError.mjs +0 -8
  200. package/esm2020/rxjs/rxjs-operators.mjs +0 -91
  201. package/esm2020/rxjs/subjectifier.mjs +0 -15
  202. package/esm2020/table-builder/classes/DefaultSettings.mjs +0 -6
  203. package/esm2020/table-builder/classes/GenericTableDataSource.mjs +0 -13
  204. package/esm2020/table-builder/classes/MatTableObservableDataSource.mjs +0 -21
  205. package/esm2020/table-builder/classes/TableBuilderConfig.mjs +0 -3
  206. package/esm2020/table-builder/classes/TableState.mjs +0 -32
  207. package/esm2020/table-builder/classes/data-filter.mjs +0 -26
  208. package/esm2020/table-builder/classes/display-col.mjs +0 -2
  209. package/esm2020/table-builder/classes/filter-info.mjs +0 -71
  210. package/esm2020/table-builder/classes/table-builder-general-settings.mjs +0 -68
  211. package/esm2020/table-builder/classes/table-builder.mjs +0 -61
  212. package/esm2020/table-builder/classes/table-store.mjs +0 -292
  213. package/esm2020/table-builder/components/array-column.component.mjs +0 -57
  214. package/esm2020/table-builder/components/column-builder/column-builder.component.mjs +0 -111
  215. package/esm2020/table-builder/components/date-filter/date-filter.component.mjs +0 -25
  216. package/esm2020/table-builder/components/filter/filter.component.mjs +0 -53
  217. package/esm2020/table-builder/components/filter/in-list/in-list-filter.component.mjs +0 -91
  218. package/esm2020/table-builder/components/gen-col-displayer/gen-col-displayer.component.mjs +0 -45
  219. package/esm2020/table-builder/components/generic-table/generic-table.component.mjs +0 -198
  220. package/esm2020/table-builder/components/generic-table/paginator.component.mjs +0 -74
  221. package/esm2020/table-builder/components/group-by-list/group-by-list.component.mjs +0 -21
  222. package/esm2020/table-builder/components/header-menu/header-menu.component.mjs +0 -90
  223. package/esm2020/table-builder/components/in-filter/in-filter.component.mjs +0 -66
  224. package/esm2020/table-builder/components/index.mjs +0 -10
  225. package/esm2020/table-builder/components/initialization-component/initialization-component.mjs +0 -33
  226. package/esm2020/table-builder/components/link-column.component.mjs +0 -66
  227. package/esm2020/table-builder/components/number-filter/number-filter.component.mjs +0 -27
  228. package/esm2020/table-builder/components/sort-menu/sort-menu.component-store.mjs +0 -42
  229. package/esm2020/table-builder/components/sort-menu/sort-menu.component.mjs +0 -75
  230. package/esm2020/table-builder/components/table-container/table-container.mjs +0 -312
  231. package/esm2020/table-builder/components/table-container-filter/filter-list/filter-list.component.mjs +0 -42
  232. package/esm2020/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.mjs +0 -30
  233. package/esm2020/table-builder/components/table-container-filter/table-wrapper-filter-store.mjs +0 -25
  234. package/esm2020/table-builder/directives/custom-cell-directive.mjs +0 -59
  235. package/esm2020/table-builder/directives/index.mjs +0 -6
  236. package/esm2020/table-builder/directives/multi-sort.directive.mjs +0 -42
  237. package/esm2020/table-builder/directives/resize-column.directive.mjs +0 -86
  238. package/esm2020/table-builder/directives/table-wrapper.directive.mjs +0 -26
  239. package/esm2020/table-builder/directives/tb-filter.directive.mjs +0 -403
  240. package/esm2020/table-builder/enums/filterTypes.mjs +0 -59
  241. package/esm2020/table-builder/functions/boolean-filter-function.mjs +0 -10
  242. package/esm2020/table-builder/functions/date-filter-function.mjs +0 -32
  243. package/esm2020/table-builder/functions/download-data.mjs +0 -12
  244. package/esm2020/table-builder/functions/null-filter-function.mjs +0 -8
  245. package/esm2020/table-builder/functions/number-filter-function.mjs +0 -32
  246. package/esm2020/table-builder/functions/sort-data-function.mjs +0 -5
  247. package/esm2020/table-builder/functions/string-filter-function.mjs +0 -41
  248. package/esm2020/table-builder/interfaces/ColumnInfo.mjs +0 -2
  249. package/esm2020/table-builder/interfaces/dictionary.mjs +0 -2
  250. package/esm2020/table-builder/interfaces/report-def.mjs +0 -34
  251. package/esm2020/table-builder/material.module.mjs +0 -221
  252. package/esm2020/table-builder/ngrx/actions.mjs +0 -5
  253. package/esm2020/table-builder/ngrx/effects.mjs +0 -48
  254. package/esm2020/table-builder/ngrx/reducer.mjs +0 -52
  255. package/esm2020/table-builder/ngrx/selectors.mjs +0 -24
  256. package/esm2020/table-builder/pipes/column-total.pipe.mjs +0 -20
  257. package/esm2020/table-builder/pipes/format-filter-type.pipe.mjs +0 -18
  258. package/esm2020/table-builder/pipes/format-filter-value.pipe.mjs +0 -46
  259. package/esm2020/table-builder/pipes/key-display.mjs +0 -20
  260. package/esm2020/table-builder/services/export-to-csv.service.mjs +0 -84
  261. package/esm2020/table-builder/services/link-creator.service.mjs +0 -42
  262. package/esm2020/table-builder/services/table-template-service.mjs +0 -43
  263. package/esm2020/table-builder/services/transform-creator.mjs +0 -70
  264. package/esm2020/table-builder/table-builder.module.mjs +0 -204
  265. package/esm2020/utilities/directives/auto-focus.directive.mjs +0 -26
  266. package/esm2020/utilities/directives/clickEmitterDirective.mjs +0 -21
  267. package/esm2020/utilities/directives/clickSubject.mjs +0 -27
  268. package/esm2020/utilities/directives/conditional-classes.directive.mjs +0 -35
  269. package/esm2020/utilities/directives/dialog-service.mjs +0 -25
  270. package/esm2020/utilities/directives/dialog.mjs +0 -131
  271. package/esm2020/utilities/directives/mat-toggle-group-directive.mjs +0 -59
  272. package/esm2020/utilities/directives/prevent-enter.directive.mjs +0 -19
  273. package/esm2020/utilities/directives/stop-propagation.directive.mjs +0 -25
  274. package/esm2020/utilities/directives/styler.mjs +0 -26
  275. package/esm2020/utilities/directives/trim-whitespace.directive.mjs +0 -29
  276. package/esm2020/utilities/index.mjs +0 -16
  277. package/esm2020/utilities/module.mjs +0 -91
  278. package/esm2020/utilities/pipes/function.pipe.mjs +0 -21
  279. package/esm2020/utilities/pipes/phone.pipe.mjs +0 -20
  280. package/esm2020/utilities/pipes/space-case.pipes.mjs +0 -28
  281. package/fesm2015/one-paragon-angular-utilities.mjs +0 -4698
  282. package/fesm2015/one-paragon-angular-utilities.mjs.map +0 -1
  283. package/fesm2020/one-paragon-angular-utilities.mjs +0 -4666
  284. package/fesm2020/one-paragon-angular-utilities.mjs.map +0 -1
  285. package/http-request-state/HttpRequestStateFactory.d.ts +0 -14
  286. package/http-request-state/HttpRequestStateStore.d.ts +0 -48
  287. package/http-request-state/directives/HttpStateDirectiveBase.d.ts +0 -16
  288. package/http-request-state/directives/http-error-state-directive.d.ts +0 -12
  289. package/http-request-state/directives/http-inProgress-state-directive.d.ts +0 -12
  290. package/http-request-state/directives/http-notStarted-state-directive.d.ts +0 -12
  291. package/http-request-state/directives/http-success-state-directive.d.ts +0 -14
  292. package/http-request-state/directives/request-state-directive.d.ts +0 -29
  293. package/http-request-state/helpers.d.ts +0 -9
  294. package/http-request-state/http-request-state.d.ts +0 -12
  295. package/http-request-state/http-state-module.d.ts +0 -11
  296. package/http-request-state/rxjs/getRequestorBody.d.ts +0 -3
  297. package/http-request-state/rxjs/getRequestorState.d.ts +0 -3
  298. package/http-request-state/rxjs/tapError.d.ts +0 -3
  299. package/http-request-state/rxjs/tapSuccess.d.ts +0 -3
  300. package/http-request-state/types.d.ts +0 -36
  301. package/index.d.ts +0 -5
  302. package/ngrx/actionable-selector.d.ts +0 -15
  303. package/ngrx/index.d.ts +0 -1
  304. package/rxjs/defaultShareReplay.d.ts +0 -2
  305. package/rxjs/mapError.d.ts +0 -2
  306. package/rxjs/rxjs-operators.d.ts +0 -12
  307. package/rxjs/subjectifier.d.ts +0 -9
  308. package/table-builder/classes/DefaultSettings.d.ts +0 -8
  309. package/table-builder/classes/GenericTableDataSource.d.ts +0 -8
  310. package/table-builder/classes/MatTableObservableDataSource.d.ts +0 -9
  311. package/table-builder/classes/TableBuilderConfig.d.ts +0 -19
  312. package/table-builder/classes/TableState.d.ts +0 -46
  313. package/table-builder/classes/data-filter.d.ts +0 -9
  314. package/table-builder/classes/filter-info.d.ts +0 -40
  315. package/table-builder/classes/table-builder-general-settings.d.ts +0 -43
  316. package/table-builder/classes/table-builder.d.ts +0 -14
  317. package/table-builder/classes/table-store.d.ts +0 -114
  318. package/table-builder/components/array-column.component.d.ts +0 -14
  319. package/table-builder/components/column-builder/column-builder.component.d.ts +0 -50
  320. package/table-builder/components/date-filter/date-filter.component.d.ts +0 -10
  321. package/table-builder/components/filter/filter.component.d.ts +0 -294
  322. package/table-builder/components/filter/in-list/in-list-filter.component.d.ts +0 -27
  323. package/table-builder/components/gen-col-displayer/gen-col-displayer.component.d.ts +0 -16
  324. package/table-builder/components/generic-table/generic-table.component.d.ts +0 -71
  325. package/table-builder/components/generic-table/paginator.component.d.ts +0 -28
  326. package/table-builder/components/group-by-list/group-by-list.component.d.ts +0 -10
  327. package/table-builder/components/header-menu/header-menu.component.d.ts +0 -25
  328. package/table-builder/components/in-filter/in-filter.component.d.ts +0 -22
  329. package/table-builder/components/initialization-component/initialization-component.d.ts +0 -12
  330. package/table-builder/components/link-column.component.d.ts +0 -17
  331. package/table-builder/components/number-filter/number-filter.component.d.ts +0 -12
  332. package/table-builder/components/sort-menu/sort-menu.component-store.d.ts +0 -24
  333. package/table-builder/components/sort-menu/sort-menu.component.d.ts +0 -25
  334. package/table-builder/components/table-container/table-container.d.ts +0 -65
  335. package/table-builder/components/table-container-filter/filter-list/filter-list.component.d.ts +0 -17
  336. package/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.d.ts +0 -14
  337. package/table-builder/components/table-container-filter/table-wrapper-filter-store.d.ts +0 -14
  338. package/table-builder/directives/custom-cell-directive.d.ts +0 -19
  339. package/table-builder/directives/multi-sort.directive.d.ts +0 -11
  340. package/table-builder/directives/resize-column.directive.d.ts +0 -43
  341. package/table-builder/directives/table-wrapper.directive.d.ts +0 -11
  342. package/table-builder/directives/tb-filter.directive.d.ts +0 -120
  343. package/table-builder/enums/filterTypes.d.ts +0 -31
  344. package/table-builder/functions/boolean-filter-function.d.ts +0 -3
  345. package/table-builder/functions/date-filter-function.d.ts +0 -3
  346. package/table-builder/functions/download-data.d.ts +0 -1
  347. package/table-builder/functions/null-filter-function.d.ts +0 -2
  348. package/table-builder/functions/number-filter-function.d.ts +0 -4
  349. package/table-builder/functions/sort-data-function.d.ts +0 -3
  350. package/table-builder/functions/string-filter-function.d.ts +0 -7
  351. package/table-builder/interfaces/report-def.d.ts +0 -135
  352. package/table-builder/material.module.d.ts +0 -34
  353. package/table-builder/ngrx/actions.d.ts +0 -23
  354. package/table-builder/ngrx/effects.d.ts +0 -19
  355. package/table-builder/ngrx/reducer.d.ts +0 -15
  356. package/table-builder/ngrx/selectors.d.ts +0 -22
  357. package/table-builder/pipes/column-total.pipe.d.ts +0 -8
  358. package/table-builder/pipes/format-filter-type.pipe.d.ts +0 -8
  359. package/table-builder/pipes/format-filter-value.pipe.d.ts +0 -14
  360. package/table-builder/pipes/key-display.d.ts +0 -11
  361. package/table-builder/services/export-to-csv.service.d.ts +0 -22
  362. package/table-builder/services/link-creator.service.d.ts +0 -12
  363. package/table-builder/services/table-template-service.d.ts +0 -14
  364. package/table-builder/services/transform-creator.d.ts +0 -19
  365. package/table-builder/table-builder.module.d.ts +0 -45
  366. package/utilities/directives/auto-focus.directive.d.ts +0 -10
  367. package/utilities/directives/clickEmitterDirective.d.ts +0 -7
  368. package/utilities/directives/clickSubject.d.ts +0 -9
  369. package/utilities/directives/conditional-classes.directive.d.ts +0 -14
  370. package/utilities/directives/dialog-service.d.ts +0 -10
  371. package/utilities/directives/dialog.d.ts +0 -45
  372. package/utilities/directives/mat-toggle-group-directive.d.ts +0 -21
  373. package/utilities/directives/prevent-enter.directive.d.ts +0 -6
  374. package/utilities/directives/stop-propagation.directive.d.ts +0 -7
  375. package/utilities/directives/styler.d.ts +0 -9
  376. package/utilities/directives/trim-whitespace.directive.d.ts +0 -9
  377. package/utilities/module.d.ts +0 -19
  378. package/utilities/pipes/function.pipe.d.ts +0 -7
  379. package/utilities/pipes/phone.pipe.d.ts +0 -7
  380. package/utilities/pipes/space-case.pipes.d.ts +0 -17
@@ -1,312 +0,0 @@
1
- import { Component, Input, EventEmitter, Output, ContentChildren, ChangeDetectionStrategy, Inject, Optional, } from '@angular/core';
2
- import { BehaviorSubject, from, ReplaySubject } from 'rxjs';
3
- import { FieldType } from '../../interfaces/report-def';
4
- import { first, last, map, switchMap, tap, withLatestFrom, mergeAll, scan } from 'rxjs/operators';
5
- import { MatLegacyRowDef as MatRowDef } from '@angular/material/legacy-table';
6
- import { CustomCellDirective, TableCustomFilterDirective, TableFilterDirective } from '../../directives';
7
- import { stateIs, TableStore } from '../../classes/table-store';
8
- import { DataFilter } from '../../classes/data-filter';
9
- import { combineArrays, mapArray, notNull } from '../../../rxjs/rxjs-operators';
10
- import { ExportToCsvService } from '../../services/export-to-csv.service';
11
- import { ArrayDefaults } from '../../classes/DefaultSettings';
12
- import { TableBuilderConfigToken } from '../../classes/TableBuilderConfig';
13
- import * as selectors from '../../ngrx/selectors';
14
- import { select } from '@ngrx/store';
15
- import { deleteLocalProfilesState, setLocalProfile, setLocalProfilesState } from '../../ngrx/actions';
16
- import { InitializationState } from '../../classes/TableState';
17
- import { sortData } from '../../functions/sort-data-function';
18
- import { WrapperFilterStore } from '../table-container-filter/table-wrapper-filter-store';
19
- import { cloneDeep, groupBy } from 'lodash';
20
- import { defaultShareReplay } from '../../../rxjs';
21
- import { flattenDeep } from 'lodash';
22
- import { createFilterFunc, isCustomFilter, isFilterInfo } from '../../classes/filter-info';
23
- import { createLinkCreator } from '../../services/link-creator.service';
24
- import * as i0 from "@angular/core";
25
- import * as i1 from "../../classes/table-store";
26
- import * as i2 from "../../services/export-to-csv.service";
27
- import * as i3 from "@ngrx/store";
28
- import * as i4 from "../../directives/table-wrapper.directive";
29
- import * as i5 from "@angular/common";
30
- import * as i6 from "@angular/material/legacy-form-field";
31
- import * as i7 from "@angular/material/legacy-button";
32
- import * as i8 from "@angular/material/legacy-tooltip";
33
- import * as i9 from "@angular/material/legacy-input";
34
- import * as i10 from "@angular/material/legacy-menu";
35
- import * as i11 from "@angular/material/icon";
36
- import * as i12 from "@ngrx/component";
37
- import * as i13 from "../../../utilities/directives/stop-propagation.directive";
38
- import * as i14 from "../../../utilities/directives/clickEmitterDirective";
39
- import * as i15 from "../../../utilities/directives/dialog";
40
- import * as i16 from "../generic-table/generic-table.component";
41
- import * as i17 from "../gen-col-displayer/gen-col-displayer.component";
42
- import * as i18 from "../table-container-filter/gen-filter-displayer/gen-filter-displayer.component";
43
- import * as i19 from "../../directives/multi-sort.directive";
44
- import * as i20 from "../sort-menu/sort-menu.component";
45
- import * as i21 from "../table-container-filter/filter-list/filter-list.component";
46
- import * as i22 from "../group-by-list/group-by-list.component";
47
- export class TableContainerComponent {
48
- constructor(state, exportToCsvService, config, store, wrapper) {
49
- this.state = state;
50
- this.exportToCsvService = exportToCsvService;
51
- this.config = config;
52
- this.store = store;
53
- this.wrapper = wrapper;
54
- this.IndexColumn = false;
55
- this.SelectionColumn = false;
56
- this.isSticky = true;
57
- this.selection$ = new EventEmitter();
58
- this.dataSubject = new ReplaySubject(1);
59
- this.data = this.dataSubject.pipe(switchMap(d => d), defaultShareReplay());
60
- this.OnStateReset = new EventEmitter();
61
- this.OnSaveState = new EventEmitter();
62
- this.customFilters$ = new BehaviorSubject([]);
63
- this.mapMetaDatas = (meta) => {
64
- if (meta.fieldType === FieldType.Array) {
65
- const additional = { ...meta.additional };
66
- additional.arrayStyle = additional?.arrayStyle ?? ArrayDefaults.arrayStyle;
67
- additional.limit = additional.limit ?? this.config.arrayInfo?.limit ?? ArrayDefaults.limit;
68
- return { ...meta, additional };
69
- }
70
- return meta;
71
- };
72
- this.collapseHeader$ = this.state.state$.pipe(map(state => state.persistedTableSettings.collapseHeader));
73
- this.tbGroupBy = (data, groupByKeys, parentGroupName) => {
74
- let res = {};
75
- res = groupBy(data, groupByKeys[0]);
76
- const remainingGroupByKeys = groupByKeys.slice(1);
77
- if (remainingGroupByKeys.length) {
78
- Object.keys(res).forEach(key => res[key] = this.tbGroupBy(res[key], remainingGroupByKeys, key));
79
- }
80
- return flattenDeep(Object.keys(res).map(groupName => {
81
- const uniqName = parentGroupName ? `${parentGroupName}-${groupName}` : `${groupName}`;
82
- return [
83
- {
84
- isGroupHeader: true,
85
- groupHeaderName: `${groupName} (${res[groupName]?.filter(row => !row.isGroupHeader)?.length})`,
86
- data: res[groupName],
87
- groupName: uniqName,
88
- padding: 0
89
- },
90
- res[groupName]?.map(d => ({ ...d, parentGroupName: d.parentGroupName || uniqName }))
91
- ];
92
- })).map(this.addIndentation);
93
- };
94
- this.addIndentation = (d) => {
95
- if (d.isGroupHeader) {
96
- if (d.padding) {
97
- d.padding += 20;
98
- }
99
- else {
100
- d.padding = 1;
101
- }
102
- }
103
- return d;
104
- };
105
- this.setDisplay = (data, groups) => data
106
- .map(d => ({
107
- ...d,
108
- shouldDisplay: !d.parentGroupName || this.shouldDisplay(groups.find(g => g.groupName == d.parentGroupName), groups),
109
- isExpanded: groups.find(g => g.groupName == d.groupName)?.isExpanded
110
- }))
111
- .filter(d => d.shouldDisplay);
112
- this.shouldDisplay = (currentGroup, groups) => {
113
- if (!currentGroup?.isExpanded) {
114
- return false;
115
- }
116
- const parentGroup = groups?.find(g => g.groupName == currentGroup.parentGroupName);
117
- if (parentGroup) {
118
- return this.shouldDisplay(parentGroup, groups);
119
- }
120
- return true;
121
- };
122
- this.state.on(this.state.getSavableState().pipe(last()), finalState => {
123
- if (this.tableId) {
124
- this.store.dispatch(setLocalProfile({ key: this.tableId, value: finalState }));
125
- }
126
- });
127
- this.state$ = this.state.getSavableState().pipe(map(state => cloneDeep(state)), defaultShareReplay());
128
- }
129
- set pageSize(value) {
130
- this.state.setPageSize(value);
131
- }
132
- resetState() {
133
- this.customFilters.forEach(cf => cf.reset());
134
- this.filters.forEach(cf => cf.reset());
135
- this.state.resetState();
136
- this.OnStateReset.next(null);
137
- }
138
- initializeState() {
139
- this.state.setTableSettings(this.tableBuilder.settings);
140
- this.state.runOnceWhen(stateIs(InitializationState.MetaDataLoaded), state => {
141
- if (this.tableId) {
142
- const persistedState$ = this.store.pipe(select(selectors.selectLocalProfileState(this.tableId)), first(), tap(persistedState => {
143
- if (!persistedState) {
144
- this.state.setIntializationState(InitializationState.LoadedFromStore);
145
- }
146
- }), notNull());
147
- this.state.updateStateFromPersistedState(persistedState$);
148
- }
149
- else {
150
- this.state.setIntializationState(InitializationState.LoadedFromStore);
151
- }
152
- });
153
- }
154
- initializeData() {
155
- var allFilters = this.inputFilters ? combineArrays([
156
- this.customFilters$,
157
- this.inputFilters
158
- ]) : this.customFilters$;
159
- const filters$ = this.state.filters$.pipe(map(filters => Object.values(filters)));
160
- const data = new DataFilter(allFilters)
161
- .appendFilters(filters$)
162
- .filterData(this.tableBuilder.getData$()).pipe(switchMap(data => this.state.groupByKeys$.pipe(map(groupBy => this.getData(data, groupBy))).pipe(switchMap(data => this.state.groups$.pipe(map(groups => this.setDisplay(data, groups)))))));
163
- this.dataSubject.next(data);
164
- }
165
- ngOnInit() {
166
- this.initializeState();
167
- this.initializeData();
168
- if (this.tableId) {
169
- this.stateKeys$ = this.store.select(selectors.selectLocalProfileKeys(this.tableId));
170
- this.currentStateKey$ = this.store.select(selectors.selectLocalProfileCurrentKey(this.tableId));
171
- }
172
- }
173
- exportToCsv() {
174
- const sorted = this.data.pipe(withLatestFrom(this.state.sorted$), map(([data, sorted]) => sortData(data, sorted)));
175
- this.exportToCsvService.exportToCsv(sorted);
176
- }
177
- saveState() {
178
- this.state.getSavableState().pipe(first()).subscribe(tableState => {
179
- this.OnSaveState.next(null);
180
- this.store.dispatch(setLocalProfile({ key: this.tableId, value: tableState, persist: true }));
181
- });
182
- }
183
- setProfileState(val) {
184
- this.store.dispatch(setLocalProfilesState({ key: this.tableId, current: val }));
185
- }
186
- deleteProfileState(stateKey) {
187
- this.store.dispatch(deleteLocalProfilesState({ key: this.tableId, stateKey }));
188
- }
189
- ngAfterContentInit() {
190
- this.InitializeColumns();
191
- this.state.runOnceWhen(stateIs(InitializationState.LoadedFromStore), state => {
192
- var allFilters = [...this.filters, ...this.customFilters];
193
- if (this.wrapper) {
194
- allFilters = [...allFilters, ...this.wrapper.customFilters, ...this.wrapper.filters, ...this.wrapper.registerations];
195
- }
196
- var customFilters = [];
197
- allFilters.filter(f => !f.used).forEach(f => {
198
- f.used = true;
199
- if (f.savable) {
200
- var filter = state.filters[f.filterId];
201
- if (isFilterInfo(filter)) {
202
- const filterDirective = f;
203
- filterDirective.fieldType = filter.fieldType;
204
- filterDirective.filterType = filter.filterType;
205
- filterDirective.setFilterValue(filter.filterValue);
206
- filterDirective.key = filter.key;
207
- filterDirective.update();
208
- }
209
- if (isCustomFilter(filter)) {
210
- f.active = filter.active ?? false;
211
- }
212
- this.state.addFilter(f.filter$);
213
- }
214
- else {
215
- customFilters.push(f);
216
- }
217
- });
218
- const filters$ = from(customFilters.map(cf => cf.filter$)).pipe(mergeAll(), scan((a, b) => {
219
- if (b.active) {
220
- a[b.filterId] = isCustomFilter(b) ? b.predicate : createFilterFunc(b);
221
- }
222
- else {
223
- delete a[b.filterId];
224
- }
225
- return a;
226
- }, {}), map(f => Object.values(f)));
227
- this.state.on(filters$, (f) => {
228
- this.customFilters$.next(f);
229
- });
230
- this.state.updateState({ initializationState: InitializationState.Ready });
231
- });
232
- }
233
- InitializeColumns() {
234
- const customCellMap = new Map(this.customCells.map(cc => [cc.customCell, cc]));
235
- this.state.setMetaData(this.tableBuilder.metaData$.pipe(map((mds) => {
236
- mds = mds.map(this.mapMetaDatas);
237
- return [
238
- ...mds,
239
- ...this.customCells.map(cc => cc.getMetaData(mds.find(item => item.key === cc.customCell)))
240
- ];
241
- })));
242
- this.state.setLinkMaps(this.tableBuilder.metaData$.pipe(map((mds) => {
243
- return mds.reduce((acc, md) => {
244
- if (md.fieldType === FieldType.Link) {
245
- acc[md.key] = createLinkCreator(md);
246
- }
247
- return acc;
248
- }, {});
249
- })));
250
- this.myColumns$ = this.state.metaDataArray$.pipe(mapArray(metaData => ({ metaData, customCell: customCellMap.get(metaData.key) })));
251
- }
252
- getData(data, groupByKeys) {
253
- if (!groupByKeys.length) {
254
- this.disableSort = false;
255
- return data;
256
- }
257
- this.disableSort = true;
258
- return this.tbGroupBy(data, groupByKeys);
259
- }
260
- }
261
- TableContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: TableContainerComponent, deps: [{ token: i1.TableStore }, { token: i2.ExportToCsvService }, { token: TableBuilderConfigToken }, { token: i3.Store }, { token: i4.TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component });
262
- TableContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: TableContainerComponent, selector: "tb-table-container", inputs: { tableId: "tableId", tableBuilder: "tableBuilder", IndexColumn: "IndexColumn", SelectionColumn: "SelectionColumn", trackBy: "trackBy", isSticky: "isSticky", pageSize: "pageSize", inputFilters: "inputFilters", groupHeaderTemplate: "groupHeaderTemplate" }, outputs: { selection$: "selection$", data: "data", OnStateReset: "OnStateReset", OnSaveState: "OnSaveState", state$: "state$" }, providers: [TableStore, ExportToCsvService, WrapperFilterStore], queries: [{ propertyName: "customFilters", predicate: TableCustomFilterDirective, descendants: true }, { propertyName: "filters", predicate: TableFilterDirective, descendants: true }, { propertyName: "customRows", predicate: MatRowDef }, { propertyName: "customCells", predicate: CustomCellDirective }], ngImport: i0, template: "<ng-content select=\"[before]\" >\n</ng-content>\n\n<ng-container multiSort [matSortDisabled]=\"disableSort\">\n <ng-container *ngrxLet=\"state.tableSettings$ as tableSettings\">\n\n\n <div class=\"header-wrapper\">\n <div class=\"title\">\n <ng-content select=\".tb-header-title\"\n *ngIf=\"(!(collapseHeader$ | async)) || tableSettings.showTitleWhenHeaderCollapsed\">\n\n </ng-content>\n <group-by-list></group-by-list>\n </div>\n <div class=\"flx-row-end\">\n <lib-filter-list></lib-filter-list>\n <ng-container *ngIf=\"!tableSettings.hideHeader\">\n <ng-container *ngIf=\"!(collapseHeader$ | async); else allMenu\">\n <ng-container *ngTemplateOutlet=\"headerMenu\"></ng-container>\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\"\n [ngClass]=\"{'flat-menu':(collapseHeader$ | async)}\">\n <mat-icon>{{(collapseHeader$ | async) ? 'more_horiz' : 'more_vert'}}</mat-icon>\n </button>\n <mat-menu #mainMenu='matMenu'>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"></ng-container>\n </mat-menu>\n </ng-container>\n <ng-template #allMenu>\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\"\n [ngClass]=\"{'flat-menu':(collapseHeader$ | async)}\">\n <mat-icon>{{(collapseHeader$ | async) ? 'more_horiz' : 'more_vert'}}</mat-icon>\n </button>\n <mat-menu #mainMenu='matMenu'>\n <div class=\"flex-column\">\n <ng-container *ngTemplateOutlet=\"headerMenu\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"></ng-container>\n </mat-menu>\n </ng-template>\n <mat-icon [matTooltip]=\"(collapseHeader$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\n (click)=\"state.toggleCollapseHeader()\">\n {{(collapseHeader$ | async) ? 'expand_less' : 'expand_more'}}\n </mat-icon>\n </ng-container>\n </div>\n </div>\n\n <div style=\"clear: both;\">\n <tb-generic-table [rows]='customRows' [data$]=\"data\" [IndexColumn]='IndexColumn'\n [SelectionColumn]='SelectionColumn' (selection$)='selection$.emit($event)' [trackBy]='trackBy'\n [isSticky]='isSticky' [columnInfos]='myColumns$' [disableSort]=\"disableSort\" [groupHeaderTemplate]=\"groupHeaderTemplate\">\n </tb-generic-table>\n </div>\n\n\n\n <ng-template #headerMenu>\n <ng-container>\n <tb-filter-displayer *ngIf=\"!tableSettings.hideFilter\">\n </tb-filter-displayer>\n <tb-col-displayer *ngIf=\"!tableSettings.hideColumnSettings\"></tb-col-displayer>\n <tb-sort-menu *ngIf=\"!tableSettings.hideSort\"></tb-sort-menu>\n </ng-container>\n </ng-template>\n <ng-template #headerMenuExtra>\n <button mat-menu-item (click)=\"resetState()\">\n <mat-icon color=\"primary\">autorenew</mat-icon>\n <span>Reset table</span>\n </button>\n <button mat-menu-item (click)=\"exportToCsv()\" *ngIf=\"!tableSettings.hideExport\">\n <mat-icon color=\"primary\">file_download</mat-icon>\n <span>Export Table</span>\n </button>\n <ng-container *ngIf=\"currentStateKey$ | async as currentKey\">\n <button mat-menu-item *ngIf=\"tableId\" (click)=\"saveState()\">\n <mat-icon color=\"primary\">save</mat-icon>\n <span>Save to {{currentKey}}</span>\n </button>\n <button *ngIf='tableId' mat-menu-item [matMenuTriggerFor]=\"savedNames\">\n <span>Choose Profile</span>\n </button>\n </ng-container>\n\n <mat-menu #savedNames='matMenu' panelClass='wide-menu'>\n <button mat-menu-item clickEmitter #add='clickEmitter'>\n <mat-icon>add</mat-icon>\n <span>New</span>\n </button>\n <ng-container *ngFor='let key of stateKeys$ | async'>\n <button mat-menu-item (click)='setProfileState(key)'>\n <div style='display: flex; align-items: center; justify-content: space-between;'>\n <span style='display:flex;'>{{key}}</span>\n <span style='display:flex;'>\n <span style=\"width: 120px;\"></span>\n <mat-icon color='warn' (click)='deleteProfileState(key)' stop-propagation>delete_forever</mat-icon>\n </span>\n </div>\n </button>\n </ng-container>\n </mat-menu>\n <div *opDialog='add'>\n <mat-form-field>\n <input style='width:90%' matInput #addedKey />\n </mat-form-field>\n <button mat-button (click)='setProfileState(addedKey.value); add.next(false);'\n [disabled]=\"!addedKey.value\">Add</button>\n </div>\n </ng-template>\n\n </ng-container>\n\n</ng-container>\n", styles: [".wide-menu{width:200px!important}.header-wrapper{display:flex;flex-direction:row;justify-content:space-between;width:100%}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.flat-menu{line-height:initial;height:initial}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i6.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i7.MatLegacyButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i8.MatLegacyTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i9.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "component", type: i10.MatLegacyMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i10.MatLegacyMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i10.MatLegacyMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i12.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "directive", type: i13.StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "directive", type: i14.ClickEmitterDirective, selector: "[clickEmitter]", exportAs: ["clickEmitter"] }, { kind: "directive", type: i15.DialogDirective, selector: "[opDialog]", inputs: ["opDialogConfig", "opDialog", "opDialogOrigin"], outputs: ["opDialogClosed"] }, { kind: "component", type: i16.GenericTableComponent, selector: "tb-generic-table", inputs: ["data$", "IndexColumn", "SelectionColumn", "trackBy", "rows", "isSticky", "columnBuilders", "columnInfos", "groupHeaderTemplate", "disableSort"], outputs: ["selection$"] }, { kind: "component", type: i17.GenColDisplayerComponent, selector: "tb-col-displayer" }, { kind: "component", type: i18.GenFilterDisplayerComponent, selector: "tb-filter-displayer" }, { kind: "directive", type: i19.MultiSortDirective, selector: "[multiSort]", inputs: ["matSortDisabled"], exportAs: ["multiSort"] }, { kind: "component", type: i20.SortMenuComponent, selector: "tb-sort-menu" }, { kind: "component", type: i21.FilterChipsComponent, selector: "lib-filter-list" }, { kind: "component", type: i22.GroupByListComponent, selector: "group-by-list" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
263
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: TableContainerComponent, decorators: [{
264
- type: Component,
265
- args: [{ selector: 'tb-table-container', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableStore, ExportToCsvService, WrapperFilterStore], template: "<ng-content select=\"[before]\" >\n</ng-content>\n\n<ng-container multiSort [matSortDisabled]=\"disableSort\">\n <ng-container *ngrxLet=\"state.tableSettings$ as tableSettings\">\n\n\n <div class=\"header-wrapper\">\n <div class=\"title\">\n <ng-content select=\".tb-header-title\"\n *ngIf=\"(!(collapseHeader$ | async)) || tableSettings.showTitleWhenHeaderCollapsed\">\n\n </ng-content>\n <group-by-list></group-by-list>\n </div>\n <div class=\"flx-row-end\">\n <lib-filter-list></lib-filter-list>\n <ng-container *ngIf=\"!tableSettings.hideHeader\">\n <ng-container *ngIf=\"!(collapseHeader$ | async); else allMenu\">\n <ng-container *ngTemplateOutlet=\"headerMenu\"></ng-container>\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\"\n [ngClass]=\"{'flat-menu':(collapseHeader$ | async)}\">\n <mat-icon>{{(collapseHeader$ | async) ? 'more_horiz' : 'more_vert'}}</mat-icon>\n </button>\n <mat-menu #mainMenu='matMenu'>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"></ng-container>\n </mat-menu>\n </ng-container>\n <ng-template #allMenu>\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\"\n [ngClass]=\"{'flat-menu':(collapseHeader$ | async)}\">\n <mat-icon>{{(collapseHeader$ | async) ? 'more_horiz' : 'more_vert'}}</mat-icon>\n </button>\n <mat-menu #mainMenu='matMenu'>\n <div class=\"flex-column\">\n <ng-container *ngTemplateOutlet=\"headerMenu\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"></ng-container>\n </mat-menu>\n </ng-template>\n <mat-icon [matTooltip]=\"(collapseHeader$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\n (click)=\"state.toggleCollapseHeader()\">\n {{(collapseHeader$ | async) ? 'expand_less' : 'expand_more'}}\n </mat-icon>\n </ng-container>\n </div>\n </div>\n\n <div style=\"clear: both;\">\n <tb-generic-table [rows]='customRows' [data$]=\"data\" [IndexColumn]='IndexColumn'\n [SelectionColumn]='SelectionColumn' (selection$)='selection$.emit($event)' [trackBy]='trackBy'\n [isSticky]='isSticky' [columnInfos]='myColumns$' [disableSort]=\"disableSort\" [groupHeaderTemplate]=\"groupHeaderTemplate\">\n </tb-generic-table>\n </div>\n\n\n\n <ng-template #headerMenu>\n <ng-container>\n <tb-filter-displayer *ngIf=\"!tableSettings.hideFilter\">\n </tb-filter-displayer>\n <tb-col-displayer *ngIf=\"!tableSettings.hideColumnSettings\"></tb-col-displayer>\n <tb-sort-menu *ngIf=\"!tableSettings.hideSort\"></tb-sort-menu>\n </ng-container>\n </ng-template>\n <ng-template #headerMenuExtra>\n <button mat-menu-item (click)=\"resetState()\">\n <mat-icon color=\"primary\">autorenew</mat-icon>\n <span>Reset table</span>\n </button>\n <button mat-menu-item (click)=\"exportToCsv()\" *ngIf=\"!tableSettings.hideExport\">\n <mat-icon color=\"primary\">file_download</mat-icon>\n <span>Export Table</span>\n </button>\n <ng-container *ngIf=\"currentStateKey$ | async as currentKey\">\n <button mat-menu-item *ngIf=\"tableId\" (click)=\"saveState()\">\n <mat-icon color=\"primary\">save</mat-icon>\n <span>Save to {{currentKey}}</span>\n </button>\n <button *ngIf='tableId' mat-menu-item [matMenuTriggerFor]=\"savedNames\">\n <span>Choose Profile</span>\n </button>\n </ng-container>\n\n <mat-menu #savedNames='matMenu' panelClass='wide-menu'>\n <button mat-menu-item clickEmitter #add='clickEmitter'>\n <mat-icon>add</mat-icon>\n <span>New</span>\n </button>\n <ng-container *ngFor='let key of stateKeys$ | async'>\n <button mat-menu-item (click)='setProfileState(key)'>\n <div style='display: flex; align-items: center; justify-content: space-between;'>\n <span style='display:flex;'>{{key}}</span>\n <span style='display:flex;'>\n <span style=\"width: 120px;\"></span>\n <mat-icon color='warn' (click)='deleteProfileState(key)' stop-propagation>delete_forever</mat-icon>\n </span>\n </div>\n </button>\n </ng-container>\n </mat-menu>\n <div *opDialog='add'>\n <mat-form-field>\n <input style='width:90%' matInput #addedKey />\n </mat-form-field>\n <button mat-button (click)='setProfileState(addedKey.value); add.next(false);'\n [disabled]=\"!addedKey.value\">Add</button>\n </div>\n </ng-template>\n\n </ng-container>\n\n</ng-container>\n", styles: [".wide-menu{width:200px!important}.header-wrapper{display:flex;flex-direction:row;justify-content:space-between;width:100%}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.flat-menu{line-height:initial;height:initial}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"] }]
266
- }], ctorParameters: function () { return [{ type: i1.TableStore }, { type: i2.ExportToCsvService }, { type: undefined, decorators: [{
267
- type: Inject,
268
- args: [TableBuilderConfigToken]
269
- }] }, { type: i3.Store }, { type: i4.TableWrapperDirective, decorators: [{
270
- type: Optional
271
- }] }]; }, propDecorators: { customFilters: [{
272
- type: ContentChildren,
273
- args: [TableCustomFilterDirective, { descendants: true }]
274
- }], filters: [{
275
- type: ContentChildren,
276
- args: [TableFilterDirective, { descendants: true }]
277
- }], tableId: [{
278
- type: Input
279
- }], tableBuilder: [{
280
- type: Input
281
- }], IndexColumn: [{
282
- type: Input
283
- }], SelectionColumn: [{
284
- type: Input
285
- }], trackBy: [{
286
- type: Input
287
- }], isSticky: [{
288
- type: Input
289
- }], pageSize: [{
290
- type: Input
291
- }], inputFilters: [{
292
- type: Input
293
- }], groupHeaderTemplate: [{
294
- type: Input
295
- }], selection$: [{
296
- type: Output
297
- }], data: [{
298
- type: Output
299
- }], customRows: [{
300
- type: ContentChildren,
301
- args: [MatRowDef]
302
- }], customCells: [{
303
- type: ContentChildren,
304
- args: [CustomCellDirective]
305
- }], OnStateReset: [{
306
- type: Output
307
- }], OnSaveState: [{
308
- type: Output
309
- }], state$: [{
310
- type: Output
311
- }] } });
312
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFDTixlQUFlLEVBRWYsdUJBQXVCLEVBQ3ZCLE1BQU0sRUFFTixRQUFRLEdBRVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBYyxJQUFJLEVBQUUsYUFBYSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN0RixPQUFPLEVBQW1CLFNBQVMsRUFBWSxNQUFNLDZCQUE2QixDQUFDO0FBQ25GLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEcsT0FBTyxFQUFFLGVBQWUsSUFBSSxTQUFTLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsMEJBQTBCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RyxPQUFPLEVBQUcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFB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QU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE91dHB1dCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBRdWVyeUxpc3QsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBJbmplY3QsXG4gIFByZWRpY2F0ZSxcbiAgT3B0aW9uYWwsXG4gIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgZnJvbSwgUmVwbGF5U3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcnJheUFkZGl0aW9uYWwsIEZpZWxkVHlwZSwgTWV0YURhdGEgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlcG9ydC1kZWYnO1xuaW1wb3J0IHsgZmlyc3QsIGxhc3QsIG1hcCwgc3dpdGNoTWFwLCB0YXAsIHdpdGhMYXRlc3RGcm9tLCBtZXJnZUFsbCwgc2NhbiB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRhYmxlQnVpbGRlciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvdGFibGUtYnVpbGRlcic7XG5pbXBvcnQgeyBNYXRMZWdhY3lSb3dEZWYgYXMgTWF0Um93RGVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LXRhYmxlJztcbmltcG9ydCB7IEN1c3RvbUNlbGxEaXJlY3RpdmUsIFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlLCBUYWJsZUZpbHRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgIHN0YXRlSXMsIFRhYmxlU3RvcmUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RhYmxlLXN0b3JlJztcbmltcG9ydCB7IERhdGFGaWx0ZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2RhdGEtZmlsdGVyJztcbmltcG9ydCB7IGNvbWJpbmVBcnJheXMsIG1hcEFycmF5LCBub3ROdWxsIH0gZnJvbSAnLi4vLi4vLi4vcnhqcy9yeGpzLW9wZXJhdG9ycyc7XG5pbXBvcnQgeyBFeHBvcnRUb0NzdlNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leHBvcnQtdG8tY3N2LnNlcnZpY2UnO1xuaW1wb3J0IHsgQXJyYXlEZWZhdWx0cyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvRGVmYXVsdFNldHRpbmdzJztcbmltcG9ydCB7IFRhYmxlQnVpbGRlckNvbmZpZywgVGFibGVCdWlsZGVyQ29uZmlnVG9rZW4gfSBmcm9tICcuLi8uLi9jbGFzc2VzL1RhYmxlQnVpbGRlckNvbmZpZyc7XG5pbXBvcnQgKiBhcyBzZWxlY3RvcnMgZnJvbSAnLi4vLi4vbmdyeC9zZWxlY3RvcnMnO1xuaW1wb3J0IHsgc2VsZWN0LCBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IGRlbGV0ZUxvY2FsUHJvZmlsZXNTdGF0ZSwgc2V0TG9jYWxQcm9maWxlLCBzZXRMb2NhbFByb2ZpbGVzU3RhdGUgfSBmcm9tICcuLi8uLi9uZ3J4L2FjdGlvbnMnO1xuaW1wb3J0IHsgR3JvdXAsIEluaXRpYWxpemF0aW9uU3RhdGUsIFBlcnNpc3RlZFRhYmxlU3RhdGUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL1RhYmxlU3RhdGUnO1xuaW1wb3J0IHsgc29ydERhdGEgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvc29ydC1kYXRhLWZ1bmN0aW9uJztcbmltcG9ydCB7IFdyYXBwZXJGaWx0ZXJTdG9yZSB9IGZyb20gJy4uL3RhYmxlLWNvbnRhaW5lci1maWx0ZXIvdGFibGUtd3JhcHBlci1maWx0ZXItc3RvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBncm91cEJ5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IENvbHVtbkluZm8gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0NvbHVtbkluZm8nO1xuaW1wb3J0IHsgZGVmYXVsdFNoYXJlUmVwbGF5IH0gZnJvbSAnLi4vLi4vLi4vcnhqcyc7XG5pbXBvcnQgeyBmbGF0dGVuRGVlcCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBjcmVhdGVGaWx0ZXJGdW5jLCBpc0N1c3RvbUZpbHRlciwgaXNGaWx0ZXJJbmZvIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9maWx0ZXItaW5mbyc7XG5pbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9kaWN0aW9uYXJ5JztcbmltcG9ydCB7IFRhYmxlV3JhcHBlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvdGFibGUtd3JhcHBlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgY3JlYXRlTGlua0NyZWF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9saW5rLWNyZWF0b3Iuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RiLXRhYmxlLWNvbnRhaW5lcicsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1jb250YWluZXIuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLWNvbnRhaW5lci5jc3MnLCcuLi8uLi9zdHlsZXMvY29sbGFwc2VyLnN0eWxlcy5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtUYWJsZVN0b3JlLEV4cG9ydFRvQ3N2U2VydmljZSxXcmFwcGVyRmlsdGVyU3RvcmVdXG59KSBleHBvcnQgY2xhc3MgVGFibGVDb250YWluZXJDb21wb25lbnQ8VCA9IGFueT4ge1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oVGFibGVDdXN0b21GaWx0ZXJEaXJlY3RpdmUsIHtkZXNjZW5kYW50czogdHJ1ZX0pIGN1c3RvbUZpbHRlcnMhOiBRdWVyeUxpc3Q8VGFibGVDdXN0b21GaWx0ZXJEaXJlY3RpdmU+O1xuICBAQ29udGVudENoaWxkcmVuKFRhYmxlRmlsdGVyRGlyZWN0aXZlLCB7ZGVzY2VuZGFudHM6IHRydWV9KSBmaWx0ZXJzITogUXVlcnlMaXN0PFRhYmxlRmlsdGVyRGlyZWN0aXZlPjtcblxuICBASW5wdXQoKSB0YWJsZUlkITogc3RyaW5nO1xuICBASW5wdXQoKSB0YWJsZUJ1aWxkZXIhOiBUYWJsZUJ1aWxkZXI7XG4gIEBJbnB1dCgpIEluZGV4Q29sdW1uID0gZmFsc2U7XG4gIEBJbnB1dCgpIFNlbGVjdGlvbkNvbHVtbiA9IGZhbHNlO1xuICBASW5wdXQoKSB0cmFja0J5ITogc3RyaW5nO1xuICBASW5wdXQoKSBpc1N0aWNreSA9IHRydWU7XG4gIEBJbnB1dCgpIHNldCBwYWdlU2l6ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5zdGF0ZS5zZXRQYWdlU2l6ZSh2YWx1ZSk7XG4gIH1cbiAgQElucHV0KCkgaW5wdXRGaWx0ZXJzPzogT2JzZXJ2YWJsZTxBcnJheTxQcmVkaWNhdGU8VD4+PjtcbiAgQElucHV0KCkgZ3JvdXBIZWFkZXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBPdXRwdXQoKSBzZWxlY3Rpb24kID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBkYXRhU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PE9ic2VydmFibGU8VFtdPj4oMSk7XG4gIEBPdXRwdXQoKSBkYXRhID0gdGhpcy5kYXRhU3ViamVjdC5waXBlKFxuICAgIHN3aXRjaE1hcCggZCA9PiBkKSxcbiAgICBkZWZhdWx0U2hhcmVSZXBsYXkoKSxcbiAgKTtcblxuICBAQ29udGVudENoaWxkcmVuKE1hdFJvd0RlZikgY3VzdG9tUm93cyE6IFF1ZXJ5TGlzdDxNYXRSb3dEZWY8YW55Pj47XG5cbiAgQENvbnRlbnRDaGlsZHJlbihDdXN0b21DZWxsRGlyZWN0aXZlKSBjdXN0b21DZWxscyE6IFF1ZXJ5TGlzdDxDdXN0b21DZWxsRGlyZWN0aXZlPjtcbiAgQE91dHB1dCgpIE9uU3RhdGVSZXNldCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIE9uU2F2ZVN0YXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc3RhdGUkIDogT2JzZXJ2YWJsZTxQZXJzaXN0ZWRUYWJsZVN0YXRlPjtcblxuICBteUNvbHVtbnMkITogT2JzZXJ2YWJsZTxDb2x1bW5JbmZvW10+O1xuXG4gIHN0YXRlS2V5cyQ/OiBPYnNlcnZhYmxlPHN0cmluZ1tdIHwgbnVsbD47XG4gIGN1cnJlbnRTdGF0ZUtleSQ/OiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgZGlzYWJsZVNvcnQhOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzdGF0ZTogVGFibGVTdG9yZSxcbiAgICBwdWJsaWMgZXhwb3J0VG9Dc3ZTZXJ2aWNlOiBFeHBvcnRUb0NzdlNlcnZpY2U8VD4sXG4gICAgQEluamVjdChUYWJsZUJ1aWxkZXJDb25maWdUb2tlbikgcHJpdmF0ZSBjb25maWc6IFRhYmxlQnVpbGRlckNvbmZpZyxcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZTxhbnk+LFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgd3JhcHBlcjogVGFibGVXcmFwcGVyRGlyZWN0aXZlLFxuICApIHtcbiAgICAgdGhpcy5zdGF0ZS5vbiggdGhpcy5zdGF0ZS5nZXRTYXZhYmxlU3RhdGUoKS5waXBlKGxhc3QoKSksIGZpbmFsU3RhdGUgPT4ge1xuICAgICAgaWYodGhpcy50YWJsZUlkKSB7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goc2V0TG9jYWxQcm9maWxlKHtrZXk6dGhpcy50YWJsZUlkLHZhbHVlOiBmaW5hbFN0YXRlfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuc3RhdGUkID0gdGhpcy5zdGF0ZS5nZXRTYXZhYmxlU3RhdGUoKS5waXBlKFxuICAgICAgbWFwKHN0YXRlID0+IGNsb25lRGVlcChzdGF0ZSkpLFxuICAgICAgZGVmYXVsdFNoYXJlUmVwbGF5KCksXG4gICAgKTtcbiAgfVxuXG4gIHJlc2V0U3RhdGUoKSB7XG4gICAgdGhpcy5jdXN0b21GaWx0ZXJzLmZvckVhY2goIGNmID0+IGNmLnJlc2V0KCkpO1xuICAgIHRoaXMuZmlsdGVycy5mb3JFYWNoKCBjZiA9PiBjZi5yZXNldCgpICk7XG4gICAgdGhpcy5zdGF0ZS5yZXNldFN0YXRlKCk7XG4gICAgdGhpcy5PblN0YXRlUmVzZXQubmV4dChudWxsKVxuICB9XG5cbiAgaW5pdGlhbGl6ZVN0YXRlKCkge1xuICAgIHRoaXMuc3RhdGUuc2V0VGFibGVTZXR0aW5ncyh0aGlzLnRhYmxlQnVpbGRlci5zZXR0aW5ncyk7XG4gICAgdGhpcy5zdGF0ZS5ydW5PbmNlV2hlbihzdGF0ZUlzKEluaXRpYWxpemF0aW9uU3RhdGUuTWV0YURhdGFMb2FkZWQpLCBzdGF0ZSA9PiB7XG4gICAgICBpZih0aGlzLnRhYmxlSWQpIHtcbiAgICAgICAgY29uc3QgcGVyc2lzdGVkU3RhdGUkID0gdGhpcy5zdG9yZS5waXBlKFxuICAgICAgICAgIHNlbGVjdChzZWxlY3RvcnMuc2VsZWN0TG9jYWxQcm9maWxlU3RhdGU8YW55Pih0aGlzLnRhYmxlSWQpICksXG4gICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICB0YXAoIHBlcnNpc3RlZFN0YXRlID0+IHtcbiAgICAgICAgICAgIGlmKCFwZXJzaXN0ZWRTdGF0ZSkge1xuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnNldEludGlhbGl6YXRpb25TdGF0ZShJbml0aWFsaXphdGlvblN0YXRlLkxvYWRlZEZyb21TdG9yZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbm90TnVsbCgpLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN0YXRlLnVwZGF0ZVN0YXRlRnJvbVBlcnNpc3RlZFN0YXRlKHBlcnNpc3RlZFN0YXRlJCk7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUuc2V0SW50aWFsaXphdGlvblN0YXRlKEluaXRpYWxpemF0aW9uU3RhdGUuTG9hZGVkRnJvbVN0b3JlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBjdXN0b21GaWx0ZXJzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UHJlZGljYXRlPGFueT5bXT4oW10pO1xuICBpbml0aWFsaXplRGF0YSgpIHtcblxuXG4gICAgdmFyIGFsbEZpbHRlcnMgPSB0aGlzLmlucHV0RmlsdGVycyA/IGNvbWJpbmVBcnJheXMoW1xuICAgICAgdGhpcy5jdXN0b21GaWx0ZXJzJCxcbiAgICAgIHRoaXMuaW5wdXRGaWx0ZXJzXG4gICAgXSkgOiB0aGlzLmN1c3RvbUZpbHRlcnMkO1xuXG4gICAgY29uc3QgZmlsdGVycyQgPSB0aGlzLnN0YXRlLmZpbHRlcnMkLnBpcGUobWFwKCBmaWx0ZXJzID0+IE9iamVjdC52YWx1ZXMoZmlsdGVycykgKSlcblxuICAgIGNvbnN0IGRhdGEgPSBuZXcgRGF0YUZpbHRlcihhbGxGaWx0ZXJzKVxuICAgICAgLmFwcGVuZEZpbHRlcnMoZmlsdGVycyQpXG4gICAgICAuZmlsdGVyRGF0YSh0aGlzLnRhYmxlQnVpbGRlci5nZXREYXRhJCgpKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoZGF0YSA9PiB0aGlzLnN0YXRlLmdyb3VwQnlLZXlzJC5waXBlKFxuICAgICAgICAgIG1hcChncm91cEJ5ID0+IHRoaXMuZ2V0RGF0YShkYXRhLCBncm91cEJ5KSksXG4gICAgICAgICkucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoZGF0YSA9PiB0aGlzLnN0YXRlLmdyb3VwcyQucGlwZShcbiAgICAgICAgICAgIG1hcChncm91cHMgPT4gdGhpcy5zZXREaXNwbGF5KGRhdGEsIGdyb3VwcykpXG4gICAgICAgICAgKSlcbiAgICAgICAgKSlcbiAgICAgICk7XG5cbiAgICB0aGlzLmRhdGFTdWJqZWN0Lm5leHQoZGF0YSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXRpYWxpemVTdGF0ZSgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZURhdGEoKTtcblxuICAgIGlmKHRoaXMudGFibGVJZCkge1xuICAgICAgdGhpcy5zdGF0ZUtleXMkID0gdGhpcy5zdG9yZS5zZWxlY3Qoc2VsZWN0b3JzLnNlbGVjdExvY2FsUHJvZmlsZUtleXModGhpcy50YWJsZUlkKSk7XG4gICAgICB0aGlzLmN1cnJlbnRTdGF0ZUtleSQgPSB0aGlzLnN0b3JlLnNlbGVjdChzZWxlY3RvcnMuc2VsZWN0TG9jYWxQcm9maWxlQ3VycmVudEtleSh0aGlzLnRhYmxlSWQpKTtcbiAgICB9XG4gIH1cblxuICBleHBvcnRUb0NzdigpOiB2b2lkIHtcbiAgICBjb25zdCBzb3J0ZWQgPSB0aGlzLmRhdGEucGlwZShcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuc3RhdGUuc29ydGVkJCksXG4gICAgICBtYXAoKFtkYXRhLCBzb3J0ZWRdKSA9PiBzb3J0RGF0YShkYXRhLCBzb3J0ZWQpKVxuICAgICk7XG4gICAgdGhpcy5leHBvcnRUb0NzdlNlcnZpY2UuZXhwb3J0VG9Dc3Yoc29ydGVkKTtcbiAgfVxuXG4gIHNhdmVTdGF0ZSgpIHtcbiAgICB0aGlzLnN0YXRlLmdldFNhdmFibGVTdGF0ZSgpLnBpcGUoXG4gICAgICBmaXJzdCgpXG4gICAgKS5zdWJzY3JpYmUoIHRhYmxlU3RhdGUgPT4ge1xuICAgICAgdGhpcy5PblNhdmVTdGF0ZS5uZXh0KG51bGwpO1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChzZXRMb2NhbFByb2ZpbGUoeyBrZXk6IHRoaXMudGFibGVJZCwgdmFsdWU6dGFibGVTdGF0ZSwgcGVyc2lzdDogdHJ1ZX0gKSk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRQcm9maWxlU3RhdGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKHNldExvY2FsUHJvZmlsZXNTdGF0ZSh7a2V5OnRoaXMudGFibGVJZCwgY3VycmVudDogdmFsfSkpO1xuICB9XG5cbiAgZGVsZXRlUHJvZmlsZVN0YXRlKHN0YXRlS2V5OiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGRlbGV0ZUxvY2FsUHJvZmlsZXNTdGF0ZSh7a2V5OnRoaXMudGFibGVJZCwgc3RhdGVLZXl9KSk7XG4gIH1cblxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLkluaXRpYWxpemVDb2x1bW5zKCk7XG5cbiAgICB0aGlzLnN0YXRlLnJ1bk9uY2VXaGVuKHN0YXRlSXMoSW5pdGlhbGl6YXRpb25TdGF0ZS5Mb2FkZWRGcm9tU3RvcmUpLCBzdGF0ZSA9PiB7XG5cbiAgICAgIHZhciBhbGxGaWx0ZXJzID0gWy4uLnRoaXMuZmlsdGVycywgLi4udGhpcy5jdXN0b21GaWx0ZXJzXTtcbiAgICAgIGlmKHRoaXMud3JhcHBlcikge1xuICAgICAgICBhbGxGaWx0ZXJzID0gWy4uLmFsbEZpbHRlcnMsIC4uLnRoaXMud3JhcHBlci5jdXN0b21GaWx0ZXJzLCAuLi50aGlzLndyYXBwZXIuZmlsdGVycywgLi4udGhpcy53cmFwcGVyLnJlZ2lzdGVyYXRpb25zXTtcbiAgICAgIH1cblxuICAgICAgdmFyIGN1c3RvbUZpbHRlcnM6IChUYWJsZUN1c3RvbUZpbHRlckRpcmVjdGl2ZXxUYWJsZUZpbHRlckRpcmVjdGl2ZSApW10gPSBbXTtcblxuICAgICAgYWxsRmlsdGVycy5maWx0ZXIoIGYgPT4gIWYudXNlZCkuZm9yRWFjaCggZiA9PiB7XG4gICAgICAgIGYudXNlZCA9IHRydWU7XG4gICAgICAgIGlmKGYuc2F2YWJsZSkge1xuICAgICAgICAgIHZhciBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2YuZmlsdGVySWRdO1xuICAgICAgICAgIGlmKGlzRmlsdGVySW5mbyhmaWx0ZXIpKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJEaXJlY3RpdmU6IFRhYmxlRmlsdGVyRGlyZWN0aXZlID0gZiBhcyBUYWJsZUZpbHRlckRpcmVjdGl2ZTtcbiAgICAgICAgICAgIGZpbHRlckRpcmVjdGl2ZS5maWVsZFR5cGUgPSBmaWx0ZXIuZmllbGRUeXBlO1xuICAgICAgICAgICAgZmlsdGVyRGlyZWN0aXZlLmZpbHRlclR5cGUgPSBmaWx0ZXIuZmlsdGVyVHlwZTtcbiAgICAgICAgICAgIGZpbHRlckRpcmVjdGl2ZS5zZXRGaWx0ZXJWYWx1ZShmaWx0ZXIuZmlsdGVyVmFsdWUpO1xuICAgICAgICAgICAgZmlsdGVyRGlyZWN0aXZlLmtleSA9IGZpbHRlci5rZXk7XG4gICAgICAgICAgICBmaWx0ZXJEaXJlY3RpdmUudXBkYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGlzQ3VzdG9tRmlsdGVyKGZpbHRlcikpIHtcbiAgICAgICAgICAgIGYuYWN0aXZlID0gZmlsdGVyLmFjdGl2ZSA/PyBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zdGF0ZS5hZGRGaWx0ZXIoZi5maWx0ZXIkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXN0b21GaWx0ZXJzLnB1c2goZik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBmaWx0ZXJzJCA9ICBmcm9tKCBjdXN0b21GaWx0ZXJzLm1hcCggY2YgPT4gY2YuZmlsdGVyJCAgKSkucGlwZShcbiAgICAgICAgbWVyZ2VBbGwoKSxcbiAgICAgICAgc2NhbiggKGEsYik9PiB7XG4gICAgICAgICAgICBpZihiLmFjdGl2ZSkge1xuICAgICAgICAgICAgICBhW2IuZmlsdGVySWRdID0gaXNDdXN0b21GaWx0ZXIoYikgPyBiLnByZWRpY2F0ZSA6IGNyZWF0ZUZpbHRlckZ1bmMoYik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkZWxldGUgYVtiLmZpbHRlcklkXSA7XG4gICAgICAgICAgICB9XG4gICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfSwge30gYXMgRGljdGlvbmFyeTxQcmVkaWNhdGU8YW55Pj4pLFxuICAgICAgICBtYXAoIGYgPT4gT2JqZWN0LnZhbHVlcyhmKSlcbiAgICAgICk7XG4gICAgICB0aGlzLnN0YXRlLm9uKGZpbHRlcnMkLCAoZikgPT4ge1xuICAgICAgICB0aGlzLmN1c3RvbUZpbHRlcnMkLm5leHQoZik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc3RhdGUudXBkYXRlU3RhdGUoe2luaXRpYWxpemF0aW9uU3RhdGU6IEluaXRpYWxpemF0aW9uU3RhdGUuUmVhZHl9KTtcbiAgICB9KTtcblxuICB9XG5cbiAgSW5pdGlhbGl6ZUNvbHVtbnMoKSB7XG4gICAgY29uc3QgY3VzdG9tQ2VsbE1hcCA9IG5ldyBNYXAodGhpcy5jdXN0b21DZWxscy5tYXAoY2MgPT4gW2NjLmN1c3RvbUNlbGwsY2NdKSk7XG4gICAgdGhpcy5zdGF0ZS5zZXRNZXRhRGF0YSh0aGlzLnRhYmxlQnVpbGRlci5tZXRhRGF0YSQhLnBpcGUoXG4gICAgICBtYXAoKG1kcykgPT4ge1xuICAgICAgICBtZHMgPSBtZHMubWFwKHRoaXMubWFwTWV0YURhdGFzKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAuLi5tZHMsXG4gICAgICAgICAgLi4udGhpcy5jdXN0b21DZWxscy5tYXAoIGNjID0+IGNjLmdldE1ldGFEYXRhKG1kcy5maW5kKCBpdGVtID0+IGl0ZW0ua2V5ID09PSBjYy5jdXN0b21DZWxsICkpIClcbiAgICAgICAgXVxuICAgICAgfSlcbiAgICApKTtcbiAgICB0aGlzLnN0YXRlLnNldExpbmtNYXBzKHRoaXMudGFibGVCdWlsZGVyLm1ldGFEYXRhJCEucGlwZShcbiAgICAgIG1hcCgobWRzKSA9PiB7XG4gICAgICAgIHJldHVybiBtZHMucmVkdWNlKChhY2MsIG1kKSA9PiB7XG4gICAgICAgICAgaWYobWQuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuTGluayl7IGFjY1ttZC5rZXldPSBjcmVhdGVMaW5rQ3JlYXRvcihtZCl9XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSx7fSlcbiAgICAgIH0pXG4gICAgKSlcblxuICAgIHRoaXMubXlDb2x1bW5zJCA9IHRoaXMuc3RhdGUubWV0YURhdGFBcnJheSQucGlwZShcbiAgICAgIG1hcEFycmF5KCBtZXRhRGF0YSA9PiAoe21ldGFEYXRhLCBjdXN0b21DZWxsOiBjdXN0b21DZWxsTWFwLmdldChtZXRhRGF0YS5rZXkpIX0pKVxuICAgICk7XG4gIH1cbiAgbWFwTWV0YURhdGFzID0gKG1ldGEgOiBNZXRhRGF0YTxUPikgPT4ge1xuICAgIGlmKG1ldGEuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQXJyYXkpe1xuICAgICAgY29uc3QgYWRkaXRpb25hbCA9IHsuLi5tZXRhLmFkZGl0aW9uYWx9IGFzIEFycmF5QWRkaXRpb25hbDtcbiAgICAgIGFkZGl0aW9uYWwuYXJyYXlTdHlsZSA9IGFkZGl0aW9uYWw/LmFycmF5U3R5bGUgPz8gQXJyYXlEZWZhdWx0cy5hcnJheVN0eWxlO1xuICAgICAgYWRkaXRpb25hbC5saW1pdCA9IGFkZGl0aW9uYWwubGltaXQgPz8gdGhpcy5jb25maWcuYXJyYXlJbmZvPy5saW1pdCA/PyBBcnJheURlZmF1bHRzLmxpbWl0O1xuICAgICAgcmV0dXJuIHsuLi5tZXRhLGFkZGl0aW9uYWx9XG4gICAgfVxuICAgIHJldHVybiBtZXRhO1xuICB9XG5cbiAgY29sbGFwc2VIZWFkZXIkID0gdGhpcy5zdGF0ZS5zdGF0ZSQucGlwZShtYXAoc3RhdGUgPT4gc3RhdGUucGVyc2lzdGVkVGFibGVTZXR0aW5ncy5jb2xsYXBzZUhlYWRlcikpO1xuXG4gIGdldERhdGEoZGF0YTogYW55W10sIGdyb3VwQnlLZXlzOiBzdHJpbmdbXSk6IGFueVtdIHtcbiAgICBpZiAoIWdyb3VwQnlLZXlzLmxlbmd0aCkge1xuICAgICAgdGhpcy5kaXNhYmxlU29ydCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHRoaXMuZGlzYWJsZVNvcnQgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzLnRiR3JvdXBCeShkYXRhLCBncm91cEJ5S2V5cyk7XG4gIH1cblxuICB0Ykdyb3VwQnkgPSAoZGF0YTogYW55W10sIGdyb3VwQnlLZXlzOiBzdHJpbmdbXSwgcGFyZW50R3JvdXBOYW1lPzogYW55KTogYW55W10gPT4ge1xuICAgIGxldCByZXMgPSB7fTtcbiAgICByZXMgPSBncm91cEJ5KGRhdGEsIGdyb3VwQnlLZXlzWzBdKTtcbiAgICBjb25zdCByZW1haW5pbmdHcm91cEJ5S2V5cyA9IGdyb3VwQnlLZXlzLnNsaWNlKDEpO1xuICAgIGlmIChyZW1haW5pbmdHcm91cEJ5S2V5cy5sZW5ndGgpIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlcykuZm9yRWFjaChrZXkgPT4gcmVzW2tleV0gPSB0aGlzLnRiR3JvdXBCeShyZXNba2V5XSwgcmVtYWluaW5nR3JvdXBCeUtleXMsIGtleSkpXG4gICAgfVxuICAgIHJldHVybiBmbGF0dGVuRGVlcChPYmplY3Qua2V5cyhyZXMpLm1hcChncm91cE5hbWUgPT4ge1xuICAgICAgY29uc3QgdW5pcU5hbWUgPSBwYXJlbnRHcm91cE5hbWUgPyBgJHtwYXJlbnRHcm91cE5hbWV9LSR7Z3JvdXBOYW1lfWAgOiBgJHtncm91cE5hbWV9YDtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpc0dyb3VwSGVhZGVyOiB0cnVlLFxuICAgICAgICAgIGdyb3VwSGVhZGVyTmFtZTogYCR7Z3JvdXBOYW1lfSAoJHtyZXNbZ3JvdXBOYW1lXT8uZmlsdGVyKHJvdyA9PiAhcm93LmlzR3JvdXBIZWFkZXIpPy5sZW5ndGh9KWAsXG4gICAgICAgICAgZGF0YTogcmVzW2dyb3VwTmFtZV0sXG4gICAgICAgICAgZ3JvdXBOYW1lOiB1bmlxTmFtZSxcbiAgICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgIH0sXG4gICAgICAgIChyZXNbZ3JvdXBOYW1lXSBhcyBhbnlbXSk/Lm1hcChkID0+ICh7IC4uLmQsIHBhcmVudEdyb3VwTmFtZTogZC5wYXJlbnRHcm91cE5hbWUgfHwgdW5pcU5hbWUgfSkpXG4gICAgICBdO1xuICAgIH0pKS5tYXAodGhpcy5hZGRJbmRlbnRhdGlvbik7XG4gIH1cblxuICBhZGRJbmRlbnRhdGlvbiA9IChkOiBhbnkpID0+IHtcbiAgICBpZiAoZC5pc0dyb3VwSGVhZGVyKSB7XG4gICAgICBpZiAoZC5wYWRkaW5nKSB7XG4gICAgICAgIGQucGFkZGluZyArPSAyMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGQucGFkZGluZyA9IDE7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkO1xuICB9XG5cbiAgc2V0RGlzcGxheSA9IChkYXRhOiBhbnlbXSwgZ3JvdXBzOiBHcm91cFtdKTogYW55W10gPT4gZGF0YVxuICAgIC5tYXAoZCA9PiAoe1xuICAgICAgLi4uZCxcbiAgICAgIHNob3VsZERpc3BsYXk6ICFkLnBhcmVudEdyb3VwTmFtZSB8fCB0aGlzLnNob3VsZERpc3BsYXkoZ3JvdXBzLmZpbmQoZyA9PiBnLmdyb3VwTmFtZSA9PSBkLnBhcmVudEdyb3VwTmFtZSksIGdyb3VwcyksXG4gICAgICBpc0V4cGFuZGVkOiBncm91cHMuZmluZChnID0+IGcuZ3JvdXBOYW1lID09IGQuZ3JvdXBOYW1lKT8uaXNFeHBhbmRlZFxuICAgIH0pKVxuICAgIC5maWx0ZXIoZCA9PiBkLnNob3VsZERpc3BsYXkpO1xuXG5cbiAgc2hvdWxkRGlzcGxheSA9IChjdXJyZW50R3JvdXA/OiBHcm91cCwgZ3JvdXBzPzogR3JvdXBbXSk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICghY3VycmVudEdyb3VwPy5pc0V4cGFuZGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50R3JvdXAgPSBncm91cHM/LmZpbmQoZyA9PiBnLmdyb3VwTmFtZSA9PSBjdXJyZW50R3JvdXAucGFyZW50R3JvdXBOYW1lKTtcblxuICAgIGlmIChwYXJlbnRHcm91cCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2hvdWxkRGlzcGxheShwYXJlbnRHcm91cCwgZ3JvdXBzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIiwiPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2JlZm9yZV1cIiA+XG48L25nLWNvbnRlbnQ+XG5cbjxuZy1jb250YWluZXIgbXVsdGlTb3J0IFttYXRTb3J0RGlzYWJsZWRdPVwiZGlzYWJsZVNvcnRcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdyeExldD1cInN0YXRlLnRhYmxlU2V0dGluZ3MkIGFzIHRhYmxlU2V0dGluZ3NcIj5cblxuXG4gICAgPGRpdiBjbGFzcz1cImhlYWRlci13cmFwcGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLnRiLWhlYWRlci10aXRsZVwiXG4gICAgICAgICAgKm5nSWY9XCIoIShjb2xsYXBzZUhlYWRlciQgfCBhc3luYykpIHx8IHRhYmxlU2V0dGluZ3Muc2hvd1RpdGxlV2hlbkhlYWRlckNvbGxhcHNlZFwiPlxuXG4gICAgICAgIDwvbmctY29udGVudD5cbiAgICAgICAgPGdyb3VwLWJ5LWxpc3Q+PC9ncm91cC1ieS1saXN0PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmx4LXJvdy1lbmRcIj5cbiAgICAgICAgPGxpYi1maWx0ZXItbGlzdD48L2xpYi1maWx0ZXItbGlzdD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0YWJsZVNldHRpbmdzLmhpZGVIZWFkZXJcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShjb2xsYXBzZUhlYWRlciQgfCBhc3luYyk7IGVsc2UgYWxsTWVudVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlck1lbnVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNvbG9yPSdwcmltYXJ5JyBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWFpbk1lbnVcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ZsYXQtbWVudSc6KGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKX1cIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPnt7KGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKSA/ICdtb3JlX2hvcml6JyA6ICdtb3JlX3ZlcnQnfX08L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8bWF0LW1lbnUgI21haW5NZW51PSdtYXRNZW51Jz5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlck1lbnVFeHRyYVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2FsbE1lbnU+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj0ncHJpbWFyeScgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1haW5NZW51XCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydmbGF0LW1lbnUnOihjb2xsYXBzZUhlYWRlciQgfCBhc3luYyl9XCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj57eyhjb2xsYXBzZUhlYWRlciQgfCBhc3luYykgPyAnbW9yZV9ob3JpeicgOiAnbW9yZV92ZXJ0J319PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPG1hdC1tZW51ICNtYWluTWVudT0nbWF0TWVudSc+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJNZW51XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyTWVudUV4dHJhXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG1hdC1pY29uIFttYXRUb29sdGlwXT1cIihjb2xsYXBzZUhlYWRlciQgfCBhc3luYykgPyAnZXhwYW5kJyA6ICdjb2xsYXBzZSdcIiBjbGFzcz1cImNvbGxhcHNlLWljb24gaGVhZGVyXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzdGF0ZS50b2dnbGVDb2xsYXBzZUhlYWRlcigpXCI+XG4gICAgICAgICAgICB7eyhjb2xsYXBzZUhlYWRlciQgfCBhc3luYykgPyAnZXhwYW5kX2xlc3MnIDogJ2V4cGFuZF9tb3JlJ319XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgc3R5bGU9XCJjbGVhcjogYm90aDtcIj5cbiAgICAgIDx0Yi1nZW5lcmljLXRhYmxlIFtyb3dzXT0nY3VzdG9tUm93cycgW2RhdGEkXT1cImRhdGFcIiBbSW5kZXhDb2x1bW5dPSdJbmRleENvbHVtbidcbiAgICAgICAgW1NlbGVjdGlvbkNvbHVtbl09J1NlbGVjdGlvbkNvbHVtbicgKHNlbGVjdGlvbiQpPSdzZWxlY3Rpb24kLmVtaXQoJGV2ZW50KScgW3RyYWNrQnldPSd0cmFja0J5J1xuICAgICAgICBbaXNTdGlja3ldPSdpc1N0aWNreScgW2NvbHVtbkluZm9zXT0nbXlDb2x1bW5zJCcgW2Rpc2FibGVTb3J0XT1cImRpc2FibGVTb3J0XCIgW2dyb3VwSGVhZGVyVGVtcGxhdGVdPVwiZ3JvdXBIZWFkZXJUZW1wbGF0ZVwiPlxuICAgICAgPC90Yi1nZW5lcmljLXRhYmxlPlxuICAgIDwvZGl2PlxuXG5cblxuICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyTWVudT5cbiAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgIDx0Yi1maWx0ZXItZGlzcGxheWVyICpuZ0lmPVwiIXRhYmxlU2V0dGluZ3MuaGlkZUZpbHRlclwiPlxuICAgICAgICA8L3RiLWZpbHRlci1kaXNwbGF5ZXI+XG4gICAgICAgIDx0Yi1jb2wtZGlzcGxheWVyICpuZ0lmPVwiIXRhYmxlU2V0dGluZ3MuaGlkZUNvbHVtblNldHRpbmdzXCI+PC90Yi1jb2wtZGlzcGxheWVyPlxuICAgICAgICA8dGItc29ydC1tZW51ICpuZ0lmPVwiIXRhYmxlU2V0dGluZ3MuaGlkZVNvcnRcIj48L3RiLXNvcnQtbWVudT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNoZWFkZXJNZW51RXh0cmE+XG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInJlc2V0U3RhdGUoKVwiPlxuICAgICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCI+YXV0b3JlbmV3PC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+UmVzZXQgdGFibGU8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZXhwb3J0VG9Dc3YoKVwiICpuZ0lmPVwiIXRhYmxlU2V0dGluZ3MuaGlkZUV4cG9ydFwiPlxuICAgICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCI+ZmlsZV9kb3dubG9hZDwvbWF0LWljb24+XG4gICAgICAgIDxzcGFuPkV4cG9ydCBUYWJsZTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRTdGF0ZUtleSQgfCBhc3luYyBhcyBjdXJyZW50S2V5XCI+XG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAqbmdJZj1cInRhYmxlSWRcIiAoY2xpY2spPVwic2F2ZVN0YXRlKClcIj5cbiAgICAgICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCI+c2F2ZTwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+U2F2ZSB0byB7e2N1cnJlbnRLZXl9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKm5nSWY9J3RhYmxlSWQnIG1hdC1tZW51LWl0ZW0gW21hdE1lbnVUcmlnZ2VyRm9yXT1cInNhdmVkTmFtZXNcIj5cbiAgICAgICAgICA8c3Bhbj5DaG9vc2UgUHJvZmlsZTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG1hdC1tZW51ICNzYXZlZE5hbWVzPSdtYXRNZW51JyBwYW5lbENsYXNzPSd3aWRlLW1lbnUnPlxuICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gY2xpY2tFbWl0dGVyICAjYWRkPSdjbGlja0VtaXR0ZXInPlxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgICAgICAgIDxzcGFuPk5ldzwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPSdsZXQga2V5IG9mIHN0YXRlS2V5cyQgfCBhc3luYyc+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9J3NldFByb2ZpbGVTdGF0ZShrZXkpJz5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9J2Rpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsnPlxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0nZGlzcGxheTpmbGV4Oyc+e3trZXl9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9J2Rpc3BsYXk6ZmxleDsnPlxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwid2lkdGg6IDEyMHB4O1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY29sb3I9J3dhcm4nIChjbGljayk9J2RlbGV0ZVByb2ZpbGVTdGF0ZShrZXkpJyBzdG9wLXByb3BhZ2F0aW9uPmRlbGV0ZV9mb3JldmVyPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9tYXQtbWVudT5cbiAgICAgIDxkaXYgKm9wRGlhbG9nPSdhZGQnPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPGlucHV0IHN0eWxlPSd3aWR0aDo5MCUnIG1hdElucHV0ICNhZGRlZEtleSAvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT0nc2V0UHJvZmlsZVN0YXRlKGFkZGVkS2V5LnZhbHVlKTsgYWRkLm5leHQoZmFsc2UpOydcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWFkZGVkS2V5LnZhbHVlXCI+QWRkPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gIDwvbmctY29udGFpbmVyPlxuXG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -1,42 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import { isFilterInfo } from '../../../classes/filter-info';
3
- import { map } from 'rxjs/operators';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "../../../classes/table-store";
6
- import * as i2 from "../table-wrapper-filter-store";
7
- import * as i3 from "@angular/common";
8
- import * as i4 from "@angular/material/legacy-button";
9
- import * as i5 from "@angular/material/legacy-tooltip";
10
- import * as i6 from "@angular/material/icon";
11
- import * as i7 from "@angular/material/legacy-chips";
12
- import * as i8 from "@ngrx/component";
13
- import * as i9 from "../../filter/filter.component";
14
- import * as i10 from "../../../pipes/key-display";
15
- import * as i11 from "../../../pipes/format-filter-value.pipe";
16
- import * as i12 from "../../../pipes/format-filter-type.pipe";
17
- export class FilterChipsComponent {
18
- constructor(tableState, filterStore) {
19
- this.tableState = tableState;
20
- this.filterStore = filterStore;
21
- this.filters$ = this.tableState.filters$.pipe(map(filters => Object.values(filters)
22
- .filter(isFilterInfo)
23
- .filter(f => !f._isExternalyManaged)));
24
- this.currentFilters$ = this.filterStore.currentFilters$;
25
- }
26
- deleteByIndex(index) {
27
- this.filterStore.deleteByIndex(index);
28
- }
29
- addFilter(filter) {
30
- this.filterStore.addFilter(filter);
31
- }
32
- clearAll() {
33
- this.filterStore.clearAll();
34
- }
35
- }
36
- FilterChipsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FilterChipsComponent, deps: [{ token: i1.TableStore }, { token: i2.WrapperFilterStore }], target: i0.ɵɵFactoryTarget.Component });
37
- FilterChipsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: FilterChipsComponent, selector: "lib-filter-list", ngImport: i0, template: "<div style=\"display: flex; flex-direction: row;justify-content: flex-end;\" *ngrxLet=\"currentFilters$ as currentFilters\" >\n\n <button class=\"cancel-button\" *ngIf=\"currentFilters.length\" mat-icon-button (click)=\"clearAll()\"\n matTooltip=\"Close all Filters\">\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\n </button>\n\n\n <div *ngIf=\"currentFilters.length\" class=\"float\">\n <div class=\"filter\" *ngFor=\"let filter of (currentFilters$ | async); index as i;\">\n <tb-filter [filter]=\"filter\" (close)=\"deleteByIndex(i)\" > </tb-filter>\n </div>\n </div>\n\n <mat-chip-list *ngrxLet=\"filters$ as filters\">\n <mat-chip *ngFor=\"let filter of filters\" (dblclick)=\"addFilter(filter)\" (removed)=\"tableState.removeFilter(filter.filterId!)\">\n {{ filter.key | keyDisplay | async }} {{filter.filterType | formatFilterType : filter.filterValue}} {{ filter.filterValue | formatFilterValue: filter.key : filter.filterType | async }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n <mat-chip *ngIf=\"filters.length >= 2\" (removed)=\"tableState.clearFilters()\">\n Clear All\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n </mat-chip-list>\n\n</div>\n", styles: [".filter{margin:15px;display:inline-block}.filter-button{color:#6495ed;font-size:22px;font-weight:700}.cancel-button{font-size:24px;font-weight:700;height:initial;line-height:initial}.filter-wrapper{margin-top:1em;margin-bottom:1em;float:right}.menu{margin-bottom:10px;width:109.1%}.filter-labels{color:#6495ed;font-size:17px;font-weight:600}.float{position:absolute;width:-moz-fit-content;width:fit-content;z-index:101;top:10px;right:180px;max-width:90vw}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatLegacyButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i5.MatLegacyTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatLegacyChipList, selector: "mat-chip-list", inputs: ["role", "aria-describedby", "errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { kind: "directive", type: i7.MatLegacyChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "role", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { kind: "directive", type: i7.MatLegacyChipRemove, selector: "[matChipRemove]" }, { kind: "directive", type: i8.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "component", type: i9.FilterComponent, selector: "tb-filter", inputs: ["filter"], outputs: ["close"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.KeyDisplayPipe, name: "keyDisplay" }, { kind: "pipe", type: i11.FormatFilterValuePipe, name: "formatFilterValue" }, { kind: "pipe", type: i12.FormatFilterTypePipe, name: "formatFilterType" }] });
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FilterChipsComponent, decorators: [{
39
- type: Component,
40
- args: [{ selector: 'lib-filter-list', template: "<div style=\"display: flex; flex-direction: row;justify-content: flex-end;\" *ngrxLet=\"currentFilters$ as currentFilters\" >\n\n <button class=\"cancel-button\" *ngIf=\"currentFilters.length\" mat-icon-button (click)=\"clearAll()\"\n matTooltip=\"Close all Filters\">\n <mat-icon class=\"cancel-button\" color=\"primary\">close</mat-icon>\n </button>\n\n\n <div *ngIf=\"currentFilters.length\" class=\"float\">\n <div class=\"filter\" *ngFor=\"let filter of (currentFilters$ | async); index as i;\">\n <tb-filter [filter]=\"filter\" (close)=\"deleteByIndex(i)\" > </tb-filter>\n </div>\n </div>\n\n <mat-chip-list *ngrxLet=\"filters$ as filters\">\n <mat-chip *ngFor=\"let filter of filters\" (dblclick)=\"addFilter(filter)\" (removed)=\"tableState.removeFilter(filter.filterId!)\">\n {{ filter.key | keyDisplay | async }} {{filter.filterType | formatFilterType : filter.filterValue}} {{ filter.filterValue | formatFilterValue: filter.key : filter.filterType | async }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n <mat-chip *ngIf=\"filters.length >= 2\" (removed)=\"tableState.clearFilters()\">\n Clear All\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n </mat-chip-list>\n\n</div>\n", styles: [".filter{margin:15px;display:inline-block}.filter-button{color:#6495ed;font-size:22px;font-weight:700}.cancel-button{font-size:24px;font-weight:700;height:initial;line-height:initial}.filter-wrapper{margin-top:1em;margin-bottom:1em;float:right}.menu{margin-bottom:10px;width:109.1%}.filter-labels{color:#6495ed;font-size:17px;font-weight:600}.float{position:absolute;width:-moz-fit-content;width:fit-content;z-index:101;top:10px;right:180px;max-width:90vw}\n"] }]
41
- }], ctorParameters: function () { return [{ type: i1.TableStore }, { type: i2.WrapperFilterStore }]; } });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXItZmlsdGVyL2ZpbHRlci1saXN0L2ZpbHRlci1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdXRpbGl0aWVzL3NyYy90YWJsZS1idWlsZGVyL2NvbXBvbmVudHMvdGFibGUtY29udGFpbmVyLWZpbHRlci9maWx0ZXItbGlzdC9maWx0ZXItbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFDLE9BQU8sRUFBNEIsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdEYsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQVNyQyxNQUFNLE9BQU8sb0JBQW9CO0lBRS9CLFlBQW9CLFVBQXNCLEVBQVUsV0FBZ0M7UUFBaEUsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjtRQUdsRixhQUFRLEdBQWtDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDckUsR0FBRyxDQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7YUFDbkIsTUFBTSxDQUFDLFlBQVksQ0FBQzthQUNwQixNQUFNLENBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUN0RCxDQUNGLENBQUM7UUFjRixvQkFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDO0lBckJyRCxDQUFDO0lBU0MsYUFBYSxDQUFDLEtBQWE7UUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFzQjtRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEMsQ0FBQzs7aUhBdEJRLG9CQUFvQjtxR0FBcEIsb0JBQW9CLHVEQ1pqQyx3dkNBMEJBOzJGRGRhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRhYmxlU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL3RhYmxlLXN0b3JlJztcbmltcG9ydCB7IEN1c3RvbUZpbHRlciwgRmlsdGVySW5mbywgaXNGaWx0ZXJJbmZvIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9maWx0ZXItaW5mbyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBXcmFwcGVyRmlsdGVyU3RvcmUgfSBmcm9tICcuLi90YWJsZS13cmFwcGVyLWZpbHRlci1zdG9yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1maWx0ZXItbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXItbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuLi9nZW4tZmlsdGVyLWRpc3BsYXllci9nZW4tZmlsdGVyLWRpc3BsYXllci5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyQ2hpcHNDb21wb25lbnQge1xuXG4gIGNvbnN0cnVjdG9yKCBwdWJsaWMgdGFibGVTdGF0ZTogVGFibGVTdG9yZSwgcHJpdmF0ZSBmaWx0ZXJTdG9yZSA6IFdyYXBwZXJGaWx0ZXJTdG9yZSkge1xuICB9XG5cbiAgICBmaWx0ZXJzJDogT2JzZXJ2YWJsZTxGaWx0ZXJJbmZvPGFueT5bXT4gPSB0aGlzLnRhYmxlU3RhdGUuZmlsdGVycyQucGlwZShcbiAgICAgIG1hcCggZmlsdGVycyA9PiBPYmplY3QudmFsdWVzKGZpbHRlcnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGlzRmlsdGVySW5mbylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoIGYgPT4gIWYuX2lzRXh0ZXJuYWx5TWFuYWdlZClcbiAgICAgIClcbiAgICApO1xuXG4gICAgZGVsZXRlQnlJbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgICB0aGlzLmZpbHRlclN0b3JlLmRlbGV0ZUJ5SW5kZXgoaW5kZXgpO1xuICAgIH1cblxuICAgIGFkZEZpbHRlcihmaWx0ZXI6RmlsdGVySW5mbzxhbnk+KXtcbiAgICAgIHRoaXMuZmlsdGVyU3RvcmUuYWRkRmlsdGVyKGZpbHRlcik7XG4gICAgfVxuXG4gICAgY2xlYXJBbGwoKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyU3RvcmUuY2xlYXJBbGwoKTtcbiAgICB9XG5cbiAgICBjdXJyZW50RmlsdGVycyQgPSB0aGlzLmZpbHRlclN0b3JlLmN1cnJlbnRGaWx0ZXJzJDtcbn1cbiIsIjxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93O2p1c3RpZnktY29udGVudDogZmxleC1lbmQ7XCIgKm5ncnhMZXQ9XCJjdXJyZW50RmlsdGVycyQgYXMgY3VycmVudEZpbHRlcnNcIiA+XG5cbiAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIiAqbmdJZj1cImN1cnJlbnRGaWx0ZXJzLmxlbmd0aFwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiY2xlYXJBbGwoKVwiXG4gICAgbWF0VG9vbHRpcD1cIkNsb3NlIGFsbCBGaWx0ZXJzXCI+XG4gICAgPG1hdC1pY29uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiIGNvbG9yPVwicHJpbWFyeVwiPmNsb3NlPC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG5cblxuICA8ZGl2ICpuZ0lmPVwiY3VycmVudEZpbHRlcnMubGVuZ3RoXCIgY2xhc3M9XCJmbG9hdFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJcIiAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIChjdXJyZW50RmlsdGVycyQgfCBhc3luYyk7IGluZGV4IGFzIGk7XCI+XG4gICAgICA8dGItZmlsdGVyIFtmaWx0ZXJdPVwiZmlsdGVyXCIgKGNsb3NlKT1cImRlbGV0ZUJ5SW5kZXgoaSlcIiA+IDwvdGItZmlsdGVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8bWF0LWNoaXAtbGlzdCAqbmdyeExldD1cImZpbHRlcnMkIGFzIGZpbHRlcnNcIj5cbiAgICA8bWF0LWNoaXAgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBmaWx0ZXJzXCIgKGRibGNsaWNrKT1cImFkZEZpbHRlcihmaWx0ZXIpXCIgIChyZW1vdmVkKT1cInRhYmxlU3RhdGUucmVtb3ZlRmlsdGVyKGZpbHRlci5maWx0ZXJJZCEpXCI+XG4gICAgICB7eyBmaWx0ZXIua2V5IHwga2V5RGlzcGxheSB8IGFzeW5jICB9fSB7e2ZpbHRlci5maWx0ZXJUeXBlIHwgZm9ybWF0RmlsdGVyVHlwZSA6IGZpbHRlci5maWx0ZXJWYWx1ZX19IHt7IGZpbHRlci5maWx0ZXJWYWx1ZSB8IGZvcm1hdEZpbHRlclZhbHVlOiBmaWx0ZXIua2V5IDogZmlsdGVyLmZpbHRlclR5cGUgIHwgYXN5bmMgfX1cbiAgICAgIDxtYXQtaWNvbiBtYXRDaGlwUmVtb3ZlPmNhbmNlbDwvbWF0LWljb24+XG4gICAgPC9tYXQtY2hpcD5cbiAgICA8bWF0LWNoaXAgKm5nSWY9XCJmaWx0ZXJzLmxlbmd0aCA+PSAyXCIgKHJlbW92ZWQpPVwidGFibGVTdGF0ZS5jbGVhckZpbHRlcnMoKVwiPlxuICAgICAgQ2xlYXIgQWxsXG4gICAgICA8bWF0LWljb24gbWF0Q2hpcFJlbW92ZT5jYW5jZWw8L21hdC1pY29uPlxuICAgIDwvbWF0LWNoaXA+XG4gIDwvbWF0LWNoaXAtbGlzdD5cblxuPC9kaXY+XG4iXX0=
@@ -1,30 +0,0 @@
1
- import { Component, ChangeDetectionStrategy } from '@angular/core';
2
- import { FieldType } from '../../../interfaces/report-def';
3
- import { map } from 'rxjs/operators';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "../../../classes/table-store";
6
- import * as i2 from "../table-wrapper-filter-store";
7
- import * as i3 from "@angular/common";
8
- import * as i4 from "@angular/material/legacy-button";
9
- import * as i5 from "@angular/material/legacy-tooltip";
10
- import * as i6 from "@angular/material/legacy-menu";
11
- import * as i7 from "@angular/material/icon";
12
- import * as i8 from "../../../../utilities/directives/stop-propagation.directive";
13
- import * as i9 from "../../../../utilities/pipes/space-case.pipes";
14
- export class GenFilterDisplayerComponent {
15
- constructor(tableState, filterStore) {
16
- this.tableState = tableState;
17
- this.filterStore = filterStore;
18
- this.filterCols$ = tableState.metaDataArray$.pipe(map(md => Object.values(md).filter(m => (m.fieldType !== FieldType.Hidden) && (!m.noFilter))));
19
- }
20
- addFilter(metaData) {
21
- this.filterStore.addFilter({ key: metaData.key, fieldType: metaData.fieldType });
22
- }
23
- }
24
- GenFilterDisplayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: GenFilterDisplayerComponent, deps: [{ token: i1.TableStore }, { token: i2.WrapperFilterStore }], target: i0.ɵɵFactoryTarget.Component });
25
- GenFilterDisplayerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: GenFilterDisplayerComponent, selector: "tb-filter-displayer", ngImport: i0, template: "<button stop-propagation class=\"filter-button\" mat-icon-button [matMenuTriggerFor]=\"menu\" matTooltip=\"Add Filter\">\n <mat-icon class=\"filter-icon\" color=\"primary\">filter_list</mat-icon>\n</button>\n<mat-menu #menu=\"matMenu\">\n <button class=\"filter-labels\" *ngFor=\"let md of filterCols$ | async\" (click)=\"addFilter(md)\" mat-menu-item>\n {{md.displayName || (md.key | spaceCase)}}\n </button>\n</mat-menu>\n", styles: [".filter{margin:15px;display:inline-block}.filter-button{color:#6495ed;font-size:22px;font-weight:700}.cancel-button{font-size:24px;font-weight:700;height:initial;line-height:initial}.filter-wrapper{margin-top:1em;margin-bottom:1em;float:right}.menu{margin-bottom:10px;width:109.1%}.filter-labels{color:#6495ed;font-size:17px;font-weight:600}.float{position:absolute;width:-moz-fit-content;width:fit-content;z-index:101;top:10px;right:180px;max-width:90vw}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i4.MatLegacyButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i5.MatLegacyTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i6.MatLegacyMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i6.MatLegacyMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6.MatLegacyMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.SpaceCasePipe, name: "spaceCase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: GenFilterDisplayerComponent, decorators: [{
27
- type: Component,
28
- args: [{ selector: 'tb-filter-displayer', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button stop-propagation class=\"filter-button\" mat-icon-button [matMenuTriggerFor]=\"menu\" matTooltip=\"Add Filter\">\n <mat-icon class=\"filter-icon\" color=\"primary\">filter_list</mat-icon>\n</button>\n<mat-menu #menu=\"matMenu\">\n <button class=\"filter-labels\" *ngFor=\"let md of filterCols$ | async\" (click)=\"addFilter(md)\" mat-menu-item>\n {{md.displayName || (md.key | spaceCase)}}\n </button>\n</mat-menu>\n", styles: [".filter{margin:15px;display:inline-block}.filter-button{color:#6495ed;font-size:22px;font-weight:700}.cancel-button{font-size:24px;font-weight:700;height:initial;line-height:initial}.filter-wrapper{margin-top:1em;margin-bottom:1em;float:right}.menu{margin-bottom:10px;width:109.1%}.filter-labels{color:#6495ed;font-size:17px;font-weight:600}.float{position:absolute;width:-moz-fit-content;width:fit-content;z-index:101;top:10px;right:180px;max-width:90vw}\n"] }]
29
- }], ctorParameters: function () { return [{ type: i1.TableStore }, { type: i2.WrapperFilterStore }]; } });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuLWZpbHRlci1kaXNwbGF5ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXItZmlsdGVyL2dlbi1maWx0ZXItZGlzcGxheWVyL2dlbi1maWx0ZXItZGlzcGxheWVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdXRpbGl0aWVzL3NyYy90YWJsZS1idWlsZGVyL2NvbXBvbmVudHMvdGFibGUtY29udGFpbmVyLWZpbHRlci9nZW4tZmlsdGVyLWRpc3BsYXllci9nZW4tZmlsdGVyLWRpc3BsYXllci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBWSxTQUFTLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUdyRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBU3JDLE1BQU0sT0FBTywyQkFBMkI7SUFFdEMsWUFBb0IsVUFBc0IsRUFBUyxXQUFnQztRQUEvRCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQVMsZ0JBQVcsR0FBWCxXQUFXLENBQXFCO1FBQ2pGLElBQUksQ0FBQyxXQUFXLEdBQUksVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQ2hELEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUUsRUFBRSxDQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FDaEcsQ0FBQztJQUNKLENBQUM7SUFJQyxTQUFTLENBQUMsUUFBa0I7UUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVMsRUFBQyxDQUFDLENBQUM7SUFDakYsQ0FBQzs7d0hBWlEsMkJBQTJCOzRHQUEzQiwyQkFBMkIsMkRDYnhDLGdiQVFBOzJGREthLDJCQUEyQjtrQkFOdkMsU0FBUzsrQkFDSSxxQkFBcUIsbUJBR2QsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1ldGFEYXRhLCBGaWVsZFR5cGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL3JlcG9ydC1kZWYnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVGFibGVTdG9yZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvdGFibGUtc3RvcmUnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgV3JhcHBlckZpbHRlclN0b3JlIH0gZnJvbSAnLi4vdGFibGUtd3JhcHBlci1maWx0ZXItc3RvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RiLWZpbHRlci1kaXNwbGF5ZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9nZW4tZmlsdGVyLWRpc3BsYXllci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZ2VuLWZpbHRlci1kaXNwbGF5ZXIuY29tcG9uZW50LmNzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEdlbkZpbHRlckRpc3BsYXllckNvbXBvbmVudCB7XG5cbiAgY29uc3RydWN0b3IoIHB1YmxpYyB0YWJsZVN0YXRlOiBUYWJsZVN0b3JlLCBwdWJsaWMgZmlsdGVyU3RvcmUgOiBXcmFwcGVyRmlsdGVyU3RvcmUpIHtcbiAgICB0aGlzLmZpbHRlckNvbHMkID0gIHRhYmxlU3RhdGUubWV0YURhdGFBcnJheSQucGlwZShcbiAgICAgIG1hcChtZCA9PiBPYmplY3QudmFsdWVzKCBtZCApLmZpbHRlcihtID0+IChtLmZpZWxkVHlwZSAhPT0gRmllbGRUeXBlLkhpZGRlbikgJiYgKCFtLm5vRmlsdGVyKSkpLFxuICAgICk7XG4gIH1cblxuICAgIGZpbHRlckNvbHMkOiBPYnNlcnZhYmxlPE1ldGFEYXRhW10+O1xuXG4gICAgYWRkRmlsdGVyKG1ldGFEYXRhOiBNZXRhRGF0YSkge1xuICAgICAgdGhpcy5maWx0ZXJTdG9yZS5hZGRGaWx0ZXIoe2tleTogbWV0YURhdGEua2V5LCBmaWVsZFR5cGU6IG1ldGFEYXRhLmZpZWxkVHlwZX0pO1xuICAgIH1cbn1cbiIsIjxidXR0b24gc3RvcC1wcm9wYWdhdGlvbiBjbGFzcz1cImZpbHRlci1idXR0b25cIiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBtYXRUb29sdGlwPVwiQWRkIEZpbHRlclwiPlxuICA8bWF0LWljb24gY2xhc3M9XCJmaWx0ZXItaWNvblwiIGNvbG9yPVwicHJpbWFyeVwiPmZpbHRlcl9saXN0PC9tYXQtaWNvbj5cbjwvYnV0dG9uPlxuPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxuICA8YnV0dG9uIGNsYXNzPVwiZmlsdGVyLWxhYmVsc1wiICpuZ0Zvcj1cImxldCBtZCBvZiBmaWx0ZXJDb2xzJCB8IGFzeW5jXCIgKGNsaWNrKT1cImFkZEZpbHRlcihtZClcIiBtYXQtbWVudS1pdGVtPlxuICAgIHt7bWQuZGlzcGxheU5hbWUgfHwgKG1kLmtleSB8IHNwYWNlQ2FzZSl9fVxuICA8L2J1dHRvbj5cbjwvbWF0LW1lbnU+XG4iXX0=
@@ -1,25 +0,0 @@
1
- import { Injectable } from "@angular/core";
2
- import { ComponentStore } from "@ngrx/component-store";
3
- import { map } from "rxjs/operators";
4
- import * as i0 from "@angular/core";
5
- export class WrapperFilterStore extends ComponentStore {
6
- constructor() {
7
- super({ filterInfo: [] });
8
- this.clearAll = this.updater(() => ({ filterInfo: [] }));
9
- this.deleteByIndex = this.updater((state, index) => {
10
- const arr = [...state.filterInfo];
11
- arr.splice(index, 1);
12
- return { filterInfo: arr };
13
- });
14
- this.currentFilters$ = this.state$.pipe(map(state => state.filterInfo));
15
- this.addFilter = this.updater((state, filter) => {
16
- return ({ ...state, filterInfo: [...state.filterInfo, filter] });
17
- });
18
- }
19
- }
20
- WrapperFilterStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: WrapperFilterStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
21
- WrapperFilterStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: WrapperFilterStore });
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: WrapperFilterStore, decorators: [{
23
- type: Injectable
24
- }], ctorParameters: function () { return []; } });
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtd3JhcHBlci1maWx0ZXItc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jb21wb25lbnRzL3RhYmxlLWNvbnRhaW5lci1maWx0ZXIvdGFibGUtd3JhcHBlci1maWx0ZXItc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUdyQyxNQUFNLE9BQU8sa0JBQW9CLFNBQVEsY0FBNEM7SUFDbkY7UUFDRSxLQUFLLENBQUMsRUFBQyxVQUFVLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQztRQUd6QixhQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFFLEVBQUUsQ0FBQSxDQUFDLEVBQUMsVUFBVSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsQ0FBQztRQUMvQyxrQkFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUMsS0FBWSxFQUFDLEVBQUU7WUFDakQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNyQixPQUFPLEVBQUMsVUFBVSxFQUFDLEdBQUcsRUFBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO1FBRUgsb0JBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUVuRSxjQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBQyxNQUFvQixFQUFDLEVBQUU7WUFDckQsT0FBTyxDQUFDLEVBQUMsR0FBRyxLQUFLLEVBQUMsVUFBVSxFQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFDLE1BQU0sQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQTtJQWJGLENBQUM7OytHQUhVLGtCQUFrQjttSEFBbEIsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbXBvbmVudFN0b3JlIH0gZnJvbSBcIkBuZ3J4L2NvbXBvbmVudC1zdG9yZVwiO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBQYXJ0aWFsRmlsdGVyIH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvZmlsdGVyLWluZm9cIjtcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBXcmFwcGVyRmlsdGVyU3RvcmUgIGV4dGVuZHMgQ29tcG9uZW50U3RvcmU8e2ZpbHRlckluZm86UGFydGlhbEZpbHRlcltdfT57XG4gIGNvbnN0cnVjdG9yKCl7XG4gICAgc3VwZXIoe2ZpbHRlckluZm86W119KTtcbiAgfVxuXG4gIGNsZWFyQWxsID0gdGhpcy51cGRhdGVyKCgpPT4oe2ZpbHRlckluZm86W119KSk7XG4gIGRlbGV0ZUJ5SW5kZXggPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLGluZGV4Om51bWJlcik9PntcbiAgICBjb25zdCBhcnIgPSBbLi4uc3RhdGUuZmlsdGVySW5mb107XG4gICAgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgcmV0dXJuIHtmaWx0ZXJJbmZvOmFycn07XG4gIH0pO1xuXG4gIGN1cnJlbnRGaWx0ZXJzJCA9IHRoaXMuc3RhdGUkLnBpcGUobWFwKHN0YXRlID0+IHN0YXRlLmZpbHRlckluZm8pKTtcblxuICBhZGRGaWx0ZXIgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLGZpbHRlcjpQYXJ0aWFsRmlsdGVyKT0+e1xuICAgIHJldHVybiAoey4uLnN0YXRlLGZpbHRlckluZm86Wy4uLnN0YXRlLmZpbHRlckluZm8sZmlsdGVyXX0pO1xuICB9KVxufVxuIl19