@unifylib/ui-lib 1.0.3 → 1.1.3

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 (155) hide show
  1. package/ng-package.json +7 -7
  2. package/package.json +14 -12
  3. package/src/lib/base-model/SearchStrConfig.ts +12 -12
  4. package/src/lib/base-model/api-response.ts +23 -23
  5. package/src/lib/base-model/audit-log-entry.ts +7 -7
  6. package/src/lib/base-model/button-action-settings.ts +29 -25
  7. package/src/lib/base-model/column-def.model.ts +34 -34
  8. package/src/lib/base-model/do-action-request.ts +11 -11
  9. package/src/lib/base-model/feature-item.ts +9 -0
  10. package/src/lib/base-model/field-action.ts +7 -7
  11. package/src/lib/base-model/field-filter.model.ts +7 -14
  12. package/src/lib/base-model/field-info.ts +102 -98
  13. package/src/lib/base-model/field-predicate.model.ts +7 -7
  14. package/src/lib/base-model/filter-request.ts +27 -27
  15. package/src/lib/base-model/filter.model.ts +49 -49
  16. package/src/lib/base-model/get-items-list.ts +24 -24
  17. package/src/lib/base-model/index.ts +11 -11
  18. package/src/lib/base-model/items-total.model.ts +12 -0
  19. package/src/lib/base-model/line-item.model.ts +18 -0
  20. package/src/lib/base-model/lookupItem.ts +21 -21
  21. package/src/lib/base-model/null-snackmessage.ts +9 -9
  22. package/src/lib/base-model/page-info.ts +54 -51
  23. package/src/lib/base-model/report-request.model.ts +33 -33
  24. package/src/lib/base-model/response-envelop.model.ts +15 -15
  25. package/src/lib/base-model/snack-message.model.ts +14 -14
  26. package/src/lib/base-model/snackmessage-interface.ts +7 -7
  27. package/src/lib/base-model/table-column.interface.ts +29 -29
  28. package/src/lib/base-model/table-page-user-action.interface.ts +33 -33
  29. package/src/lib/base-model/workflow/workflow-steps.model.ts +9 -9
  30. package/src/lib/base-model/workflow/workflow.model.ts +52 -52
  31. package/src/lib/components/action-comment/action-comment.component.css +52 -0
  32. package/src/lib/components/action-comment/action-comment.component.html +47 -0
  33. package/src/lib/components/{rejection-comment → action-comment}/action-comment.component.spec.ts +23 -23
  34. package/src/lib/components/{rejection-comment → action-comment}/action-comment.component.ts +102 -86
  35. package/src/lib/components/action-confirmation/action-confirmation.component.css +46 -34
  36. package/src/lib/components/action-confirmation/action-confirmation.component.html +32 -18
  37. package/src/lib/components/action-confirmation/action-confirmation.component.spec.ts +23 -23
  38. package/src/lib/components/action-confirmation/action-confirmation.component.ts +58 -58
  39. package/src/lib/components/activity-report-form/activity-report-form.component.html +110 -109
  40. package/src/lib/components/activity-report-form/activity-report-form.component.scss +69 -0
  41. package/src/lib/components/activity-report-form/activity-report-form.component.spec.ts +25 -25
  42. package/src/lib/components/activity-report-form/activity-report-form.component.ts +616 -605
  43. package/src/lib/components/advanced-filter/field-filter/field-filter.component.html +8 -0
  44. package/src/lib/components/advanced-filter/field-filter/field-filter.component.scss +0 -0
  45. package/src/lib/components/advanced-filter/field-filter/field-filter.component.spec.ts +25 -0
  46. package/src/lib/components/advanced-filter/field-filter/field-filter.component.ts +55 -0
  47. package/src/lib/components/advanced-filter/filter-builder/filter-builder.component.html +36 -0
  48. package/src/lib/components/advanced-filter/filter-builder/filter-builder.component.scss +130 -0
  49. package/src/lib/components/advanced-filter/filter-builder/filter-builder.component.spec.ts +25 -0
  50. package/src/lib/components/advanced-filter/filter-builder/filter-builder.component.ts +186 -0
  51. package/src/lib/components/audit-log-details-dialog/audit-log-details-dialog.component.css +51 -51
  52. package/src/lib/components/audit-log-details-dialog/audit-log-details-dialog.component.html +23 -23
  53. package/src/lib/components/audit-log-details-dialog/audit-log-details-dialog.component.spec.ts +23 -23
  54. package/src/lib/components/audit-log-details-dialog/audit-log-details-dialog.component.ts +69 -69
  55. package/src/lib/components/audit-log-list/audit-log.component.html +26 -23
  56. package/src/lib/components/audit-log-list/audit-log.component.scss +50 -0
  57. package/src/lib/components/audit-log-list/audit-log.component.spec.ts +25 -25
  58. package/src/lib/components/audit-log-list/audit-log.component.ts +114 -116
  59. package/src/lib/components/auto-complete/auto-complete.component.css +55 -14
  60. package/src/lib/components/auto-complete/auto-complete.component.html +45 -29
  61. package/src/lib/components/auto-complete/auto-complete.component.spec.ts +23 -23
  62. package/src/lib/components/auto-complete/auto-complete.component.ts +331 -330
  63. package/src/lib/components/base-form/base-form.component.html +59 -58
  64. package/src/lib/components/base-form/base-form.component.scss +68 -0
  65. package/src/lib/components/base-form/base-form.component.spec.ts +25 -25
  66. package/src/lib/components/base-form/base-form.component.ts +323 -305
  67. package/src/lib/components/base-form-canvas/base-form-canvas.component.css +196 -22
  68. package/src/lib/components/base-form-canvas/base-form-canvas.component.html +1095 -1006
  69. package/src/lib/components/base-form-canvas/base-form-canvas.component.spec.ts +23 -23
  70. package/src/lib/components/base-form-canvas/base-form-canvas.component.ts +680 -573
  71. package/src/lib/components/base-input-dialog/base-input-dialog.component.css +67 -0
  72. package/src/lib/components/base-input-dialog/base-input-dialog.component.html +47 -42
  73. package/src/lib/components/base-input-dialog/base-input-dialog.component.spec.ts +23 -23
  74. package/src/lib/components/base-input-dialog/base-input-dialog.component.ts +77 -78
  75. package/src/lib/components/base-table/base-table.component.html +268 -242
  76. package/src/lib/components/base-table/base-table.component.scss +140 -31
  77. package/src/lib/components/base-table/base-table.component.spec.ts +25 -25
  78. package/src/lib/components/base-table/base-table.component.ts +621 -568
  79. package/src/lib/components/button-actions/button-actions.component.html +27 -28
  80. package/src/lib/components/button-actions/button-actions.component.scss +101 -6
  81. package/src/lib/components/button-actions/button-actions.component.spec.ts +23 -23
  82. package/src/lib/components/button-actions/button-actions.component.ts +70 -72
  83. package/src/lib/components/editable-base-table/editable-base-table.component.html +337 -372
  84. package/src/lib/components/editable-base-table/editable-base-table.component.scss +126 -44
  85. package/src/lib/components/editable-base-table/editable-base-table.component.spec.ts +25 -25
  86. package/src/lib/components/editable-base-table/editable-base-table.component.ts +579 -570
  87. package/src/lib/components/equation-builder/equation-builder.component.css +39 -0
  88. package/src/lib/components/equation-builder/equation-builder.component.html +31 -31
  89. package/src/lib/components/equation-builder/equation-builder.component.spec.ts +23 -23
  90. package/src/lib/components/equation-builder/equation-builder.component.ts +119 -121
  91. package/src/lib/components/item-line-editor/item-line-editor.component.html +102 -0
  92. package/src/lib/components/item-line-editor/item-line-editor.component.scss +152 -0
  93. package/src/lib/components/item-line-editor/item-line-editor.component.spec.ts +23 -0
  94. package/src/lib/components/item-line-editor/item-line-editor.component.ts +306 -0
  95. package/src/lib/components/multi-auto-complete/multi-auto-complete.component.css +19 -11
  96. package/src/lib/components/multi-auto-complete/multi-auto-complete.component.html +38 -38
  97. package/src/lib/components/multi-auto-complete/multi-auto-complete.component.spec.ts +23 -23
  98. package/src/lib/components/multi-auto-complete/multi-auto-complete.component.ts +315 -317
  99. package/src/lib/components/paginator/paginator.component.css +65 -25
  100. package/src/lib/components/paginator/paginator.component.html +30 -34
  101. package/src/lib/components/paginator/paginator.component.ts +87 -94
  102. package/src/lib/components/report-details-dialog/report-details-dialog.component.css +17 -17
  103. package/src/lib/components/report-details-dialog/report-details-dialog.component.html +16 -16
  104. package/src/lib/components/report-details-dialog/report-details-dialog.component.spec.ts +23 -23
  105. package/src/lib/components/report-details-dialog/report-details-dialog.component.ts +111 -113
  106. package/src/lib/components/report-form/report-form.component.html +92 -94
  107. package/src/lib/components/report-form/report-form.component.scss +51 -0
  108. package/src/lib/components/report-form/report-form.component.spec.ts +25 -25
  109. package/src/lib/components/report-form/report-form.component.ts +599 -588
  110. package/src/lib/components/search-bar/search-bar.component.html +51 -62
  111. package/src/lib/components/search-bar/search-bar.component.scss +63 -8
  112. package/src/lib/components/search-bar/search-bar.component.spec.ts +25 -25
  113. package/src/lib/components/search-bar/search-bar.component.ts +68 -70
  114. package/src/lib/components/section-form-canvas/section-form-canvas.component.html +43 -0
  115. package/src/lib/components/section-form-canvas/section-form-canvas.component.scss +81 -0
  116. package/src/lib/components/section-form-canvas/section-form-canvas.component.spec.ts +23 -0
  117. package/src/lib/components/section-form-canvas/section-form-canvas.component.ts +67 -0
  118. package/src/lib/components/shared/action-button/action-button.component.html +12 -0
  119. package/src/lib/components/shared/action-button/action-button.component.scss +45 -0
  120. package/src/lib/components/shared/action-button/action-button.component.ts +51 -0
  121. package/src/lib/components/shared/action-card/action-card.component.html +78 -0
  122. package/src/lib/components/shared/action-card/action-card.component.scss +238 -0
  123. package/src/lib/components/shared/action-card/action-card.component.ts +56 -0
  124. package/src/lib/components/shared/attachment-uploader/attachment-uploader.component.css +135 -54
  125. package/src/lib/components/shared/attachment-uploader/attachment-uploader.component.html +36 -22
  126. package/src/lib/components/shared/attachment-uploader/attachment-uploader.component.spec.ts +23 -23
  127. package/src/lib/components/shared/attachment-uploader/attachment-uploader.component.ts +71 -45
  128. package/src/lib/components/shared-list/shared-list.component.html +17 -17
  129. package/src/lib/components/shared-list/shared-list.component.spec.ts +23 -23
  130. package/src/lib/components/shared-list/shared-list.component.ts +53 -53
  131. package/src/lib/components/snackbar-static/snackbar-static.component.html +20 -0
  132. package/src/lib/components/snackbar-static/snackbar-static.component.scss +135 -0
  133. package/src/lib/components/snackbar-static/snackbar-static.component.ts +26 -0
  134. package/src/lib/components/title-bar/title-bar.component.html +35 -31
  135. package/src/lib/components/title-bar/title-bar.component.scss +126 -23
  136. package/src/lib/components/title-bar/title-bar.component.spec.ts +23 -23
  137. package/src/lib/components/title-bar/title-bar.component.ts +126 -119
  138. package/src/lib/services/backend-service.ts +287 -286
  139. package/src/lib/services/index.ts +3 -3
  140. package/src/lib/services/top-panel.ts +17 -17
  141. package/src/lib/services/trigger-form.service.ts +11 -11
  142. package/src/lib/share-module/shared-module.ts +10 -10
  143. package/src/lib/utils/base-utils.ts +102 -102
  144. package/src/lib/validators/date-range-validator.ts +31 -31
  145. package/src/lib/validators/index.ts +3 -3
  146. package/src/lib/validators/match-list.validator.ts +10 -10
  147. package/src/lib/validators/multi-email-validator.ts +15 -15
  148. package/src/public-api.ts +29 -21
  149. package/tsconfig.lib.json +15 -15
  150. package/tsconfig.lib.prod.json +11 -11
  151. package/tsconfig.spec.json +15 -15
  152. package/src/lib/components/rejection-comment/action-comment.component.css +0 -33
  153. package/src/lib/components/rejection-comment/action-comment.component.html +0 -46
  154. package/src/lib/styles/invoiceq-theme.scss +0 -252
  155. package/src/lib/styles/styles.scss +0 -1723
