@unifylib/ui-lib 1.0.3 → 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/esm2022/iq-ui-lib.mjs +5 -0
  2. package/esm2022/lib/base-model/SearchStrConfig.mjs +11 -0
  3. package/esm2022/lib/base-model/api-response.mjs +2 -0
  4. package/esm2022/lib/base-model/audit-log-entry.mjs +3 -0
  5. package/esm2022/lib/base-model/button-action-settings.mjs +16 -0
  6. package/esm2022/lib/base-model/column-def.model.mjs +28 -0
  7. package/esm2022/lib/base-model/do-action-request.mjs +8 -0
  8. package/esm2022/lib/base-model/field-action.mjs +6 -0
  9. package/esm2022/lib/base-model/field-filter.model.mjs +3 -0
  10. package/esm2022/lib/base-model/field-info.mjs +57 -0
  11. package/esm2022/lib/base-model/field-predicate.model.mjs +10 -0
  12. package/esm2022/lib/base-model/filter-request.mjs +13 -0
  13. package/esm2022/lib/base-model/filter.model.mjs +25 -0
  14. package/esm2022/lib/base-model/get-items-list.mjs +10 -0
  15. package/esm2022/lib/base-model/index.mjs +12 -0
  16. package/esm2022/lib/base-model/items-total.model.mjs +8 -0
  17. package/esm2022/lib/base-model/line-item.model.mjs +11 -0
  18. package/esm2022/lib/base-model/lookupItem.mjs +16 -0
  19. package/esm2022/lib/base-model/page-info.mjs +17 -0
  20. package/esm2022/lib/base-model/report-request.model.mjs +17 -0
  21. package/esm2022/lib/base-model/response-envelop.model.mjs +10 -0
  22. package/esm2022/lib/base-model/snack-message.model.mjs +11 -0
  23. package/esm2022/lib/base-model/table-column.interface.mjs +2 -0
  24. package/esm2022/lib/base-model/table-page-user-action.interface.mjs +21 -0
  25. package/esm2022/lib/base-model/workflow/workflow-steps.model.mjs +9 -0
  26. package/esm2022/lib/base-model/workflow/workflow.model.mjs +42 -0
  27. package/esm2022/lib/components/action-comment/action-comment.component.mjs +101 -0
  28. package/esm2022/lib/components/action-confirmation/action-confirmation.component.mjs +55 -0
  29. package/esm2022/lib/components/activity-report-form/activity-report-form.component.mjs +499 -0
  30. package/esm2022/lib/components/advanced-filter/field-filter/field-filter.component.mjs +41 -0
  31. package/esm2022/lib/components/advanced-filter/filter-builder/filter-builder.component.mjs +162 -0
  32. package/esm2022/lib/components/audit-log-details-dialog/audit-log-details-dialog.component.mjs +70 -0
  33. package/esm2022/lib/components/audit-log-list/audit-log.component.mjs +99 -0
  34. package/esm2022/lib/components/auto-complete/auto-complete.component.mjs +292 -0
  35. package/esm2022/lib/components/base-form/base-form.component.mjs +297 -0
  36. package/esm2022/lib/components/base-form-canvas/base-form-canvas.component.mjs +591 -0
  37. package/esm2022/lib/components/base-input-dialog/base-input-dialog.component.mjs +72 -0
  38. package/esm2022/lib/components/base-table/base-table.component.mjs +514 -0
  39. package/esm2022/lib/components/button-actions/button-actions.component.mjs +70 -0
  40. package/esm2022/lib/components/editable-base-table/editable-base-table.component.mjs +496 -0
  41. package/esm2022/lib/components/equation-builder/equation-builder.component.mjs +112 -0
  42. package/esm2022/lib/components/item-line-editor/item-line-editor.component.mjs +299 -0
  43. package/esm2022/lib/components/multi-auto-complete/multi-auto-complete.component.mjs +278 -0
  44. package/esm2022/lib/components/paginator/paginator.component.mjs +91 -0
  45. package/esm2022/lib/components/report-details-dialog/report-details-dialog.component.mjs +102 -0
  46. package/esm2022/lib/components/report-form/report-form.component.mjs +498 -0
  47. package/esm2022/lib/components/search-bar/search-bar.component.mjs +62 -0
  48. package/esm2022/lib/components/section-form-canvas/section-form-canvas.component.mjs +81 -0
  49. package/esm2022/lib/components/shared/action-button/action-button.component.mjs +59 -0
  50. package/esm2022/lib/components/shared/action-card/action-card.component.mjs +93 -0
  51. package/esm2022/lib/components/shared/attachment-uploader/attachment-uploader.component.mjs +70 -0
  52. package/esm2022/lib/components/shared-list/shared-list.component.mjs +47 -0
  53. package/esm2022/lib/components/snackbar-static/snackbar-static.component.mjs +43 -0
  54. package/esm2022/lib/components/title-bar/title-bar.component.mjs +119 -0
  55. package/esm2022/lib/services/backend-service.mjs +240 -0
  56. package/esm2022/lib/services/index.mjs +4 -0
  57. package/esm2022/lib/services/top-panel.mjs +22 -0
  58. package/esm2022/lib/services/trigger-form.service.mjs +17 -0
  59. package/esm2022/lib/utils/base-utils.mjs +97 -0
  60. package/esm2022/lib/validators/date-range-validator.mjs +27 -0
  61. package/esm2022/lib/validators/index.mjs +4 -0
  62. package/esm2022/lib/validators/match-list.validator.mjs +9 -0
  63. package/esm2022/lib/validators/multi-email-validator.mjs +13 -0
  64. package/esm2022/public-api.mjs +29 -0
  65. package/esm2022/q-btech-ui-lib.mjs +5 -0
  66. package/esm2022/unifylib-ui-lib.mjs +5 -0
  67. package/fesm2022/iq-ui-lib.mjs +5625 -0
  68. package/fesm2022/iq-ui-lib.mjs.map +1 -0
  69. package/fesm2022/q-btech-ui-lib.mjs +5619 -0
  70. package/fesm2022/q-btech-ui-lib.mjs.map +1 -0
  71. package/fesm2022/unifylib-ui-lib.mjs +5625 -0
  72. package/fesm2022/unifylib-ui-lib.mjs.map +1 -0
  73. package/index.d.ts +5 -0
  74. package/lib/base-model/SearchStrConfig.d.ts +8 -0
  75. package/{src/lib/base-model/api-response.ts → lib/base-model/api-response.d.ts} +5 -7
  76. package/lib/base-model/audit-log-entry.d.ts +7 -0
  77. package/lib/base-model/button-action-settings.d.ts +15 -0
  78. package/lib/base-model/column-def.model.d.ts +11 -0
  79. package/lib/base-model/do-action-request.d.ts +10 -0
  80. package/lib/base-model/field-action.d.ts +6 -0
  81. package/lib/base-model/field-filter.model.d.ts +7 -0
  82. package/lib/base-model/field-info.d.ts +53 -0
  83. package/lib/base-model/field-predicate.model.d.ts +7 -0
  84. package/lib/base-model/filter-request.d.ts +15 -0
  85. package/lib/base-model/filter.model.d.ts +22 -0
  86. package/lib/base-model/get-items-list.d.ts +21 -0
  87. package/lib/base-model/index.d.ts +11 -0
  88. package/lib/base-model/items-total.model.d.ts +6 -0
  89. package/lib/base-model/line-item.model.d.ts +9 -0
  90. package/lib/base-model/lookupItem.d.ts +13 -0
  91. package/{src/lib/base-model/page-info.ts → lib/base-model/page-info.d.ts} +25 -24
  92. package/lib/base-model/report-request.model.d.ts +18 -0
  93. package/lib/base-model/response-envelop.model.d.ts +8 -0
  94. package/lib/base-model/snack-message.model.d.ts +7 -0
  95. package/lib/base-model/table-column.interface.d.ts +28 -0
  96. package/lib/base-model/table-page-user-action.interface.d.ts +14 -0
  97. package/lib/base-model/workflow/workflow-steps.model.d.ts +7 -0
  98. package/lib/base-model/workflow/workflow.model.d.ts +13 -0
  99. package/lib/components/action-comment/action-comment.component.d.ts +32 -0
  100. package/lib/components/action-confirmation/action-confirmation.component.d.ts +19 -0
  101. package/lib/components/activity-report-form/activity-report-form.component.d.ts +93 -0
  102. package/lib/components/advanced-filter/field-filter/field-filter.component.d.ts +20 -0
  103. package/lib/components/advanced-filter/filter-builder/filter-builder.component.d.ts +28 -0
  104. package/lib/components/audit-log-details-dialog/audit-log-details-dialog.component.d.ts +25 -0
  105. package/lib/components/audit-log-list/audit-log.component.d.ts +36 -0
  106. package/lib/components/auto-complete/auto-complete.component.d.ts +51 -0
  107. package/lib/components/base-form/base-form.component.d.ts +59 -0
  108. package/lib/components/base-form-canvas/base-form-canvas.component.d.ts +124 -0
  109. package/lib/components/base-input-dialog/base-input-dialog.component.d.ts +23 -0
  110. package/lib/components/base-table/base-table.component.d.ts +128 -0
  111. package/lib/components/button-actions/button-actions.component.d.ts +17 -0
  112. package/lib/components/editable-base-table/editable-base-table.component.d.ts +106 -0
  113. package/lib/components/equation-builder/equation-builder.component.d.ts +23 -0
  114. package/lib/components/item-line-editor/item-line-editor.component.d.ts +64 -0
  115. package/lib/components/multi-auto-complete/multi-auto-complete.component.d.ts +51 -0
  116. package/lib/components/paginator/paginator.component.d.ts +26 -0
  117. package/lib/components/report-details-dialog/report-details-dialog.component.d.ts +34 -0
  118. package/lib/components/report-form/report-form.component.d.ts +92 -0
  119. package/lib/components/search-bar/search-bar.component.d.ts +29 -0
  120. package/lib/components/section-form-canvas/section-form-canvas.component.d.ts +27 -0
  121. package/lib/components/shared/action-button/action-button.component.d.ts +17 -0
  122. package/lib/components/shared/action-card/action-card.component.d.ts +37 -0
  123. package/lib/components/shared/attachment-uploader/attachment-uploader.component.d.ts +16 -0
  124. package/lib/components/shared-list/shared-list.component.d.ts +21 -0
  125. package/lib/components/snackbar-static/snackbar-static.component.d.ts +15 -0
  126. package/lib/components/title-bar/title-bar.component.d.ts +42 -0
  127. package/lib/services/backend-service.d.ts +59 -0
  128. package/{src/lib/services/index.ts → lib/services/index.d.ts} +1 -1
  129. package/lib/services/top-panel.d.ts +8 -0
  130. package/lib/services/trigger-form.service.d.ts +7 -0
  131. package/lib/utils/base-utils.d.ts +13 -0
  132. package/lib/validators/date-range-validator.d.ts +2 -0
  133. package/lib/validators/match-list.validator.d.ts +4 -0
  134. package/lib/validators/multi-email-validator.d.ts +6 -0
  135. package/package.json +19 -4
  136. package/{src/public-api.ts → public-api.d.ts} +22 -18
  137. package/ng-package.json +0 -7
  138. package/src/lib/base-model/SearchStrConfig.ts +0 -12
  139. package/src/lib/base-model/audit-log-entry.ts +0 -7
  140. package/src/lib/base-model/button-action-settings.ts +0 -25
  141. package/src/lib/base-model/column-def.model.ts +0 -34
  142. package/src/lib/base-model/do-action-request.ts +0 -11
  143. package/src/lib/base-model/field-action.ts +0 -7
  144. package/src/lib/base-model/field-filter.model.ts +0 -14
  145. package/src/lib/base-model/field-info.ts +0 -98
  146. package/src/lib/base-model/field-predicate.model.ts +0 -7
  147. package/src/lib/base-model/filter-request.ts +0 -27
  148. package/src/lib/base-model/filter.model.ts +0 -49
  149. package/src/lib/base-model/get-items-list.ts +0 -24
  150. package/src/lib/base-model/index.ts +0 -11
  151. package/src/lib/base-model/lookupItem.ts +0 -21
  152. package/src/lib/base-model/null-snackmessage.ts +0 -9
  153. package/src/lib/base-model/report-request.model.ts +0 -33
  154. package/src/lib/base-model/response-envelop.model.ts +0 -15
  155. package/src/lib/base-model/snack-message.model.ts +0 -14
  156. package/src/lib/base-model/snackmessage-interface.ts +0 -7
  157. package/src/lib/base-model/table-column.interface.ts +0 -29
  158. package/src/lib/base-model/table-page-user-action.interface.ts +0 -33
  159. package/src/lib/base-model/workflow/workflow-steps.model.ts +0 -9
  160. package/src/lib/base-model/workflow/workflow.model.ts +0 -52
  161. package/src/lib/components/action-confirmation/action-confirmation.component.css +0 -34
  162. package/src/lib/components/action-confirmation/action-confirmation.component.html +0 -18
  163. package/src/lib/components/action-confirmation/action-confirmation.component.spec.ts +0 -23
  164. package/src/lib/components/action-confirmation/action-confirmation.component.ts +0 -58
  165. package/src/lib/components/activity-report-form/activity-report-form.component.html +0 -109
  166. package/src/lib/components/activity-report-form/activity-report-form.component.scss +0 -0
  167. package/src/lib/components/activity-report-form/activity-report-form.component.spec.ts +0 -25
  168. package/src/lib/components/activity-report-form/activity-report-form.component.ts +0 -605
  169. package/src/lib/components/audit-log-details-dialog/audit-log-details-dialog.component.css +0 -51
  170. package/src/lib/components/audit-log-details-dialog/audit-log-details-dialog.component.html +0 -23
  171. package/src/lib/components/audit-log-details-dialog/audit-log-details-dialog.component.spec.ts +0 -23
  172. package/src/lib/components/audit-log-details-dialog/audit-log-details-dialog.component.ts +0 -69
  173. package/src/lib/components/audit-log-list/audit-log.component.html +0 -23
  174. package/src/lib/components/audit-log-list/audit-log.component.scss +0 -0
  175. package/src/lib/components/audit-log-list/audit-log.component.spec.ts +0 -25
  176. package/src/lib/components/audit-log-list/audit-log.component.ts +0 -116
  177. package/src/lib/components/auto-complete/auto-complete.component.css +0 -14
  178. package/src/lib/components/auto-complete/auto-complete.component.html +0 -29
  179. package/src/lib/components/auto-complete/auto-complete.component.spec.ts +0 -23
  180. package/src/lib/components/auto-complete/auto-complete.component.ts +0 -330
  181. package/src/lib/components/base-form/base-form.component.html +0 -58
  182. package/src/lib/components/base-form/base-form.component.scss +0 -0
  183. package/src/lib/components/base-form/base-form.component.spec.ts +0 -25
  184. package/src/lib/components/base-form/base-form.component.ts +0 -305
  185. package/src/lib/components/base-form-canvas/base-form-canvas.component.css +0 -22
  186. package/src/lib/components/base-form-canvas/base-form-canvas.component.html +0 -1006
  187. package/src/lib/components/base-form-canvas/base-form-canvas.component.spec.ts +0 -23
  188. package/src/lib/components/base-form-canvas/base-form-canvas.component.ts +0 -573
  189. package/src/lib/components/base-input-dialog/base-input-dialog.component.css +0 -0
  190. package/src/lib/components/base-input-dialog/base-input-dialog.component.html +0 -42
  191. package/src/lib/components/base-input-dialog/base-input-dialog.component.spec.ts +0 -23
  192. package/src/lib/components/base-input-dialog/base-input-dialog.component.ts +0 -78
  193. package/src/lib/components/base-table/base-table.component.html +0 -242
  194. package/src/lib/components/base-table/base-table.component.scss +0 -31
  195. package/src/lib/components/base-table/base-table.component.spec.ts +0 -25
  196. package/src/lib/components/base-table/base-table.component.ts +0 -568
  197. package/src/lib/components/button-actions/button-actions.component.html +0 -28
  198. package/src/lib/components/button-actions/button-actions.component.scss +0 -6
  199. package/src/lib/components/button-actions/button-actions.component.spec.ts +0 -23
  200. package/src/lib/components/button-actions/button-actions.component.ts +0 -72
  201. package/src/lib/components/editable-base-table/editable-base-table.component.html +0 -372
  202. package/src/lib/components/editable-base-table/editable-base-table.component.scss +0 -44
  203. package/src/lib/components/editable-base-table/editable-base-table.component.spec.ts +0 -25
  204. package/src/lib/components/editable-base-table/editable-base-table.component.ts +0 -570
  205. package/src/lib/components/equation-builder/equation-builder.component.css +0 -0
  206. package/src/lib/components/equation-builder/equation-builder.component.html +0 -31
  207. package/src/lib/components/equation-builder/equation-builder.component.spec.ts +0 -23
  208. package/src/lib/components/equation-builder/equation-builder.component.ts +0 -121
  209. package/src/lib/components/multi-auto-complete/multi-auto-complete.component.css +0 -11
  210. package/src/lib/components/multi-auto-complete/multi-auto-complete.component.html +0 -38
  211. package/src/lib/components/multi-auto-complete/multi-auto-complete.component.spec.ts +0 -23
  212. package/src/lib/components/multi-auto-complete/multi-auto-complete.component.ts +0 -317
  213. package/src/lib/components/paginator/paginator.component.css +0 -25
  214. package/src/lib/components/paginator/paginator.component.html +0 -34
  215. package/src/lib/components/paginator/paginator.component.ts +0 -94
  216. package/src/lib/components/rejection-comment/action-comment.component.css +0 -33
  217. package/src/lib/components/rejection-comment/action-comment.component.html +0 -46
  218. package/src/lib/components/rejection-comment/action-comment.component.spec.ts +0 -23
  219. package/src/lib/components/rejection-comment/action-comment.component.ts +0 -86
  220. package/src/lib/components/report-details-dialog/report-details-dialog.component.css +0 -17
  221. package/src/lib/components/report-details-dialog/report-details-dialog.component.html +0 -16
  222. package/src/lib/components/report-details-dialog/report-details-dialog.component.spec.ts +0 -23
  223. package/src/lib/components/report-details-dialog/report-details-dialog.component.ts +0 -113
  224. package/src/lib/components/report-form/report-form.component.html +0 -94
  225. package/src/lib/components/report-form/report-form.component.scss +0 -0
  226. package/src/lib/components/report-form/report-form.component.spec.ts +0 -25
  227. package/src/lib/components/report-form/report-form.component.ts +0 -588
  228. package/src/lib/components/search-bar/search-bar.component.html +0 -62
  229. package/src/lib/components/search-bar/search-bar.component.scss +0 -8
  230. package/src/lib/components/search-bar/search-bar.component.spec.ts +0 -25
  231. package/src/lib/components/search-bar/search-bar.component.ts +0 -70
  232. package/src/lib/components/shared/attachment-uploader/attachment-uploader.component.css +0 -54
  233. package/src/lib/components/shared/attachment-uploader/attachment-uploader.component.html +0 -22
  234. package/src/lib/components/shared/attachment-uploader/attachment-uploader.component.spec.ts +0 -23
  235. package/src/lib/components/shared/attachment-uploader/attachment-uploader.component.ts +0 -45
  236. package/src/lib/components/shared-list/shared-list.component.css +0 -0
  237. package/src/lib/components/shared-list/shared-list.component.html +0 -17
  238. package/src/lib/components/shared-list/shared-list.component.spec.ts +0 -23
  239. package/src/lib/components/shared-list/shared-list.component.ts +0 -53
  240. package/src/lib/components/title-bar/title-bar.component.css +0 -0
  241. package/src/lib/components/title-bar/title-bar.component.css.map +0 -1
  242. package/src/lib/components/title-bar/title-bar.component.html +0 -31
  243. package/src/lib/components/title-bar/title-bar.component.scss +0 -23
  244. package/src/lib/components/title-bar/title-bar.component.spec.ts +0 -23
  245. package/src/lib/components/title-bar/title-bar.component.ts +0 -119
  246. package/src/lib/services/backend-service.ts +0 -286
  247. package/src/lib/services/top-panel.ts +0 -17
  248. package/src/lib/services/trigger-form.service.ts +0 -11
  249. package/src/lib/share-module/shared-module.ts +0 -10
  250. package/src/lib/styles/invoiceq-theme.scss +0 -252
  251. package/src/lib/styles/styles.scss +0 -1723
  252. package/src/lib/utils/base-utils.ts +0 -102
  253. package/src/lib/validators/date-range-validator.ts +0 -31
  254. package/src/lib/validators/match-list.validator.ts +0 -10
  255. package/src/lib/validators/multi-email-validator.ts +0 -15
  256. package/tsconfig.lib.json +0 -15
  257. package/tsconfig.lib.prod.json +0 -11
  258. package/tsconfig.spec.json +0 -15
  259. /package/{src/lib/validators/index.ts → lib/validators/index.d.ts} +0 -0
