@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
@@ -1,69 +0,0 @@
1
- import {Component, HostListener, Inject, OnInit} from '@angular/core';
2
- import {MAT_DIALOG_DATA, MatDialogContent, MatDialogRef, 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 {FieldInfo, PageInfo} from "../../base-model";
7
- import {BaseFormCanvasComponent} from "../base-form-canvas/base-form-canvas.component";
8
- import {MatDivider} from "@angular/material/divider";
9
-
10
- @Component({
11
- selector: 'app-audit-log-details-dialog',
12
- standalone: true,
13
- imports: [
14
- MatDialogTitle,
15
- MatDialogContent,
16
- FormsModule,
17
- TranslateModule,
18
- MatButton,
19
- BaseFormCanvasComponent,
20
- MatDivider
21
- ],
22
- templateUrl: './audit-log-details-dialog.component.html',
23
- styleUrl: './audit-log-details-dialog.component.css'
24
- })
25
- export class AuditLogDetailsDialogComponent implements OnInit {
26
- pageInfo: PageInfo;
27
- fields: FieldInfo[] = [];
28
-
29
- actionLabel : string =''
30
- isTermination : boolean=false;
31
- comment: string = '';
32
- external: boolean = false;
33
- signingRequired: boolean = false;
34
- tokenReference: string = "";
35
- warningMsg = false;
36
- item: any = {};
37
- constructor(public dialogRef: MatDialogRef<AuditLogDetailsDialogComponent>,
38
- @Inject(MAT_DIALOG_DATA) public data: any) {
39
- dialogRef.disableClose = true;
40
- }
41
- @HostListener('window:keyup.esc') onKeyUp() {
42
- this.dialogRef.close();
43
- }
44
- ngOnInit(): void {
45
- this.pageInfo = this.data.pageInfo;
46
- this.fields = this.data.fields;
47
-
48
- this.fields = this.data.fields.map((f: any) => ({ ...f }));
49
-
50
- const showHiddenFields: string[] = this.data.showHiddenFields || [];
51
- this.fields.forEach(field => {
52
- if (showHiddenFields.includes(field.property)) {
53
- field.visible = true;
54
- }
55
- });
56
- this.item = this.data.item;
57
- this.comment = this.data.comment;
58
- this.warningMsg = this.data.warningMsg || false;
59
- }
60
-
61
- cancel() {
62
- this.dialogRef.close();
63
- }
64
-
65
-
66
- getTitle() {
67
- return `${this.pageInfo.labelsSection}.${this.pageInfo.id}`;
68
- }
69
- }
@@ -1,23 +0,0 @@
1
- <h4><span style="font-weight: normal; color: #222222" >{{'audit-log.title' | translate}}</span></h4>
2
- <div class="hrdivider-mini" >
3
- <hr class="header-hr"/>
4
- </div>
5
-
6
- <div fxLayout="row" fxLayout.lt-md="row" fxLayoutGap="5px" fxLayoutAlign="start start" style="width: 100%;"
7
- *ngFor="let auditLog of auditLogEntries; let i=index">
8
- <div fxLayout="column" fxFlex="100" fxLayoutAlign="start start">
9
- <p *ngIf="i===0" style="margin-bottom: 15px; margin-top: 0"></p>
10
- <p style="margin-bottom: 0; margin-top: 0">
11
- {{getDescription(auditLog)}}
12
- <button mat-stroked-button color="secondary" (click)="viewObject(auditLog)">
13
- {{ 'audit-log.view_details' | translate }}
14
- </button>
15
-
16
- </p>
17
- <p class="invoice-label-text" style="margin: 0;word-wrap: break-word"></p>
18
- <div class="hrdivider-mini" >
19
- <hr class="header-hr"/>
20
- </div>
21
- </div>
22
-
23
- </div>
@@ -1,25 +0,0 @@
1
- import {ComponentFixture, TestBed} from '@angular/core/testing';
2
-
3
- import {AuditLogComponent} from './audit-log.component';
4
-
5
- describe('BaseFormComponent', () => {
6
- let component: AuditLogComponent;
7
- let fixture: ComponentFixture<AuditLogComponent>;
8
-
9
- beforeEach(async () => {
10
- await TestBed.configureTestingModule({
11
- declarations: [ AuditLogComponent ]
12
- })
13
- .compileComponents();
14
- });
15
-
16
- beforeEach(() => {
17
- fixture = TestBed.createComponent(AuditLogComponent);
18
- component = fixture.componentInstance;
19
- fixture.detectChanges();
20
- });
21
-
22
- it('should create', () => {
23
- expect(component).toBeTruthy();
24
- });
25
- });
@@ -1,116 +0,0 @@
1
- import {Component, Inject, Input, OnInit} from '@angular/core';
2
- import {FieldInfo, Filter, FilterRequest, PageInfo, TableColumn} from "../../base-model";
3
- import {TranslateModule, TranslateService} from "@ngx-translate/core";
4
- import {BackendService} from "../../services";
5
- import {DatePipe, NgForOf, NgIf} from "@angular/common";
6
- import {FlexLayoutModule} from "@angular/flex-layout";
7
- import {MatButton, MatButtonModule} from "@angular/material/button";
8
- import {MatIconModule} from "@angular/material/icon";
9
- import {MatDialog} from "@angular/material/dialog";
10
- import {ActivatedRoute, Router} from "@angular/router";
11
- import {AuditLogEntry} from "../../base-model/audit-log-entry";
12
- import {AuditLogDetailsDialogComponent} from "../audit-log-details-dialog/audit-log-details-dialog.component";
13
- import {Directionality} from "@angular/cdk/bidi";
14
-
15
- @Component({
16
- selector: 'app-audit-log',
17
- standalone: true,
18
- imports: [
19
- FlexLayoutModule,
20
- NgForOf,
21
- MatButtonModule,
22
- TranslateModule,
23
- NgIf,
24
- MatIconModule,
25
- MatButton
26
- ],
27
- providers: [DatePipe],
28
- templateUrl: './audit-log.component.html',
29
- styleUrl: './audit-log.component.scss'
30
- })
31
- export class AuditLogComponent implements OnInit {
32
- auditLogEntries: AuditLogEntry[] = [];
33
-
34
- @Input()
35
- pageInfo!: PageInfo;
36
-
37
- @Input()
38
- fields: FieldInfo[];
39
-
40
- @Input()
41
- showHiddenFields : string[];
42
-
43
-
44
- itemId: number;
45
-
46
- item : any = {};
47
- isLoaded : boolean = false;
48
- columnsDefinition: TableColumn<any>[];
49
-
50
- currentDirection: 'ltr' | 'rtl';
51
-
52
-
53
- constructor(public dialog: MatDialog,
54
- private activatedRoute: ActivatedRoute,
55
- private datePipe: DatePipe,
56
- private translateService:TranslateService,
57
- private router:Router,
58
- private directionality: Directionality,
59
- @Inject('securityManager') private securityManager: any,
60
- public backendService: BackendService) {
61
- }
62
-
63
- ngOnInit(): void {
64
- this.currentDirection = this.directionality.value;
65
- this.directionality.change.subscribe((value) => {
66
- this.currentDirection = value;
67
- })
68
-
69
- this.loadItem();
70
- }
71
-
72
-
73
- private loadItem() {
74
- if (this.activatedRoute.snapshot.queryParams['token']) {
75
- this.itemId = this.backendService.decrypt(this.activatedRoute.snapshot.queryParams['token']);
76
- }
77
- const filterRequest = new FilterRequest;
78
- if (this.itemId > 0) {
79
- filterRequest.filters = [];
80
- filterRequest.sortDirection = "DESC";
81
- // TODO
82
- // add pagination support here.
83
- filterRequest.pageSize = 1000;
84
- filterRequest.filters.push(new Filter({
85
- key: 0,
86
- fieldType: 'Long',
87
- fieldName: 'id',
88
- valueObject: this.itemId,
89
- filterType: 'FILED_FILTER',
90
- operator: 'EQUALS'
91
- }));
92
- }
93
- this.backendService.getItemAuditLog(filterRequest, this.pageInfo!.apiUri).subscribe(resp => {
94
- this.auditLogEntries = resp.body;
95
- });
96
- }
97
-
98
-
99
- viewObject(auditLog: AuditLogEntry) {
100
- const dialogRef = this.dialog.open(AuditLogDetailsDialogComponent, {
101
- data: {pageInfo: this.pageInfo, fields: this.fields, item:auditLog.subject, comment: auditLog.comment, showHiddenFields:this.showHiddenFields},
102
- width: '800px',
103
- height: 'auto',
104
- direction: this.currentDirection
105
- });
106
-
107
- }
108
-
109
- getDescription(auditLog: AuditLogEntry) {
110
- return `
111
- ${auditLog.createdBy || this.translateService.instant('system')}
112
- ${this.translateService.instant('on')}
113
- ${this.datePipe.transform(auditLog.createdOn, 'medium')}
114
- ${this.translateService.instant('audit-log.executed')} ${this.translateService.instant(auditLog.action.toString())}`
115
- }
116
- }
@@ -1,14 +0,0 @@
1
- ::ng-deep .main-auto-complete {
2
-
3
- .matField {
4
- margin-bottom: 24px !important;
5
- .mat-form-field-wrapper {
6
- padding: 0 !important;
7
- margin-bottom: 0 !important;
8
- }
9
- }
10
-
11
-
12
- }
13
-
14
-
@@ -1,29 +0,0 @@
1
- <ng-container *ngIf="this.field" class="main-auto-complete">
2
- <div class="matField" [formGroup]="form">
3
- <mat-form-field fxFlex="100" appearance="outline" (click)="this.filterLookupItems('', autocompleteTrigger)">
4
- <mat-label>{{ field.label! | translate}}</mat-label>
5
- <input class="flex-auto" type="text"
6
- [placeholder]="'search_placeholder' | translate"
7
- [id]="getId()"
8
- [formControl]="myControl"
9
- (keydown)="onKeydown($event, autocompleteTrigger)"
10
- [matAutocomplete]="auto" matInput
11
- [required]="isRequired"
12
- #autocompleteTrigger="matAutocompleteTrigger"
13
- [readonly]="readonly"
14
- >
15
- <mat-icon class="arrow_drop_down_autocomplete">arrow_drop_down</mat-icon>
16
-
17
- <mat-autocomplete #auto="matAutocomplete" autoActiveFirstOption="" [displayWith]="displayFn.bind(this)"
18
- (optionSelected)="itemSelected($event.option.value)"
19
- (closed)="closed()">
20
- <ng-container *ngIf="!field.readonly">
21
- <mat-option *ngIf="items.length > 1 && lookupItems$" [value]="null">{{ "none" | translate}}</mat-option>
22
- <mat-option *ngFor="let item of lookupItems$ | async" [value]="item"
23
- [ngClass]="_allowSelection(item)">
24
- {{itemNameByLag(item)}}</mat-option>
25
- </ng-container>
26
- </mat-autocomplete>
27
- </mat-form-field>
28
- </div>
29
- </ng-container>
@@ -1,23 +0,0 @@
1
- import { ComponentFixture, TestBed } from '@angular/core/testing';
2
-
3
- import { AutoCompleteComponent } from './auto-complete.component';
4
-
5
- describe('AutoCompleteComponent', () => {
6
- let component: AutoCompleteComponent;
7
- let fixture: ComponentFixture<AutoCompleteComponent>;
8
-
9
- beforeEach(async () => {
10
- await TestBed.configureTestingModule({
11
- imports: [AutoCompleteComponent]
12
- })
13
- .compileComponents();
14
-
15
- fixture = TestBed.createComponent(AutoCompleteComponent);
16
- component = fixture.componentInstance;
17
- fixture.detectChanges();
18
- });
19
-
20
- it('should create', () => {
21
- expect(component).toBeTruthy();
22
- });
23
- });
@@ -1,330 +0,0 @@
1
- import {
2
- Component,
3
- EventEmitter,
4
- Inject,
5
- Input,
6
- OnChanges,
7
- OnInit,
8
- Output,
9
- SimpleChanges,
10
- ViewChild
11
- } from '@angular/core';
12
- import {FieldInfo, Filter, LookupItem} from "../../base-model";
13
- import {MatAutocomplete, MatAutocompleteTrigger, MatOption} from "@angular/material/autocomplete";
14
- import {Observable, of} from "rxjs";
15
- import {FormControl, FormGroup, ReactiveFormsModule, Validators} from "@angular/forms";
16
- import {BackendService} from "../../services";
17
- import {GetItemsList} from "../../base-model/get-items-list";
18
- import {TranslateModule, TranslateService} from "@ngx-translate/core";
19
- import {MatFormFieldModule} from "@angular/material/form-field";
20
- import {MatInputModule} from "@angular/material/input";
21
- import {AsyncPipe, NgClass, NgForOf, NgIf} from "@angular/common";
22
- import {MatIcon} from "@angular/material/icon";
23
- import {FlexLayoutModule} from "@angular/flex-layout";
24
- import {buildItemsList} from "../../utils/base-utils";
25
- import {RequireMatch} from "../../validators";
26
-
27
- @Component({
28
- selector: 'app-auto-complete',
29
- standalone: true,
30
- imports: [
31
- TranslateModule,
32
- MatFormFieldModule,
33
- MatAutocompleteTrigger,
34
- MatInputModule,
35
- ReactiveFormsModule,
36
- NgIf,
37
- MatAutocomplete,
38
- AsyncPipe,
39
- MatOption,
40
- NgClass,
41
- MatIcon,
42
- NgForOf,
43
- FlexLayoutModule,
44
-
45
- ],
46
- templateUrl: './auto-complete.component.html',
47
- styleUrl: './auto-complete.component.css'
48
- })
49
- export class AutoCompleteComponent implements OnInit, OnChanges {
50
- @ViewChild('autocompleteTrigger') matACTrigger: MatAutocompleteTrigger;
51
-
52
- lookupItems$: Observable<LookupItem[]> | undefined;
53
- lookupItems: LookupItem[] = [];
54
- items: LookupItem[] = [];
55
-
56
- // @ts-ignore
57
- // form: FormGroup;
58
-
59
- @Input()// @ts-ignore
60
- field: FieldInfo;
61
-
62
- @Input()// @ts-ignore
63
- form: FormGroup;
64
- @Input()// @ts-ignore
65
- defaultValue: any;
66
-
67
- @Input()
68
- readonly:boolean = false;
69
-
70
- @Input()
71
- supportingAttributes: any;
72
-
73
- @Output()
74
- selectedValue: EventEmitter<LookupItem> = new EventEmitter();
75
-
76
- @ViewChild(MatAutocompleteTrigger) autocompleteTrigger!: MatAutocompleteTrigger;
77
-
78
- question = 'Would you like to add ?"';
79
- cascadedId: number = 0;
80
- isRequired:boolean = false;
81
-
82
- private timer: any;
83
- myControl = new FormControl();
84
-
85
- constructor(private backendService: BackendService,
86
- protected translateService: TranslateService,
87
- @Inject('secretsManager') private secretsManager: any) {
88
- }
89
-
90
- ngOnInit(): void {
91
- this.buildControl();
92
- this.extractWorkflowGuidedCascading();
93
- this.getLookupData();
94
- // this.myControl.valueChanges.subscribe(v => {
95
- // if (typeof v === 'string') this.filterLookupItems(v, null);
96
- // });
97
-
98
- this.form.get(this.field.property).valueChanges.subscribe(x => {
99
- if (x?.id === -100) {
100
- this.myControl.reset()
101
- }
102
- })
103
- if (this.field.cascadedBy) {
104
- this.form.get(this.field.cascadedByProperty)?.valueChanges.subscribe(v => {
105
- this.cascadedId = this.form.get(this.field.cascadedByProperty).value?.id;
106
- this.lookupItems = [];
107
- this.myControl.setValue(undefined);
108
- this.myControl.patchValue(undefined, {emitEvent: true});
109
- this.form.get(this.field.property)?.setValue(undefined);
110
- this.form.get(this.field.property)?.patchValue(undefined, {emitEvent: true});
111
- this.getLookupData();
112
- });
113
- }
114
-
115
- }
116
-
117
- private extractWorkflowGuidedCascading() {
118
- if (this.supportingAttributes && this.field.workflowCascadingField && this.supportingAttributes[this.field.workflowCascadingField]) {
119
- this.cascadedId = this.supportingAttributes[this.field.workflowCascadingField];
120
- }
121
- }
122
-
123
- private buildControl() {
124
- this.myControl = new FormControl(this.form?.controls[this.field?.property]);
125
- this.backendService.fieldAction$.subscribe( e => {
126
- if (e.property === this.field?.property) {
127
- this.field.readonly = e.fieldInfo.readonly;
128
- this.updateAttributes();
129
- }
130
- });
131
- this.updateAttributes();
132
-
133
- this.myControl.valueChanges.subscribe( v => {
134
- if (typeof v === 'string') {
135
- clearTimeout(this.timer);
136
- this.timer = setTimeout(() => {
137
- this.filterLookupItems(v, null); }, 700);
138
- }
139
- }
140
- );
141
- }
142
-
143
- private updateAttributes() {
144
- this.myControl.enable();
145
- if (this.field.readonly) {
146
- this.myControl.disable();
147
- this.isRequired = false;
148
- } else if (this.field.required) {
149
- this.form?.controls[this.field?.property].setValidators([Validators.required]);
150
- this.myControl.setValidators([Validators.required]);
151
- this.isRequired = true;
152
- }
153
-
154
- if (!this.field.acceptNewItem) {
155
- // @ts-ignore
156
- this.myControl.setValidators(RequireMatch);
157
- }
158
-
159
- this.myControl.setValue(this.form?.get(this.field?.property)?.value);
160
- }
161
-
162
- ngOnChanges({defaultValue}: SimpleChanges): void {
163
- this.patchLookupValue(defaultValue?.currentValue);
164
- }
165
-
166
- private getLookupData() {
167
- if (this.field.cascadedBy && !this.cascadedId) {
168
- } else {
169
- const listItems = buildItemsList('', this.field.lookupApiPath, this.field.cascadedBy);
170
- listItems.columns = ['id','code','englishName','arabicName'];
171
-
172
- this.backendService.getLookupItemsByFilter(listItems, this.cascadedId).subscribe((resp => {
173
- if (resp.valid) {
174
- this.lookupItems = resp.body;
175
- this.lookupItems = [];
176
- resp.body.forEach((r: LookupItem) => this.lookupItems.push(r));
177
- if (!this.form?.get('id')?.value) {
178
- this.patchLookupValue(this.lookupItems?.find(l => l.defaultValue));
179
- }
180
- this.patchLookupValue(this.myControl.value);
181
- }
182
-
183
- }));
184
- }
185
- }
186
-
187
- itemSelected(value: any) {
188
- if (value && value.id !== -1) {
189
- if (value.englishName.indexOf(this.question) === 0) {
190
- value.englishName = value.englishName.substring(this.question.length).split('"?')[0];
191
- }
192
- if (value.arabicName && value.arabicName.indexOf(this.question) === 0) {
193
- value.arabicName = value.arabicName.substring(this.question.length).split('"?')[0];
194
- }
195
- this.form.get(this.field.property)?.setValue(value);
196
- // @ts-ignore
197
- this.selectedValue.emit(this.myControl.value);
198
- }
199
- setTimeout(() => {
200
- this.autocompleteTrigger.closePanel();
201
- });
202
-
203
- }
204
-
205
- displayFn(selected: any): string | undefined {
206
- if (selected?.id < 0) {
207
- return null;
208
- }
209
-
210
- if (Array.isArray(selected))
211
- selected = this.defaultValue
212
- return this.translateService.getDefaultLang() === 'en'
213
- ? selected?.englishName
214
- : selected?.arabicName;
215
- }
216
-
217
-
218
- _allowSelection(option: LookupItem): { [className: string]: boolean } {
219
- return {
220
- 'prevent-selection': option.id === -1,
221
- };
222
- }
223
-
224
- itemNameByLag(item: any): string {
225
- return this.translateService.getDefaultLang() === 'en' ? item.englishName : item.arabicName
226
-
227
- }
228
-
229
- filterLookupItems(name: any, trigger: MatAutocompleteTrigger) {
230
- if (this.myControl.enabled) {
231
- if (trigger) {
232
- trigger.openPanel();
233
- }
234
- if (name === undefined) {
235
- name = '';
236
- }
237
-
238
- if (name === '' && !this.myControl.value) {
239
- this.myControl.setValue(undefined);
240
- this.myControl.updateValueAndValidity();
241
- }
242
-
243
- const listItems: GetItemsList = buildItemsList(name, this.field.lookupApiPath, this.field.cascadedBy);
244
- listItems.filters = this.field.lookupFilterList;
245
- this.addLookupFilterByAnotherProperties(listItems);
246
- listItems.columns = ['id','code','englishName','arabicName'];
247
- this.backendService.getLookupItemsByFilter(listItems);
248
- if (this.field.cascadedBy) {
249
- this.cascadedId = this.form.get(this.field.cascadedByProperty).value?.id;
250
- } else {
251
- this.extractWorkflowGuidedCascading();
252
- }
253
- listItems.columns = ['id','code','englishName','arabicName'];
254
- this.backendService.getLookupItemsByFilter(listItems, this.cascadedId).subscribe(resp => {
255
- if (resp.valid) {
256
- this.items = resp.body.filter((item: { id: any; }) => this.myControl.value?.id !== item.id);
257
- if (!this.items?.length) {
258
- this.field.acceptNewItem ?
259
- this.items?.push(new LookupItem({id: -2, englishName: this.question + name, arabicName: this.question + name})) :
260
- this.items?.push(new LookupItem({id: -1, englishName: 'No match ...', arabicName: 'غير موجود ... '}));
261
- }
262
- } else {
263
- if (this.items?.length == 0)
264
- this.field.acceptNewItem && this.backendService.parentForm.get(this.field.cascadedBy).value != null ?
265
- this.items?.push(new LookupItem({id: -2, englishName: this.question + name, arabicName: this.question + name})) :
266
- this.items?.push(new LookupItem({id: -1, englishName: 'No match ...', arabicName: 'غير موجود ... '}));
267
- }
268
- this.lookupItems$ = of(this.items);
269
- });
270
- return;
271
- }
272
- }
273
-
274
- addLookupFilterByAnotherProperties(listItems: GetItemsList) {
275
- const properties = this.field.lookupFilterList;
276
- if (!Array.isArray(properties)) return;
277
-
278
- const newFilters: Filter[] = [];
279
-
280
- for (const prop of properties) {
281
- const fieldValue = this.form?.value?.[prop.fieldName];
282
- const finalValue = typeof fieldValue === 'object' && fieldValue !== null ? fieldValue.code : fieldValue;
283
- if (!finalValue) continue;
284
-
285
- const fieldName =typeof fieldValue === 'object' && fieldValue !== null ? prop.fieldName + "." + this.field.flattenBySubAttribute : prop.fieldName;
286
- const filter = new Filter({
287
- fieldType: 'FILED_FILTER',
288
- filterType: undefined,
289
- operator: prop.operator,
290
- valueObject: finalValue,
291
- fieldName: fieldName
292
- });
293
-
294
- newFilters.push(filter);
295
- }
296
-
297
- if (newFilters.length) {
298
- listItems.filters = [...(listItems.filters || []), ...newFilters];
299
- }
300
- listItems.filters = listItems.filters.filter(f => f.valueObject);
301
- }
302
-
303
- private patchLookupValue(defaultValue: any) {
304
- if (defaultValue) {
305
-
306
- // this.form?.get(this.field.property)?.patchValue(defaultValue);
307
- this.myControl.setValue(defaultValue);
308
- this.myControl.patchValue(defaultValue, {emitEvent: true});
309
- }
310
- }
311
- getId() {
312
- return this.field.property;
313
- }
314
- onKeydown(event: KeyboardEvent, autocompleteTrigger: MatAutocompleteTrigger) {
315
- if (event.key === 'Enter') {
316
- this.filterLookupItems('', autocompleteTrigger);
317
- autocompleteTrigger.openPanel();
318
- event.preventDefault();
319
- }
320
- }
321
-
322
- closed() {
323
- if (!this.myControl.value){
324
- this.form.get(this.field.property)?.setValue(this.myControl.value);
325
- this.selectedValue.emit(this.myControl.value);
326
- } else if (typeof this.myControl.value === 'string') {
327
- this.myControl.setValue(null);
328
- }
329
- }
330
- }