@@ -1,372 +1,337 @@
1
- <div fxLayout="column" class="baseTable">
2
- <div class="left-align">
3
- <app-attachment-uploader #uploader
4
- *ngIf="isBulkItemsSupported"
5
- (fileSelected)="handleFileUpload($event)">
6
- </app-attachment-uploader>
7
- </div>
8
-
9
-
10
- <div fxLayout="row" fxFlex="100">
11
- <div fxFlex="50" fxLayout="column" fxLayoutAlign="center start">
12
- <app-title-bar [pageTitle]="pageInfo.hideTitle ? '' : pageInfo.labelsSection+'.list_title'"
13
- [titleMode]="''"
14
- [newAction]="false"
15
- [showExtractButton]="!pageInfo.hideExtractButton"
16
- >
17
- </app-title-bar>
18
- <span style="font-size: 14px">{{ 'totalCountItem' | translate }} : {{ this.totalElements }}</span>
19
- </div>
20
- <div fxFlex="50" fxLayout="column" fxLayoutAlign="start end">
21
- <mat-chip-listbox aria-label="Color selection" [multiple]="false" *ngIf="pageInfo.draftSupported">
22
- <mat-chip-option [selected]="!this.isPending" [color]="'accent'" [value]="'COMPLETED'"
23
- (click)="switchViewMode(false)">{{ 'finished' | translate }}
24
- </mat-chip-option>
25
- <mat-chip-option [selected]="this.isPending" [color]="'accent'" [value]="'PENDING'"
26
- (click)="switchViewMode(true)">{{ 'todo' | translate }}
27
- </mat-chip-option>
28
- </mat-chip-listbox>
29
-
30
- </div>
31
- </div>
32
- <ng-container *ngIf="showSearch()">
33
- <div fxLayout="row" fxFlex="100">
34
- <div fxFlex="80" fxLayout="column" fxLayoutAlign="start end">
35
- <app-base-form-canvas fxFlexFill
36
- [pageInfo]="pageInfo"
37
- [fields]="searchFormFields"
38
- [editable]="true"
39
- (formUpdated)="updateSearchForm($event)"
40
- ></app-base-form-canvas>
41
- </div>
42
- <div fxFlex="15" fxLayout="column" fxLayoutAlign="start end">
43
- <div fxFlex="100" fxLayout="row" fxLayoutAlign="center center" fxLayoutGap="8px">
44
- <button mat-button color="primary" type="button" (click)="doSearch()">
45
- <mat-icon>search</mat-icon>
46
- {{ 'search' | translate }}
47
- </button>
48
- <button mat-button color="primary" type="button" (click)="clearSearch()">
49
- <mat-icon>clear</mat-icon>
50
- {{ 'clear' | translate }}
51
- </button>
52
- </div>
53
- </div>
54
- </div>
55
- </ng-container>
56
- <div fxLayout="row" fxFlex="100" class="baseTable__detailsColumn">
57
- <div fxFlex="100">
58
- <ng-container *ngIf="isLoaded">
59
- <div fxLayout="row" fxLayout.lt-md="row" fxLayoutGap="0" fxLayoutAlign="start start" class="mainTable">
60
- <form [formGroup]="formParam" fxFlexFill>
61
- <table [dataSource]="dataFormArray.controls" fxFlexFill mat-table matSort>
62
- <ng-container *ngFor="let column of this.fields; let i = index">
63
- <ng-container matColumnDef="{{column.property}}">
64
- <ng-container [ngSwitch]="column.type">
65
- <ng-container *ngSwitchCase="'equation-builder'">
66
- <th *matHeaderCellDef class="mainTable__th" mat-header-cell>{{ labelKey(column) | translate }}
67
- </th>
68
- <td *matCellDef="let element" class="mainTable__td"
69
- [ngClass]="['mainTable__td__text-secondary__td']" mat-cell>
70
- <lib-equation-builder
71
- [form]="element"
72
- [field]="column"
73
- [readOnly]="column.readonly"
74
- [isPending]="isPending"
75
- (valueChanged)="handleEquationChange($event, element, column)">
76
- </lib-equation-builder>
77
- </td>
78
- </ng-container>
79
-
80
- <ng-container *ngSwitchCase="'lookup'">
81
- <th *matHeaderCellDef class="mainTable__th" mat-header-cell>{{ labelKey(column) | translate }}
82
- </th>
83
- <td *matCellDef="let element" class="mainTable__td"
84
- [ngClass]="['mainTable__td__text-secondary__td']"
85
- mat-cell>
86
- <app-auto-complete
87
- [form]="element"
88
- [field]="column"
89
- [defaultValue]="element.get(column.property)?.value"
90
- (selectedValue)="patchLookupValue($event, column.property)">
91
- </app-auto-complete>
92
- </td>
93
- </ng-container>
94
- <ng-container *ngSwitchCase="'list'">
95
- <th *matHeaderCellDef class="mainTable__th" mat-header-cell>{{ labelKey(column) | translate }}</th>
96
- <td *matCellDef="let element" class="mainTable__td"
97
- [ngClass]="['mainTable__td__text-secondary__td']"
98
- mat-cell>
99
- <mat-label>{{element}}</mat-label>
100
- <mat-select
101
- formControlName="{{column.property}}"
102
- [attr.aria-label]="column.label! | translate"
103
- [multiple]="false"
104
- [(value)]="element[column.property]">
105
- <ng-container>
106
- <mat-option
107
- *ngFor="let item of column.listOptions"
108
- [value]="item">
109
- {{ getOptionValue(item) }}
110
- </mat-option>
111
- </ng-container>
112
- </mat-select>
113
- </td>
114
- </ng-container>
115
- <ng-container *ngSwitchCase="'stateType'">
116
- <th *matHeaderCellDef class="mainTable__th" mat-header-cell>{{ 'action' | translate }}</th>
117
- <td *matCellDef="let element" class="mainTable__td"
118
- [ngClass]="['mainTable__td__text-secondary__td']"
119
- mat-cell>
120
- <div fxLayout="column">
121
- <div fxFlex="100" fxLayout="row">
122
-
123
- <div fxFlex="33.3" fxLayout="column" fxLayoutAlign="center center">
124
- <button mat-button class="btn-none-background-primary"
125
- color="primary"
126
- [disabled]="disabledSaveButton(element)"
127
- (click)="fieldButtonEvent(column,element,SAVE) ">
128
- {{ getPositiveWfActionKey(element.value.stateType) | translate }}
129
- </button>
130
- </div>
131
- <div fxFlex="33.3" fxLayout="column" fxLayoutAlign="center center">
132
- <button *ngIf="isPending" mat-button class="btn-none-background-primary"
133
- color="accent"
134
- (click)="fieldButtonEvent(column,element,REJECT)">
135
- {{ getNegativeWfActionKey(element.value.stateType) | translate }}
136
- </button>
137
- </div>
138
- <div fxFlex="33.3" fxLayout="column" fxLayoutAlign="center center"></div>
139
- </div>
140
- </div>
141
- </td>
142
- </ng-container>
143
- <ng-container *ngSwitchCase="'year'">
144
- <th *matHeaderCellDef class="mainTable__th" mat-header-cell>{{ labelKey(column) | translate }}
145
- </th>
146
- <td *matCellDef="let element" class="mainTable__td"
147
- [ngClass]="['mainTable__td__text-secondary__td']"
148
- mat-cell>
149
- <mat-form-field class="flex-auto" appearance="outline" fxFlexFill>
150
- <mat-label>{{ labelKey(column) | translate }}</mat-label>
151
- <input matInput
152
- [disabled]="column.readonly"
153
- [readonly]="column.readonly"
154
- [matDatepicker]="picker"
155
- [formControl]="getField(element, column)"
156
- [required]="column.required"
157
- [attr.aria-required]="column.required"
158
- [attr.aria-labelledby]="'label-' + column.property"
159
- [attr.aria-describedby]="'error-' + column.property">
160
- <mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
161
- <mat-datepicker #picker startView="multi-year"
162
- (yearSelected)="setMonthAndYear($event, picker, element,column)"
163
- panelClass="example-month-picker"></mat-datepicker>
164
-
165
- </mat-form-field>
166
- <!-- <mat-form-field class="flex-auto" appearance="outline" fxFlexFill>-->
167
- <!-- <input matInput [formControl]="getField(element, column)">-->
168
- <!-- </mat-form-field>-->
169
- </td>
170
- </ng-container>
171
- <ng-container *ngSwitchCase="'number'">
172
- <th *matHeaderCellDef class="mainTable__th" mat-header-cell>
173
- {{ labelKey(column) | translate }}
174
- </th>
175
- <td *matCellDef="let element" class="mainTable__td"
176
- [ngClass]="['mainTable__td__text-secondary__td']"
177
- mat-cell>
178
- <mat-form-field class="flex-auto" appearance="outline" fxFlexFill>
179
- <!-- Visually hidden label just to trigger the floating label and asterisk -->
180
- <mat-label>
181
- </mat-label>
182
-
183
- <input matInput
184
- type="number"
185
- [formControl]="getField(element, column)"
186
- [required]="column.required"
187
- [readonly]="column.readonly"
188
- [attr.aria-required]="column.required"
189
- [attr.aria-labelledby]="'label-' + column.property"
190
- [attr.aria-describedby]="'error-' + column.property">
191
- </mat-form-field>
192
- </td>
193
- </ng-container>
194
- <ng-container *ngSwitchCase="'status'">
195
- <th *matHeaderCellDef class="mainTable__th" mat-header-cell>
196
- {{ labelKey(column) | translate }}
197
- </th>
198
- <td *matCellDef="let element" class="mainTable__td"
199
- [ngClass]="['mainTable__td__text-secondary__td']"
200
- mat-cell>
201
- <mat-checkbox
202
- style="padding-bottom: 14px; padding-top: 14px;"
203
- [formControl]="getField(element, column)"
204
- [required]="column.required"
205
- [attr.aria-required]="column.required"
206
- [attr.aria-labelledby]="'label-' + column.property"
207
- [attr.aria-describedby]="'error-' + column.property"
208
- [style.pointer-events]="column.readonly ? 'none' : 'auto'"
209
- [style.opacity]="column.readonly ? 0.7 : 1"
210
- (click)="column.readonly ? $event.preventDefault() : null">
211
- </mat-checkbox>
212
- </td>
213
- </ng-container>
214
- <ng-container *ngSwitchCase="'text'">
215
- <th *matHeaderCellDef class="mainTable__th" mat-header-cell>
216
- {{ labelKey(column) | translate }}
217
- </th>
218
- <td *matCellDef="let element" class="mainTable__td"
219
- [ngClass]="['mainTable__td__text-secondary__td']"
220
- mat-cell>
221
- <mat-form-field class="flex-auto" appearance="outline" fxFlexFill>
222
- <mat-label>
223
- {{ labelKey(column) | translate }}
224
- </mat-label>
225
- <input matInput
226
- type="text"
227
- [formControl]="getField(element, column)"
228
- [required]="column.required"
229
- [readonly]="column.readonly"
230
- [attr.aria-required]="column.required"
231
- [attr.aria-labelledby]="'label-' + column.property"
232
- [attr.aria-describedby]="'error-' + column.property">
233
- </mat-form-field>
234
- </td>
235
- </ng-container>
236
- <ng-container *ngSwitchCase="'date'">
237
- <th *matHeaderCellDef class="mainTable__th" mat-header-cell>
238
- {{ labelKey(column) | translate }}
239
- </th>
240
- <td *matCellDef="let element" class="mainTable__td"
241
- [ngClass]="['mainTable__td__text-secondary__td']"
242
- mat-cell>
243
- <mat-form-field class="flex-auto" appearance="outline" fxFlexFill>
244
- <input matInput
245
- [matDatepicker]="xpicker"
246
- [formControl]="getField(element, column)"
247
- [required]="column.required"
248
- [readonly]="column.readonly"
249
- [disabled]="column.readonly"
250
- [attr.aria-required]="column.required"
251
- [attr.aria-labelledby]="'label-' + column.property"
252
- [attr.aria-describedby]="'error-' + column.property">
253
- <mat-datepicker-toggle
254
- matSuffix
255
- [for]="xpicker"
256
- [disabled]="column.readonly">
257
- </mat-datepicker-toggle>
258
- <mat-datepicker #xpicker></mat-datepicker>
259
- </mat-form-field>
260
- </td>
261
- </ng-container>
262
-
263
- <ng-container *ngSwitchDefault>
264
- <th *matHeaderCellDef class="mainTable__th" mat-header-cell>{{ labelKey(column) | translate }}
265
- </th>
266
- <td *matCellDef="let element" class="mainTable__td"
267
- [ngClass]="['mainTable__td__text-secondary__td']"
268
- mat-cell>
269
- <mat-form-field class="flex-auto" appearance="outline" fxFlexFill>
270
- <input matInput
271
- [readonly]="column.readonly"
272
- [attr.aria-required]="column.required"
273
- [formControl]="getField(element, column)">
274
- </mat-form-field>
275
- </td>
276
- </ng-container>
277
- </ng-container>
278
- </ng-container>
279
- </ng-container>
280
- <tr *matHeaderRowDef="visibleColumns" mat-header-row></tr>
281
- <tr (click)="onSelectItem(row)" (auxclick)="openNewTab(row)"
282
- *matRowDef="let row; columns: visibleColumns | paginate:config"
283
- mat-row></tr>
284
- </table>
285
- </form>
286
- </div>
287
- <div fxLayout="row" *ngIf="noDataFound" class="dataNotFound">
288
- <div fxLayout="column" fxFlex="100">
289
- <span class="dataNotFound__details">
290
- <mat-icon class="dataNotFound__details__icon">info</mat-icon>
291
- <span>{{ 'dataNotFound' | translate }}</span>
292
- </span>
293
- </div>
294
- </div>
295
- <div fxLayout="row" fxLayout.lt-md="row" fxLayoutGap="0" fxLayoutAlign="start start" class="mainTable"
296
- *ngIf="!selectedFileFromUploader">
297
- <div>
298
- <button *ngIf="!isPending && pageInfo.hasAddButton" mat-button color="primary" type="button"
299
- (click)="addNewItem()">
300
- <mat-icon>add_box</mat-icon>
301
- {{ translationKey | translate }}
302
- </button>
303
- </div>
304
- </div>
305
-
306
-
307
- <div fxLayout="row" fxLayout.lt-md="column" fxLayoutAlign.lt-md="center center"
308
- fxLayoutAlign.gt-sm="center center"
309
- *ngIf="totalElements > 0" class="main-pagination">
310
-
311
- <div fxLayout="column" fxFlex.lt-md="100">
312
- <app-paginator
313
- [currentPage]="pageIndex"
314
- [totalPages]="pagesCount"
315
- (pageChange)="onPageChange($event)"
316
- ></app-paginator>
317
-
318
- <!-- <pagination-controls-->
319
- <!-- [maxSize]="maxSize"-->
320
- <!-- [directionLinks]="directionLinks"-->
321
- <!-- [autoHide]="autoHide"-->
322
- <!-- [responsive]="responsive"-->
323
- <!-- [previousLabel]="labels['previousLabel']"-->
324
- <!-- [nextLabel]="labels['nextLabel']"-->
325
- <!-- [screenReaderPaginationLabel]="labels['screenReaderPaginationLabel']"-->
326
- <!-- [screenReaderPageLabel]="labels['screenReaderPageLabel']"-->
327
- <!-- [screenReaderCurrentLabel]="labels['screenReaderCurrentLabel']"-->
328
- <!-- (pageChange)="onPageChange($event)"-->
329
- <!-- >-->
330
- <!-- </pagination-controls>-->
331
-
332
- </div>
333
- <div fxLayout="column" fxFlex="100" class="countItem" fxHide.gt-xs>
334
- <span class="countItem__totalElement">{{ 'totalCountItem' | translate }} : {{ this.totalElements }}</span>
335
- </div>
336
- <div fxLayout="column" fxFlex="2">
337
- </div>
338
- </div>
339
- </ng-container>
340
- </div>
341
- </div>
342
- <div *ngIf="isBulkItemsSupported"
343
- fxLayout="row"
344
- fxLayout.lt-md="row"
345
- fxLayoutGap="10px"
346
- fxLayoutAlign="start start"
347
- class="mainTable">
348
-
349
- <div>
350
- <button mat-flat-button
351
- color="primary"
352
- type="button"
353
- (click)="addBulkItems()"
354
- [disabled]="shouldDisableBulkAdd()">
355
- <mat-icon>add_box</mat-icon>
356
- {{ 'addAll' | translate }}
357
- </button>
358
- </div>
359
-
360
- <div>
361
- <button mat-flat-button
362
- color="warn"
363
- type="button"
364
- [disabled]="!hasDataToClear()"
365
- (click)="clearBulkItems()">
366
- <mat-icon>delete</mat-icon>
367
- {{ 'clearAll' | translate }}
368
- </button>
369
- </div>
370
-
371
- </div>
372
- </div>
1
+ <div class="baseTable flex-column">
2
+ <div class="left-align">
3
+ <app-attachment-uploader #uploader
4
+ *ngIf="isBulkItemsSupported"
5
+ (fileSelected)="handleFileUpload($event)">
6
+ </app-attachment-uploader>
7
+ </div>
8
+
9
+ <div class="flex-row full-width">
10
+ <div class="flex-half flex-column align-center-start">
11
+ <app-title-bar [pageTitle]="pageInfo.hideTitle ? '' : pageInfo.labelsSection+'.list_title'"
12
+ [titleMode]="''"
13
+ [newAction]="false"
14
+ [showExtractButton]="!pageInfo.hideExtractButton">
15
+ </app-title-bar>
16
+ <span class="font-small">{{ 'totalCountItem' | translate }} : {{ this.totalElements }}</span>
17
+ </div>
18
+ <div class="flex-half flex-column align-start-end">
19
+ <mat-chip-listbox aria-label="Color selection" [multiple]="false" *ngIf="pageInfo.draftSupported">
20
+ <mat-chip-option [selected]="!this.isPending" [color]="'accent'" [value]="'COMPLETED'"
21
+ (click)="switchViewMode(false)">{{ 'finished' | translate }}
22
+ </mat-chip-option>
23
+ <mat-chip-option [selected]="this.isPending" [color]="'accent'" [value]="'PENDING'"
24
+ (click)="switchViewMode(true)">{{ 'todo' | translate }}
25
+ </mat-chip-option>
26
+ </mat-chip-listbox>
27
+ </div>
28
+ </div>
29
+
30
+ <ng-container *ngIf="showSearch()">
31
+ <div class="flex-row full-width">
32
+ <div class="flex-80 flex-column align-start-end">
33
+ <app-base-form-canvas class="flex-fill"
34
+ [pageInfo]="pageInfo"
35
+ [fields]="searchFormFields"
36
+ [editable]="true"
37
+ (formUpdated)="updateSearchForm($event)">
38
+ </app-base-form-canvas>
39
+ </div>
40
+ <div class="flex-15 flex-column align-start-end">
41
+ <div class="flex-row align-center-center gap-8 full-width">
42
+ <button mat-button color="primary" type="button" (click)="doSearch()" id="editable-search-btn">
43
+ <mat-icon>search</mat-icon>
44
+ {{ 'search' | translate }}
45
+ </button>
46
+ <button mat-button color="primary" type="button" (click)="clearSearch()" id="editable-clear-search-btn">
47
+ <mat-icon>clear</mat-icon>
48
+ {{ 'clear' | translate }}
49
+ </button>
50
+ </div>
51
+ </div>
52
+ </div>
53
+ </ng-container>
54
+
55
+ <div class="flex-row full-width baseTable__detailsColumn">
56
+ <div class="flex-full">
57
+ <ng-container *ngIf="isLoaded">
58
+ <div class="flex-row mainTable gap-0 align-start-start">
59
+ <form [formGroup]="formParam" class="flex-fill">
60
+ <table [dataSource]="dataFormArray.controls" class="flex-fill" mat-table matSort>
61
+ <ng-container *ngFor="let column of this.fields; let i = index">
62
+ <ng-container matColumnDef="{{column.property}}">
63
+ <ng-container [ngSwitch]="column.type">
64
+ <ng-container *ngSwitchCase="'equation-builder'">
65
+ <th *matHeaderCellDef class="mainTable__th" mat-header-cell>{{ labelKey(column) | translate }}
66
+ </th>
67
+ <td *matCellDef="let element" class="mainTable__td"
68
+ [ngClass]="['mainTable__td__text-secondary__td']" mat-cell>
69
+ <lib-equation-builder
70
+ [form]="element"
71
+ [field]="column"
72
+ [readOnly]="column.readonly"
73
+ [isPending]="isPending"
74
+ (valueChanged)="handleEquationChange($event, element, column)">
75
+ </lib-equation-builder>
76
+ </td>
77
+ </ng-container>
78
+
79
+ <ng-container *ngSwitchCase="'lookup'">
80
+ <th *matHeaderCellDef class="mainTable__th" mat-header-cell>{{ labelKey(column) | translate }}
81
+ </th>
82
+ <td *matCellDef="let element" class="mainTable__td"
83
+ [ngClass]="['mainTable__td__text-secondary__td']"
84
+ mat-cell>
85
+ <app-auto-complete
86
+ [form]="element"
87
+ [field]="column"
88
+ [defaultValue]="element.get(column.property)?.value"
89
+ (selectedValue)="patchLookupValue($event, column.property)">
90
+ </app-auto-complete>
91
+ </td>
92
+ </ng-container>
93
+ <ng-container *ngSwitchCase="'list'">
94
+ <th *matHeaderCellDef class="mainTable__th" mat-header-cell>{{ labelKey(column) | translate }}</th>
95
+ <td *matCellDef="let element" class="mainTable__td"
96
+ [ngClass]="['mainTable__td__text-secondary__td']"
97
+ mat-cell>
98
+ <mat-label>{{element}}</mat-label>
99
+ <mat-select
100
+ formControlName="{{column.property}}"
101
+ [attr.aria-label]="column.label! | translate"
102
+ [multiple]="false"
103
+ [(value)]="element[column.property]">
104
+ <ng-container>
105
+ <mat-option
106
+ *ngFor="let item of column.listOptions"
107
+ [value]="item">
108
+ {{ getOptionValue(item) }}
109
+ </mat-option>
110
+ </ng-container>
111
+ </mat-select>
112
+ </td>
113
+ </ng-container>
114
+ <ng-container *ngSwitchCase="'stateType'">
115
+ <th *matHeaderCellDef class="mainTable__th" mat-header-cell>
116
+ {{ 'action' | translate }}
117
+ </th>
118
+ <td *matCellDef="let element" class="mainTable__td mainTable__td__text-secondary__td" mat-cell>
119
+ <div class="flex-column">
120
+ <div class="flex-row full-width">
121
+ <div class="flex-third flex-column align-center-center">
122
+ <button mat-button class="btn-none-background-primary"
123
+ color="primary"
124
+ [disabled]="disabledSaveButton(element)"
125
+ (click)="fieldButtonEvent(column,element,SAVE)"
126
+ [attr.id]="'editable-save-' + (element.value?.id || '')">
127
+ {{ getPositiveWfActionKey(element.value.stateType) | translate }}
128
+ </button>
129
+ </div>
130
+ <div class="flex-third flex-column align-center-center">
131
+ <button *ngIf="isPending" mat-button class="btn-none-background-primary"
132
+ color="accent"
133
+ (click)="fieldButtonEvent(column,element,REJECT)"
134
+ [attr.id]="'editable-reject-' + (element.value?.id || '')">
135
+ {{ getNegativeWfActionKey(element.value.stateType) | translate }}
136
+ </button>
137
+ </div>
138
+ <div class="flex-third flex-column align-center-center"></div>
139
+ </div>
140
+ </div>
141
+ </td>
142
+ </ng-container>
143
+ <ng-container *ngSwitchCase="'year'">
144
+ <th *matHeaderCellDef class="mainTable__th" mat-header-cell>{{ labelKey(column) | translate }}
145
+ </th>
146
+ <td *matCellDef="let element" class="mainTable__td"
147
+ [ngClass]="['mainTable__td__text-secondary__td']"
148
+ mat-cell>
149
+ <mat-form-field class="flex-auto fx-flex-fill" appearance="outline">
150
+ <mat-label>{{ labelKey(column) | translate }}</mat-label>
151
+ <input matInput
152
+ [disabled]="column.readonly"
153
+ [readonly]="column.readonly"
154
+ [matDatepicker]="picker"
155
+ [formControl]="getField(element, column)"
156
+ [required]="column.required"
157
+ [attr.aria-required]="column.required"
158
+ [attr.aria-labelledby]="'label-' + column.property"
159
+ [attr.aria-describedby]="'error-' + column.property">
160
+ <mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
161
+ <mat-datepicker #picker startView="multi-year"
162
+ (yearSelected)="setMonthAndYear($event, picker, element,column)"
163
+ panelClass="example-month-picker"></mat-datepicker>
164
+
165
+ </mat-form-field>
166
+ <!-- <mat-form-field class="flex-auto" appearance="outline" fxFlexFill>-->
167
+ <!-- <input matInput [formControl]="getField(element, column)">-->
168
+ <!-- </mat-form-field>-->
169
+ </td>
170
+ </ng-container>
171
+ <ng-container *ngSwitchCase="'number'">
172
+ <th *matHeaderCellDef class="mainTable__th" mat-header-cell>
173
+ {{ labelKey(column) | translate }}
174
+ </th>
175
+ <td *matCellDef="let element" class="mainTable__td"
176
+ [ngClass]="['mainTable__td__text-secondary__td']"
177
+ mat-cell>
178
+ <mat-form-field class="flex-auto fx-flex-fill" appearance="outline">
179
+ <!-- Visually hidden label just to trigger the floating label and asterisk -->
180
+ <mat-label>
181
+ </mat-label>
182
+
183
+ <input matInput
184
+ type="number"
185
+ [formControl]="getField(element, column)"
186
+ [required]="column.required"
187
+ [readonly]="column.readonly"
188
+ [attr.aria-required]="column.required"
189
+ [attr.aria-labelledby]="'label-' + column.property"
190
+ [attr.aria-describedby]="'error-' + column.property">
191
+ </mat-form-field>
192
+ </td>
193
+ </ng-container>
194
+ <ng-container *ngSwitchCase="'status'">
195
+ <th *matHeaderCellDef class="mainTable__th" mat-header-cell>
196
+ {{ labelKey(column) | translate }}
197
+ </th>
198
+ <td *matCellDef="let element" class="mainTable__td"
199
+ [ngClass]="['mainTable__td__text-secondary__td']"
200
+ mat-cell>
201
+ <mat-checkbox
202
+ style="padding-bottom: 14px; padding-top: 14px;"
203
+ [formControl]="getField(element, column)"
204
+ [required]="column.required"
205
+ [attr.aria-required]="column.required"
206
+ [attr.aria-labelledby]="'label-' + column.property"
207
+ [attr.aria-describedby]="'error-' + column.property"
208
+ [style.pointer-events]="column.readonly ? 'none' : 'auto'"
209
+ [style.opacity]="column.readonly ? 0.7 : 1"
210
+ (click)="column.readonly ? $event.preventDefault() : null">
211
+ </mat-checkbox>
212
+ </td>
213
+ </ng-container>
214
+ <ng-container *ngSwitchCase="'text'">
215
+ <th *matHeaderCellDef class="mainTable__th" mat-header-cell>
216
+ {{ labelKey(column) | translate }}
217
+ </th>
218
+ <td *matCellDef="let element" class="mainTable__td"
219
+ [ngClass]="['mainTable__td__text-secondary__td']"
220
+ mat-cell>
221
+ <mat-form-field class="flex-auto fx-flex-fill" appearance="outline">
222
+ <mat-label>
223
+ {{ labelKey(column) | translate }}
224
+ </mat-label>
225
+ <input matInput
226
+ type="text"
227
+ [formControl]="getField(element, column)"
228
+ [required]="column.required"
229
+ [readonly]="column.readonly"
230
+ [attr.aria-required]="column.required"
231
+ [attr.aria-labelledby]="'label-' + column.property"
232
+ [attr.aria-describedby]="'error-' + column.property">
233
+ </mat-form-field>
234
+ </td>
235
+ </ng-container>
236
+ <ng-container *ngSwitchCase="'date'">
237
+ <th *matHeaderCellDef class="mainTable__th" mat-header-cell>
238
+ {{ labelKey(column) | translate }}
239
+ </th>
240
+ <td *matCellDef="let element" class="mainTable__td"
241
+ [ngClass]="['mainTable__td__text-secondary__td']"
242
+ mat-cell>
243
+ <mat-form-field class="flex-auto fx-flex-fill" appearance="outline">
244
+ <input matInput
245
+ [matDatepicker]="xpicker"
246
+ [formControl]="getField(element, column)"
247
+ [required]="column.required"
248
+ [readonly]="column.readonly"
249
+ [disabled]="column.readonly"
250
+ [attr.aria-required]="column.required"
251
+ [attr.aria-labelledby]="'label-' + column.property"
252
+ [attr.aria-describedby]="'error-' + column.property">
253
+ <mat-datepicker-toggle
254
+ matSuffix
255
+ [for]="xpicker"
256
+ [disabled]="column.readonly">
257
+ </mat-datepicker-toggle>
258
+ <mat-datepicker #xpicker></mat-datepicker>
259
+ </mat-form-field>
260
+ </td>
261
+ </ng-container>
262
+
263
+ <ng-container *ngSwitchDefault>
264
+ <th *matHeaderCellDef class="mainTable__th" mat-header-cell>{{ labelKey(column) | translate }}
265
+ </th>
266
+ <td *matCellDef="let element" class="mainTable__td"
267
+ [ngClass]="['mainTable__td__text-secondary__td']"
268
+ mat-cell>
269
+ <mat-form-field class="flex-auto fx-flex-fill" appearance="outline">
270
+ <input matInput
271
+ [readonly]="column.readonly"
272
+ [attr.aria-required]="column.required"
273
+ [formControl]="getField(element, column)">
274
+ </mat-form-field>
275
+ </td>
276
+ </ng-container>
277
+ </ng-container>
278
+ </ng-container>
279
+ </ng-container>
280
+ <tr *matHeaderRowDef="visibleColumns" mat-header-row></tr>
281
+ <tr (click)="onSelectItem(row)" (auxclick)="openNewTab(row)"
282
+ *matRowDef="let row; columns: visibleColumns | paginate:config"
283
+ [attr.id]="'editable-row-' + (row?.value?.id || row?.value?.key || '')"
284
+ mat-row></tr>
285
+ </table>
286
+ </form>
287
+ </div>
288
+
289
+ <div *ngIf="noDataFound && !pageInfo.lazyLoadData" class="flex-row dataNotFound">
290
+ <div class="flex-column flex-full">
291
+ <span class="dataNotFound__details">
292
+ <mat-icon class="dataNotFound__details__icon">info</mat-icon>
293
+ <span>{{ 'dataNotFound' | translate }}</span>
294
+ </span>
295
+ </div>
296
+ </div>
297
+
298
+ <div class="flex-row mainTable" *ngIf="!selectedFileFromUploader">
299
+ <div>
300
+ <button *ngIf="!isPending && pageInfo.hasAddButton" mat-button color="primary" type="button"
301
+ (click)="addNewItem()" id="editable-add-item-btn">
302
+ <mat-icon>add_box</mat-icon>
303
+ {{ translationKey | translate }}
304
+ </button>
305
+ </div>
306
+ </div>
307
+
308
+ <div class="flex-row flex-wrap align-center-center main-pagination" *ngIf="totalElements > 0">
309
+ <div class="flex-column flex-full">
310
+ <app-paginator [currentPage]="pageIndex" [totalItems]="totalElements" [pageSize]="pageSize"
311
+ [pageSizeOptions]="[5, 10, 25, 50]" (pageChange)="onPageChange($event)"
312
+ (pageSizeChange)="onPageSizeChange($event)"></app-paginator>
313
+ </div>
314
+ <div class="flex-column flex-full countItem hide-gt-xs">
315
+ <span class="countItem__totalElement">{{ 'totalCountItem' | translate }} : {{ this.totalElements }}</span>
316
+ </div>
317
+ <div class="flex-column flex-2"></div>
318
+ </div>
319
+ </ng-container>
320
+ </div>
321
+ </div>
322
+
323
+ <div *ngIf="isBulkItemsSupported" class="flex-row gap-10 align-start-start mainTable">
324
+ <div>
325
+ <button mat-flat-button color="primary" type="button" (click)="addBulkItems()" [disabled]="shouldDisableBulkAdd()" id="editable-bulk-add-btn">
326
+ <mat-icon>add_box</mat-icon>
327
+ {{ 'addAll' | translate }}
328
+ </button>
329
+ </div>
330
+ <div>
331
+ <button mat-flat-button color="warn" type="button" [disabled]="!hasDataToClear()" (click)="clearBulkItems()" id="editable-bulk-clear-btn">
332
+ <mat-icon>delete</mat-icon>
333
+ {{ 'clearAll' | translate }}
334
+ </button>
335
+ </div>
336
+ </div>
337
+ </div>