@@ -0,0 +1,41 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { BaseFormCanvasComponent } from "../../base-form-canvas/base-form-canvas.component";
3
+ import * as i0 from "@angular/core";
4
+ export class FieldFilterComponent {
5
+ constructor() {
6
+ this.editable = false;
7
+ this.selectedValue = new EventEmitter();
8
+ this.filterFieldInformation = new EventEmitter();
9
+ }
10
+ ngOnInit() {
11
+ }
12
+ formChanges($event) {
13
+ this.filterForm = $event;
14
+ this.filterForm.valueChanges.subscribe(v => {
15
+ this.filterFieldInformation.emit(this.filterForm.value);
16
+ });
17
+ }
18
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FieldFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
19
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FieldFilterComponent, isStandalone: true, selector: "app-field-filter", inputs: { filter: "filter", pageInfo: "pageInfo", filterFields: "filterFields", item: "item", editable: "editable" }, outputs: { selectedValue: "selectedValue", filterFieldInformation: "filterFieldInformation" }, ngImport: i0, template: "\r\n<app-base-form-canvas\r\n [pageInfo]=\"pageInfo\"\r\n [fields]=\"filterFields\"\r\n [editable]=\"editable\"\r\n (formUpdated)=\"formChanges($event)\"\r\n>\r\n</app-base-form-canvas>\r\n", styles: [""], dependencies: [{ kind: "component", type: BaseFormCanvasComponent, selector: "app-base-form-canvas", inputs: ["pageInfo", "currency", "fields", "errors", "workflowEditableFields", "isWorkflowEditableManaged", "supportingAttributes", "editable", "emitOnValueChanges", "item", "equationSuggestedFields", "currentEquationValue"], outputs: ["attachmentEmitter", "actionEmitter", "formUpdated", "hyperTextEvent", "currentEquationValueChange"] }] }); }
20
+ }
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FieldFilterComponent, decorators: [{
22
+ type: Component,
23
+ args: [{ selector: 'app-field-filter', standalone: true, imports: [
24
+ BaseFormCanvasComponent
25
+ ], template: "\r\n<app-base-form-canvas\r\n [pageInfo]=\"pageInfo\"\r\n [fields]=\"filterFields\"\r\n [editable]=\"editable\"\r\n (formUpdated)=\"formChanges($event)\"\r\n>\r\n</app-base-form-canvas>\r\n" }]
26
+ }], ctorParameters: () => [], propDecorators: { filter: [{
27
+ type: Input
28
+ }], pageInfo: [{
29
+ type: Input
30
+ }], filterFields: [{
31
+ type: Input
32
+ }], item: [{
33
+ type: Input
34
+ }], editable: [{
35
+ type: Input
36
+ }], selectedValue: [{
37
+ type: Output
38
+ }], filterFieldInformation: [{
39
+ type: Output
40
+ }] } });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ludm9pY2VxL3VpLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtZmlsdGVyL2ZpZWxkLWZpbHRlci9maWVsZC1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52b2ljZXEvdWktbGliL3NyYy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC1maWx0ZXIvZmllbGQtZmlsdGVyL2ZpZWxkLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFJdkcsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sbURBQW1ELENBQUM7O0FBWTFGLE1BQU0sT0FBTyxvQkFBb0I7SUF5Qi9CO1FBUkEsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUdqQixrQkFBYSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRzNELDJCQUFzQixHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO0lBRXBELENBQUM7SUFFakIsUUFBUTtJQUVSLENBQUM7SUFHRCxXQUFXLENBQUMsTUFBaUI7UUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBckNVLG9CQUFvQjttR0FBcEIsb0JBQW9CLGlTQ2hCakMsMk5BUUEsMERER0ksdUJBQXVCOzs0RkFLZCxvQkFBb0I7a0JBVmhDLFNBQVM7K0JBQ0Usa0JBQWtCLGNBRWhCLElBQUksV0FDUDt3QkFDUCx1QkFBdUI7cUJBQ3hCO3dEQU9ELE1BQU07c0JBREwsS0FBSztnQkFJTixRQUFRO3NCQURQLEtBQUs7Z0JBSU4sWUFBWTtzQkFEWCxLQUFLO2dCQU1OLElBQUk7c0JBREgsS0FBSztnQkFJTixRQUFRO3NCQURQLEtBQUs7Z0JBSU4sYUFBYTtzQkFEWixNQUFNO2dCQUlQLHNCQUFzQjtzQkFEckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtGb3JtR3JvdXB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQge0ZpZWxkRmlsdGVyfSBmcm9tIFwiLi4vLi4vLi4vYmFzZS1tb2RlbC9maWVsZC1maWx0ZXIubW9kZWxcIjtcclxuaW1wb3J0IHtGaWVsZEluZm8sIFBhZ2VJbmZvfSBmcm9tIFwiLi4vLi4vLi4vYmFzZS1tb2RlbFwiO1xyXG5pbXBvcnQge0Jhc2VGb3JtQ2FudmFzQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vYmFzZS1mb3JtLWNhbnZhcy9iYXNlLWZvcm0tY2FudmFzLmNvbXBvbmVudFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZmllbGQtZmlsdGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmllbGQtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIEJhc2VGb3JtQ2FudmFzQ29tcG9uZW50XHJcbiAgXSxcclxuICBzdHlsZVVybHM6IFsnLi9maWVsZC1maWx0ZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEZpZWxkRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0ICB7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZmlsdGVyOiBGaWVsZEZpbHRlcjtcclxuXHJcbiAgQElucHV0KClcclxuICBwYWdlSW5mbzogUGFnZUluZm87XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZmlsdGVyRmllbGRzOiBGaWVsZEluZm9bXTtcclxuXHJcbiAgZmlsdGVyRm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGl0ZW06IGFueTtcclxuXHJcbiAgQElucHV0KClcclxuICBlZGl0YWJsZSA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBzZWxlY3RlZFZhbHVlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBmaWx0ZXJGaWVsZEluZm9ybWF0aW9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgZm9ybUNoYW5nZXMoJGV2ZW50OiBGb3JtR3JvdXApIHtcclxuICAgIHRoaXMuZmlsdGVyRm9ybSA9ICRldmVudDtcclxuICAgIHRoaXMuZmlsdGVyRm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICB0aGlzLmZpbHRlckZpZWxkSW5mb3JtYXRpb24uZW1pdCh0aGlzLmZpbHRlckZvcm0udmFsdWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIlxyXG48YXBwLWJhc2UtZm9ybS1jYW52YXNcclxuICAgICAgICBbcGFnZUluZm9dPVwicGFnZUluZm9cIlxyXG4gICAgICAgIFtmaWVsZHNdPVwiZmlsdGVyRmllbGRzXCJcclxuICAgICAgICBbZWRpdGFibGVdPVwiZWRpdGFibGVcIlxyXG4gICAgICAgIChmb3JtVXBkYXRlZCk9XCJmb3JtQ2hhbmdlcygkZXZlbnQpXCJcclxuPlxyXG48L2FwcC1iYXNlLWZvcm0tY2FudmFzPlxyXG4iXX0=
@@ -0,0 +1,162 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FieldFilterComponent } from "../field-filter/field-filter.component";
4
+ import { TranslateModule } from "@ngx-translate/core";
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ export class FilterBuilderComponent {
8
+ constructor() {
9
+ this.filters = [];
10
+ this.filterInformation = new EventEmitter();
11
+ this.isEmpty = new EventEmitter();
12
+ }
13
+ ngOnInit() {
14
+ this.switchToAdvanced();
15
+ if (!this.filter) {
16
+ this.filter = this.createDefaultFieldFilter();
17
+ }
18
+ if (this.filterFields && this.filterFields.length) {
19
+ this.filters = this.filterFields.map(() => this.createDefaultFieldFilter());
20
+ }
21
+ }
22
+ ngOnDestroy() {
23
+ if (this.searchTimeout) {
24
+ clearTimeout(this.searchTimeout);
25
+ this.searchTimeout = null;
26
+ }
27
+ }
28
+ doSearch() {
29
+ const filtersArray = (this.filters || [])
30
+ .filter(f => !!f && f.fieldName && f.valueObject !== undefined && f.valueObject !== null && f.valueObject !== '')
31
+ .map(f => ({ ...f }));
32
+ this.filterInformation.emit(filtersArray);
33
+ }
34
+ scheduleSearch(delayMs = 800) {
35
+ if (this.searchTimeout) {
36
+ clearTimeout(this.searchTimeout);
37
+ }
38
+ this.searchTimeout = setTimeout(() => {
39
+ this.doSearch();
40
+ }, delayMs);
41
+ }
42
+ formChanges($event, index, fieldInfo) {
43
+ if (index === undefined || !fieldInfo) {
44
+ if (!this.filterFields || !this.filterFields.length) {
45
+ this.filters = [];
46
+ this.doSearch();
47
+ return;
48
+ }
49
+ this.filters = this.filterFields.map((fi) => {
50
+ const controlName = fi.property;
51
+ let value = $event ? $event[controlName] : undefined;
52
+ if (value === undefined || value === null || value === '') {
53
+ return this.createDefaultFieldFilter();
54
+ }
55
+ const fieldName = controlName === 'from' || controlName === 'to' ? fi.targetProperty : controlName;
56
+ return {
57
+ fieldName: fieldName,
58
+ operator: fi.filterOperator || 'EQUALS',
59
+ filterType: 'FILED_FILTER',
60
+ fieldType: this.typeMap(fi.type),
61
+ valueObject: value
62
+ };
63
+ });
64
+ const hasTextField = (this.filterFields || []).some(fi => ((fi.type || '').toLowerCase() === 'text'));
65
+ if (hasTextField) {
66
+ this.scheduleSearch();
67
+ }
68
+ else {
69
+ this.doSearch();
70
+ }
71
+ return;
72
+ }
73
+ if (!this.filters) {
74
+ this.filters = [];
75
+ }
76
+ if (this.filters.length < index + 1) {
77
+ this.filters.length = index + 1;
78
+ }
79
+ let controlName = fieldInfo.property;
80
+ let value = $event ? $event[controlName] : undefined;
81
+ if ($event && $event.filterField !== undefined && $event.fromValue !== undefined) {
82
+ controlName = $event.filterField || controlName;
83
+ value = $event.fromValue;
84
+ }
85
+ if (value === undefined || value === null || value === '') {
86
+ this.filters[index] = this.createDefaultFieldFilter();
87
+ }
88
+ else {
89
+ this.filters[index] = {
90
+ fieldName: controlName,
91
+ operator: fieldInfo.filterOperator || 'EQUALS',
92
+ filterType: 'FILED_FILTER',
93
+ fieldType: this.typeMap(fieldInfo.type),
94
+ valueObject: value
95
+ };
96
+ }
97
+ const isTextField = ((fieldInfo.type || '').toLowerCase() === 'text');
98
+ if (isTextField) {
99
+ this.scheduleSearch();
100
+ }
101
+ else {
102
+ this.doSearch();
103
+ }
104
+ }
105
+ typeMap(colType) {
106
+ const t = (colType || '').toLowerCase();
107
+ if (t.includes('number') || t.includes('int') || t === 'long')
108
+ return 'Long';
109
+ if (t.includes('date') || t.includes('time'))
110
+ return 'Date';
111
+ if (t.includes('bool'))
112
+ return 'Boolean';
113
+ return 'String';
114
+ }
115
+ isEditable(_index) {
116
+ return true;
117
+ }
118
+ deleteAll() {
119
+ this.filter = this.createDefaultFieldFilter();
120
+ this.filters = this.filterFields ? this.filterFields.map(() => this.createDefaultFieldFilter()) : [];
121
+ this.isEmpty.emit(true);
122
+ }
123
+ switchToAdvanced() {
124
+ if (this.isChecked) {
125
+ if (!this.filter || Object.keys(this.filter).length === 0) {
126
+ this.filter = this.createDefaultFieldFilter();
127
+ }
128
+ }
129
+ }
130
+ createDefaultFieldFilter() {
131
+ return {
132
+ fieldName: '',
133
+ operator: '',
134
+ filterType: '',
135
+ fieldType: '',
136
+ valueObject: ''
137
+ };
138
+ }
139
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FilterBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
140
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FilterBuilderComponent, isStandalone: true, selector: "app-filter-builder", inputs: { columns: "columns", isChecked: "isChecked", filterFields: "filterFields", pageInfo: "pageInfo" }, outputs: { filterInformation: "filterInformation", isEmpty: "isEmpty" }, ngImport: i0, template: "<div class=\"main-filter-builder\">\r\n\r\n <div class=\"filterForm\">\r\n <div class=\"filterForm__row\">\r\n <div class=\"filterForm__col\">\r\n <app-field-filter\r\n [editable]=\"isEditable()\"\r\n [filter]=\"filter\"\r\n [pageInfo]=\"pageInfo\"\r\n *ngIf=\"isEditable()\"\r\n [filterFields]=\"filterFields\"\r\n (filterFieldInformation)=\"formChanges($event)\"\r\n class=\"filterForm__filed-filter\"\r\n >\r\n </app-field-filter>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n<!-- <div *ngIf=\"checkIsEmpty()\" class=\"line-top\">-->\r\n<!-- <mat-divider></mat-divider>-->\r\n<!-- </div>-->\r\n\r\n<!-- <div class=\"line-bottom\">-->\r\n<!-- <mat-divider></mat-divider>-->\r\n<!-- </div>-->\r\n\r\n<!-- <div class=\"action\">-->\r\n<!-- <button class=\"btn-none-background-primary action__clear\" mat-button (click)=\"deleteAll()\">-->\r\n<!-- {{'FILTER-BUILDER.clearAllFilters' | translate}}-->\r\n<!-- </button>-->\r\n<!-- <button class=\"btn-background-primary\" mat-button (click)=\"doSearch()\">-->\r\n<!-- {{'FILTER-BUILDER.search' | translate}}-->\r\n<!-- </button>-->\r\n<!-- </div>-->\r\n</div>\r\n", styles: [".main-filter-builder .filterForm{display:block}.main-filter-builder .filterForm__row{display:flex;align-items:center;gap:12px;margin:6px 0;flex-wrap:wrap}.main-filter-builder .filterForm__col{flex:1 1 auto;min-width:0}.main-filter-builder .filterForm__filed-filter{margin:5px 0 0!important}.main-filter-builder .filterForm .action-filter{flex:0 0 auto}.main-filter-builder .filterForm .action-filter .edit-design{margin:auto}.main-filter-builder .filterForm .action-filter .edit-design__add-button{background:#fff!important;color:var(--primary-color)!important;height:48px;width:48px;border-radius:5px;border:#D9D9D9 solid 1px;margin:30px 0 0}.main-filter-builder .filterForm .action-filter .edit-design__add-button__add-button-text{margin:0 5px}.main-filter-builder .line-top mat-divider{width:98%;margin:0 auto 10px}.main-filter-builder .advanced-button{display:flex;flex-wrap:wrap;gap:8px}.main-filter-builder .advanced-button .view{background:#e3fbff!important;border:1px solid #00ABC8!important;border-radius:6px!important;margin:10px 0;padding:6px 8px;height:32px;margin-top:0!important;display:flex;align-items:center;gap:6px}.main-filter-builder .advanced-button .view__filed{margin-top:-3px;display:inline-block;color:#1c355e;font-weight:400;font-size:14px;line-height:16px;font-style:normal;text-align:center!important}.main-filter-builder .advanced-button .view__close{margin-left:6px}.main-filter-builder .advanced-button .view__close__icon{color:#1c355e;font-size:14px;cursor:pointer;display:inline-block}.main-filter-builder .line-bottom mat-divider{width:98%;margin:0 auto 10px}.main-filter-builder .action{justify-content:end;padding:5px 10px 10px}.main-filter-builder .action__clear{border:none!important;margin:0 5px}@media (max-width: 599.98px){.main-filter-builder .filterForm__row{flex-wrap:wrap}.main-filter-builder .filterForm .action-filter .edit-design__add-button{width:100%;height:45px;margin:5px 5px 10px}}@media (min-width: 600px){.main-filter-builder .add-text-responsive{display:none}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FieldFilterComponent, selector: "app-field-filter", inputs: ["filter", "pageInfo", "filterFields", "item", "editable"], outputs: ["selectedValue", "filterFieldInformation"] }, { kind: "ngmodule", type: TranslateModule }] }); }
141
+ }
142
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FilterBuilderComponent, decorators: [{
143
+ type: Component,
144
+ args: [{ selector: 'app-filter-builder', standalone: true, imports: [
145
+ CommonModule,
146
+ FieldFilterComponent,
147
+ TranslateModule
148
+ ], template: "<div class=\"main-filter-builder\">\r\n\r\n <div class=\"filterForm\">\r\n <div class=\"filterForm__row\">\r\n <div class=\"filterForm__col\">\r\n <app-field-filter\r\n [editable]=\"isEditable()\"\r\n [filter]=\"filter\"\r\n [pageInfo]=\"pageInfo\"\r\n *ngIf=\"isEditable()\"\r\n [filterFields]=\"filterFields\"\r\n (filterFieldInformation)=\"formChanges($event)\"\r\n class=\"filterForm__filed-filter\"\r\n >\r\n </app-field-filter>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n<!-- <div *ngIf=\"checkIsEmpty()\" class=\"line-top\">-->\r\n<!-- <mat-divider></mat-divider>-->\r\n<!-- </div>-->\r\n\r\n<!-- <div class=\"line-bottom\">-->\r\n<!-- <mat-divider></mat-divider>-->\r\n<!-- </div>-->\r\n\r\n<!-- <div class=\"action\">-->\r\n<!-- <button class=\"btn-none-background-primary action__clear\" mat-button (click)=\"deleteAll()\">-->\r\n<!-- {{'FILTER-BUILDER.clearAllFilters' | translate}}-->\r\n<!-- </button>-->\r\n<!-- <button class=\"btn-background-primary\" mat-button (click)=\"doSearch()\">-->\r\n<!-- {{'FILTER-BUILDER.search' | translate}}-->\r\n<!-- </button>-->\r\n<!-- </div>-->\r\n</div>\r\n", styles: [".main-filter-builder .filterForm{display:block}.main-filter-builder .filterForm__row{display:flex;align-items:center;gap:12px;margin:6px 0;flex-wrap:wrap}.main-filter-builder .filterForm__col{flex:1 1 auto;min-width:0}.main-filter-builder .filterForm__filed-filter{margin:5px 0 0!important}.main-filter-builder .filterForm .action-filter{flex:0 0 auto}.main-filter-builder .filterForm .action-filter .edit-design{margin:auto}.main-filter-builder .filterForm .action-filter .edit-design__add-button{background:#fff!important;color:var(--primary-color)!important;height:48px;width:48px;border-radius:5px;border:#D9D9D9 solid 1px;margin:30px 0 0}.main-filter-builder .filterForm .action-filter .edit-design__add-button__add-button-text{margin:0 5px}.main-filter-builder .line-top mat-divider{width:98%;margin:0 auto 10px}.main-filter-builder .advanced-button{display:flex;flex-wrap:wrap;gap:8px}.main-filter-builder .advanced-button .view{background:#e3fbff!important;border:1px solid #00ABC8!important;border-radius:6px!important;margin:10px 0;padding:6px 8px;height:32px;margin-top:0!important;display:flex;align-items:center;gap:6px}.main-filter-builder .advanced-button .view__filed{margin-top:-3px;display:inline-block;color:#1c355e;font-weight:400;font-size:14px;line-height:16px;font-style:normal;text-align:center!important}.main-filter-builder .advanced-button .view__close{margin-left:6px}.main-filter-builder .advanced-button .view__close__icon{color:#1c355e;font-size:14px;cursor:pointer;display:inline-block}.main-filter-builder .line-bottom mat-divider{width:98%;margin:0 auto 10px}.main-filter-builder .action{justify-content:end;padding:5px 10px 10px}.main-filter-builder .action__clear{border:none!important;margin:0 5px}@media (max-width: 599.98px){.main-filter-builder .filterForm__row{flex-wrap:wrap}.main-filter-builder .filterForm .action-filter .edit-design__add-button{width:100%;height:45px;margin:5px 5px 10px}}@media (min-width: 600px){.main-filter-builder .add-text-responsive{display:none}}\n"] }]
149
+ }], ctorParameters: () => [], propDecorators: { columns: [{
150
+ type: Input
151
+ }], isChecked: [{
152
+ type: Input
153
+ }], filterFields: [{
154
+ type: Input
155
+ }], pageInfo: [{
156
+ type: Input
157
+ }], filterInformation: [{
158
+ type: Output
159
+ }], isEmpty: [{
160
+ type: Output
161
+ }] } });
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWJ1aWxkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52b2ljZXEvdWktbGliL3NyYy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC1maWx0ZXIvZmlsdGVyLWJ1aWxkZXIvZmlsdGVyLWJ1aWxkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52b2ljZXEvdWktbGliL3NyYy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC1maWx0ZXIvZmlsdGVyLWJ1aWxkZXIvZmlsdGVyLWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRzdDLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQzVFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBYXBELE1BQU0sT0FBTyxzQkFBc0I7SUF3QmpDO1FBWEEsWUFBTyxHQUFrQixFQUFFLENBQUM7UUFLNUIsc0JBQWlCLEdBQWdDLElBQUksWUFBWSxFQUFpQixDQUFDO1FBR25GLFlBQU8sR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztJQUk3RCxDQUFDO0lBRUQsUUFBUTtRQUdOLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZ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d0JBQ1osb0JBQW9CO3dCQUNwQixlQUFlO3FCQUNoQjt3REFNRCxPQUFPO3NCQUROLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUdOLFlBQVk7c0JBRFgsS0FBSztnQkFHTixRQUFRO3NCQURQLEtBQUs7Z0JBU04saUJBQWlCO3NCQURoQixNQUFNO2dCQUlQLE9BQU87c0JBRE4sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7RmllbGRJbmZvLCBQYWdlSW5mbywgVGFibGVDb2x1bW59IGZyb20gXCIuLi8uLi8uLi9iYXNlLW1vZGVsXCI7XHJcbmltcG9ydCB7RmllbGRGaWx0ZXJ9IGZyb20gXCIuLi8uLi8uLi9iYXNlLW1vZGVsL2ZpZWxkLWZpbHRlci5tb2RlbFwiO1xyXG5pbXBvcnQge0ZpZWxkRmlsdGVyQ29tcG9uZW50fSBmcm9tIFwiLi4vZmllbGQtZmlsdGVyL2ZpZWxkLWZpbHRlci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGV9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1maWx0ZXItYnVpbGRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci1idWlsZGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZpZWxkRmlsdGVyQ29tcG9uZW50LFxyXG4gICAgVHJhbnNsYXRlTW9kdWxlXHJcbiAgXSxcclxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXItYnVpbGRlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWx0ZXJCdWlsZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGNvbHVtbnM6IFRhYmxlQ29sdW1uPGFueT5bXTtcclxuXHJcbiAgQElucHV0KClcclxuICBpc0NoZWNrZWQ6IGJvb2xlYW47XHJcbiAgQElucHV0KClcclxuICBmaWx0ZXJGaWVsZHM6IEZpZWxkSW5mb1tdO1xyXG4gIEBJbnB1dCgpXHJcbiAgcGFnZUluZm86IFBhZ2VJbmZvO1xyXG5cclxuICBmaWx0ZXI6IEZpZWxkRmlsdGVyO1xyXG4gIGZpbHRlcnM6IEZpZWxkRmlsdGVyW10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBzZWFyY2hUaW1lb3V0OiBhbnk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIGZpbHRlckluZm9ybWF0aW9uOiBFdmVudEVtaXR0ZXI8RmllbGRGaWx0ZXJbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpZWxkRmlsdGVyW10+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIGlzRW1wdHk6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG5cclxuICAgIHRoaXMuc3dpdGNoVG9BZHZhbmNlZCgpO1xyXG4gICAgaWYgKCF0aGlzLmZpbHRlcikge1xyXG4gICAgICB0aGlzLmZpbHRlciA9IHRoaXMuY3JlYXRlRGVmYXVsdEZpZWxkRmlsdGVyKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maWx0ZXJGaWVsZHMgJiYgdGhpcy5maWx0ZXJGaWVsZHMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVycyA9IHRoaXMuZmlsdGVyRmllbGRzLm1hcCgoKSA9PiB0aGlzLmNyZWF0ZURlZmF1bHRGaWVsZEZpbHRlcigpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VhcmNoVGltZW91dCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hUaW1lb3V0KTtcclxuICAgICAgdGhpcy5zZWFyY2hUaW1lb3V0ID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBkb1NlYXJjaCgpIHtcclxuICAgIGNvbnN0IGZpbHRlcnNBcnJheSA9ICh0aGlzLmZpbHRlcnMgfHwgW10pXHJcbiAgICAgIC5maWx0ZXIoZiA9PiAhIWYgJiYgZi5maWVsZE5hbWUgJiYgZi52YWx1ZU9iamVjdCAhPT0gdW5kZWZpbmVkICYmIGYudmFsdWVPYmplY3QgIT09IG51bGwgJiYgZi52YWx1ZU9iamVjdCAhPT0gJycpXHJcbiAgICAgIC5tYXAoZiA9PiAoey4uLmZ9KSk7XHJcbiAgICB0aGlzLmZpbHRlckluZm9ybWF0aW9uLmVtaXQoZmlsdGVyc0FycmF5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2NoZWR1bGVTZWFyY2goZGVsYXlNczogbnVtYmVyID0gODAwKSB7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hUaW1lb3V0KSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNlYXJjaFRpbWVvdXQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWFyY2hUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZG9TZWFyY2goKTtcclxuICAgIH0sIGRlbGF5TXMpO1xyXG4gIH1cclxuXHJcbiAgZm9ybUNoYW5nZXMoJGV2ZW50OiBhbnksIGluZGV4PzogbnVtYmVyLCBmaWVsZEluZm8/OiBGaWVsZEluZm8pIHtcclxuICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkIHx8ICFmaWVsZEluZm8pIHtcclxuICAgICAgaWYgKCF0aGlzLmZpbHRlckZpZWxkcyB8fCAhdGhpcy5maWx0ZXJGaWVsZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzID0gW107XHJcbiAgICAgICAgdGhpcy5kb1NlYXJjaCgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5maWx0ZXJzID0gdGhpcy5maWx0ZXJGaWVsZHMubWFwKChmaSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbnRyb2xOYW1lID0gZmkucHJvcGVydHk7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gJGV2ZW50ID8gJGV2ZW50W2NvbnRyb2xOYW1lXSA6IHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZURlZmF1bHRGaWVsZEZpbHRlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBjb250cm9sTmFtZSA9PT0gJ2Zyb20nIHx8IGNvbnRyb2xOYW1lID09PSAndG8nID8gIGZpLnRhcmdldFByb3BlcnR5IDogY29udHJvbE5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSxcclxuICAgICAgICAgIG9wZXJhdG9yOiBmaS5maWx0ZXJPcGVyYXRvciB8fCAnRVFVQUxTJyxcclxuICAgICAgICAgIGZpbHRlclR5cGU6ICdGSUxFRF9GSUxURVInLFxyXG4gICAgICAgICAgZmllbGRUeXBlOiB0aGlzLnR5cGVNYXAoZmkudHlwZSkgYXMgYW55LFxyXG4gICAgICAgICAgdmFsdWVPYmplY3Q6IHZhbHVlIGFzIGFueVxyXG4gICAgICAgIH0gYXMgRmllbGRGaWx0ZXI7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgaGFzVGV4dEZpZWxkID0gKHRoaXMuZmlsdGVyRmllbGRzIHx8IFtdKS5zb21lKGZpID0+ICgoZmkudHlwZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ3RleHQnKSk7XHJcbiAgICAgIGlmIChoYXNUZXh0RmllbGQpIHtcclxuICAgICAgICB0aGlzLnNjaGVkdWxlU2VhcmNoKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5kb1NlYXJjaCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuZmlsdGVycykge1xyXG4gICAgICB0aGlzLmZpbHRlcnMgPSBbXTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZpbHRlcnMubGVuZ3RoIDwgaW5kZXggKyAxKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVycy5sZW5ndGggPSBpbmRleCArIDE7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGNvbnRyb2xOYW1lID0gZmllbGRJbmZvLnByb3BlcnR5O1xyXG4gICAgbGV0IHZhbHVlID0gJGV2ZW50ID8gJGV2ZW50W2NvbnRyb2xOYW1lXSA6IHVuZGVmaW5lZDtcclxuICAgIGlmICgkZXZlbnQgJiYgJGV2ZW50LmZpbHRlckZpZWxkICE9PSB1bmRlZmluZWQgJiYgJGV2ZW50LmZyb21WYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnRyb2xOYW1lID0gJGV2ZW50LmZpbHRlckZpZWxkIHx8IGNvbnRyb2xOYW1lO1xyXG4gICAgICB2YWx1ZSA9ICRldmVudC5mcm9tVmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09ICcnKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyc1tpbmRleF0gPSB0aGlzLmNyZWF0ZURlZmF1bHRGaWVsZEZpbHRlcigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXJzW2luZGV4XSA9IHtcclxuICAgICAgICBmaWVsZE5hbWU6IGNvbnRyb2xOYW1lLFxyXG4gICAgICAgIG9wZXJhdG9yOiAgZmllbGRJbmZvLmZpbHRlck9wZXJhdG9yIHx8ICdFUVVBTFMnLFxyXG4gICAgICAgIGZpbHRlclR5cGU6ICdGSUxFRF9GSUxURVInLFxyXG4gICAgICAgIGZpZWxkVHlwZTogdGhpcy50eXBlTWFwKGZpZWxkSW5mby50eXBlKSBhcyBhbnksXHJcbiAgICAgICAgdmFsdWVPYmplY3Q6IHZhbHVlIGFzIGFueVxyXG4gICAgICB9IGFzIEZpZWxkRmlsdGVyO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaXNUZXh0RmllbGQgPSAoKGZpZWxkSW5mby50eXBlIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAndGV4dCcpO1xyXG4gICAgaWYgKGlzVGV4dEZpZWxkKSB7XHJcbiAgICAgIHRoaXMuc2NoZWR1bGVTZWFyY2goKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZG9TZWFyY2goKTtcclxuICAgIH1cclxuICB9XHJcbiAgdHlwZU1hcChjb2xUeXBlPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHQgPSAoY29sVHlwZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcclxuICAgIGlmICh0LmluY2x1ZGVzKCdudW1iZXInKSB8fCB0LmluY2x1ZGVzKCdpbnQnKSB8fCB0ID09PSAnbG9uZycpIHJldHVybiAnTG9uZyc7XHJcbiAgICBpZiAodC5pbmNsdWRlcygnZGF0ZScpIHx8IHQuaW5jbHVkZXMoJ3RpbWUnKSkgcmV0dXJuICdEYXRlJztcclxuICAgIGlmICh0LmluY2x1ZGVzKCdib29sJykpIHJldHVybiAnQm9vbGVhbic7XHJcbiAgICByZXR1cm4gJ1N0cmluZyc7XHJcbiAgfVxyXG5cclxuICBpc0VkaXRhYmxlKF9pbmRleD86IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgZGVsZXRlQWxsKCkge1xyXG4gICAgdGhpcy5maWx0ZXIgPSB0aGlzLmNyZWF0ZURlZmF1bHRGaWVsZEZpbHRlcigpO1xyXG4gICAgdGhpcy5maWx0ZXJzID0gdGhpcy5maWx0ZXJGaWVsZHMgPyB0aGlzLmZpbHRlckZpZWxkcy5tYXAoKCkgPT4gdGhpcy5jcmVhdGVEZWZhdWx0RmllbGRGaWx0ZXIoKSkgOiBbXTtcclxuICAgIHRoaXMuaXNFbXB0eS5lbWl0KHRydWUpO1xyXG4gIH1cclxuXHJcblxyXG4gIHN3aXRjaFRvQWR2YW5jZWQoKSB7XHJcbiAgICBpZiAodGhpcy5pc0NoZWNrZWQpIHtcclxuICAgICAgaWYgKCF0aGlzLmZpbHRlciB8fCBPYmplY3Qua2V5cyh0aGlzLmZpbHRlcikubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXIgPSB0aGlzLmNyZWF0ZURlZmF1bHRGaWVsZEZpbHRlcigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVEZWZhdWx0RmllbGRGaWx0ZXIoKTogRmllbGRGaWx0ZXIge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZmllbGROYW1lOiAnJyxcclxuICAgICAgb3BlcmF0b3I6ICcnLFxyXG4gICAgICBmaWx0ZXJUeXBlOiAnJyxcclxuICAgICAgZmllbGRUeXBlOiAnJyxcclxuICAgICAgdmFsdWVPYmplY3Q6ICcnXHJcbiAgICB9IGFzIEZpZWxkRmlsdGVyO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibWFpbi1maWx0ZXItYnVpbGRlclwiPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZmlsdGVyRm9ybVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZpbHRlckZvcm1fX3Jvd1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyRm9ybV9fY29sXCI+XHJcbiAgICAgICAgPGFwcC1maWVsZC1maWx0ZXJcclxuICAgICAgICAgIFtlZGl0YWJsZV09XCJpc0VkaXRhYmxlKClcIlxyXG4gICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIlxyXG4gICAgICAgICAgW3BhZ2VJbmZvXT1cInBhZ2VJbmZvXCJcclxuICAgICAgICAgICpuZ0lmPVwiaXNFZGl0YWJsZSgpXCJcclxuICAgICAgICAgIFtmaWx0ZXJGaWVsZHNdPVwiZmlsdGVyRmllbGRzXCJcclxuICAgICAgICAgIChmaWx0ZXJGaWVsZEluZm9ybWF0aW9uKT1cImZvcm1DaGFuZ2VzKCRldmVudClcIlxyXG4gICAgICAgICAgY2xhc3M9XCJmaWx0ZXJGb3JtX19maWxlZC1maWx0ZXJcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L2FwcC1maWVsZC1maWx0ZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG48IS0tICA8ZGl2ICpuZ0lmPVwiY2hlY2tJc0VtcHR5KClcIiBjbGFzcz1cImxpbmUtdG9wXCI+LS0+XHJcbjwhLS0gICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+LS0+XHJcbjwhLS0gIDwvZGl2Pi0tPlxyXG5cclxuPCEtLSAgPGRpdiBjbGFzcz1cImxpbmUtYm90dG9tXCI+LS0+XHJcbjwhLS0gICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+LS0+XHJcbjwhLS0gIDwvZGl2Pi0tPlxyXG5cclxuPCEtLSAgPGRpdiBjbGFzcz1cImFjdGlvblwiPi0tPlxyXG48IS0tICAgIDxidXR0b24gY2xhc3M9XCJidG4tbm9uZS1iYWNrZ3JvdW5kLXByaW1hcnkgYWN0aW9uX19jbGVhclwiIG1hdC1idXR0b24gKGNsaWNrKT1cImRlbGV0ZUFsbCgpXCI+LS0+XHJcbjwhLS0gICAgICB7eydGSUxURVItQlVJTERFUi5jbGVhckFsbEZpbHRlcnMnIHwgdHJhbnNsYXRlfX0tLT5cclxuPCEtLSAgICA8L2J1dHRvbj4tLT5cclxuPCEtLSAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWJhY2tncm91bmQtcHJpbWFyeVwiIG1hdC1idXR0b24gKGNsaWNrKT1cImRvU2VhcmNoKClcIj4tLT5cclxuPCEtLSAgICAgIHt7J0ZJTFRFUi1CVUlMREVSLnNlYXJjaCcgfCB0cmFuc2xhdGV9fS0tPlxyXG48IS0tICAgIDwvYnV0dG9uPi0tPlxyXG48IS0tICA8L2Rpdj4tLT5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -0,0 +1,70 @@
1
+ import { Component, HostListener, Inject } from '@angular/core';
2
+ import { MAT_DIALOG_DATA, MatDialogContent, MatDialogTitle } from "@angular/material/dialog";
3
+ import { FormsModule } from "@angular/forms";
4
+ import { TranslateModule } from "@ngx-translate/core";
5
+ import { MatButton } from "@angular/material/button";
6
+ import { BaseFormCanvasComponent } from "../base-form-canvas/base-form-canvas.component";
7
+ import { MatDivider } from "@angular/material/divider";
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/material/dialog";
10
+ import * as i2 from "@ngx-translate/core";
11
+ export class AuditLogDetailsDialogComponent {
12
+ constructor(dialogRef, data) {
13
+ this.dialogRef = dialogRef;
14
+ this.data = data;
15
+ this.fields = [];
16
+ this.actionLabel = '';
17
+ this.isTermination = false;
18
+ this.comment = '';
19
+ this.external = false;
20
+ this.signingRequired = false;
21
+ this.tokenReference = "";
22
+ this.warningMsg = false;
23
+ this.item = {};
24
+ dialogRef.disableClose = true;
25
+ }
26
+ onKeyUp() {
27
+ this.dialogRef.close();
28
+ }
29
+ ngOnInit() {
30
+ this.pageInfo = this.data.pageInfo;
31
+ this.fields = this.data.fields;
32
+ this.fields = this.data.fields.map((f) => ({ ...f }));
33
+ const showHiddenFields = this.data.showHiddenFields || [];
34
+ this.fields.forEach(field => {
35
+ if (showHiddenFields.includes(field.property)) {
36
+ field.visible = true;
37
+ }
38
+ });
39
+ this.item = this.data.item;
40
+ this.comment = this.data.comment;
41
+ this.warningMsg = this.data.warningMsg || false;
42
+ }
43
+ cancel() {
44
+ this.dialogRef.close();
45
+ }
46
+ getTitle() {
47
+ return `${this.pageInfo.labelsSection}.${this.pageInfo.id}`;
48
+ }
49
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditLogDetailsDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
50
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AuditLogDetailsDialogComponent, isStandalone: true, selector: "app-audit-log-details-dialog", host: { listeners: { "window:keyup.esc": "onKeyUp()" } }, ngImport: i0, template: "<mat-dialog-content class=\"mat-typography overflow-hidden\">\r\n <div style=\"'padding': '10px 30px 10px 0'\">\r\n <h2 mat-dialog-title>{{ getTitle()| translate }}</h2>\r\n <app-base-form-canvas\r\n [pageInfo]=\"pageInfo\"\r\n [fields]=\"fields\"\r\n [editable]=\"false\"\r\n [item]=\"item\"\r\n ></app-base-form-canvas>\r\n\r\n <p>\r\n <span class=\"invoice-label\">{{ 'audit-log.reason_dialog' | translate }} :</span>\r\n <span class=\"invoice-label-text\">{{ comment }}</span>\r\n </p>\r\n <mat-divider style=\"width: 97%\"></mat-divider>\r\n <br>\r\n <button mat-stroked-button color='accent' style=\"margin: 5px\"\r\n (click)=\"cancel()\" id=\"acceptActionLabel\">\r\n {{ 'audit-log.close' | translate }}\r\n </button>\r\n <br>\r\n </div>\r\n</mat-dialog-content>\r\n", styles: [".m-0{margin:0!important}.w-100{width:100%}.form-style{min-height:12vh!important;height:auto!important}.text-red{color:red!important}.modal-footer{margin-top:5vh}.overflow-hidden{overflow:hidden}.pad-top{margin-top:-7px;display:block}.action-comment{display:flex;justify-content:space-between}.material-icons{color:#e22222}textarea#warn::placeholder{color:red}.invoice-label{color:var(--primary-color);margin:0;font-weight:700;padding-bottom:10px!important;padding-top:6px!important;border-bottom:none!important}.invoice-label-text{color:var(--accent-color);font-weight:400;word-wrap:break-word;white-space:pre-wrap;width:100%}\n"], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: BaseFormCanvasComponent, selector: "app-base-form-canvas", inputs: ["pageInfo", "currency", "fields", "errors", "workflowEditableFields", "isWorkflowEditableManaged", "supportingAttributes", "editable", "emitOnValueChanges", "item", "equationSuggestedFields", "currentEquationValue"], outputs: ["attachmentEmitter", "actionEmitter", "formUpdated", "hyperTextEvent", "currentEquationValueChange"] }, { kind: "component", type: MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }] }); }
51
+ }
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditLogDetailsDialogComponent, decorators: [{
53
+ type: Component,
54
+ args: [{ selector: 'app-audit-log-details-dialog', standalone: true, imports: [
55
+ MatDialogTitle,
56
+ MatDialogContent,
57
+ FormsModule,
58
+ TranslateModule,
59
+ MatButton,
60
+ BaseFormCanvasComponent,
61
+ MatDivider
62
+ ], template: "<mat-dialog-content class=\"mat-typography overflow-hidden\">\r\n <div style=\"'padding': '10px 30px 10px 0'\">\r\n <h2 mat-dialog-title>{{ getTitle()| translate }}</h2>\r\n <app-base-form-canvas\r\n [pageInfo]=\"pageInfo\"\r\n [fields]=\"fields\"\r\n [editable]=\"false\"\r\n [item]=\"item\"\r\n ></app-base-form-canvas>\r\n\r\n <p>\r\n <span class=\"invoice-label\">{{ 'audit-log.reason_dialog' | translate }} :</span>\r\n <span class=\"invoice-label-text\">{{ comment }}</span>\r\n </p>\r\n <mat-divider style=\"width: 97%\"></mat-divider>\r\n <br>\r\n <button mat-stroked-button color='accent' style=\"margin: 5px\"\r\n (click)=\"cancel()\" id=\"acceptActionLabel\">\r\n {{ 'audit-log.close' | translate }}\r\n </button>\r\n <br>\r\n </div>\r\n</mat-dialog-content>\r\n", styles: [".m-0{margin:0!important}.w-100{width:100%}.form-style{min-height:12vh!important;height:auto!important}.text-red{color:red!important}.modal-footer{margin-top:5vh}.overflow-hidden{overflow:hidden}.pad-top{margin-top:-7px;display:block}.action-comment{display:flex;justify-content:space-between}.material-icons{color:#e22222}textarea#warn::placeholder{color:red}.invoice-label{color:var(--primary-color);margin:0;font-weight:700;padding-bottom:10px!important;padding-top:6px!important;border-bottom:none!important}.invoice-label-text{color:var(--accent-color);font-weight:400;word-wrap:break-word;white-space:pre-wrap;width:100%}\n"] }]
63
+ }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
64
+ type: Inject,
65
+ args: [MAT_DIALOG_DATA]
66
+ }] }], propDecorators: { onKeyUp: [{
67
+ type: HostListener,
68
+ args: ['window:keyup.esc']
69
+ }] } });
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtbG9nLWRldGFpbHMtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ludm9pY2VxL3VpLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvYXVkaXQtbG9nLWRldGFpbHMtZGlhbG9nL2F1ZGl0LWxvZy1kZXRhaWxzLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZvaWNlcS91aS1saWIvc3JjL2xpYi9jb21wb25lbnRzL2F1ZGl0LWxvZy1kZXRhaWxzLWRpYWxvZy9hdWRpdC1sb2ctZGV0YWlscy1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxlQUFlLEVBQUUsZ0JBQWdCLEVBQWdCLGNBQWMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3pHLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRW5ELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQzs7OztBQWlCckQsTUFBTSxPQUFPLDhCQUE4QjtJQVl6QyxZQUFtQixTQUF1RCxFQUM5QixJQUFTO1FBRGxDLGNBQVMsR0FBVCxTQUFTLENBQThDO1FBQzlCLFNBQUksR0FBSixJQUFJLENBQUs7UUFYckQsV0FBTSxHQUFnQixFQUFFLENBQUM7UUFFekIsZ0JBQVcsR0FBVyxFQUFFLENBQUE7UUFDeEIsa0JBQWEsR0FBVyxLQUFLLENBQUM7UUFDOUIsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUNyQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBQzVCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsU0FBSSxHQUFRLEVBQUUsQ0FBQztRQUdiLFNBQVMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQ2hDLENBQUM7SUFDaUMsT0FBTztRQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRS9CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFM0QsTUFBTSxnQkFBZ0IsR0FBYSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztRQUNwRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMxQixJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDOUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDO0lBQ2hELENBQUM7SUFFSCxNQUFNO1FBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBR0QsUUFBUTtRQUNOLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQzlELENBQUM7K0dBM0NVLDhCQUE4Qiw4Q0FhckIsZUFBZTttR0FieEIsOEJBQThCLGtKQ3hCM0MscTFCQXVCQSw4cUJEVkksY0FBYywrSEFDZCxnQkFBZ0Isd0dBQ2hCLFdBQVcsOEJBQ1gsZUFBZSw0RkFDZixTQUFTLGlMQUNULHVCQUF1QixtWkFDdkIsVUFBVTs7NEZBS0QsOEJBQThCO2tCQWYxQyxTQUFTOytCQUNFLDhCQUE4QixjQUM1QixJQUFJLFdBQ1A7d0JBQ1AsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLFdBQVc7d0JBQ1gsZUFBZTt3QkFDZixTQUFTO3dCQUNULHVCQUF1Qjt3QkFDdkIsVUFBVTtxQkFDWDs7MEJBaUJZLE1BQU07MkJBQUMsZUFBZTt5Q0FHRCxPQUFPO3NCQUF4QyxZQUFZO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIEluamVjdCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ0NvbnRlbnQsIE1hdERpYWxvZ1JlZiwgTWF0RGlhbG9nVGl0bGV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xyXG5pbXBvcnQge01hdEJ1dHRvbn0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2J1dHRvblwiO1xyXG5pbXBvcnQge0ZpZWxkSW5mbywgUGFnZUluZm99IGZyb20gXCIuLi8uLi9iYXNlLW1vZGVsXCI7XHJcbmltcG9ydCB7QmFzZUZvcm1DYW52YXNDb21wb25lbnR9IGZyb20gXCIuLi9iYXNlLWZvcm0tY2FudmFzL2Jhc2UtZm9ybS1jYW52YXMuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7TWF0RGl2aWRlcn0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXJcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWF1ZGl0LWxvZy1kZXRhaWxzLWRpYWxvZycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBNYXREaWFsb2dUaXRsZSxcclxuICAgIE1hdERpYWxvZ0NvbnRlbnQsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcclxuICAgIE1hdEJ1dHRvbixcclxuICAgIEJhc2VGb3JtQ2FudmFzQ29tcG9uZW50LFxyXG4gICAgTWF0RGl2aWRlclxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2F1ZGl0LWxvZy1kZXRhaWxzLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2F1ZGl0LWxvZy1kZXRhaWxzLWRpYWxvZy5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXVkaXRMb2dEZXRhaWxzRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwYWdlSW5mbzogUGFnZUluZm87XHJcbiAgZmllbGRzOiBGaWVsZEluZm9bXSA9IFtdO1xyXG5cclxuICBhY3Rpb25MYWJlbCA6IHN0cmluZyA9JydcclxuICBpc1Rlcm1pbmF0aW9uIDogYm9vbGVhbj1mYWxzZTtcclxuICBjb21tZW50OiBzdHJpbmcgPSAnJztcclxuICBleHRlcm5hbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNpZ25pbmdSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRva2VuUmVmZXJlbmNlOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHdhcm5pbmdNc2cgPSBmYWxzZTtcclxuICBpdGVtOiBhbnkgPSB7fTtcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8QXVkaXRMb2dEZXRhaWxzRGlhbG9nQ29tcG9uZW50PixcclxuICAgICAgICAgICAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueSkge1xyXG4gICAgZGlhbG9nUmVmLmRpc2FibGVDbG9zZSA9IHRydWU7XHJcbiAgfVxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXl1cC5lc2MnKSBvbktleVVwKCkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnBhZ2VJbmZvID0gdGhpcy5kYXRhLnBhZ2VJbmZvO1xyXG4gICAgdGhpcy5maWVsZHMgPSB0aGlzLmRhdGEuZmllbGRzO1xyXG5cclxuICAgIHRoaXMuZmllbGRzID0gdGhpcy5kYXRhLmZpZWxkcy5tYXAoKGY6IGFueSkgPT4gKHsgLi4uZiB9KSk7XHJcblxyXG4gICAgY29uc3Qgc2hvd0hpZGRlbkZpZWxkczogc3RyaW5nW10gPSB0aGlzLmRhdGEuc2hvd0hpZGRlbkZpZWxkcyB8fCBbXTtcclxuICAgIHRoaXMuZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICBpZiAoc2hvd0hpZGRlbkZpZWxkcy5pbmNsdWRlcyhmaWVsZC5wcm9wZXJ0eSkpIHtcclxuICAgICAgICBmaWVsZC52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLml0ZW0gPSB0aGlzLmRhdGEuaXRlbTtcclxuICAgIHRoaXMuY29tbWVudCA9IHRoaXMuZGF0YS5jb21tZW50O1xyXG4gICAgdGhpcy53YXJuaW5nTXNnID0gdGhpcy5kYXRhLndhcm5pbmdNc2cgfHwgZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gIGNhbmNlbCgpIHtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0VGl0bGUoKSB7XHJcbiAgICByZXR1cm4gYCR7dGhpcy5wYWdlSW5mby5sYWJlbHNTZWN0aW9ufS4ke3RoaXMucGFnZUluZm8uaWR9YDtcclxuICB9XHJcbn1cclxuIiwiPG1hdC1kaWFsb2ctY29udGVudCBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5IG92ZXJmbG93LWhpZGRlblwiPlxyXG4gIDxkaXYgc3R5bGU9XCIncGFkZGluZyc6ICcxMHB4IDMwcHggMTBweCAwJ1wiPlxyXG4gICAgPGgyIG1hdC1kaWFsb2ctdGl0bGU+e3sgZ2V0VGl0bGUoKXwgdHJhbnNsYXRlIH19PC9oMj5cclxuICAgIDxhcHAtYmFzZS1mb3JtLWNhbnZhc1xyXG4gICAgICBbcGFnZUluZm9dPVwicGFnZUluZm9cIlxyXG4gICAgICBbZmllbGRzXT1cImZpZWxkc1wiXHJcbiAgICAgIFtlZGl0YWJsZV09XCJmYWxzZVwiXHJcbiAgICAgIFtpdGVtXT1cIml0ZW1cIlxyXG4gICAgPjwvYXBwLWJhc2UtZm9ybS1jYW52YXM+XHJcblxyXG4gICAgPHA+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiaW52b2ljZS1sYWJlbFwiPnt7ICdhdWRpdC1sb2cucmVhc29uX2RpYWxvZycgfCB0cmFuc2xhdGUgfX0gOjwvc3Bhbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJpbnZvaWNlLWxhYmVsLXRleHRcIj57eyBjb21tZW50IH19PC9zcGFuPlxyXG4gICAgPC9wPlxyXG4gICAgPG1hdC1kaXZpZGVyIHN0eWxlPVwid2lkdGg6IDk3JVwiPjwvbWF0LWRpdmlkZXI+XHJcbiAgICA8YnI+XHJcbiAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj0nYWNjZW50JyBzdHlsZT1cIm1hcmdpbjogNXB4XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbCgpXCIgaWQ9XCJhY2NlcHRBY3Rpb25MYWJlbFwiPlxyXG4gICAgICB7eyAnYXVkaXQtbG9nLmNsb3NlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnI+XHJcbiAgPC9kaXY+XHJcbjwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG4iXX0=
@@ -0,0 +1,99 @@
1
+ import { Component, Inject, Input } from '@angular/core';
2
+ import { Filter, FilterRequest } from "../../base-model";
3
+ import { TranslateModule } from "@ngx-translate/core";
4
+ import { DatePipe, NgForOf, NgIf } from "@angular/common";
5
+ import { MatButton, MatButtonModule } from "@angular/material/button";
6
+ import { MatIconModule } from "@angular/material/icon";
7
+ import { AuditLogDetailsDialogComponent } from "../audit-log-details-dialog/audit-log-details-dialog.component";
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/material/dialog";
10
+ import * as i2 from "@angular/router";
11
+ import * as i3 from "@angular/common";
12
+ import * as i4 from "@ngx-translate/core";
13
+ import * as i5 from "@angular/cdk/bidi";
14
+ import * as i6 from "../../services";
15
+ import * as i7 from "@angular/material/button";
16
+ export class AuditLogComponent {
17
+ constructor(dialog, activatedRoute, datePipe, translateService, router, directionality, securityManager, backendService) {
18
+ this.dialog = dialog;
19
+ this.activatedRoute = activatedRoute;
20
+ this.datePipe = datePipe;
21
+ this.translateService = translateService;
22
+ this.router = router;
23
+ this.directionality = directionality;
24
+ this.securityManager = securityManager;
25
+ this.backendService = backendService;
26
+ this.auditLogEntries = [];
27
+ this.item = {};
28
+ this.isLoaded = false;
29
+ }
30
+ ngOnInit() {
31
+ this.currentDirection = this.directionality.value;
32
+ this.directionality.change.subscribe((value) => {
33
+ this.currentDirection = value;
34
+ });
35
+ this.loadItem();
36
+ }
37
+ loadItem() {
38
+ if (this.activatedRoute.snapshot.queryParams['token']) {
39
+ this.itemId = this.backendService.decrypt(this.activatedRoute.snapshot.queryParams['token']);
40
+ }
41
+ const filterRequest = new FilterRequest;
42
+ if (this.itemId > 0) {
43
+ filterRequest.filters = [];
44
+ filterRequest.sortDirection = "DESC";
45
+ // TODO
46
+ // add pagination support here.
47
+ filterRequest.pageSize = 1000;
48
+ filterRequest.filters.push(new Filter({
49
+ key: 0,
50
+ fieldType: 'Long',
51
+ fieldName: 'id',
52
+ valueObject: this.itemId,
53
+ filterType: 'FILED_FILTER',
54
+ operator: 'EQUALS'
55
+ }));
56
+ }
57
+ this.backendService.getItemAuditLog(filterRequest, this.pageInfo.apiUri).subscribe(resp => {
58
+ this.auditLogEntries = resp.body;
59
+ });
60
+ }
61
+ viewObject(auditLog) {
62
+ const dialogRef = this.dialog.open(AuditLogDetailsDialogComponent, {
63
+ data: { pageInfo: this.pageInfo, fields: this.fields, item: auditLog.subject, comment: auditLog.comment, showHiddenFields: this.showHiddenFields },
64
+ width: '800px',
65
+ height: 'auto',
66
+ direction: this.currentDirection
67
+ });
68
+ }
69
+ getDescription(auditLog) {
70
+ return `
71
+ ${auditLog.createdBy || this.translateService.instant('system')}
72
+ ${this.translateService.instant('on')}
73
+ ${this.datePipe.transform(auditLog.createdOn, 'medium')}
74
+ ${this.translateService.instant('audit-log.executed')} ${this.translateService.instant(auditLog.action.toString())}`;
75
+ }
76
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditLogComponent, deps: [{ token: i1.MatDialog }, { token: i2.ActivatedRoute }, { token: i3.DatePipe }, { token: i4.TranslateService }, { token: i2.Router }, { token: i5.Directionality }, { token: 'securityManager' }, { token: i6.BackendService }], target: i0.ɵɵFactoryTarget.Component }); }
77
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AuditLogComponent, isStandalone: true, selector: "app-audit-log", inputs: { pageInfo: "pageInfo", fields: "fields", showHiddenFields: "showHiddenFields" }, providers: [DatePipe], ngImport: i0, template: "<h4>\r\n <span class=\"audit-log-title\">{{ 'audit-log.title' | translate }}</span>\r\n</h4>\r\n\r\n<div class=\"hrdivider-mini\">\r\n <hr class=\"header-hr\" />\r\n</div>\r\n\r\n<div class=\"audit-log-container\" *ngFor=\"let auditLog of auditLogEntries; let i = index\">\r\n <div class=\"audit-log-entry\">\r\n <p *ngIf=\"i === 0\" class=\"audit-log-spacer\"></p>\r\n\r\n <p class=\"audit-log-text\">\r\n {{ getDescription(auditLog) }}\r\n <button mat-stroked-button color=\"secondary\" (click)=\"viewObject(auditLog)\" [attr.id]=\"'audit-view-details-' + i\">\r\n {{ 'audit-log.view_details' | translate }}\r\n </button>\r\n </p>\r\n\r\n <p class=\"invoice-label-text\"></p>\r\n\r\n <div class=\"hrdivider-mini\">\r\n <hr class=\"header-hr\" />\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".audit-log-title{font-weight:400;color:#222}.hrdivider-mini{width:100%}.header-hr{height:4px;background-color:#339dff;border:none;margin:5px 0}.audit-log-container{display:flex;flex-direction:row;gap:5px;justify-content:flex-start;align-items:flex-start;width:100%;flex-wrap:wrap}.audit-log-entry{display:flex;flex-direction:column;align-items:flex-start;flex:1 1 100%}.audit-log-spacer{margin-bottom:15px;margin-top:0}.audit-log-text{margin:0;word-wrap:break-word}@media (max-width: 960px){.audit-log-container{flex-direction:column;align-items:stretch}}\n"], dependencies: [{ kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }] }); }
78
+ }
79
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditLogComponent, decorators: [{
80
+ type: Component,
81
+ args: [{ selector: 'app-audit-log', standalone: true, imports: [
82
+ NgForOf,
83
+ MatButtonModule,
84
+ TranslateModule,
85
+ NgIf,
86
+ MatIconModule,
87
+ MatButton
88
+ ], providers: [DatePipe], template: "<h4>\r\n <span class=\"audit-log-title\">{{ 'audit-log.title' | translate }}</span>\r\n</h4>\r\n\r\n<div class=\"hrdivider-mini\">\r\n <hr class=\"header-hr\" />\r\n</div>\r\n\r\n<div class=\"audit-log-container\" *ngFor=\"let auditLog of auditLogEntries; let i = index\">\r\n <div class=\"audit-log-entry\">\r\n <p *ngIf=\"i === 0\" class=\"audit-log-spacer\"></p>\r\n\r\n <p class=\"audit-log-text\">\r\n {{ getDescription(auditLog) }}\r\n <button mat-stroked-button color=\"secondary\" (click)=\"viewObject(auditLog)\" [attr.id]=\"'audit-view-details-' + i\">\r\n {{ 'audit-log.view_details' | translate }}\r\n </button>\r\n </p>\r\n\r\n <p class=\"invoice-label-text\"></p>\r\n\r\n <div class=\"hrdivider-mini\">\r\n <hr class=\"header-hr\" />\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".audit-log-title{font-weight:400;color:#222}.hrdivider-mini{width:100%}.header-hr{height:4px;background-color:#339dff;border:none;margin:5px 0}.audit-log-container{display:flex;flex-direction:row;gap:5px;justify-content:flex-start;align-items:flex-start;width:100%;flex-wrap:wrap}.audit-log-entry{display:flex;flex-direction:column;align-items:flex-start;flex:1 1 100%}.audit-log-spacer{margin-bottom:15px;margin-top:0}.audit-log-text{margin:0;word-wrap:break-word}@media (max-width: 960px){.audit-log-container{flex-direction:column;align-items:stretch}}\n"] }]
89
+ }], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.ActivatedRoute }, { type: i3.DatePipe }, { type: i4.TranslateService }, { type: i2.Router }, { type: i5.Directionality }, { type: undefined, decorators: [{
90
+ type: Inject,
91
+ args: ['securityManager']
92
+ }] }, { type: i6.BackendService }], propDecorators: { pageInfo: [{
93
+ type: Input
94
+ }], fields: [{
95
+ type: Input
96
+ }], showHiddenFields: [{
97
+ type: Input
98
+ }] } });
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ludm9pY2VxL3VpLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvYXVkaXQtbG9nLWxpc3QvYXVkaXQtbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ludm9pY2VxL3VpLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvYXVkaXQtbG9nLWxpc3QvYXVkaXQtbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQVksTUFBTSxFQUFFLGFBQWEsRUFBd0IsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RixPQUFPLEVBQUMsZUFBZSxFQUFtQixNQUFNLHFCQUFxQixDQUFDO0FBRXRFLE9BQU8sRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxTQUFTLEVBQUUsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDcEUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBSXJELE9BQU8sRUFBQyw4QkFBOEIsRUFBQyxNQUFNLGdFQUFnRSxDQUFDOzs7Ozs7Ozs7QUFrQjlHLE1BQU0sT0FBTyxpQkFBaUI7SUFzQjVCLFlBQW1CLE1BQWlCLEVBQ2QsY0FBOEIsRUFDOUIsUUFBa0IsRUFDbEIsZ0JBQWlDLEVBQ2pDLE1BQWEsRUFDYixjQUE4QixFQUNILGVBQW9CLEVBQ2hELGNBQThCO1FBUGhDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDZCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixxQkFBZ0IsR0FBaEIs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QUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUM7U0FDckQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUE7SUFDekgsQ0FBQzsrR0FwRlUsaUJBQWlCLHFMQTRCTixpQkFBaUI7bUdBNUI1QixpQkFBaUIsc0pBSmpCLENBQUMsUUFBUSxDQUFDLDBCQ3hCdkIsazBCQTBCQSx1bUJEVEksT0FBTyxrSEFDUCxlQUFlLDJOQUNmLGVBQWUsNEZBQ2YsSUFBSSw0RkFDSixhQUFhOzs0RkFPSixpQkFBaUI7a0JBZjdCLFNBQVM7K0JBQ0ksZUFBZSxjQUNiLElBQUksV0FDVDt3QkFDUCxPQUFPO3dCQUNQLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixJQUFJO3dCQUNKLGFBQWE7d0JBQ2IsU0FBUztxQkFDVixhQUNVLENBQUMsUUFBUSxDQUFDOzswQkFnQ04sTUFBTTsyQkFBQyxpQkFBaUI7c0VBeEJ2QyxRQUFRO3NCQURQLEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxLQUFLO2dCQUlOLGdCQUFnQjtzQkFEZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7RmllbGRJbmZvLCBGaWx0ZXIsIEZpbHRlclJlcXVlc3QsIFBhZ2VJbmZvLCBUYWJsZUNvbHVtbn0gZnJvbSBcIi4uLy4uL2Jhc2UtbW9kZWxcIjtcclxuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XHJcbmltcG9ydCB7QmFja2VuZFNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlc1wiO1xyXG5pbXBvcnQge0RhdGVQaXBlLCBOZ0Zvck9mLCBOZ0lmfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7TWF0QnV0dG9uLCBNYXRCdXR0b25Nb2R1bGV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9idXR0b25cIjtcclxuaW1wb3J0IHtNYXRJY29uTW9kdWxlfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvblwiO1xyXG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHtBdWRpdExvZ0VudHJ5fSBmcm9tIFwiLi4vLi4vYmFzZS1tb2RlbC9hdWRpdC1sb2ctZW50cnlcIjtcclxuaW1wb3J0IHtBdWRpdExvZ0RldGFpbHNEaWFsb2dDb21wb25lbnR9IGZyb20gXCIuLi9hdWRpdC1sb2ctZGV0YWlscy1kaWFsb2cvYXVkaXQtbG9nLWRldGFpbHMtZGlhbG9nLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge0RpcmVjdGlvbmFsaXR5fSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2JpZGlcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdhcHAtYXVkaXQtbG9nJyxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgTmdGb3JPZixcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcclxuICAgIE5nSWYsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uXHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtEYXRlUGlwZV0sXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXVkaXQtbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsOiAnLi9hdWRpdC1sb2cuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdWRpdExvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgYXVkaXRMb2dFbnRyaWVzOiBBdWRpdExvZ0VudHJ5W10gPSBbXTtcclxuXHJcbiAgQElucHV0KClcclxuICBwYWdlSW5mbyE6IFBhZ2VJbmZvO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGZpZWxkczogRmllbGRJbmZvW107XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2hvd0hpZGRlbkZpZWxkcyA6IHN0cmluZ1tdO1xyXG5cclxuXHJcbiAgaXRlbUlkOiBudW1iZXI7XHJcblxyXG4gIGl0ZW0gOiBhbnkgPSB7fTtcclxuICBpc0xvYWRlZCA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjb2x1bW5zRGVmaW5pdGlvbjogVGFibGVDb2x1bW48YW55PltdO1xyXG5cclxuICBjdXJyZW50RGlyZWN0aW9uOiAnbHRyJyB8ICdydGwnO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTpUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByb3V0ZXI6Um91dGVyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBkaXJlY3Rpb25hbGl0eTogRGlyZWN0aW9uYWxpdHksXHJcbiAgICAgICAgICAgICAgICBASW5qZWN0KCdzZWN1cml0eU1hbmFnZXInKSBwcml2YXRlIHNlY3VyaXR5TWFuYWdlcjogYW55LFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGJhY2tlbmRTZXJ2aWNlOiBCYWNrZW5kU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICB0aGlzLmN1cnJlbnREaXJlY3Rpb24gPSB0aGlzLmRpcmVjdGlvbmFsaXR5LnZhbHVlO1xyXG4gICAgICB0aGlzLmRpcmVjdGlvbmFsaXR5LmNoYW5nZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RGlyZWN0aW9uID0gdmFsdWU7XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLmxvYWRJdGVtKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICBwcml2YXRlIGxvYWRJdGVtKCkge1xyXG4gICAgaWYgKHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbJ3Rva2VuJ10pIHtcclxuICAgICAgdGhpcy5pdGVtSWQgPSB0aGlzLmJhY2tlbmRTZXJ2aWNlLmRlY3J5cHQodGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1sndG9rZW4nXSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBmaWx0ZXJSZXF1ZXN0ID0gbmV3IEZpbHRlclJlcXVlc3Q7XHJcbiAgICBpZiAodGhpcy5pdGVtSWQgPiAwKSB7XHJcbiAgICAgIGZpbHRlclJlcXVlc3QuZmlsdGVycyA9IFtdO1xyXG4gICAgICBmaWx0ZXJSZXF1ZXN0LnNvcnREaXJlY3Rpb24gPSBcIkRFU0NcIjtcclxuICAgICAgLy8gVE9ET1xyXG4gICAgICAvLyBhZGQgcGFnaW5hdGlvbiBzdXBwb3J0IGhlcmUuXHJcbiAgICAgIGZpbHRlclJlcXVlc3QucGFnZVNpemUgPSAxMDAwO1xyXG4gICAgICBmaWx0ZXJSZXF1ZXN0LmZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHtcclxuICAgICAgICBrZXk6IDAsXHJcbiAgICAgICAgZmllbGRUeXBlOiAnTG9uZycsXHJcbiAgICAgICAgZmllbGROYW1lOiAnaWQnLFxyXG4gICAgICAgIHZhbHVlT2JqZWN0OiB0aGlzLml0ZW1JZCxcclxuICAgICAgICBmaWx0ZXJUeXBlOiAnRklMRURfRklMVEVSJyxcclxuICAgICAgICBvcGVyYXRvcjogJ0VRVUFMUydcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG4gICAgICB0aGlzLmJhY2tlbmRTZXJ2aWNlLmdldEl0ZW1BdWRpdExvZyhmaWx0ZXJSZXF1ZXN0LCB0aGlzLnBhZ2VJbmZvIS5hcGlVcmkpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICB0aGlzLmF1ZGl0TG9nRW50cmllcyA9IHJlc3AuYm9keTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgdmlld09iamVjdChhdWRpdExvZzogQXVkaXRMb2dFbnRyeSkge1xyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihBdWRpdExvZ0RldGFpbHNEaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgZGF0YToge3BhZ2VJbmZvOiB0aGlzLnBhZ2VJbmZvLCBmaWVsZHM6IHRoaXMuZmllbGRzLCBpdGVtOmF1ZGl0TG9nLnN1YmplY3QsIGNvbW1lbnQ6IGF1ZGl0TG9nLmNvbW1lbnQsIHNob3dIaWRkZW5GaWVsZHM6dGhpcy5zaG93SGlkZGVuRmllbGRzfSxcclxuICAgICAgd2lkdGg6ICc4MDBweCcsXHJcbiAgICAgIGhlaWdodDogJ2F1dG8nLFxyXG4gICAgICBkaXJlY3Rpb246IHRoaXMuY3VycmVudERpcmVjdGlvblxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0RGVzY3JpcHRpb24oYXVkaXRMb2c6IEF1ZGl0TG9nRW50cnkpIHtcclxuICAgIHJldHVybiBgXHJcbiAgICAgICAke2F1ZGl0TG9nLmNyZWF0ZWRCeSB8fCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnc3lzdGVtJyl9XHJcbiAgICAgICAke3RoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdvbicpfVxyXG4gICAgICAgJHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShhdWRpdExvZy5jcmVhdGVkT24sICdtZWRpdW0nKX1cclxuICAgICAgICR7dGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2F1ZGl0LWxvZy5leGVjdXRlZCcpfSAke3RoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGF1ZGl0TG9nLmFjdGlvbi50b1N0cmluZygpKX1gXHJcbiAgfVxyXG59XHJcbiIsIjxoND5cclxuICA8c3BhbiBjbGFzcz1cImF1ZGl0LWxvZy10aXRsZVwiPnt7ICdhdWRpdC1sb2cudGl0bGUnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG48L2g0PlxyXG5cclxuPGRpdiBjbGFzcz1cImhyZGl2aWRlci1taW5pXCI+XHJcbiAgPGhyIGNsYXNzPVwiaGVhZGVyLWhyXCIgLz5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiYXVkaXQtbG9nLWNvbnRhaW5lclwiICpuZ0Zvcj1cImxldCBhdWRpdExvZyBvZiBhdWRpdExvZ0VudHJpZXM7IGxldCBpID0gaW5kZXhcIj5cclxuICA8ZGl2IGNsYXNzPVwiYXVkaXQtbG9nLWVudHJ5XCI+XHJcbiAgICA8cCAqbmdJZj1cImkgPT09IDBcIiBjbGFzcz1cImF1ZGl0LWxvZy1zcGFjZXJcIj48L3A+XHJcblxyXG4gICAgPHAgY2xhc3M9XCJhdWRpdC1sb2ctdGV4dFwiPlxyXG4gICAgICB7eyBnZXREZXNjcmlwdGlvbihhdWRpdExvZykgfX1cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJzZWNvbmRhcnlcIiAoY2xpY2spPVwidmlld09iamVjdChhdWRpdExvZylcIiBbYXR0ci5pZF09XCInYXVkaXQtdmlldy1kZXRhaWxzLScgKyBpXCI+XHJcbiAgICAgICAge3sgJ2F1ZGl0LWxvZy52aWV3X2RldGFpbHMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9wPlxyXG5cclxuICAgIDxwIGNsYXNzPVwiaW52b2ljZS1sYWJlbC10ZXh0XCI+PC9wPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJocmRpdmlkZXItbWluaVwiPlxyXG4gICAgICA8aHIgY2xhc3M9XCJoZWFkZXItaHJcIiAvPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=