@valtimo/dossier-management 11.3.2 → 12.0.1

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 (86) hide show
  1. package/esm2022/lib/components/dossier-management-assignee/dossier-management-assignee.component.mjs +7 -7
  2. package/esm2022/lib/components/dossier-management-connect-modal/dossier-management-connect-modal.component.mjs +7 -7
  3. package/esm2022/lib/components/dossier-management-create/dossier-management-create.component.mjs +119 -0
  4. package/esm2022/lib/components/dossier-management-detail/dossier-management-detail.component.mjs +34 -12
  5. package/esm2022/lib/components/dossier-management-detail-container/dossier-management-detail-container.component.mjs +111 -36
  6. package/esm2022/lib/components/dossier-management-detail-container-actions/dossier-management-detail-container-actions.component.mjs +159 -0
  7. package/esm2022/lib/components/dossier-management-document-definition/dossier-management-document-definition.component.mjs +147 -0
  8. package/esm2022/lib/components/dossier-management-list/dossier-management-list.component.mjs +33 -16
  9. package/esm2022/lib/components/dossier-management-list-columns/dossier-management-list-columns.component.mjs +12 -11
  10. package/esm2022/lib/components/dossier-management-processes/dossier-management-processes.component.mjs +7 -7
  11. package/esm2022/lib/components/dossier-management-remove-modal/dossier-management-remove-modal.component.mjs +7 -7
  12. package/esm2022/lib/components/dossier-management-search-fields/dossier-management-search-fields.component.mjs +50 -29
  13. package/esm2022/lib/components/dossier-management-statuses/dossier-management-status-modal/dossier-management-status-modal.component.mjs +285 -0
  14. package/esm2022/lib/components/dossier-management-statuses/dossier-management-statuses.component.mjs +154 -0
  15. package/esm2022/lib/components/dossier-management-tabs/dossier-management-add-tab-modal/dossier-management-add-tab-modal.component.mjs +10 -9
  16. package/esm2022/lib/components/dossier-management-tabs/dossier-management-edit-tab-modal/dossier-management-edit-tab-modal.component.mjs +10 -9
  17. package/esm2022/lib/components/dossier-management-tabs/dossier-management-tabs.component.mjs +7 -7
  18. package/esm2022/lib/components/dossier-management-tabs/tab-form/tab-form.component.mjs +7 -7
  19. package/esm2022/lib/components/dossier-management-upload/dossier-management-upload.component.mjs +14 -17
  20. package/esm2022/lib/components/dossier-management-upload/dossier-management-upload.constants.mjs +16 -1
  21. package/esm2022/lib/components/dossier-management-upload/step/dossier-management-upload-step.component.mjs +20 -5
  22. package/esm2022/lib/dossier-management-routing.module.mjs +10 -8
  23. package/esm2022/lib/dossier-management.module.mjs +33 -18
  24. package/esm2022/lib/models/index.mjs +3 -2
  25. package/esm2022/lib/models/list-column.model.mjs +2 -2
  26. package/esm2022/lib/models/status.model.mjs +17 -0
  27. package/esm2022/lib/models/tab.enum.mjs +3 -2
  28. package/esm2022/lib/services/dossier-detail.service.mjs +18 -11
  29. package/esm2022/lib/services/dossier-export.service.mjs +7 -7
  30. package/esm2022/lib/services/dossier-management.service.mjs +38 -0
  31. package/esm2022/lib/services/index.mjs +2 -2
  32. package/esm2022/lib/services/tab-management.service.mjs +5 -5
  33. package/esm2022/lib/services/tab.service.mjs +25 -8
  34. package/esm2022/public-api.mjs +2 -2
  35. package/fesm2022/valtimo-dossier-management.mjs +1238 -473
  36. package/fesm2022/valtimo-dossier-management.mjs.map +1 -1
  37. package/lib/components/dossier-management-create/dossier-management-create.component.d.ts +26 -0
  38. package/lib/components/dossier-management-create/dossier-management-create.component.d.ts.map +1 -0
  39. package/lib/components/dossier-management-detail/dossier-management-detail.component.d.ts +9 -3
  40. package/lib/components/dossier-management-detail/dossier-management-detail.component.d.ts.map +1 -1
  41. package/lib/components/dossier-management-detail-container/dossier-management-detail-container.component.d.ts +27 -14
  42. package/lib/components/dossier-management-detail-container/dossier-management-detail-container.component.d.ts.map +1 -1
  43. package/lib/components/dossier-management-detail-container-actions/{dossier-management-detail-container-actions.d.ts → dossier-management-detail-container-actions.component.d.ts} +9 -3
  44. package/lib/components/dossier-management-detail-container-actions/dossier-management-detail-container-actions.component.d.ts.map +1 -0
  45. package/lib/components/dossier-management-document-definition/dossier-management-document-definition.component.d.ts +48 -0
  46. package/lib/components/dossier-management-document-definition/dossier-management-document-definition.component.d.ts.map +1 -0
  47. package/lib/components/dossier-management-list/dossier-management-list.component.d.ts +7 -4
  48. package/lib/components/dossier-management-list/dossier-management-list.component.d.ts.map +1 -1
  49. package/lib/components/dossier-management-list-columns/dossier-management-list-columns.component.d.ts +2 -2
  50. package/lib/components/dossier-management-list-columns/dossier-management-list-columns.component.d.ts.map +1 -1
  51. package/lib/components/dossier-management-search-fields/dossier-management-search-fields.component.d.ts +10 -4
  52. package/lib/components/dossier-management-search-fields/dossier-management-search-fields.component.d.ts.map +1 -1
  53. package/lib/components/dossier-management-statuses/dossier-management-status-modal/dossier-management-status-modal.component.d.ts +77 -0
  54. package/lib/components/dossier-management-statuses/dossier-management-status-modal/dossier-management-status-modal.component.d.ts.map +1 -0
  55. package/lib/components/dossier-management-statuses/dossier-management-statuses.component.d.ts +47 -0
  56. package/lib/components/dossier-management-statuses/dossier-management-statuses.component.d.ts.map +1 -0
  57. package/lib/components/dossier-management-upload/dossier-management-upload.component.d.ts +3 -5
  58. package/lib/components/dossier-management-upload/dossier-management-upload.component.d.ts.map +1 -1
  59. package/lib/components/dossier-management-upload/dossier-management-upload.constants.d.ts.map +1 -1
  60. package/lib/components/dossier-management-upload/step/dossier-management-upload-step.component.d.ts.map +1 -1
  61. package/lib/dossier-management-routing.module.d.ts.map +1 -1
  62. package/lib/dossier-management.module.d.ts +24 -22
  63. package/lib/dossier-management.module.d.ts.map +1 -1
  64. package/lib/models/index.d.ts +1 -0
  65. package/lib/models/index.d.ts.map +1 -1
  66. package/lib/models/status.model.d.ts +4 -0
  67. package/lib/models/status.model.d.ts.map +1 -0
  68. package/lib/models/tab.enum.d.ts +2 -1
  69. package/lib/models/tab.enum.d.ts.map +1 -1
  70. package/lib/services/dossier-detail.service.d.ts +4 -1
  71. package/lib/services/dossier-detail.service.d.ts.map +1 -1
  72. package/lib/services/{dossier-import.service.d.ts → dossier-management.service.d.ts} +4 -4
  73. package/lib/services/dossier-management.service.d.ts.map +1 -0
  74. package/lib/services/tab.service.d.ts +9 -4
  75. package/lib/services/tab.service.d.ts.map +1 -1
  76. package/package.json +3 -3
  77. package/esm2022/lib/components/dossier-management-detail-container-actions/dossier-management-detail-container-actions.mjs +0 -152
  78. package/esm2022/lib/components/dossier-management-document-definition/dossier-management-document-definition.mjs +0 -48
  79. package/esm2022/lib/components/dossier-management-link-process/dossier-management-link-process.component.mjs +0 -84
  80. package/esm2022/lib/services/dossier-import.service.mjs +0 -38
  81. package/lib/components/dossier-management-detail-container-actions/dossier-management-detail-container-actions.d.ts.map +0 -1
  82. package/lib/components/dossier-management-document-definition/dossier-management-document-definition.d.ts +0 -15
  83. package/lib/components/dossier-management-document-definition/dossier-management-document-definition.d.ts.map +0 -1
  84. package/lib/components/dossier-management-link-process/dossier-management-link-process.component.d.ts +0 -27
  85. package/lib/components/dossier-management-link-process/dossier-management-link-process.component.d.ts.map +0 -1
  86. package/lib/services/dossier-import.service.d.ts.map +0 -1
@@ -0,0 +1,285 @@
1
+ /*
2
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
3
+ *
4
+ * Licensed under EUPL, Version 1.2 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" basis,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
17
+ import { BehaviorSubject, combineLatest, map, Subscription, switchMap, take, tap, } from 'rxjs';
18
+ import { CARBON_CONSTANTS } from '@valtimo/components';
19
+ import { Validators, } from '@angular/forms';
20
+ import { InternalCaseStatusColor, InternalCaseStatusUtils, } from '@valtimo/document';
21
+ import { Edit16 } from '@carbon/icons';
22
+ import * as i0 from "@angular/core";
23
+ import * as i1 from "@angular/forms";
24
+ import * as i2 from "carbon-components-angular";
25
+ import * as i3 from "@valtimo/document";
26
+ import * as i4 from "@ngx-translate/core";
27
+ import * as i5 from "@angular/common";
28
+ import * as i6 from "@valtimo/components";
29
+ export class DossierManagementStatusModalComponent {
30
+ set type(value) {
31
+ this._type$.next(value);
32
+ if (value === 'closed') {
33
+ setTimeout(() => {
34
+ this._typeAnimationDelay$.next(value);
35
+ }, CARBON_CONSTANTS.modalAnimationMs);
36
+ }
37
+ else {
38
+ this._typeAnimationDelay$.next(value);
39
+ }
40
+ }
41
+ set prefill(value) {
42
+ this._prefillStatus.next(value);
43
+ }
44
+ get visibleInCaseListByDefault() {
45
+ return this.statusFormGroup?.get('visibleInCaseListByDefault');
46
+ }
47
+ get key() {
48
+ return this.statusFormGroup?.get('key');
49
+ }
50
+ get title() {
51
+ return this.statusFormGroup?.get('title');
52
+ }
53
+ get color() {
54
+ return this.statusFormGroup?.get('color');
55
+ }
56
+ get invalid() {
57
+ return !!this.statusFormGroup?.invalid;
58
+ }
59
+ get pristine() {
60
+ return !!this.statusFormGroup?.pristine;
61
+ }
62
+ constructor(fb, iconService, caseStatusService, translateService) {
63
+ this.fb = fb;
64
+ this.iconService = iconService;
65
+ this.caseStatusService = caseStatusService;
66
+ this.translateService = translateService;
67
+ this.closeModalEvent = new EventEmitter();
68
+ this._type$ = new BehaviorSubject(undefined);
69
+ this._typeAnimationDelay$ = new BehaviorSubject(undefined);
70
+ this._prefillStatus = new BehaviorSubject(undefined);
71
+ this.statusFormGroup = this.fb.group({
72
+ title: this.fb.control('', Validators.required),
73
+ key: this.fb.control('', [
74
+ Validators.required,
75
+ Validators.minLength(3),
76
+ this.uniqueKeyValidator,
77
+ ]),
78
+ visibleInCaseListByDefault: this.fb.control(true, Validators.required),
79
+ color: this.fb.control('', Validators.required),
80
+ });
81
+ this.isEdit$ = combineLatest([this._typeAnimationDelay$, this._prefillStatus]).pipe(tap(([type, prefillStatus]) => {
82
+ if (type === 'edit' && prefillStatus)
83
+ this.prefillForm(prefillStatus);
84
+ }), map(([type]) => type === 'edit'));
85
+ this.isAdd$ = this._typeAnimationDelay$.pipe(map(type => type === 'add'), tap(isAdd => {
86
+ if (isAdd)
87
+ this.resetForm();
88
+ }));
89
+ this.isClosed$ = this._type$.pipe(map(type => type === 'closed'));
90
+ this.disabled$ = new BehaviorSubject(false);
91
+ this.COLORS = [
92
+ InternalCaseStatusColor.Red,
93
+ InternalCaseStatusColor.Magenta,
94
+ InternalCaseStatusColor.Purple,
95
+ InternalCaseStatusColor.Blue,
96
+ InternalCaseStatusColor.Teal,
97
+ InternalCaseStatusColor.Green,
98
+ InternalCaseStatusColor.Cyan,
99
+ InternalCaseStatusColor.Gray,
100
+ InternalCaseStatusColor.CoolGray,
101
+ InternalCaseStatusColor.WarmGray,
102
+ InternalCaseStatusColor.HighContrast,
103
+ InternalCaseStatusColor.Outline,
104
+ ];
105
+ this._selectedColor$ = new BehaviorSubject(undefined);
106
+ this.colorListItems$ = combineLatest([
107
+ this._selectedColor$,
108
+ this.translateService.stream('key'),
109
+ ]).pipe(map(([selectedColor]) => this.COLORS.map(color => ({
110
+ selected: color === selectedColor,
111
+ content: this.translateService.instant('interface.tagType.' +
112
+ InternalCaseStatusUtils.getTagTypeFromInternalCaseStatusColor(color)),
113
+ color,
114
+ tagType: InternalCaseStatusUtils.getTagTypeFromInternalCaseStatusColor(color),
115
+ }))));
116
+ this.editingKey$ = new BehaviorSubject(false);
117
+ this._originalStatusKey$ = new BehaviorSubject('');
118
+ this._subscriptions = new Subscription();
119
+ this.iconService.registerAll([Edit16]);
120
+ }
121
+ ngOnInit() {
122
+ this.openAutoKeySubscription();
123
+ }
124
+ ngOnDestroy() {
125
+ this._subscriptions.unsubscribe();
126
+ }
127
+ onClose() {
128
+ this.close();
129
+ }
130
+ toggleCheckedChange(checked) {
131
+ this.statusFormGroup.patchValue({
132
+ visibleInCaseListByDefault: checked,
133
+ });
134
+ this.statusFormGroup.markAsDirty();
135
+ }
136
+ addStatus() {
137
+ this.disable();
138
+ this.caseStatusService
139
+ .saveInternalCaseStatus(this.documentDefinitionName, this.getFormValue())
140
+ .subscribe({
141
+ next: () => {
142
+ this.enable();
143
+ this.closeAndRefresh();
144
+ },
145
+ error: () => {
146
+ this.enable(false);
147
+ },
148
+ });
149
+ }
150
+ editStatus() {
151
+ this.disable();
152
+ this._originalStatusKey$
153
+ .pipe(take(1), switchMap(originalStatusKey => this.caseStatusService.updateInternalCaseStatus(this.documentDefinitionName, originalStatusKey, this.getFormValue())))
154
+ .subscribe({
155
+ next: () => {
156
+ this.enable();
157
+ this.closeAndRefresh();
158
+ },
159
+ error: () => {
160
+ this.enable(false);
161
+ },
162
+ });
163
+ }
164
+ editKeyButtonClick() {
165
+ this.editingKey$.next(true);
166
+ }
167
+ colorDropdownChange(event) {
168
+ const newColor = event?.item?.color;
169
+ if (newColor) {
170
+ this._selectedColor$.next(newColor);
171
+ this.statusFormGroup.patchValue({ color: newColor });
172
+ this.statusFormGroup.markAsDirty();
173
+ }
174
+ }
175
+ prefillForm(prefillStatus) {
176
+ this._originalStatusKey$.next(prefillStatus.key);
177
+ this.statusFormGroup.patchValue({
178
+ key: prefillStatus.key,
179
+ title: prefillStatus.title,
180
+ visibleInCaseListByDefault: prefillStatus.visibleInCaseListByDefault,
181
+ color: prefillStatus.color,
182
+ });
183
+ this._selectedColor$.next(prefillStatus.color);
184
+ this.statusFormGroup.markAsPristine();
185
+ this.resetEditingKey();
186
+ }
187
+ resetForm() {
188
+ this.statusFormGroup.patchValue({
189
+ key: '',
190
+ title: '',
191
+ visibleInCaseListByDefault: true,
192
+ color: InternalCaseStatusColor.Blue,
193
+ });
194
+ this._selectedColor$.next(InternalCaseStatusColor.Blue);
195
+ this.statusFormGroup.markAsPristine();
196
+ this.resetEditingKey();
197
+ }
198
+ resetEditingKey() {
199
+ this.editingKey$.next(false);
200
+ }
201
+ openAutoKeySubscription() {
202
+ this._subscriptions.add(combineLatest([this.isAdd$, this.title.valueChanges, this.editingKey$]).subscribe(([isAdd, titleValue, editingKey]) => {
203
+ if (isAdd && !editingKey) {
204
+ if (titleValue) {
205
+ this.statusFormGroup.patchValue({ key: this.getUniqueKey(titleValue) });
206
+ }
207
+ else {
208
+ this.clearKey();
209
+ }
210
+ }
211
+ }));
212
+ }
213
+ getUniqueKey(title) {
214
+ const dashCaseKey = `${title}`
215
+ .toLowerCase()
216
+ .replace(/[^a-z0-9-_]+|-[^a-z0-9]+/g, '-')
217
+ .replace(/_[-_]+/g, '_')
218
+ .replace(/^[^a-z]+/g, '');
219
+ const usedKeys = this.usedKeys;
220
+ if (!usedKeys.includes(dashCaseKey)) {
221
+ return dashCaseKey;
222
+ }
223
+ return this.getUniqueKeyWithNumber(dashCaseKey, usedKeys);
224
+ }
225
+ getUniqueKeyWithNumber(dashCaseKey, usedKeys) {
226
+ const numbersFromCurrentKey = (dashCaseKey.match(/^\d+|\d+\b|\d+(?=\w)/g) || []).map((numberValue) => +numberValue);
227
+ const lastNumberFromCurrentKey = numbersFromCurrentKey.length > 0 && numbersFromCurrentKey[numbersFromCurrentKey.length - 1];
228
+ const newKey = lastNumberFromCurrentKey
229
+ ? `${dashCaseKey.replace(`${lastNumberFromCurrentKey}`, `${lastNumberFromCurrentKey + 1}`)}`
230
+ : `${dashCaseKey}-1`;
231
+ if (usedKeys.includes(newKey)) {
232
+ return this.getUniqueKeyWithNumber(newKey, usedKeys);
233
+ }
234
+ return newKey;
235
+ }
236
+ clearKey() {
237
+ this.statusFormGroup.patchValue({ key: '' });
238
+ }
239
+ uniqueKeyValidator() {
240
+ return (control) => combineLatest([this.isEdit$, control.valueChanges]).pipe(map(([isEdit, keyValue]) => this.usedKeys?.every((key) => key !== keyValue) || isEdit
241
+ ? null
242
+ : { uniqueKey: { value: control.value } }));
243
+ }
244
+ disable() {
245
+ this.disabled$.next(true);
246
+ this.statusFormGroup.disable();
247
+ }
248
+ enable(delay = true) {
249
+ setTimeout(() => {
250
+ this.disabled$.next(false);
251
+ this.statusFormGroup.enable();
252
+ }, delay ? CARBON_CONSTANTS.modalAnimationMs : 0);
253
+ }
254
+ close() {
255
+ this.closeModalEvent.emit('close');
256
+ }
257
+ closeAndRefresh() {
258
+ this.closeModalEvent.emit('closeAndRefresh');
259
+ }
260
+ getFormValue() {
261
+ return {
262
+ key: this.key.value,
263
+ title: this.title.value,
264
+ visibleInCaseListByDefault: this.visibleInCaseListByDefault.value,
265
+ color: this.color.value,
266
+ };
267
+ }
268
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DossierManagementStatusModalComponent, deps: [{ token: i1.FormBuilder }, { token: i2.IconService }, { token: i3.CaseStatusService }, { token: i4.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
269
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: DossierManagementStatusModalComponent, selector: "valtimo-dossier-management-status-modal", inputs: { type: "type", prefill: "prefill", usedKeys: "usedKeys", documentDefinitionName: "documentDefinitionName" }, outputs: { closeModalEvent: "closeModalEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal\n valtimoCdsModal\n *ngIf=\"{\n isAdd: isAdd$ | async,\n isEdit: isEdit$ | async,\n isClosed: isClosed$ | async,\n editingKey: editingKey$ | async,\n disabled: disabled$ | async\n } as obs\"\n [open]=\"!obs.isClosed\"\n size=\"sm\"\n>\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"onClose()\">\n <h3 cdsModalHeaderHeading>\n {{ obs.isAdd ? ('dossierManagement.statuses.add' | translate) : '' }}\n {{ obs.isEdit ? ('dossierManagement.statuses.edit' | translate) : '' }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <ng-container *ngTemplateOutlet=\"statusForm; context: {obs: obs}\"></ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"buttons; context: {obs: obs}\"></ng-container>\n </cds-modal-footer>\n</cds-modal>\n\n<ng-template #colorDropdownItemTemplate let-item=\"item\">\n <div class=\"dropdown-color-tag\">\n <cds-tag *ngIf=\"item && item.content\" class=\"cds-tag--no-margin\" [type]=\"item?.tagType\">\n {{ 'interface.tagType.' + item?.tagType | translate }}\n </cds-tag>\n </div>\n</ng-template>\n\n<ng-template #statusForm let-obs=\"obs\">\n <form [formGroup]=\"statusFormGroup\" class=\"status-form\">\n <cds-label>\n {{ 'dossierManagement.statuses.columns.title' | translate }}\n\n <input cdsText formControlName=\"title\" [attr.modal-primary-focus]=\"true\" />\n </cds-label>\n\n <cds-label>\n {{ 'dossierManagement.statuses.columns.key' | translate }}\n\n <div class=\"edit-key-input\">\n <input\n cdsText\n formControlName=\"key\"\n [readOnly]=\"!obs.editingKey\"\n [placeholder]=\"\n obs.isAdd && !obs.editingKey\n ? ('dossierManagement.statuses.keyAutoGenerated' | translate)\n : ''\n \"\n />\n\n <cds-icon-button\n *ngIf=\"!obs.editingKey && obs.isAdd\"\n [disabled]=\"obs.disabled\"\n (click)=\"editKeyButtonClick()\"\n kind=\"secondary\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"edit\" size=\"16\"></svg>\n </cds-icon-button>\n </div>\n </cds-label>\n\n <div class=\"horizontal-inputs\">\n <cds-label>\n {{ 'dossierManagement.statuses.columns.color' | translate }}\n\n <cds-dropdown\n [id]=\"'status-color-dropdown'\"\n [appendInline]=\"false\"\n [placeholder]=\"'dossierManagement.statuses.colorPlaceholder' | translate\"\n (selected)=\"colorDropdownChange($event)\"\n >\n <cds-dropdown-list [items]=\"colorListItems$\" [listTpl]=\"colorDropdownItemTemplate\">\n </cds-dropdown-list>\n </cds-dropdown>\n </cds-label>\n\n <cds-toggle\n [label]=\"'dossierManagement.statuses.visibleTitle' | translate\"\n [onText]=\"'dossierManagement.statuses.visible' | translate\"\n [offText]=\"'dossierManagement.statuses.invisible' | translate\"\n [disabled]=\"obs.disabled\"\n [checked]=\"visibleInCaseListByDefault?.value\"\n (checkedChange)=\"toggleCheckedChange($event)\"\n ></cds-toggle>\n </div>\n </form>\n</ng-template>\n\n<ng-template #buttons let-obs=\"obs\">\n <button cdsButton=\"secondary\" (click)=\"onClose()\" [disabled]=\"obs.disabled\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n *ngIf=\"obs.isAdd\"\n cdsButton=\"primary\"\n [disabled]=\"invalid || pristine || obs.disabled\"\n (click)=\"addStatus()\"\n >\n {{ 'interface.add' | translate }}\n </button>\n\n <button\n *ngIf=\"obs.isEdit\"\n cdsButton=\"primary\"\n [disabled]=\"invalid || pristine || obs.disabled\"\n (click)=\"editStatus()\"\n >\n {{ 'interface.save' | translate }}\n </button>\n</ng-template>\n", styles: [".status-form{display:flex;flex-direction:column;gap:16px}.edit-key-input{height:40px;display:flex;width:100%;flex-direction:row;gap:16px;align-items:flex-end}.edit-key-input input:read-only{color:var(--cds-text-disabled)}::ng-deep .horizontal-inputs{display:grid;gap:16px;grid-template-columns:repeat(2,1fr)}::ng-deep .horizontal-inputs .cds--label{width:100%;display:flex;flex-direction:column;gap:8px}::ng-deep .dropdown-color-tag .cds--tag{margin-top:-4px;margin-left:2px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i2.IconButton, selector: "cds-icon-button, ibm-icon-button", inputs: ["buttonNgClass", "buttonAttributes", "buttonId", "kind", "size", "type", "isExpressive", "disabled", "description"], outputs: ["click", "focus", "blur", "tooltipClick"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i2.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i2.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i2.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i2.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i2.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "component", type: i2.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i2.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i2.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "directive", type: i6.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]" }, { kind: "component", type: i2.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class"] }, { kind: "component", type: i2.Toggle, selector: "cds-toggle, ibm-toggle", inputs: ["offText", "onText", "label", "size", "hideLabel", "skeleton"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
270
+ }
271
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DossierManagementStatusModalComponent, decorators: [{
272
+ type: Component,
273
+ args: [{ selector: 'valtimo-dossier-management-status-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal\n valtimoCdsModal\n *ngIf=\"{\n isAdd: isAdd$ | async,\n isEdit: isEdit$ | async,\n isClosed: isClosed$ | async,\n editingKey: editingKey$ | async,\n disabled: disabled$ | async\n } as obs\"\n [open]=\"!obs.isClosed\"\n size=\"sm\"\n>\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"onClose()\">\n <h3 cdsModalHeaderHeading>\n {{ obs.isAdd ? ('dossierManagement.statuses.add' | translate) : '' }}\n {{ obs.isEdit ? ('dossierManagement.statuses.edit' | translate) : '' }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <ng-container *ngTemplateOutlet=\"statusForm; context: {obs: obs}\"></ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"buttons; context: {obs: obs}\"></ng-container>\n </cds-modal-footer>\n</cds-modal>\n\n<ng-template #colorDropdownItemTemplate let-item=\"item\">\n <div class=\"dropdown-color-tag\">\n <cds-tag *ngIf=\"item && item.content\" class=\"cds-tag--no-margin\" [type]=\"item?.tagType\">\n {{ 'interface.tagType.' + item?.tagType | translate }}\n </cds-tag>\n </div>\n</ng-template>\n\n<ng-template #statusForm let-obs=\"obs\">\n <form [formGroup]=\"statusFormGroup\" class=\"status-form\">\n <cds-label>\n {{ 'dossierManagement.statuses.columns.title' | translate }}\n\n <input cdsText formControlName=\"title\" [attr.modal-primary-focus]=\"true\" />\n </cds-label>\n\n <cds-label>\n {{ 'dossierManagement.statuses.columns.key' | translate }}\n\n <div class=\"edit-key-input\">\n <input\n cdsText\n formControlName=\"key\"\n [readOnly]=\"!obs.editingKey\"\n [placeholder]=\"\n obs.isAdd && !obs.editingKey\n ? ('dossierManagement.statuses.keyAutoGenerated' | translate)\n : ''\n \"\n />\n\n <cds-icon-button\n *ngIf=\"!obs.editingKey && obs.isAdd\"\n [disabled]=\"obs.disabled\"\n (click)=\"editKeyButtonClick()\"\n kind=\"secondary\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"edit\" size=\"16\"></svg>\n </cds-icon-button>\n </div>\n </cds-label>\n\n <div class=\"horizontal-inputs\">\n <cds-label>\n {{ 'dossierManagement.statuses.columns.color' | translate }}\n\n <cds-dropdown\n [id]=\"'status-color-dropdown'\"\n [appendInline]=\"false\"\n [placeholder]=\"'dossierManagement.statuses.colorPlaceholder' | translate\"\n (selected)=\"colorDropdownChange($event)\"\n >\n <cds-dropdown-list [items]=\"colorListItems$\" [listTpl]=\"colorDropdownItemTemplate\">\n </cds-dropdown-list>\n </cds-dropdown>\n </cds-label>\n\n <cds-toggle\n [label]=\"'dossierManagement.statuses.visibleTitle' | translate\"\n [onText]=\"'dossierManagement.statuses.visible' | translate\"\n [offText]=\"'dossierManagement.statuses.invisible' | translate\"\n [disabled]=\"obs.disabled\"\n [checked]=\"visibleInCaseListByDefault?.value\"\n (checkedChange)=\"toggleCheckedChange($event)\"\n ></cds-toggle>\n </div>\n </form>\n</ng-template>\n\n<ng-template #buttons let-obs=\"obs\">\n <button cdsButton=\"secondary\" (click)=\"onClose()\" [disabled]=\"obs.disabled\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n *ngIf=\"obs.isAdd\"\n cdsButton=\"primary\"\n [disabled]=\"invalid || pristine || obs.disabled\"\n (click)=\"addStatus()\"\n >\n {{ 'interface.add' | translate }}\n </button>\n\n <button\n *ngIf=\"obs.isEdit\"\n cdsButton=\"primary\"\n [disabled]=\"invalid || pristine || obs.disabled\"\n (click)=\"editStatus()\"\n >\n {{ 'interface.save' | translate }}\n </button>\n</ng-template>\n", styles: [".status-form{display:flex;flex-direction:column;gap:16px}.edit-key-input{height:40px;display:flex;width:100%;flex-direction:row;gap:16px;align-items:flex-end}.edit-key-input input:read-only{color:var(--cds-text-disabled)}::ng-deep .horizontal-inputs{display:grid;gap:16px;grid-template-columns:repeat(2,1fr)}::ng-deep .horizontal-inputs .cds--label{width:100%;display:flex;flex-direction:column;gap:8px}::ng-deep .dropdown-color-tag .cds--tag{margin-top:-4px;margin-left:2px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
274
+ }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.IconService }, { type: i3.CaseStatusService }, { type: i4.TranslateService }], propDecorators: { type: [{
275
+ type: Input
276
+ }], prefill: [{
277
+ type: Input
278
+ }], usedKeys: [{
279
+ type: Input
280
+ }], documentDefinitionName: [{
281
+ type: Input
282
+ }], closeModalEvent: [{
283
+ type: Output
284
+ }] } });
285
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1tYW5hZ2VtZW50LXN0YXR1cy1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXItbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvZG9zc2llci1tYW5hZ2VtZW50LXN0YXR1c2VzL2Rvc3NpZXItbWFuYWdlbWVudC1zdGF0dXMtbW9kYWwvZG9zc2llci1tYW5hZ2VtZW50LXN0YXR1cy1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXItbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvZG9zc2llci1tYW5hZ2VtZW50LXN0YXR1c2VzL2Rvc3NpZXItbWFuYWdlbWVudC1zdGF0dXMtbW9kYWwvZG9zc2llci1tYW5hZ2VtZW50LXN0YXR1cy1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLEdBQUcsRUFFSCxZQUFZLEVBQ1osU0FBUyxFQUNULElBQUksRUFDSixHQUFHLEdBQ0osTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBS0wsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUdMLHVCQUF1QixFQUN2Qix1QkFBdUIsR0FDeEIsTUFBTSxtQkFBbUIsQ0FBQztBQUUzQixPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVVyQyxN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RyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSztZQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLO1lBQ3ZCLDBCQUEwQixFQUFFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLO1lBQ2pFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQWdDO1NBQ25ELENBQUM7SUFDSixDQUFDOzhHQXZVVSxxQ0FBcUM7a0dBQXJDLHFDQUFxQyxzUEM3RGxELDY1SUF3SUE7OzJGRDNFYSxxQ0FBcUM7a0JBTmpELFNBQVM7K0JBQ0UseUNBQXlDLG1CQUdsQyx1QkFBdUIsQ0FBQyxNQUFNO3lLQUczQixJQUFJO3NCQUF2QixLQUFLO2dCQVljLE9BQU87c0JBQTFCLEtBQUs7Z0JBSVUsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxzQkFBc0I7c0JBQXJDLEtBQUs7Z0JBRVcsZUFBZTtzQkFBL0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtTdGF0dXNNb2RhbENsb3NlRXZlbnQsIFN0YXR1c01vZGFsVHlwZX0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBTdWJzY3JpcHRpb24sXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q0FSQk9OX0NPTlNUQU5UU30gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEFzeW5jVmFsaWRhdG9yRm4sXG4gIEZvcm1CdWlsZGVyLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBDYXNlU3RhdHVzU2VydmljZSxcbiAgSW50ZXJuYWxDYXNlU3RhdHVzLFxuICBJbnRlcm5hbENhc2VTdGF0dXNDb2xvcixcbiAgSW50ZXJuYWxDYXNlU3RhdHVzVXRpbHMsXG59IGZyb20gJ0B2YWx0aW1vL2RvY3VtZW50JztcbmltcG9ydCB7SWNvblNlcnZpY2V9IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtFZGl0MTZ9IGZyb20gJ0BjYXJib24vaWNvbnMnO1xuaW1wb3J0IHtMaXN0SXRlbX0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhci9kcm9wZG93bi9saXN0LWl0ZW0uaW50ZXJmYWNlJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9zc2llci1tYW5hZ2VtZW50LXN0YXR1cy1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb3NzaWVyLW1hbmFnZW1lbnQtc3RhdHVzLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZG9zc2llci1tYW5hZ2VtZW50LXN0YXR1cy1tb2RhbC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRG9zc2llck1hbmFnZW1lbnRTdGF0dXNNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgcHVibGljIHNldCB0eXBlKHZhbHVlOiBTdGF0dXNNb2RhbFR5cGUpIHtcbiAgICB0aGlzLl90eXBlJC5uZXh0KHZhbHVlKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl90eXBlQW5pbWF0aW9uRGVsYXkkLm5leHQodmFsdWUpO1xuICAgICAgfSwgQ0FSQk9OX0NPTlNUQU5UUy5tb2RhbEFuaW1hdGlvbk1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdHlwZUFuaW1hdGlvbkRlbGF5JC5uZXh0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKSBwdWJsaWMgc2V0IHByZWZpbGwodmFsdWU6IEludGVybmFsQ2FzZVN0YXR1cykge1xuICAgIHRoaXMuX3ByZWZpbGxTdGF0dXMubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBASW5wdXQoKSBwdWJsaWMgdXNlZEtleXMhOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgcHVibGljIGRvY3VtZW50RGVmaW5pdGlvbk5hbWUhOiBzdHJpbmc7XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBjbG9zZU1vZGFsRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFN0YXR1c01vZGFsQ2xvc2VFdmVudD4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF90eXBlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3RhdHVzTW9kYWxUeXBlPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF90eXBlQW5pbWF0aW9uRGVsYXkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTdGF0dXNNb2RhbFR5cGU+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ByZWZpbGxTdGF0dXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEludGVybmFsQ2FzZVN0YXR1cz4odW5kZWZpbmVkKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgdGl0bGU6IHRoaXMuZmIuY29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAga2V5OiB0aGlzLmZiLmNvbnRyb2woJycsIFtcbiAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICBWYWxpZGF0b3JzLm1pbkxlbmd0aCgzKSxcbiAgICAgIHRoaXMudW5pcXVlS2V5VmFsaWRhdG9yLFxuICAgIF0pLFxuICAgIHZpc2libGVJbkNhc2VMaXN0QnlEZWZhdWx0OiB0aGlzLmZiLmNvbnRyb2wodHJ1ZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgY29sb3I6IHRoaXMuZmIuY29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gIH0pO1xuXG4gIHB1YmxpYyByZWFkb25seSBpc0VkaXQkID0gY29tYmluZUxhdGVzdChbdGhpcy5fdHlwZUFuaW1hdGlvbkRlbGF5JCwgdGhpcy5fcHJlZmlsbFN0YXR1c10pLnBpcGUoXG4gICAgdGFwKChbdHlwZSwgcHJlZmlsbFN0YXR1c10pID0+IHtcbiAgICAgIGlmICh0eXBlID09PSAnZWRpdCcgJiYgcHJlZmlsbFN0YXR1cykgdGhpcy5wcmVmaWxsRm9ybShwcmVmaWxsU3RhdHVzKTtcbiAgICB9KSxcbiAgICBtYXAoKFt0eXBlXSkgPT4gdHlwZSA9PT0gJ2VkaXQnKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBpc0FkZCQgPSB0aGlzLl90eXBlQW5pbWF0aW9uRGVsYXkkLnBpcGUoXG4gICAgbWFwKHR5cGUgPT4gdHlwZSA9PT0gJ2FkZCcpLFxuICAgIHRhcChpc0FkZCA9PiB7XG4gICAgICBpZiAoaXNBZGQpIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgfSlcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgaXNDbG9zZWQkID0gdGhpcy5fdHlwZSQucGlwZShtYXAodHlwZSA9PiB0eXBlID09PSAnY2xvc2VkJykpO1xuXG4gIHB1YmxpYyByZWFkb25seSBkaXNhYmxlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IENPTE9SUzogSW50ZXJuYWxDYXNlU3RhdHVzQ29sb3JbXSA9IFtcbiAgICBJbnRlcm5hbENhc2VTdGF0dXNDb2xvci5SZWQsXG4gICAgSW50ZXJuYWxDYXNlU3RhdHVzQ29sb3IuTWFnZW50YSxcbiAgICBJbnRlcm5hbENhc2VTdGF0dXNDb2xvci5QdXJwbGUsXG4gICAgSW50ZXJuYWxDYXNlU3RhdHVzQ29sb3IuQmx1ZSxcbiAgICBJbnRlcm5hbENhc2VTdGF0dXNDb2xvci5UZWFsLFxuICAgIEludGVybmFsQ2FzZVN0YXR1c0NvbG9yLkdyZWVuLFxuICAgIEludGVybmFsQ2FzZVN0YXR1c0NvbG9yLkN5YW4sXG4gICAgSW50ZXJuYWxDYXNlU3RhdHVzQ29sb3IuR3JheSxcbiAgICBJbnRlcm5hbENhc2VTdGF0dXNDb2xvci5Db29sR3JheSxcbiAgICBJbnRlcm5hbENhc2VTdGF0dXNDb2xvci5XYXJtR3JheSxcbiAgICBJbnRlcm5hbENhc2VTdGF0dXNDb2xvci5IaWdoQ29udHJhc3QsXG4gICAgSW50ZXJuYWxDYXNlU3RhdHVzQ29sb3IuT3V0bGluZSxcbiAgXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3RlZENvbG9yJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SW50ZXJuYWxDYXNlU3RhdHVzQ29sb3I+KHVuZGVmaW5lZCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbG9yTGlzdEl0ZW1zJDogT2JzZXJ2YWJsZTxMaXN0SXRlbVtdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX3NlbGVjdGVkQ29sb3IkLFxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW3NlbGVjdGVkQ29sb3JdKSA9PlxuICAgICAgdGhpcy5DT0xPUlMubWFwKGNvbG9yID0+ICh7XG4gICAgICAgIHNlbGVjdGVkOiBjb2xvciA9PT0gc2VsZWN0ZWRDb2xvcixcbiAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgJ2ludGVyZmFjZS50YWdUeXBlLicgK1xuICAgICAgICAgICAgSW50ZXJuYWxDYXNlU3RhdHVzVXRpbHMuZ2V0VGFnVHlwZUZyb21JbnRlcm5hbENhc2VTdGF0dXNDb2xvcihjb2xvcilcbiAgICAgICAgKSxcbiAgICAgICAgY29sb3IsXG4gICAgICAgIHRhZ1R5cGU6IEludGVybmFsQ2FzZVN0YXR1c1V0aWxzLmdldFRhZ1R5cGVGcm9tSW50ZXJuYWxDYXNlU3RhdHVzQ29sb3IoY29sb3IpLFxuICAgICAgfSkpXG4gICAgKVxuICApO1xuXG4gIHB1YmxpYyBnZXQgdmlzaWJsZUluQ2FzZUxpc3RCeURlZmF1bHQoKTogQWJzdHJhY3RDb250cm9sPGJvb2xlYW4sIGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXNGb3JtR3JvdXA/LmdldCgndmlzaWJsZUluQ2FzZUxpc3RCeURlZmF1bHQnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQga2V5KCk6IEFic3RyYWN0Q29udHJvbDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnN0YXR1c0Zvcm1Hcm91cD8uZ2V0KCdrZXknKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGl0bGUoKTogQWJzdHJhY3RDb250cm9sPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzRm9ybUdyb3VwPy5nZXQoJ3RpdGxlJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbG9yKCk6IEFic3RyYWN0Q29udHJvbDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnN0YXR1c0Zvcm1Hcm91cD8uZ2V0KCdjb2xvcicpO1xuICB9XG5cbiAgcHVibGljIGdldCBpbnZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuc3RhdHVzRm9ybUdyb3VwPy5pbnZhbGlkO1xuICB9XG5cbiAgcHVibGljIGdldCBwcmlzdGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnN0YXR1c0Zvcm1Hcm91cD8ucHJpc3RpbmU7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgZWRpdGluZ0tleSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vcmlnaW5hbFN0YXR1c0tleSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpY29uU2VydmljZTogSWNvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXNlU3RhdHVzU2VydmljZTogQ2FzZVN0YXR1c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaWNvblNlcnZpY2UucmVnaXN0ZXJBbGwoW0VkaXQxNl0pO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3BlbkF1dG9LZXlTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgb25DbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlQ2hlY2tlZENoYW5nZShjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0dXNGb3JtR3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICB2aXNpYmxlSW5DYXNlTGlzdEJ5RGVmYXVsdDogY2hlY2tlZCxcbiAgICB9KTtcbiAgICB0aGlzLnN0YXR1c0Zvcm1Hcm91cC5tYXJrQXNEaXJ0eSgpO1xuICB9XG5cbiAgcHVibGljIGFkZFN0YXR1cygpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGUoKTtcblxuICAgIHRoaXMuY2FzZVN0YXR1c1NlcnZpY2VcbiAgICAgIC5zYXZlSW50ZXJuYWxDYXNlU3RhdHVzKHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgdGhpcy5nZXRGb3JtVmFsdWUoKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5lbmFibGUoKTtcbiAgICAgICAgICB0aGlzLmNsb3NlQW5kUmVmcmVzaCgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZW5hYmxlKGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGVkaXRTdGF0dXMoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlKCk7XG5cbiAgICB0aGlzLl9vcmlnaW5hbFN0YXR1c0tleSRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBzd2l0Y2hNYXAob3JpZ2luYWxTdGF0dXNLZXkgPT5cbiAgICAgICAgICB0aGlzLmNhc2VTdGF0dXNTZXJ2aWNlLnVwZGF0ZUludGVybmFsQ2FzZVN0YXR1cyhcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSxcbiAgICAgICAgICAgIG9yaWdpbmFsU3RhdHVzS2V5LFxuICAgICAgICAgICAgdGhpcy5nZXRGb3JtVmFsdWUoKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmVuYWJsZSgpO1xuICAgICAgICAgIHRoaXMuY2xvc2VBbmRSZWZyZXNoKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5lbmFibGUoZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZWRpdEtleUJ1dHRvbkNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdGluZ0tleSQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBjb2xvckRyb3Bkb3duQ2hhbmdlKGV2ZW50OiB7XG4gICAgaXRlbToge2NvbG9yOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZzsgc2VsZWN0ZWQ6IGJvb2xlYW59O1xuICAgIGlzVXBkYXRlOiBib29sZWFuO1xuICB9KTogdm9pZCB7XG4gICAgY29uc3QgbmV3Q29sb3IgPSBldmVudD8uaXRlbT8uY29sb3IgYXMgSW50ZXJuYWxDYXNlU3RhdHVzQ29sb3I7XG5cbiAgICBpZiAobmV3Q29sb3IpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkQ29sb3IkLm5leHQobmV3Q29sb3IpO1xuICAgICAgdGhpcy5zdGF0dXNGb3JtR3JvdXAucGF0Y2hWYWx1ZSh7Y29sb3I6IG5ld0NvbG9yfSk7XG4gICAgICB0aGlzLnN0YXR1c0Zvcm1Hcm91cC5tYXJrQXNEaXJ0eSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHJlZmlsbEZvcm0ocHJlZmlsbFN0YXR1czogSW50ZXJuYWxDYXNlU3RhdHVzKTogdm9pZCB7XG4gICAgdGhpcy5fb3JpZ2luYWxTdGF0dXNLZXkkLm5leHQocHJlZmlsbFN0YXR1cy5rZXkpO1xuICAgIHRoaXMuc3RhdHVzRm9ybUdyb3VwLnBhdGNoVmFsdWUoe1xuICAgICAga2V5OiBwcmVmaWxsU3RhdHVzLmtleSxcbiAgICAgIHRpdGxlOiBwcmVmaWxsU3RhdHVzLnRpdGxlLFxuICAgICAgdmlzaWJsZUluQ2FzZUxpc3RCeURlZmF1bHQ6IHByZWZpbGxTdGF0dXMudmlzaWJsZUluQ2FzZUxpc3RCeURlZmF1bHQsXG4gICAgICBjb2xvcjogcHJlZmlsbFN0YXR1cy5jb2xvcixcbiAgICB9KTtcbiAgICB0aGlzLl9zZWxlY3RlZENvbG9yJC5uZXh0KHByZWZpbGxTdGF0dXMuY29sb3IpO1xuICAgIHRoaXMuc3RhdHVzRm9ybUdyb3VwLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgdGhpcy5yZXNldEVkaXRpbmdLZXkoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdHVzRm9ybUdyb3VwLnBhdGNoVmFsdWUoe1xuICAgICAga2V5OiAnJyxcbiAgICAgIHRpdGxlOiAnJyxcbiAgICAgIHZpc2libGVJbkNhc2VMaXN0QnlEZWZhdWx0OiB0cnVlLFxuICAgICAgY29sb3I6IEludGVybmFsQ2FzZVN0YXR1c0NvbG9yLkJsdWUsXG4gICAgfSk7XG4gICAgdGhpcy5fc2VsZWN0ZWRDb2xvciQubmV4dChJbnRlcm5hbENhc2VTdGF0dXNDb2xvci5CbHVlKTtcbiAgICB0aGlzLnN0YXR1c0Zvcm1Hcm91cC5tYXJrQXNQcmlzdGluZSgpO1xuICAgIHRoaXMucmVzZXRFZGl0aW5nS2V5KCk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0RWRpdGluZ0tleSgpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRpbmdLZXkkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuQXV0b0tleVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuaXNBZGQkLCB0aGlzLnRpdGxlLnZhbHVlQ2hhbmdlcywgdGhpcy5lZGl0aW5nS2V5JF0pLnN1YnNjcmliZShcbiAgICAgICAgKFtpc0FkZCwgdGl0bGVWYWx1ZSwgZWRpdGluZ0tleV0pID0+IHtcbiAgICAgICAgICBpZiAoaXNBZGQgJiYgIWVkaXRpbmdLZXkpIHtcbiAgICAgICAgICAgIGlmICh0aXRsZVZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuc3RhdHVzRm9ybUdyb3VwLnBhdGNoVmFsdWUoe2tleTogdGhpcy5nZXRVbmlxdWVLZXkodGl0bGVWYWx1ZSl9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJLZXkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRVbmlxdWVLZXkodGl0bGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZGFzaENhc2VLZXkgPSBgJHt0aXRsZX1gXG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLnJlcGxhY2UoL1teYS16MC05LV9dK3wtW15hLXowLTldKy9nLCAnLScpXG4gICAgICAucmVwbGFjZSgvX1stX10rL2csICdfJylcbiAgICAgIC5yZXBsYWNlKC9eW15hLXpdKy9nLCAnJyk7XG4gICAgY29uc3QgdXNlZEtleXMgPSB0aGlzLnVzZWRLZXlzO1xuXG4gICAgaWYgKCF1c2VkS2V5cy5pbmNsdWRlcyhkYXNoQ2FzZUtleSkpIHtcbiAgICAgIHJldHVybiBkYXNoQ2FzZUtleTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRVbmlxdWVLZXlXaXRoTnVtYmVyKGRhc2hDYXNlS2V5LCB1c2VkS2V5cyk7XG4gIH1cblxuICBwcml2YXRlIGdldFVuaXF1ZUtleVdpdGhOdW1iZXIoZGFzaENhc2VLZXk6IHN0cmluZywgdXNlZEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICBjb25zdCBudW1iZXJzRnJvbUN1cnJlbnRLZXkgPSAoZGFzaENhc2VLZXkubWF0Y2goL15cXGQrfFxcZCtcXGJ8XFxkKyg/PVxcdykvZykgfHwgW10pLm1hcChcbiAgICAgIChudW1iZXJWYWx1ZTogc3RyaW5nKSA9PiArbnVtYmVyVmFsdWVcbiAgICApO1xuICAgIGNvbnN0IGxhc3ROdW1iZXJGcm9tQ3VycmVudEtleSA9XG4gICAgICBudW1iZXJzRnJvbUN1cnJlbnRLZXkubGVuZ3RoID4gMCAmJiBudW1iZXJzRnJvbUN1cnJlbnRLZXlbbnVtYmVyc0Zyb21DdXJyZW50S2V5Lmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IG5ld0tleSA9IGxhc3ROdW1iZXJGcm9tQ3VycmVudEtleVxuICAgICAgPyBgJHtkYXNoQ2FzZUtleS5yZXBsYWNlKGAke2xhc3ROdW1iZXJGcm9tQ3VycmVudEtleX1gLCBgJHtsYXN0TnVtYmVyRnJvbUN1cnJlbnRLZXkgKyAxfWApfWBcbiAgICAgIDogYCR7ZGFzaENhc2VLZXl9LTFgO1xuXG4gICAgaWYgKHVzZWRLZXlzLmluY2x1ZGVzKG5ld0tleSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFVuaXF1ZUtleVdpdGhOdW1iZXIobmV3S2V5LCB1c2VkS2V5cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0tleTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJLZXkoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0dXNGb3JtR3JvdXAucGF0Y2hWYWx1ZSh7a2V5OiAnJ30pO1xuICB9XG5cbiAgcHJpdmF0ZSB1bmlxdWVLZXlWYWxpZGF0b3IoKTogQXN5bmNWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnMgfCBudWxsPiA9PlxuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5pc0VkaXQkLCBjb250cm9sLnZhbHVlQ2hhbmdlc10pLnBpcGUoXG4gICAgICAgIG1hcCgoW2lzRWRpdCwga2V5VmFsdWVdKSA9PlxuICAgICAgICAgIHRoaXMudXNlZEtleXM/LmV2ZXJ5KChrZXk6IHN0cmluZykgPT4ga2V5ICE9PSBrZXlWYWx1ZSkgfHwgaXNFZGl0XG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDoge3VuaXF1ZUtleToge3ZhbHVlOiBjb250cm9sLnZhbHVlfX1cbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzYWJsZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkJC5uZXh0KHRydWUpO1xuICAgIHRoaXMuc3RhdHVzRm9ybUdyb3VwLmRpc2FibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlKGRlbGF5ID0gdHJ1ZSk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQkLm5leHQoZmFsc2UpO1xuICAgICAgICB0aGlzLnN0YXR1c0Zvcm1Hcm91cC5lbmFibGUoKTtcbiAgICAgIH0sXG4gICAgICBkZWxheSA/IENBUkJPTl9DT05TVEFOVFMubW9kYWxBbmltYXRpb25NcyA6IDBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlTW9kYWxFdmVudC5lbWl0KCdjbG9zZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZUFuZFJlZnJlc2goKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZU1vZGFsRXZlbnQuZW1pdCgnY2xvc2VBbmRSZWZyZXNoJyk7XG4gIH1cblxuICBwcml2YXRlIGdldEZvcm1WYWx1ZSgpOiBJbnRlcm5hbENhc2VTdGF0dXMge1xuICAgIHJldHVybiB7XG4gICAgICBrZXk6IHRoaXMua2V5LnZhbHVlLFxuICAgICAgdGl0bGU6IHRoaXMudGl0bGUudmFsdWUsXG4gICAgICB2aXNpYmxlSW5DYXNlTGlzdEJ5RGVmYXVsdDogdGhpcy52aXNpYmxlSW5DYXNlTGlzdEJ5RGVmYXVsdC52YWx1ZSxcbiAgICAgIGNvbG9yOiB0aGlzLmNvbG9yLnZhbHVlIGFzIEludGVybmFsQ2FzZVN0YXR1c0NvbG9yLFxuICAgIH07XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPGNkcy1tb2RhbFxuICB2YWx0aW1vQ2RzTW9kYWxcbiAgKm5nSWY9XCJ7XG4gICAgaXNBZGQ6IGlzQWRkJCB8IGFzeW5jLFxuICAgIGlzRWRpdDogaXNFZGl0JCB8IGFzeW5jLFxuICAgIGlzQ2xvc2VkOiBpc0Nsb3NlZCQgfCBhc3luYyxcbiAgICBlZGl0aW5nS2V5OiBlZGl0aW5nS2V5JCB8IGFzeW5jLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCQgfCBhc3luY1xuICB9IGFzIG9ic1wiXG4gIFtvcGVuXT1cIiFvYnMuaXNDbG9zZWRcIlxuICBzaXplPVwic21cIlxuPlxuICA8Y2RzLW1vZGFsLWhlYWRlciBzaG93Q2xvc2VCdXR0b249XCJ0cnVlXCIgKGNsb3NlU2VsZWN0KT1cIm9uQ2xvc2UoKVwiPlxuICAgIDxoMyBjZHNNb2RhbEhlYWRlckhlYWRpbmc+XG4gICAgICB7eyBvYnMuaXNBZGQgPyAoJ2Rvc3NpZXJNYW5hZ2VtZW50LnN0YXR1c2VzLmFkZCcgfCB0cmFuc2xhdGUpIDogJycgfX1cbiAgICAgIHt7IG9icy5pc0VkaXQgPyAoJ2Rvc3NpZXJNYW5hZ2VtZW50LnN0YXR1c2VzLmVkaXQnIHwgdHJhbnNsYXRlKSA6ICcnIH19XG4gICAgPC9oMz5cbiAgPC9jZHMtbW9kYWwtaGVhZGVyPlxuXG4gIDxzZWN0aW9uIGNkc01vZGFsQ29udGVudD5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3RhdHVzRm9ybTsgY29udGV4dDoge29iczogb2JzfVwiPjwvbmctY29udGFpbmVyPlxuICA8L3NlY3Rpb24+XG5cbiAgPGNkcy1tb2RhbC1mb290ZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbnM7IGNvbnRleHQ6IHtvYnM6IG9ic31cIj48L25nLWNvbnRhaW5lcj5cbiAgPC9jZHMtbW9kYWwtZm9vdGVyPlxuPC9jZHMtbW9kYWw+XG5cbjxuZy10ZW1wbGF0ZSAjY29sb3JEcm9wZG93bkl0ZW1UZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWNvbG9yLXRhZ1wiPlxuICAgIDxjZHMtdGFnICpuZ0lmPVwiaXRlbSAmJiBpdGVtLmNvbnRlbnRcIiBjbGFzcz1cImNkcy10YWctLW5vLW1hcmdpblwiIFt0eXBlXT1cIml0ZW0/LnRhZ1R5cGVcIj5cbiAgICAgIHt7ICdpbnRlcmZhY2UudGFnVHlwZS4nICsgaXRlbT8udGFnVHlwZSB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvY2RzLXRhZz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3N0YXR1c0Zvcm0gbGV0LW9icz1cIm9ic1wiPlxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cInN0YXR1c0Zvcm1Hcm91cFwiIGNsYXNzPVwic3RhdHVzLWZvcm1cIj5cbiAgICA8Y2RzLWxhYmVsPlxuICAgICAge3sgJ2Rvc3NpZXJNYW5hZ2VtZW50LnN0YXR1c2VzLmNvbHVtbnMudGl0bGUnIHwgdHJhbnNsYXRlIH19XG5cbiAgICAgIDxpbnB1dCBjZHNUZXh0IGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCIgW2F0dHIubW9kYWwtcHJpbWFyeS1mb2N1c109XCJ0cnVlXCIgLz5cbiAgICA8L2Nkcy1sYWJlbD5cblxuICAgIDxjZHMtbGFiZWw+XG4gICAgICB7eyAnZG9zc2llck1hbmFnZW1lbnQuc3RhdHVzZXMuY29sdW1ucy5rZXknIHwgdHJhbnNsYXRlIH19XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJlZGl0LWtleS1pbnB1dFwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBjZHNUZXh0XG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwia2V5XCJcbiAgICAgICAgICBbcmVhZE9ubHldPVwiIW9icy5lZGl0aW5nS2V5XCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAgICAgICBvYnMuaXNBZGQgJiYgIW9icy5lZGl0aW5nS2V5XG4gICAgICAgICAgICAgID8gKCdkb3NzaWVyTWFuYWdlbWVudC5zdGF0dXNlcy5rZXlBdXRvR2VuZXJhdGVkJyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgIFwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPGNkcy1pY29uLWJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwiIW9icy5lZGl0aW5nS2V5ICYmIG9icy5pc0FkZFwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZFwiXG4gICAgICAgICAgKGNsaWNrKT1cImVkaXRLZXlCdXR0b25DbGljaygpXCJcbiAgICAgICAgICBraW5kPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGNkc0ljb249XCJlZGl0XCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gICAgICAgIDwvY2RzLWljb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9jZHMtbGFiZWw+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaG9yaXpvbnRhbC1pbnB1dHNcIj5cbiAgICAgIDxjZHMtbGFiZWw+XG4gICAgICAgIHt7ICdkb3NzaWVyTWFuYWdlbWVudC5zdGF0dXNlcy5jb2x1bW5zLmNvbG9yJyB8IHRyYW5zbGF0ZSB9fVxuXG4gICAgICAgIDxjZHMtZHJvcGRvd25cbiAgICAgICAgICBbaWRdPVwiJ3N0YXR1cy1jb2xvci1kcm9wZG93bidcIlxuICAgICAgICAgIFthcHBlbmRJbmxpbmVdPVwiZmFsc2VcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZG9zc2llck1hbmFnZW1lbnQuc3RhdHVzZXMuY29sb3JQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIChzZWxlY3RlZCk9XCJjb2xvckRyb3Bkb3duQ2hhbmdlKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNkcy1kcm9wZG93bi1saXN0IFtpdGVtc109XCJjb2xvckxpc3RJdGVtcyRcIiBbbGlzdFRwbF09XCJjb2xvckRyb3Bkb3duSXRlbVRlbXBsYXRlXCI+XG4gICAgICAgICAgPC9jZHMtZHJvcGRvd24tbGlzdD5cbiAgICAgICAgPC9jZHMtZHJvcGRvd24+XG4gICAgICA8L2Nkcy1sYWJlbD5cblxuICAgICAgPGNkcy10b2dnbGVcbiAgICAgICAgW2xhYmVsXT1cIidkb3NzaWVyTWFuYWdlbWVudC5zdGF0dXNlcy52aXNpYmxlVGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW29uVGV4dF09XCInZG9zc2llck1hbmFnZW1lbnQuc3RhdHVzZXMudmlzaWJsZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbb2ZmVGV4dF09XCInZG9zc2llck1hbmFnZW1lbnQuc3RhdHVzZXMuaW52aXNpYmxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWRcIlxuICAgICAgICBbY2hlY2tlZF09XCJ2aXNpYmxlSW5DYXNlTGlzdEJ5RGVmYXVsdD8udmFsdWVcIlxuICAgICAgICAoY2hlY2tlZENoYW5nZSk9XCJ0b2dnbGVDaGVja2VkQ2hhbmdlKCRldmVudClcIlxuICAgICAgPjwvY2RzLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNidXR0b25zIGxldC1vYnM9XCJvYnNcIj5cbiAgPGJ1dHRvbiBjZHNCdXR0b249XCJzZWNvbmRhcnlcIiAoY2xpY2spPVwib25DbG9zZSgpXCIgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZFwiPlxuICAgIHt7ICdpbnRlcmZhY2UuY2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cblxuICA8YnV0dG9uXG4gICAgKm5nSWY9XCJvYnMuaXNBZGRcIlxuICAgIGNkc0J1dHRvbj1cInByaW1hcnlcIlxuICAgIFtkaXNhYmxlZF09XCJpbnZhbGlkIHx8IHByaXN0aW5lIHx8IG9icy5kaXNhYmxlZFwiXG4gICAgKGNsaWNrKT1cImFkZFN0YXR1cygpXCJcbiAgPlxuICAgIHt7ICdpbnRlcmZhY2UuYWRkJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cblxuICA8YnV0dG9uXG4gICAgKm5nSWY9XCJvYnMuaXNFZGl0XCJcbiAgICBjZHNCdXR0b249XCJwcmltYXJ5XCJcbiAgICBbZGlzYWJsZWRdPVwiaW52YWxpZCB8fCBwcmlzdGluZSB8fCBvYnMuZGlzYWJsZWRcIlxuICAgIChjbGljayk9XCJlZGl0U3RhdHVzKClcIlxuICA+XG4gICAge3sgJ2ludGVyZmFjZS5zYXZlJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -0,0 +1,154 @@
1
+ /*
2
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
3
+ *
4
+ * Licensed under EUPL, Version 1.2 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" basis,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { ChangeDetectionStrategy, Component, ViewChild, } from '@angular/core';
17
+ import { InternalCaseStatusUtils } from '@valtimo/document';
18
+ import { BehaviorSubject, combineLatest, filter, map, Subject, switchMap, tap, } from 'rxjs';
19
+ import { MoveRowDirection, ViewType, } from '@valtimo/components';
20
+ import * as i0 from "@angular/core";
21
+ import * as i1 from "@valtimo/document";
22
+ import * as i2 from "@angular/router";
23
+ import * as i3 from "@angular/common";
24
+ import * as i4 from "carbon-components-angular";
25
+ import * as i5 from "@valtimo/components";
26
+ import * as i6 from "./dossier-management-status-modal/dossier-management-status-modal.component";
27
+ import * as i7 from "@ngx-translate/core";
28
+ export class DossierManagementStatusesComponent {
29
+ get documentDefinitionName$() {
30
+ return this._documentDefinitionName$;
31
+ }
32
+ constructor(caseStatusService, route) {
33
+ this.caseStatusService = caseStatusService;
34
+ this.route = route;
35
+ this._reload$ = new BehaviorSubject(null);
36
+ this._documentDefinitionName$ = this.route.params.pipe(map(params => params?.name), filter(docDefName => !!docDefName));
37
+ this.loading$ = new BehaviorSubject(true);
38
+ this.usedKeys$ = new BehaviorSubject([]);
39
+ this._documentStatuses = [];
40
+ this.documentStatuses$ = combineLatest([
41
+ this._documentDefinitionName$,
42
+ this._reload$,
43
+ ]).pipe(tap(([_, reload]) => {
44
+ if (reload === null) {
45
+ this.loading$.next(true);
46
+ }
47
+ }), switchMap(([documentDefinitionName]) => this.caseStatusService.getInternalCaseStatusesManagement(documentDefinitionName)), map(statuses => statuses.map(status => ({
48
+ ...status,
49
+ tagType: InternalCaseStatusUtils.getTagTypeFromInternalCaseStatusColor(status.color),
50
+ }))), tap(statuses => {
51
+ this._documentStatuses = statuses;
52
+ this.usedKeys$.next(statuses.map(status => status.key));
53
+ this.loading$.next(false);
54
+ }));
55
+ this.fields$ = new BehaviorSubject([]);
56
+ this.ACTION_ITEMS = [
57
+ {
58
+ label: 'interface.edit',
59
+ callback: this.openEditModal.bind(this),
60
+ type: 'normal',
61
+ },
62
+ {
63
+ label: 'interface.delete',
64
+ callback: this.openDeleteModal.bind(this),
65
+ type: 'danger',
66
+ },
67
+ ];
68
+ this.statusModalType$ = new BehaviorSubject('closed');
69
+ this.prefillStatus$ = new BehaviorSubject(undefined);
70
+ this.statusToDelete$ = new BehaviorSubject(undefined);
71
+ this.showDeleteModal$ = new Subject();
72
+ }
73
+ ngAfterViewInit() {
74
+ this.initFields();
75
+ }
76
+ openDeleteModal(status) {
77
+ this.statusToDelete$.next(status);
78
+ this.showDeleteModal$.next(true);
79
+ }
80
+ openEditModal(status) {
81
+ this.prefillStatus$.next(status);
82
+ this.statusModalType$.next('edit');
83
+ }
84
+ openAddModal() {
85
+ this.statusModalType$.next('add');
86
+ }
87
+ closeModal(closeModalEvent) {
88
+ if (closeModalEvent === 'closeAndRefresh') {
89
+ this.reload();
90
+ }
91
+ this.statusModalType$.next('closed');
92
+ }
93
+ confirmDeleteStatus(status) {
94
+ this.documentDefinitionName$
95
+ .pipe(switchMap(documentDefinitionName => this.caseStatusService.deleteInternalCaseStatus(documentDefinitionName, status.key)))
96
+ .subscribe(() => {
97
+ this.reload();
98
+ });
99
+ }
100
+ onMoveRowClick(event) {
101
+ const { direction, index } = event;
102
+ const orderedStatuses = direction === MoveRowDirection.UP
103
+ ? this.swapStatuses(this._documentStatuses, index - 1, index)
104
+ : this.swapStatuses(this._documentStatuses, index, index + 1);
105
+ this.documentDefinitionName$
106
+ .pipe(switchMap(documentDefinitionName => this.caseStatusService.updateInternalCaseStatuses(documentDefinitionName, orderedStatuses)))
107
+ .subscribe(() => {
108
+ this.reload(true);
109
+ });
110
+ }
111
+ reload(noAnimation = false) {
112
+ this._reload$.next(noAnimation ? 'noAnimation' : null);
113
+ }
114
+ swapStatuses(statuses, index1, index2) {
115
+ const temp = [...statuses];
116
+ temp[index1] = temp.splice(index2, 1, temp[index1])[0];
117
+ return temp;
118
+ }
119
+ initFields() {
120
+ this.fields$.next([
121
+ {
122
+ key: 'title',
123
+ label: 'dossierManagement.statuses.columns.title',
124
+ viewType: ViewType.TEXT,
125
+ },
126
+ {
127
+ key: 'key',
128
+ label: 'dossierManagement.statuses.columns.key',
129
+ viewType: ViewType.TEXT,
130
+ },
131
+ {
132
+ key: 'visibleInCaseListByDefault',
133
+ label: 'dossierManagement.statuses.columns.visible',
134
+ viewType: ViewType.BOOLEAN,
135
+ },
136
+ {
137
+ viewType: ViewType.TEMPLATE,
138
+ template: this.colorColumnTemplate,
139
+ key: 'color',
140
+ label: 'dossierManagement.statuses.columns.color',
141
+ },
142
+ ]);
143
+ }
144
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DossierManagementStatusesComponent, deps: [{ token: i1.CaseStatusService }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
145
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: DossierManagementStatusesComponent, selector: "valtimo-dossier-management-statuses", viewQueries: [{ propertyName: "colorColumnTemplate", first: true, predicate: ["colorColumnTemplate"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-carbon-list\n *ngIf=\"{\n loading: loading$ | async,\n documentStatuses: documentStatuses$ | async\n } as obs\"\n [items]=\"obs.documentStatuses\"\n [fields]=\"fields$ | async\"\n [header]=\"false\"\n [loading]=\"obs.loading\"\n [movingRowsEnabled]=\"true\"\n [actionItems]=\"ACTION_ITEMS\"\n (rowClicked)=\"openEditModal($event)\"\n (moveRow)=\"onMoveRowClick($event)\"\n>\n <ng-container\n carbonToolbarContent\n *ngTemplateOutlet=\"buttons; context: {obs: obs}\"\n ></ng-container>\n\n <valtimo-no-results\n [description]=\"'dossierManagement.statuses.noResults.description' | translate\"\n [title]=\"'dossierManagement.statuses.noResults.title' | translate\"\n ></valtimo-no-results>\n</valtimo-carbon-list>\n\n<valtimo-dossier-management-status-modal\n [type]=\"statusModalType$ | async\"\n [prefill]=\"prefillStatus$ | async\"\n [usedKeys]=\"usedKeys$ | async\"\n [documentDefinitionName]=\"documentDefinitionName$ | async\"\n (closeModalEvent)=\"closeModal($event)\"\n></valtimo-dossier-management-status-modal>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"dossierManagement.statuses.deleteText\"\n [outputOnConfirm]=\"statusToDelete$ | async\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"confirmDeleteStatus($event)\"\n></valtimo-confirmation-modal>\n\n<ng-template #buttons let-obs=\"obs\">\n <div class=\"dossier-management-search-fields__buttons\">\n <button cdsButton=\"primary\" [disabled]=\"obs.loading\" (click)=\"openAddModal()\">\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n\n {{ 'dossierManagement.statuses.add' | translate }}\n </button>\n </div>\n</ng-template>\n\n<ng-template #colorColumnTemplate let-data=\"data\">\n <cds-tag class=\"cds-tag--no-margin\" [type]=\"data?.item?.tagType\">\n {{ 'interface.tagType.' + data?.item?.tagType | translate }}\n </cds-tag>\n</ng-template>\n", styles: ["::ng-deep .cds-tag--no-margin{margin:0}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i4.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i5.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }, { kind: "component", type: i5.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "actionItems", "header", "hideColumnHeader", "initialSortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i5.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title"] }, { kind: "component", type: i4.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class"] }, { kind: "component", type: i6.DossierManagementStatusModalComponent, selector: "valtimo-dossier-management-status-modal", inputs: ["type", "prefill", "usedKeys", "documentDefinitionName"], outputs: ["closeModalEvent"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
146
+ }
147
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DossierManagementStatusesComponent, decorators: [{
148
+ type: Component,
149
+ args: [{ selector: 'valtimo-dossier-management-statuses', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-carbon-list\n *ngIf=\"{\n loading: loading$ | async,\n documentStatuses: documentStatuses$ | async\n } as obs\"\n [items]=\"obs.documentStatuses\"\n [fields]=\"fields$ | async\"\n [header]=\"false\"\n [loading]=\"obs.loading\"\n [movingRowsEnabled]=\"true\"\n [actionItems]=\"ACTION_ITEMS\"\n (rowClicked)=\"openEditModal($event)\"\n (moveRow)=\"onMoveRowClick($event)\"\n>\n <ng-container\n carbonToolbarContent\n *ngTemplateOutlet=\"buttons; context: {obs: obs}\"\n ></ng-container>\n\n <valtimo-no-results\n [description]=\"'dossierManagement.statuses.noResults.description' | translate\"\n [title]=\"'dossierManagement.statuses.noResults.title' | translate\"\n ></valtimo-no-results>\n</valtimo-carbon-list>\n\n<valtimo-dossier-management-status-modal\n [type]=\"statusModalType$ | async\"\n [prefill]=\"prefillStatus$ | async\"\n [usedKeys]=\"usedKeys$ | async\"\n [documentDefinitionName]=\"documentDefinitionName$ | async\"\n (closeModalEvent)=\"closeModal($event)\"\n></valtimo-dossier-management-status-modal>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"dossierManagement.statuses.deleteText\"\n [outputOnConfirm]=\"statusToDelete$ | async\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"confirmDeleteStatus($event)\"\n></valtimo-confirmation-modal>\n\n<ng-template #buttons let-obs=\"obs\">\n <div class=\"dossier-management-search-fields__buttons\">\n <button cdsButton=\"primary\" [disabled]=\"obs.loading\" (click)=\"openAddModal()\">\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n\n {{ 'dossierManagement.statuses.add' | translate }}\n </button>\n </div>\n</ng-template>\n\n<ng-template #colorColumnTemplate let-data=\"data\">\n <cds-tag class=\"cds-tag--no-margin\" [type]=\"data?.item?.tagType\">\n {{ 'interface.tagType.' + data?.item?.tagType | translate }}\n </cds-tag>\n</ng-template>\n", styles: ["::ng-deep .cds-tag--no-margin{margin:0}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
150
+ }], ctorParameters: () => [{ type: i1.CaseStatusService }, { type: i2.ActivatedRoute }], propDecorators: { colorColumnTemplate: [{
151
+ type: ViewChild,
152
+ args: ['colorColumnTemplate']
153
+ }] } });
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1tYW5hZ2VtZW50LXN0YXR1c2VzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLW1hbmFnZW1lbnQtc3RhdHVzZXMvZG9zc2llci1tYW5hZ2VtZW50LXN0YXR1c2VzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLW1hbmFnZW1lbnQtc3RhdHVzZXMvZG9zc2llci1tYW5hZ2VtZW50LXN0YXR1c2VzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0MsdUJBQXVCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixNQUFNLEVBQ04sR0FBRyxFQUVILE9BQU8sRUFDUCxTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUdMLGdCQUFnQixFQUVoQixRQUFRLEdBQ1QsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7O0FBUzdCLE1BQU0sT0FBTyxrQ0FBa0M7SUFVN0MsSUFBVyx1QkFBdUI7UUFDaEMsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUM7SUFDdkMsQ0FBQztJQXNERCxZQUNtQixpQkFBb0MsRUFDcEMsS0FBcUI7UUFEckIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQWpFdkIsYUFBUSxHQUFHLElB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NENBQTRDO2dCQUNuRCxRQUFRLEVBQUUsUUFBUSxDQUFDLE9BQU87YUFDM0I7WUFDRDtnQkFDRSxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7Z0JBQzNCLFFBQVEsRUFBRSxJQUFJLENBQUMsbUJBQW1CO2dCQUNsQyxHQUFHLEVBQUUsT0FBTztnQkFDWixLQUFLLEVBQUUsMENBQTBDO2FBQ2xEO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0F2S1Usa0NBQWtDO2tHQUFsQyxrQ0FBa0MsdU1DbEQvQyw0cUZBMEVBOzsyRkR4QmEsa0NBQWtDO2tCQU45QyxTQUFTOytCQUNFLHFDQUFxQyxtQkFHOUIsdUJBQXVCLENBQUMsTUFBTTttSEFHYixtQkFBbUI7c0JBQXBELFNBQVM7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Nhc2VTdGF0dXNTZXJ2aWNlLCBJbnRlcm5hbENhc2VTdGF0dXMsIEludGVybmFsQ2FzZVN0YXR1c1V0aWxzfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGZpbHRlcixcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICBzd2l0Y2hNYXAsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgQWN0aW9uSXRlbSxcbiAgQ29sdW1uQ29uZmlnLFxuICBNb3ZlUm93RGlyZWN0aW9uLFxuICBNb3ZlUm93RXZlbnQsXG4gIFZpZXdUeXBlLFxufSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcbmltcG9ydCB7U3RhdHVzTW9kYWxDbG9zZUV2ZW50LCBTdGF0dXNNb2RhbFR5cGV9IGZyb20gJy4uLy4uL21vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9zc2llci1tYW5hZ2VtZW50LXN0YXR1c2VzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rvc3NpZXItbWFuYWdlbWVudC1zdGF0dXNlcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Rvc3NpZXItbWFuYWdlbWVudC1zdGF0dXNlcy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRG9zc2llck1hbmFnZW1lbnRTdGF0dXNlc0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKCdjb2xvckNvbHVtblRlbXBsYXRlJykgY29sb3JDb2x1bW5UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9yZWxvYWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudWxsIHwgJ25vQW5pbWF0aW9uJz4obnVsbCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZG9jdW1lbnREZWZpbml0aW9uTmFtZSQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IHRoaXMucm91dGUucGFyYW1zLnBpcGUoXG4gICAgbWFwKHBhcmFtcyA9PiBwYXJhbXM/Lm5hbWUpLFxuICAgIGZpbHRlcihkb2NEZWZOYW1lID0+ICEhZG9jRGVmTmFtZSlcbiAgKTtcblxuICBwdWJsaWMgZ2V0IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUkKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWUkO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgdXNlZEtleXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xuXG4gIHByaXZhdGUgX2RvY3VtZW50U3RhdHVzZXM6IEludGVybmFsQ2FzZVN0YXR1c1tdID0gW107XG5cbiAgcHVibGljIHJlYWRvbmx5IGRvY3VtZW50U3RhdHVzZXMkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZSQsXG4gICAgdGhpcy5fcmVsb2FkJCxcbiAgXSkucGlwZShcbiAgICB0YXAoKFtfLCByZWxvYWRdKSA9PiB7XG4gICAgICBpZiAocmVsb2FkID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMubG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICAgIH1cbiAgICB9KSxcbiAgICBzd2l0Y2hNYXAoKFtkb2N1bWVudERlZmluaXRpb25OYW1lXSkgPT5cbiAgICAgIHRoaXMuY2FzZVN0YXR1c1NlcnZpY2UuZ2V0SW50ZXJuYWxDYXNlU3RhdHVzZXNNYW5hZ2VtZW50KGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgKSxcbiAgICBtYXAoc3RhdHVzZXMgPT5cbiAgICAgIHN0YXR1c2VzLm1hcChzdGF0dXMgPT4gKHtcbiAgICAgICAgLi4uc3RhdHVzLFxuICAgICAgICB0YWdUeXBlOiBJbnRlcm5hbENhc2VTdGF0dXNVdGlscy5nZXRUYWdUeXBlRnJvbUludGVybmFsQ2FzZVN0YXR1c0NvbG9yKHN0YXR1cy5jb2xvciksXG4gICAgICB9KSlcbiAgICApLFxuICAgIHRhcChzdGF0dXNlcyA9PiB7XG4gICAgICB0aGlzLl9kb2N1bWVudFN0YXR1c2VzID0gc3RhdHVzZXM7XG4gICAgICB0aGlzLnVzZWRLZXlzJC5uZXh0KHN0YXR1c2VzLm1hcChzdGF0dXMgPT4gc3RhdHVzLmtleSkpO1xuICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICB9KVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBmaWVsZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb2x1bW5Db25maWdbXT4oW10pO1xuXG4gIHB1YmxpYyByZWFkb25seSBBQ1RJT05fSVRFTVM6IEFjdGlvbkl0ZW1bXSA9IFtcbiAgICB7XG4gICAgICBsYWJlbDogJ2ludGVyZmFjZS5lZGl0JyxcbiAgICAgIGNhbGxiYWNrOiB0aGlzLm9wZW5FZGl0TW9kYWwuYmluZCh0aGlzKSxcbiAgICAgIHR5cGU6ICdub3JtYWwnLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICdpbnRlcmZhY2UuZGVsZXRlJyxcbiAgICAgIGNhbGxiYWNrOiB0aGlzLm9wZW5EZWxldGVNb2RhbC5iaW5kKHRoaXMpLFxuICAgICAgdHlwZTogJ2RhbmdlcicsXG4gICAgfSxcbiAgXTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzTW9kYWxUeXBlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3RhdHVzTW9kYWxUeXBlPignY2xvc2VkJyk7XG4gIHB1YmxpYyByZWFkb25seSBwcmVmaWxsU3RhdHVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SW50ZXJuYWxDYXNlU3RhdHVzPih1bmRlZmluZWQpO1xuXG4gIHB1YmxpYyByZWFkb25seSBzdGF0dXNUb0RlbGV0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEludGVybmFsQ2FzZVN0YXR1cz4odW5kZWZpbmVkKTtcbiAgcHVibGljIHJlYWRvbmx5IHNob3dEZWxldGVNb2RhbCQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZVN0YXR1c1NlcnZpY2U6IENhc2VTdGF0dXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlXG4gICkge31cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdEZpZWxkcygpO1xuICB9XG5cbiAgcHVibGljIG9wZW5EZWxldGVNb2RhbChzdGF0dXM6IEludGVybmFsQ2FzZVN0YXR1cyk6IHZvaWQge1xuICAgIHRoaXMuc3RhdHVzVG9EZWxldGUkLm5leHQoc3RhdHVzKTtcbiAgICB0aGlzLnNob3dEZWxldGVNb2RhbCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuRWRpdE1vZGFsKHN0YXR1czogSW50ZXJuYWxDYXNlU3RhdHVzKTogdm9pZCB7XG4gICAgdGhpcy5wcmVmaWxsU3RhdHVzJC5uZXh0KHN0YXR1cyk7XG4gICAgdGhpcy5zdGF0dXNNb2RhbFR5cGUkLm5leHQoJ2VkaXQnKTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuQWRkTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0dXNNb2RhbFR5cGUkLm5leHQoJ2FkZCcpO1xuICB9XG5cbiAgcHVibGljIGNsb3NlTW9kYWwoY2xvc2VNb2RhbEV2ZW50OiBTdGF0dXNNb2RhbENsb3NlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoY2xvc2VNb2RhbEV2ZW50ID09PSAnY2xvc2VBbmRSZWZyZXNoJykge1xuICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXR1c01vZGFsVHlwZSQubmV4dCgnY2xvc2VkJyk7XG4gIH1cblxuICBwdWJsaWMgY29uZmlybURlbGV0ZVN0YXR1cyhzdGF0dXM6IEludGVybmFsQ2FzZVN0YXR1cyk6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgICAgIHRoaXMuY2FzZVN0YXR1c1NlcnZpY2UuZGVsZXRlSW50ZXJuYWxDYXNlU3RhdHVzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsIHN0YXR1cy5rZXkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25Nb3ZlUm93Q2xpY2soZXZlbnQ6IE1vdmVSb3dFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHtkaXJlY3Rpb24sIGluZGV4fSA9IGV2ZW50O1xuXG4gICAgY29uc3Qgb3JkZXJlZFN0YXR1c2VzOiBJbnRlcm5hbENhc2VTdGF0dXNbXSA9XG4gICAgICBkaXJlY3Rpb24gPT09IE1vdmVSb3dEaXJlY3Rpb24uVVBcbiAgICAgICAgPyB0aGlzLnN3YXBTdGF0dXNlcyh0aGlzLl9kb2N1bWVudFN0YXR1c2VzLCBpbmRleCAtIDEsIGluZGV4KVxuICAgICAgICA6IHRoaXMuc3dhcFN0YXR1c2VzKHRoaXMuX2RvY3VtZW50U3RhdHVzZXMsIGluZGV4LCBpbmRleCArIDEpO1xuXG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcChkb2N1bWVudERlZmluaXRpb25OYW1lID0+XG4gICAgICAgICAgdGhpcy5jYXNlU3RhdHVzU2VydmljZS51cGRhdGVJbnRlcm5hbENhc2VTdGF0dXNlcyhkb2N1bWVudERlZmluaXRpb25OYW1lLCBvcmRlcmVkU3RhdHVzZXMpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbG9hZCh0cnVlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWQobm9BbmltYXRpb24gPSBmYWxzZSk6IHZvaWQge1xuICAgIHRoaXMuX3JlbG9hZCQubmV4dChub0FuaW1hdGlvbiA/ICdub0FuaW1hdGlvbicgOiBudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgc3dhcFN0YXR1c2VzKFxuICAgIHN0YXR1c2VzOiBJbnRlcm5hbENhc2VTdGF0dXNbXSxcbiAgICBpbmRleDE6IG51bWJlcixcbiAgICBpbmRleDI6IG51bWJlclxuICApOiBJbnRlcm5hbENhc2VTdGF0dXNbXSB7XG4gICAgY29uc3QgdGVtcCA9IFsuLi5zdGF0dXNlc107XG4gICAgdGVtcFtpbmRleDFdID0gdGVtcC5zcGxpY2UoaW5kZXgyLCAxLCB0ZW1wW2luZGV4MV0pWzBdO1xuXG4gICAgcmV0dXJuIHRlbXA7XG4gIH1cblxuICBwcml2YXRlIGluaXRGaWVsZHMoKTogdm9pZCB7XG4gICAgdGhpcy5maWVsZHMkLm5leHQoW1xuICAgICAge1xuICAgICAgICBrZXk6ICd0aXRsZScsXG4gICAgICAgIGxhYmVsOiAnZG9zc2llck1hbmFnZW1lbnQuc3RhdHVzZXMuY29sdW1ucy50aXRsZScsXG4gICAgICAgIHZpZXdUeXBlOiBWaWV3VHlwZS5URVhULFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAna2V5JyxcbiAgICAgICAgbGFiZWw6ICdkb3NzaWVyTWFuYWdlbWVudC5zdGF0dXNlcy5jb2x1bW5zLmtleScsXG4gICAgICAgIHZpZXdUeXBlOiBWaWV3VHlwZS5URVhULFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAndmlzaWJsZUluQ2FzZUxpc3RCeURlZmF1bHQnLFxuICAgICAgICBsYWJlbDogJ2Rvc3NpZXJNYW5hZ2VtZW50LnN0YXR1c2VzLmNvbHVtbnMudmlzaWJsZScsXG4gICAgICAgIHZpZXdUeXBlOiBWaWV3VHlwZS5CT09MRUFOLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdmlld1R5cGU6IFZpZXdUeXBlLlRFTVBMQVRFLFxuICAgICAgICB0ZW1wbGF0ZTogdGhpcy5jb2xvckNvbHVtblRlbXBsYXRlLFxuICAgICAgICBrZXk6ICdjb2xvcicsXG4gICAgICAgIGxhYmVsOiAnZG9zc2llck1hbmFnZW1lbnQuc3RhdHVzZXMuY29sdW1ucy5jb2xvcicsXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjx2YWx0aW1vLWNhcmJvbi1saXN0XG4gICpuZ0lmPVwie1xuICAgIGxvYWRpbmc6IGxvYWRpbmckIHwgYXN5bmMsXG4gICAgZG9jdW1lbnRTdGF0dXNlczogZG9jdW1lbnRTdGF0dXNlcyQgfCBhc3luY1xuICB9IGFzIG9ic1wiXG4gIFtpdGVtc109XCJvYnMuZG9jdW1lbnRTdGF0dXNlc1wiXG4gIFtmaWVsZHNdPVwiZmllbGRzJCB8IGFzeW5jXCJcbiAgW2hlYWRlcl09XCJmYWxzZVwiXG4gIFtsb2FkaW5nXT1cIm9icy5sb2FkaW5nXCJcbiAgW21vdmluZ1Jvd3NFbmFibGVkXT1cInRydWVcIlxuICBbYWN0aW9uSXRlbXNdPVwiQUNUSU9OX0lURU1TXCJcbiAgKHJvd0NsaWNrZWQpPVwib3BlbkVkaXRNb2RhbCgkZXZlbnQpXCJcbiAgKG1vdmVSb3cpPVwib25Nb3ZlUm93Q2xpY2soJGV2ZW50KVwiXG4+XG4gIDxuZy1jb250YWluZXJcbiAgICBjYXJib25Ub29sYmFyQ29udGVudFxuICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uczsgY29udGV4dDoge29iczogb2JzfVwiXG4gID48L25nLWNvbnRhaW5lcj5cblxuICA8dmFsdGltby1uby1yZXN1bHRzXG4gICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb3NzaWVyTWFuYWdlbWVudC5zdGF0dXNlcy5ub1Jlc3VsdHMuZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ2Rvc3NpZXJNYW5hZ2VtZW50LnN0YXR1c2VzLm5vUmVzdWx0cy50aXRsZScgfCB0cmFuc2xhdGVcIlxuICA+PC92YWx0aW1vLW5vLXJlc3VsdHM+XG48L3ZhbHRpbW8tY2FyYm9uLWxpc3Q+XG5cbjx2YWx0aW1vLWRvc3NpZXItbWFuYWdlbWVudC1zdGF0dXMtbW9kYWxcbiAgW3R5cGVdPVwic3RhdHVzTW9kYWxUeXBlJCB8IGFzeW5jXCJcbiAgW3ByZWZpbGxdPVwicHJlZmlsbFN0YXR1cyQgfCBhc3luY1wiXG4gIFt1c2VkS2V5c109XCJ1c2VkS2V5cyQgfCBhc3luY1wiXG4gIFtkb2N1bWVudERlZmluaXRpb25OYW1lXT1cImRvY3VtZW50RGVmaW5pdGlvbk5hbWUkIHwgYXN5bmNcIlxuICAoY2xvc2VNb2RhbEV2ZW50KT1cImNsb3NlTW9kYWwoJGV2ZW50KVwiXG4+PC92YWx0aW1vLWRvc3NpZXItbWFuYWdlbWVudC1zdGF0dXMtbW9kYWw+XG5cbjx2YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbFxuICBjb25maXJtQnV0dG9uVGV4dFRyYW5zbGF0aW9uS2V5PVwiaW50ZXJmYWNlLmRlbGV0ZVwiXG4gIGNvbmZpcm1CdXR0b25UeXBlPVwiZGFuZ2VyXCJcbiAgY29udGVudFRyYW5zbGF0aW9uS2V5PVwiZG9zc2llck1hbmFnZW1lbnQuc3RhdHVzZXMuZGVsZXRlVGV4dFwiXG4gIFtvdXRwdXRPbkNvbmZpcm1dPVwic3RhdHVzVG9EZWxldGUkIHwgYXN5bmNcIlxuICBbc2hvd01vZGFsU3ViamVjdCRdPVwic2hvd0RlbGV0ZU1vZGFsJFwiXG4gIHRpdGxlVHJhbnNsYXRpb25LZXk9XCJpbnRlcmZhY2UuZGVsZXRlXCJcbiAgKGNvbmZpcm1FdmVudCk9XCJjb25maXJtRGVsZXRlU3RhdHVzKCRldmVudClcIlxuPjwvdmFsdGltby1jb25maXJtYXRpb24tbW9kYWw+XG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9ucyBsZXQtb2JzPVwib2JzXCI+XG4gIDxkaXYgY2xhc3M9XCJkb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkc19fYnV0dG9uc1wiPlxuICAgIDxidXR0b24gY2RzQnV0dG9uPVwicHJpbWFyeVwiIFtkaXNhYmxlZF09XCJvYnMubG9hZGluZ1wiIChjbGljayk9XCJvcGVuQWRkTW9kYWwoKVwiPlxuICAgICAgPHN2ZyBjZHNJY29uPVwiYWRkXCIgc2l6ZT1cIjE2XCIgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiPjwvc3ZnPlxuXG4gICAgICB7eyAnZG9zc2llck1hbmFnZW1lbnQuc3RhdHVzZXMuYWRkJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY29sb3JDb2x1bW5UZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGNkcy10YWcgY2xhc3M9XCJjZHMtdGFnLS1uby1tYXJnaW5cIiBbdHlwZV09XCJkYXRhPy5pdGVtPy50YWdUeXBlXCI+XG4gICAge3sgJ2ludGVyZmFjZS50YWdUeXBlLicgKyBkYXRhPy5pdGVtPy50YWdUeXBlIHwgdHJhbnNsYXRlIH19XG4gIDwvY2RzLXRhZz5cbjwvbmctdGVtcGxhdGU+XG4iXX0=