@valtimo/task-management 12.0.0 → 12.1.0
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.
- package/esm2022/lib/components/index.mjs +2 -1
- package/esm2022/lib/components/task-management/task-management.component.mjs +2 -2
- package/esm2022/lib/components/task-management-columns/task-management-columns.component.mjs +2 -2
- package/esm2022/lib/components/task-management-detail/task-management-detail.component.mjs +21 -17
- package/esm2022/lib/components/task-management-search-fields/task-management-search-fields.component.mjs +176 -0
- package/esm2022/lib/components/task-management-search-fields-modal/task-management-search-fields-modal.component.mjs +354 -0
- package/esm2022/lib/models/task-management.model.mjs +3 -2
- package/esm2022/lib/services/index.mjs +2 -1
- package/esm2022/lib/services/task-management-search-fields.service.mjs +47 -0
- package/fesm2022/valtimo-task-management.mjs +574 -30
- package/fesm2022/valtimo-task-management.mjs.map +1 -1
- package/lib/components/index.d.ts +1 -0
- package/lib/components/index.d.ts.map +1 -1
- package/lib/components/task-management-detail/task-management-detail.component.d.ts +7 -5
- package/lib/components/task-management-detail/task-management-detail.component.d.ts.map +1 -1
- package/lib/components/task-management-search-fields/task-management-search-fields.component.d.ts +35 -0
- package/lib/components/task-management-search-fields/task-management-search-fields.component.d.ts.map +1 -0
- package/lib/components/task-management-search-fields-modal/task-management-search-fields-modal.component.d.ts +79 -0
- package/lib/components/task-management-search-fields-modal/task-management-search-fields-modal.component.d.ts.map +1 -0
- package/lib/models/task-management.model.d.ts +2 -1
- package/lib/models/task-management.model.d.ts.map +1 -1
- package/lib/services/index.d.ts +1 -0
- package/lib/services/index.d.ts.map +1 -1
- package/lib/services/task-management-search-fields.service.d.ts +20 -0
- package/lib/services/task-management-search-fields.service.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,354 @@
|
|
|
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 { CommonModule } from '@angular/common';
|
|
17
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
|
|
18
|
+
import { ReactiveFormsModule, Validators, } from '@angular/forms';
|
|
19
|
+
import { InformationFilled16, TrashCan16 } from '@carbon/icons';
|
|
20
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
21
|
+
import { CARBON_CONSTANTS, CarbonListModule, InputLabelModule, ViewType, } from '@valtimo/components';
|
|
22
|
+
import { TaskListSearchDropdownDataProvider, TaskListSearchFieldDataType, TaskListSearchFieldFieldType, TaskListSearchFieldMatchType, } from '@valtimo/task';
|
|
23
|
+
import { ButtonModule, DropdownModule, IconModule, InputModule, ModalModule, } from 'carbon-components-angular';
|
|
24
|
+
import { BehaviorSubject, combineLatest, distinctUntilChanged, filter, map, startWith, switchMap, } from 'rxjs';
|
|
25
|
+
import * as i0 from "@angular/core";
|
|
26
|
+
import * as i1 from "@valtimo/document";
|
|
27
|
+
import * as i2 from "carbon-components-angular";
|
|
28
|
+
import * as i3 from "@angular/forms";
|
|
29
|
+
import * as i4 from "@ngx-translate/core";
|
|
30
|
+
import * as i5 from "@angular/common";
|
|
31
|
+
import * as i6 from "@valtimo/components";
|
|
32
|
+
export class TaskManagementSearchFieldsModalComponent {
|
|
33
|
+
set prefillData(value) {
|
|
34
|
+
this._prefillData = value;
|
|
35
|
+
this.setPrefilledForm(value);
|
|
36
|
+
}
|
|
37
|
+
get prefillData() {
|
|
38
|
+
return this._prefillData;
|
|
39
|
+
}
|
|
40
|
+
get dataType() {
|
|
41
|
+
return this.form.get('dataType');
|
|
42
|
+
}
|
|
43
|
+
get dataTypeValue$() {
|
|
44
|
+
return this.dataType.valueChanges.pipe(startWith(this.dataType.value));
|
|
45
|
+
}
|
|
46
|
+
get matchType() {
|
|
47
|
+
return this.form.get('matchType');
|
|
48
|
+
}
|
|
49
|
+
get matchTypeValue$() {
|
|
50
|
+
return this.matchType.valueChanges.pipe(startWith(this.matchType.value));
|
|
51
|
+
}
|
|
52
|
+
get dropdownDataProvider() {
|
|
53
|
+
return this.form.get('dropdownDataProvider');
|
|
54
|
+
}
|
|
55
|
+
get dropdownDataProviderValue$() {
|
|
56
|
+
return this.dropdownDataProvider.valueChanges.pipe(startWith(this.dropdownDataProvider.value));
|
|
57
|
+
}
|
|
58
|
+
get fieldType() {
|
|
59
|
+
return this.form.get('fieldType');
|
|
60
|
+
}
|
|
61
|
+
get fieldTypeValue$() {
|
|
62
|
+
return this.fieldType.valueChanges.pipe(startWith(this.fieldType.value));
|
|
63
|
+
}
|
|
64
|
+
get keyValue() {
|
|
65
|
+
const controlValue = this.form.get('key')?.value;
|
|
66
|
+
return !controlValue ? null : controlValue;
|
|
67
|
+
}
|
|
68
|
+
get dataTypeValue() {
|
|
69
|
+
const controlValue = this.form.get('dataType')?.value;
|
|
70
|
+
this._dataTypeValue$.next(controlValue?.id);
|
|
71
|
+
return !controlValue ? null : controlValue.id;
|
|
72
|
+
}
|
|
73
|
+
get fieldTypeValue() {
|
|
74
|
+
const controlValue = this.form.get('fieldType')?.value;
|
|
75
|
+
return !controlValue ? null : controlValue.id;
|
|
76
|
+
}
|
|
77
|
+
get dropdownDataProviderValue() {
|
|
78
|
+
const controlValue = this.form.get('dropdownDataProvider')?.value;
|
|
79
|
+
this._dropdownProviderValue$.next(controlValue?.id);
|
|
80
|
+
return !controlValue ? null : controlValue.id;
|
|
81
|
+
}
|
|
82
|
+
get dropdownValuesArray() {
|
|
83
|
+
const formArray = this.form.get('dropdownValues');
|
|
84
|
+
return !formArray ? null : formArray;
|
|
85
|
+
}
|
|
86
|
+
constructor(documentService, iconService, fb, translateService) {
|
|
87
|
+
this.documentService = documentService;
|
|
88
|
+
this.iconService = iconService;
|
|
89
|
+
this.fb = fb;
|
|
90
|
+
this.translateService = translateService;
|
|
91
|
+
this.closeEvent = new EventEmitter();
|
|
92
|
+
this.form = this.fb.group({
|
|
93
|
+
key: this.fb.control('', Validators.required),
|
|
94
|
+
title: this.fb.control('', Validators.required),
|
|
95
|
+
path: this.fb.control('', Validators.required),
|
|
96
|
+
dataType: this.fb.control(null, Validators.required),
|
|
97
|
+
matchType: this.fb.control(null, this.matchTypeValidator),
|
|
98
|
+
fieldType: this.fb.control(null, Validators.required),
|
|
99
|
+
dropdownDataProvider: this.fb.control(null),
|
|
100
|
+
dropdownValues: this.fb.array([]),
|
|
101
|
+
});
|
|
102
|
+
this.TaskListSearchFieldDataType = TaskListSearchFieldDataType;
|
|
103
|
+
this.TaskListSearchFieldFieldType = TaskListSearchFieldFieldType;
|
|
104
|
+
this.TaskListSearchDropdownDataProvider = TaskListSearchDropdownDataProvider;
|
|
105
|
+
this.DROPDOWN_FIELDS = [
|
|
106
|
+
{
|
|
107
|
+
key: 'key',
|
|
108
|
+
label: 'searchFieldsOverview.key',
|
|
109
|
+
viewType: ViewType.TEXT,
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
key: 'value',
|
|
113
|
+
label: 'searchFieldsOverview.text',
|
|
114
|
+
viewType: ViewType.TEXT,
|
|
115
|
+
},
|
|
116
|
+
];
|
|
117
|
+
this._dataTypeValue$ = new BehaviorSubject(null);
|
|
118
|
+
this._dropdownProviderValue$ = new BehaviorSubject(null);
|
|
119
|
+
this.dropdownReadonlyItems$ = this._dropdownProviderValue$.pipe(distinctUntilChanged(), filter(val => !!val && val === TaskListSearchDropdownDataProvider.JSON), switchMap((provider) => this.documentService.getDropdownData(provider ?? '', this.documentDefinitionName ?? '', this.keyValue ?? '')), map(dropdownData => dropdownData ? Object.entries(dropdownData).map(([key, value]) => ({ key, value })) : []));
|
|
120
|
+
this.dataTypeItems$ = combineLatest([
|
|
121
|
+
this.dataTypeValue$,
|
|
122
|
+
this.translateService.stream('key'),
|
|
123
|
+
]).pipe(map(([dataTypeValue]) => [
|
|
124
|
+
{
|
|
125
|
+
content: this.translateService.instant('searchFields.text'),
|
|
126
|
+
id: TaskListSearchFieldDataType.TEXT,
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
content: this.translateService.instant('searchFields.boolean'),
|
|
130
|
+
id: TaskListSearchFieldDataType.BOOLEAN,
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
content: this.translateService.instant('searchFields.date'),
|
|
134
|
+
id: TaskListSearchFieldDataType.DATE,
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
content: this.translateService.instant('searchFields.datetime'),
|
|
138
|
+
id: TaskListSearchFieldDataType.DATETIME,
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
content: this.translateService.instant('searchFields.number'),
|
|
142
|
+
id: TaskListSearchFieldDataType.NUMBER,
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
content: this.translateService.instant('searchFields.time'),
|
|
146
|
+
id: TaskListSearchFieldDataType.TIME,
|
|
147
|
+
},
|
|
148
|
+
].map(item => ({ ...item, selected: item.id === dataTypeValue?.id }))));
|
|
149
|
+
this.fieldTypeItems$ = combineLatest([
|
|
150
|
+
this._dataTypeValue$.pipe(distinctUntilChanged()),
|
|
151
|
+
this.fieldTypeValue$,
|
|
152
|
+
this.translateService.stream('key'),
|
|
153
|
+
]).pipe(map(([dataTypeValue, fieldTypeValue]) => [
|
|
154
|
+
{
|
|
155
|
+
content: this.translateService.instant('searchFieldsOverview.single'),
|
|
156
|
+
id: TaskListSearchFieldFieldType.SINGLE,
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
content: this.translateService.instant('searchFieldsOverview.range'),
|
|
160
|
+
id: TaskListSearchFieldFieldType.RANGE,
|
|
161
|
+
},
|
|
162
|
+
...(dataTypeValue === TaskListSearchFieldDataType.TEXT
|
|
163
|
+
? [
|
|
164
|
+
{
|
|
165
|
+
content: this.translateService.instant('searchFieldsOverview.single-select-dropdown'),
|
|
166
|
+
id: TaskListSearchFieldFieldType.SINGLE_SELECT_DROPDOWN,
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
content: this.translateService.instant('searchFieldsOverview.multi-select-dropdown'),
|
|
170
|
+
id: TaskListSearchFieldFieldType.MULTI_SELECT_DROPDOWN,
|
|
171
|
+
},
|
|
172
|
+
]
|
|
173
|
+
: []),
|
|
174
|
+
].map(item => ({ ...item, selected: item.id === fieldTypeValue?.id }))));
|
|
175
|
+
this.dataProviderItems$ = this.translateService
|
|
176
|
+
.stream('key')
|
|
177
|
+
.pipe(switchMap(() => this.dropdownDataProviderValue$), map(dataProviderValue => [
|
|
178
|
+
{
|
|
179
|
+
content: this.translateService.instant('searchFieldsOverview.dropdownDatabaseDataProvider'),
|
|
180
|
+
id: TaskListSearchDropdownDataProvider.DATABASE,
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
content: this.translateService.instant('searchFieldsOverview.dropdownJsonFileDataProvider'),
|
|
184
|
+
id: TaskListSearchDropdownDataProvider.JSON,
|
|
185
|
+
},
|
|
186
|
+
].map(item => ({ ...item, selected: item.id === dataProviderValue?.id }))));
|
|
187
|
+
this.matchTypeItems$ = this.translateService
|
|
188
|
+
.stream('key')
|
|
189
|
+
.pipe(switchMap(() => this.matchTypeValue$), map(matchTypeValue => [
|
|
190
|
+
{
|
|
191
|
+
content: this.translateService.instant('searchFieldsOverview.like'),
|
|
192
|
+
id: TaskListSearchFieldMatchType.LIKE,
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
content: this.translateService.instant('searchFieldsOverview.exact'),
|
|
196
|
+
id: TaskListSearchFieldMatchType.EXACT,
|
|
197
|
+
},
|
|
198
|
+
].map(item => ({ ...item, selected: item.id === matchTypeValue?.id }))));
|
|
199
|
+
this.iconService.registerAll([TrashCan16, InformationFilled16]);
|
|
200
|
+
}
|
|
201
|
+
ngOnInit() {
|
|
202
|
+
this.form.setValidators([this.dropdownDataProviderValidator, this.dropdownValuesValidator]);
|
|
203
|
+
}
|
|
204
|
+
addDropdownValue(prefillValue) {
|
|
205
|
+
if (!this.dropdownValuesArray)
|
|
206
|
+
return;
|
|
207
|
+
this.dropdownValuesArray.push(this.fb.group({
|
|
208
|
+
key: this.fb.control(prefillValue?.key ?? '', Validators.required),
|
|
209
|
+
value: this.fb.control(prefillValue?.value ?? '', Validators.required),
|
|
210
|
+
}));
|
|
211
|
+
}
|
|
212
|
+
removeDropdownValue(index) {
|
|
213
|
+
if (!this.dropdownValuesArray)
|
|
214
|
+
return;
|
|
215
|
+
this.dropdownValuesArray.removeAt(index);
|
|
216
|
+
}
|
|
217
|
+
onCancel() {
|
|
218
|
+
this.closeEvent.emit(null);
|
|
219
|
+
this.resetForm();
|
|
220
|
+
}
|
|
221
|
+
onSave() {
|
|
222
|
+
const groupValue = this.form.getRawValue();
|
|
223
|
+
this.closeEvent.emit({
|
|
224
|
+
...(groupValue.title && { title: groupValue.title }),
|
|
225
|
+
...(groupValue.key && { key: groupValue.key }),
|
|
226
|
+
...(groupValue.path && { path: groupValue.path }),
|
|
227
|
+
...(groupValue.dataType?.content && { dataType: groupValue.dataType.id }),
|
|
228
|
+
...(groupValue.matchType?.content && { matchType: groupValue.matchType.id }),
|
|
229
|
+
...(groupValue.fieldType?.content && { fieldType: groupValue.fieldType.id }),
|
|
230
|
+
...(groupValue.dropdownDataProvider?.content && {
|
|
231
|
+
dropdownDataProvider: groupValue.dropdownDataProvider.id,
|
|
232
|
+
}),
|
|
233
|
+
...(groupValue.dropdownValues && {
|
|
234
|
+
dropdownValues: groupValue.dropdownValues.reduce((acc, curr) => ({ ...acc, ...(!!curr?.key && { [curr.key]: curr.value }) }), {}),
|
|
235
|
+
}),
|
|
236
|
+
});
|
|
237
|
+
this.resetForm();
|
|
238
|
+
}
|
|
239
|
+
setPrefilledForm(prefillData) {
|
|
240
|
+
if (!prefillData)
|
|
241
|
+
return;
|
|
242
|
+
this.form.patchValue({
|
|
243
|
+
...prefillData,
|
|
244
|
+
dataType: !prefillData.dataType
|
|
245
|
+
? null
|
|
246
|
+
: {
|
|
247
|
+
content: prefillData.dataType,
|
|
248
|
+
id: prefillData.dataType,
|
|
249
|
+
selected: true,
|
|
250
|
+
},
|
|
251
|
+
matchType: !prefillData.matchType
|
|
252
|
+
? null
|
|
253
|
+
: {
|
|
254
|
+
content: prefillData.matchType,
|
|
255
|
+
id: prefillData.matchType,
|
|
256
|
+
selected: true,
|
|
257
|
+
},
|
|
258
|
+
fieldType: !prefillData.fieldType
|
|
259
|
+
? null
|
|
260
|
+
: {
|
|
261
|
+
content: prefillData.fieldType,
|
|
262
|
+
id: prefillData.fieldType,
|
|
263
|
+
selected: true,
|
|
264
|
+
},
|
|
265
|
+
dropdownDataProvider: !prefillData.dropdownDataProvider
|
|
266
|
+
? null
|
|
267
|
+
: {
|
|
268
|
+
content: prefillData.dropdownDataProvider,
|
|
269
|
+
id: prefillData.dropdownDataProvider,
|
|
270
|
+
selected: true,
|
|
271
|
+
},
|
|
272
|
+
dropdownValues: [],
|
|
273
|
+
});
|
|
274
|
+
if (prefillData.dropdownDataProvider && prefillData.dropdownValues)
|
|
275
|
+
this.setPrefilledDropdownValues(prefillData.dropdownValues);
|
|
276
|
+
this.form.get('key')?.disable();
|
|
277
|
+
}
|
|
278
|
+
setPrefilledDropdownValues(dropdownValue) {
|
|
279
|
+
if (!this.dropdownValuesArray || !this.dropdownDataProviderValue)
|
|
280
|
+
return;
|
|
281
|
+
Object.entries(dropdownValue).forEach(([key, value]) => {
|
|
282
|
+
this.addDropdownValue({ key, value });
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
matchTypeValidator(control) {
|
|
286
|
+
const controlValue = control.value;
|
|
287
|
+
const dataTypeControlValue = control.parent?.get('dataType')?.value;
|
|
288
|
+
if (dataTypeControlValue?.id === TaskListSearchFieldDataType.TEXT &&
|
|
289
|
+
(!controlValue || !controlValue.selected))
|
|
290
|
+
return { error: 'Match type not selected' };
|
|
291
|
+
return null;
|
|
292
|
+
}
|
|
293
|
+
dropdownDataProviderValidator(group) {
|
|
294
|
+
const controlValue = group.get('dropdownDataProvider')?.value;
|
|
295
|
+
const fieldTypeControlValue = group.get('fieldType')?.value;
|
|
296
|
+
if ([
|
|
297
|
+
TaskListSearchFieldFieldType.SINGLE_SELECT_DROPDOWN,
|
|
298
|
+
TaskListSearchFieldFieldType.MULTI_SELECT_DROPDOWN,
|
|
299
|
+
].includes(fieldTypeControlValue?.id) &&
|
|
300
|
+
!controlValue)
|
|
301
|
+
return { error: 'Dropdown source provider is not specified' };
|
|
302
|
+
return null;
|
|
303
|
+
}
|
|
304
|
+
dropdownValuesValidator(group) {
|
|
305
|
+
const controlValue = group.get('dropdownValues')?.value;
|
|
306
|
+
const fieldTypeControlValue = group.get('fieldType')?.value?.id;
|
|
307
|
+
const dropdownProviderValue = group.get('dropdownDataProvider')?.value?.id;
|
|
308
|
+
if ([
|
|
309
|
+
TaskListSearchFieldFieldType.SINGLE_SELECT_DROPDOWN,
|
|
310
|
+
TaskListSearchFieldFieldType.MULTI_SELECT_DROPDOWN,
|
|
311
|
+
].includes(fieldTypeControlValue) &&
|
|
312
|
+
(!controlValue || controlValue?.length === 0) &&
|
|
313
|
+
dropdownProviderValue === TaskListSearchDropdownDataProvider.DATABASE)
|
|
314
|
+
return { error: 'Dropdown source provider is not specified or is empty' };
|
|
315
|
+
return null;
|
|
316
|
+
}
|
|
317
|
+
resetForm() {
|
|
318
|
+
setTimeout(() => {
|
|
319
|
+
while (!!this.dropdownValuesArray?.length) {
|
|
320
|
+
this.dropdownValuesArray.removeAt(0);
|
|
321
|
+
}
|
|
322
|
+
this.form.reset();
|
|
323
|
+
this.form.enable();
|
|
324
|
+
}, CARBON_CONSTANTS.modalAnimationMs);
|
|
325
|
+
}
|
|
326
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: TaskManagementSearchFieldsModalComponent, deps: [{ token: i1.DocumentService }, { token: i2.IconService }, { token: i3.FormBuilder }, { token: i4.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
327
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.3", type: TaskManagementSearchFieldsModalComponent, isStandalone: true, selector: "valtimo-task-management-search-fields-modal", inputs: { open: "open", documentDefinitionName: "documentDefinitionName", prefillData: "prefillData" }, outputs: { closeEvent: "closeEvent" }, 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<cds-modal [open]=\"open\" showFooter=\"true\">\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCancel()\">\n <h3 cdsModalHeaderHeading>\n {{ (!prefillData ? 'searchFieldsOverview.add' : 'searchFieldsOverview.edit') | translate }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <form [formGroup]=\"form\" class=\"valtimo-task-management-search-fields-modal__content\">\n <div class=\"valtimo-task-management-search-fields-modal__input\">\n <v-input-label\n [title]=\"'searchFieldsOverview.title' | translate\"\n [tooltip]=\"'searchFieldsOverviewTooltips.title' | translate\"\n >\n </v-input-label>\n\n <input cdsText type=\"text\" formControlName=\"title\" />\n </div>\n\n <div class=\"valtimo-task-management-search-fields-modal__input\">\n <v-input-label\n [title]=\"'searchFieldsOverview.key' | translate\"\n [tooltip]=\"'searchFieldsOverviewTooltips.key' | translate\"\n >\n </v-input-label>\n\n <input cdsText type=\"text\" formControlName=\"key\" />\n </div>\n\n <div class=\"valtimo-task-management-search-fields-modal__input\">\n <v-input-label\n [title]=\"'searchFieldsOverview.path' | translate\"\n [tooltip]=\"'searchFieldsOverviewTooltips.path' | translate\"\n >\n </v-input-label>\n\n <input cdsText type=\"text\" formControlName=\"path\" />\n </div>\n\n <div class=\"valtimo-task-management-search-fields-modal__input\">\n <v-input-label\n [title]=\"'searchFieldsOverview.dataType' | translate\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dataType' | translate\"\n >\n </v-input-label>\n\n <cds-dropdown formControlName=\"dataType\">\n <cds-dropdown-list [items]=\"dataTypeItems$ | async\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n @if (dataTypeValue === TaskListSearchFieldDataType.TEXT) {\n <div class=\"valtimo-task-management-search-fields-modal__input\">\n <v-input-label\n [title]=\"'searchFieldsOverview.matchType' | translate\"\n [tooltip]=\"'searchFieldsOverviewTooltips.matchType' | translate\"\n >\n </v-input-label>\n\n <cds-dropdown formControlName=\"matchType\">\n <cds-dropdown-list [items]=\"matchTypeItems$ | async\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n }\n\n <div class=\"valtimo-task-management-search-fields-modal__input\">\n <v-input-label\n [title]=\"'searchFieldsOverview.fieldType' | translate\"\n [tooltip]=\"'searchFieldsOverviewTooltips.fieldType' | translate\"\n >\n </v-input-label>\n\n <cds-dropdown formControlName=\"fieldType\">\n <cds-dropdown-list [items]=\"fieldTypeItems$ | async\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n @if (\n dataTypeValue === TaskListSearchFieldDataType.TEXT &&\n (fieldTypeValue === TaskListSearchFieldFieldType.SINGLE_SELECT_DROPDOWN ||\n fieldTypeValue === TaskListSearchFieldFieldType.MULTI_SELECT_DROPDOWN)\n ) {\n <div class=\"valtimo-task-management-search-fields-modal__input\">\n <v-input-label\n [title]=\"'searchFieldsOverview.dropdownDataProvider' | translate\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dropdownDataProvider' | translate\"\n >\n </v-input-label>\n\n <cds-dropdown formControlName=\"dropdownDataProvider\">\n <cds-dropdown-list [items]=\"dataProviderItems$ | async\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n @if (dropdownDataProviderValue === TaskListSearchDropdownDataProvider.DATABASE) {\n <div\n class=\"valtimo-task-management-search-fields-modal__list\"\n formArrayName=\"dropdownValues\"\n >\n <v-input-label\n [title]=\"'searchFieldsOverview.dropdownListValues' | translate\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dropdownListValues' | translate\"\n [noMargin]=\"true\"\n >\n </v-input-label>\n\n @for (dropdownValue of dropdownValuesArray?.controls; track $index) {\n <form\n [formGroup]=\"dropdownValue\"\n class=\"valtimo-task-management-search-fields-modal__dropdown-values\"\n >\n <cds-text-label>\n {{ 'interface.key' | translate }}\n\n <input cdsText type=\"text\" formControlName=\"key\" />\n </cds-text-label>\n\n <cds-text-label>\n {{ 'interface.value' | translate }}\n\n <input cdsText type=\"text\" formControlName=\"value\" />\n </cds-text-label>\n\n <button\n cdsButton=\"danger\"\n [disabled]=\"$count === 1\"\n [iconOnly]=\"true\"\n (click)=\"removeDropdownValue($index)\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n }\n\n <button cdsButton=\"primary\" (click)=\"addDropdownValue()\">\n {{ 'interface.addRow' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n } @else if (dropdownDataProviderValue === TaskListSearchDropdownDataProvider.JSON) {\n <valtimo-carbon-list\n [header]=\"false\"\n [hideToolbar]=\"true\"\n [fields]=\"DROPDOWN_FIELDS\"\n [items]=\"dropdownReadonlyItems$ | async\"\n ></valtimo-carbon-list>\n }\n }\n </form>\n </section>\n\n <cds-modal-footer>\n <button cdsButton=\"ghost\" (click)=\"onCancel()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button cdsButton=\"primary\" [disabled]=\"form.invalid\" (click)=\"onSave()\">\n {{ 'interface.save' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".valtimo-task-management-search-fields-modal__content,.valtimo-task-management-search-fields-modal__dropdown-values{display:flex;gap:16px}.valtimo-task-management-search-fields-modal__content{flex-direction:column}.valtimo-task-management-search-fields-modal__dropdown-values{align-items:flex-end;gap:16px}.valtimo-task-management-search-fields-modal__label{display:flex;gap:4px}.valtimo-task-management-search-fields-modal__list{display:flex;flex-direction:column;gap:16px}\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: "ngmodule", type: CommonModule }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: DropdownModule }, { 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: "ngmodule", type: InputModule }, { kind: "component", type: i2.TextInputLabelComponent, selector: "cds-text-label, ibm-text-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textInputTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i2.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "ngmodule", type: ModalModule }, { 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: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i6.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "actionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "ngmodule", type: InputLabelModule }, { kind: "component", type: i6.InputLabelComponent, selector: "v-input-label", inputs: ["name", "tooltip", "largeMargin", "small", "noMargin", "title", "titleTranslationKey", "required", "disabled", "carbonTheme"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
328
|
+
}
|
|
329
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: TaskManagementSearchFieldsModalComponent, decorators: [{
|
|
330
|
+
type: Component,
|
|
331
|
+
args: [{ selector: 'valtimo-task-management-search-fields-modal', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
332
|
+
CommonModule,
|
|
333
|
+
TranslateModule,
|
|
334
|
+
ButtonModule,
|
|
335
|
+
DropdownModule,
|
|
336
|
+
InputModule,
|
|
337
|
+
ModalModule,
|
|
338
|
+
ReactiveFormsModule,
|
|
339
|
+
IconModule,
|
|
340
|
+
CarbonListModule,
|
|
341
|
+
InputLabelModule,
|
|
342
|
+
], 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<cds-modal [open]=\"open\" showFooter=\"true\">\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCancel()\">\n <h3 cdsModalHeaderHeading>\n {{ (!prefillData ? 'searchFieldsOverview.add' : 'searchFieldsOverview.edit') | translate }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <form [formGroup]=\"form\" class=\"valtimo-task-management-search-fields-modal__content\">\n <div class=\"valtimo-task-management-search-fields-modal__input\">\n <v-input-label\n [title]=\"'searchFieldsOverview.title' | translate\"\n [tooltip]=\"'searchFieldsOverviewTooltips.title' | translate\"\n >\n </v-input-label>\n\n <input cdsText type=\"text\" formControlName=\"title\" />\n </div>\n\n <div class=\"valtimo-task-management-search-fields-modal__input\">\n <v-input-label\n [title]=\"'searchFieldsOverview.key' | translate\"\n [tooltip]=\"'searchFieldsOverviewTooltips.key' | translate\"\n >\n </v-input-label>\n\n <input cdsText type=\"text\" formControlName=\"key\" />\n </div>\n\n <div class=\"valtimo-task-management-search-fields-modal__input\">\n <v-input-label\n [title]=\"'searchFieldsOverview.path' | translate\"\n [tooltip]=\"'searchFieldsOverviewTooltips.path' | translate\"\n >\n </v-input-label>\n\n <input cdsText type=\"text\" formControlName=\"path\" />\n </div>\n\n <div class=\"valtimo-task-management-search-fields-modal__input\">\n <v-input-label\n [title]=\"'searchFieldsOverview.dataType' | translate\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dataType' | translate\"\n >\n </v-input-label>\n\n <cds-dropdown formControlName=\"dataType\">\n <cds-dropdown-list [items]=\"dataTypeItems$ | async\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n @if (dataTypeValue === TaskListSearchFieldDataType.TEXT) {\n <div class=\"valtimo-task-management-search-fields-modal__input\">\n <v-input-label\n [title]=\"'searchFieldsOverview.matchType' | translate\"\n [tooltip]=\"'searchFieldsOverviewTooltips.matchType' | translate\"\n >\n </v-input-label>\n\n <cds-dropdown formControlName=\"matchType\">\n <cds-dropdown-list [items]=\"matchTypeItems$ | async\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n }\n\n <div class=\"valtimo-task-management-search-fields-modal__input\">\n <v-input-label\n [title]=\"'searchFieldsOverview.fieldType' | translate\"\n [tooltip]=\"'searchFieldsOverviewTooltips.fieldType' | translate\"\n >\n </v-input-label>\n\n <cds-dropdown formControlName=\"fieldType\">\n <cds-dropdown-list [items]=\"fieldTypeItems$ | async\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n @if (\n dataTypeValue === TaskListSearchFieldDataType.TEXT &&\n (fieldTypeValue === TaskListSearchFieldFieldType.SINGLE_SELECT_DROPDOWN ||\n fieldTypeValue === TaskListSearchFieldFieldType.MULTI_SELECT_DROPDOWN)\n ) {\n <div class=\"valtimo-task-management-search-fields-modal__input\">\n <v-input-label\n [title]=\"'searchFieldsOverview.dropdownDataProvider' | translate\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dropdownDataProvider' | translate\"\n >\n </v-input-label>\n\n <cds-dropdown formControlName=\"dropdownDataProvider\">\n <cds-dropdown-list [items]=\"dataProviderItems$ | async\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n @if (dropdownDataProviderValue === TaskListSearchDropdownDataProvider.DATABASE) {\n <div\n class=\"valtimo-task-management-search-fields-modal__list\"\n formArrayName=\"dropdownValues\"\n >\n <v-input-label\n [title]=\"'searchFieldsOverview.dropdownListValues' | translate\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dropdownListValues' | translate\"\n [noMargin]=\"true\"\n >\n </v-input-label>\n\n @for (dropdownValue of dropdownValuesArray?.controls; track $index) {\n <form\n [formGroup]=\"dropdownValue\"\n class=\"valtimo-task-management-search-fields-modal__dropdown-values\"\n >\n <cds-text-label>\n {{ 'interface.key' | translate }}\n\n <input cdsText type=\"text\" formControlName=\"key\" />\n </cds-text-label>\n\n <cds-text-label>\n {{ 'interface.value' | translate }}\n\n <input cdsText type=\"text\" formControlName=\"value\" />\n </cds-text-label>\n\n <button\n cdsButton=\"danger\"\n [disabled]=\"$count === 1\"\n [iconOnly]=\"true\"\n (click)=\"removeDropdownValue($index)\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n }\n\n <button cdsButton=\"primary\" (click)=\"addDropdownValue()\">\n {{ 'interface.addRow' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n } @else if (dropdownDataProviderValue === TaskListSearchDropdownDataProvider.JSON) {\n <valtimo-carbon-list\n [header]=\"false\"\n [hideToolbar]=\"true\"\n [fields]=\"DROPDOWN_FIELDS\"\n [items]=\"dropdownReadonlyItems$ | async\"\n ></valtimo-carbon-list>\n }\n }\n </form>\n </section>\n\n <cds-modal-footer>\n <button cdsButton=\"ghost\" (click)=\"onCancel()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button cdsButton=\"primary\" [disabled]=\"form.invalid\" (click)=\"onSave()\">\n {{ 'interface.save' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".valtimo-task-management-search-fields-modal__content,.valtimo-task-management-search-fields-modal__dropdown-values{display:flex;gap:16px}.valtimo-task-management-search-fields-modal__content{flex-direction:column}.valtimo-task-management-search-fields-modal__dropdown-values{align-items:flex-end;gap:16px}.valtimo-task-management-search-fields-modal__label{display:flex;gap:4px}.valtimo-task-management-search-fields-modal__list{display:flex;flex-direction:column;gap:16px}\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"] }]
|
|
343
|
+
}], ctorParameters: () => [{ type: i1.DocumentService }, { type: i2.IconService }, { type: i3.FormBuilder }, { type: i4.TranslateService }], propDecorators: { open: [{
|
|
344
|
+
type: Input,
|
|
345
|
+
args: [{ required: true }]
|
|
346
|
+
}], documentDefinitionName: [{
|
|
347
|
+
type: Input,
|
|
348
|
+
args: [{ required: true }]
|
|
349
|
+
}], prefillData: [{
|
|
350
|
+
type: Input
|
|
351
|
+
}], closeEvent: [{
|
|
352
|
+
type: Output
|
|
353
|
+
}] } });
|
|
354
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHMtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby90YXNrLW1hbmFnZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL3Rhc2stbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzLW1vZGFsL3Rhc2stbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vdGFzay1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy90YXNrLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcy1tb2RhbC90YXNrLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcy1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBSUwsbUJBQW1CLEVBRW5CLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFDLGVBQWUsRUFBbUIsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUVoQixnQkFBZ0IsRUFDaEIsUUFBUSxHQUNULE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUNMLGtDQUFrQyxFQUdsQywyQkFBMkIsRUFDM0IsNEJBQTRCLEVBQzVCLDRCQUE0QixHQUM3QixNQUFN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WTt3QkFDWixlQUFlO3dCQUNmLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxXQUFXO3dCQUNYLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixVQUFVO3dCQUNWLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3FCQUNqQjt1S0FHd0IsSUFBSTtzQkFBNUIsS0FBSzt1QkFBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUM7Z0JBQ0Usc0JBQXNCO3NCQUE5QyxLQUFLO3VCQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQztnQkFHSCxXQUFXO3NCQUE5QixLQUFLO2dCQU9JLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEZvcm1BcnJheSxcbiAgRm9ybUJ1aWxkZXIsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7SW5mb3JtYXRpb25GaWxsZWQxNiwgVHJhc2hDYW4xNn0gZnJvbSAnQGNhcmJvbi9pY29ucyc7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1xuICBDQVJCT05fQ09OU1RBTlRTLFxuICBDYXJib25MaXN0TW9kdWxlLFxuICBDb2x1bW5Db25maWcsXG4gIElucHV0TGFiZWxNb2R1bGUsXG4gIFZpZXdUeXBlLFxufSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcbmltcG9ydCB7RG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge1xuICBUYXNrTGlzdFNlYXJjaERyb3Bkb3duRGF0YVByb3ZpZGVyLFxuICBUYXNrTGlzdFNlYXJjaERyb3Bkb3duVmFsdWUsXG4gIFRhc2tMaXN0U2VhcmNoRmllbGQsXG4gIFRhc2tMaXN0U2VhcmNoRmllbGREYXRhVHlwZSxcbiAgVGFza0xpc3RTZWFyY2hGaWVsZEZpZWxkVHlwZSxcbiAgVGFza0xpc3RTZWFyY2hGaWVsZE1hdGNoVHlwZSxcbn0gZnJvbSAnQHZhbHRpbW8vdGFzayc7XG5pbXBvcnQge1xuICBCdXR0b25Nb2R1bGUsXG4gIERyb3Bkb3duTW9kdWxlLFxuICBJY29uTW9kdWxlLFxuICBJY29uU2VydmljZSxcbiAgSW5wdXRNb2R1bGUsXG4gIExpc3RJdGVtLFxuICBNb2RhbE1vZHVsZSxcbn0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgc3RhcnRXaXRoLFxuICBzd2l0Y2hNYXAsXG59IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLXRhc2stbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rhc2stbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3Rhc2stbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzLW1vZGFsLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBEcm9wZG93bk1vZHVsZSxcbiAgICBJbnB1dE1vZHVsZSxcbiAgICBNb2RhbE1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEljb25Nb2R1bGUsXG4gICAgQ2FyYm9uTGlzdE1vZHVsZSxcbiAgICBJbnB1dExhYmVsTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBUYXNrTWFuYWdlbWVudFNlYXJjaEZpZWxkc01vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZX0pIG9wZW46IGJvb2xlYW47XG4gIEBJbnB1dCh7cmVxdWlyZWQ6IHRydWV9KSBkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBfcHJlZmlsbERhdGE6IFRhc2tMaXN0U2VhcmNoRmllbGQgfCBudWxsO1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IHByZWZpbGxEYXRhKHZhbHVlOiBUYXNrTGlzdFNlYXJjaEZpZWxkIHwgbnVsbCkge1xuICAgIHRoaXMuX3ByZWZpbGxEYXRhID0gdmFsdWU7XG4gICAgdGhpcy5zZXRQcmVmaWxsZWRGb3JtKHZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHByZWZpbGxEYXRhKCk6IFRhc2tMaXN0U2VhcmNoRmllbGQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcHJlZmlsbERhdGE7XG4gIH1cbiAgQE91dHB1dCgpIGNsb3NlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFBhcnRpYWw8VGFza0xpc3RTZWFyY2hGaWVsZD4gfCBudWxsPigpO1xuXG4gIHB1YmxpYyByZWFkb25seSBmb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAga2V5OiB0aGlzLmZiLmNvbnRyb2w8c3RyaW5nPignJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgdGl0bGU6IHRoaXMuZmIuY29udHJvbDxzdHJpbmc+KCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICBwYXRoOiB0aGlzLmZiLmNvbnRyb2w8c3RyaW5nPignJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgZGF0YVR5cGU6IHRoaXMuZmIuY29udHJvbDxMaXN0SXRlbSB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgIG1hdGNoVHlwZTogdGhpcy5mYi5jb250cm9sPExpc3RJdGVtIHwgbnVsbD4obnVsbCwgdGhpcy5tYXRjaFR5cGVWYWxpZGF0b3IpLFxuICAgIGZpZWxkVHlwZTogdGhpcy5mYi5jb250cm9sPExpc3RJdGVtIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgZHJvcGRvd25EYXRhUHJvdmlkZXI6IHRoaXMuZmIuY29udHJvbDxMaXN0SXRlbSB8IG51bGw+KG51bGwpLFxuICAgIGRyb3Bkb3duVmFsdWVzOiB0aGlzLmZiLmFycmF5PHtrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZ30+KFtdKSxcbiAgfSk7XG5cbiAgcHVibGljIGdldCBkYXRhVHlwZSgpOiBBYnN0cmFjdENvbnRyb2w8TGlzdEl0ZW0gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2RhdGFUeXBlJyk7XG4gIH1cbiAgcHVibGljIGdldCBkYXRhVHlwZVZhbHVlJCgpOiBPYnNlcnZhYmxlPExpc3RJdGVtIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmRhdGFUeXBlLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmRhdGFUeXBlLnZhbHVlKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1hdGNoVHlwZSgpOiBBYnN0cmFjdENvbnRyb2w8TGlzdEl0ZW0gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ21hdGNoVHlwZScpO1xuICB9XG4gIHB1YmxpYyBnZXQgbWF0Y2hUeXBlVmFsdWUkKCk6IE9ic2VydmFibGU8TGlzdEl0ZW0gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMubWF0Y2hUeXBlLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLm1hdGNoVHlwZS52YWx1ZSkpO1xuICB9XG5cbiAgcHVibGljIGdldCBkcm9wZG93bkRhdGFQcm92aWRlcigpOiBBYnN0cmFjdENvbnRyb2w8TGlzdEl0ZW0gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2Ryb3Bkb3duRGF0YVByb3ZpZGVyJyk7XG4gIH1cbiAgcHVibGljIGdldCBkcm9wZG93bkRhdGFQcm92aWRlclZhbHVlJCgpOiBPYnNlcnZhYmxlPExpc3RJdGVtIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmRyb3Bkb3duRGF0YVByb3ZpZGVyLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmRyb3Bkb3duRGF0YVByb3ZpZGVyLnZhbHVlKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZpZWxkVHlwZSgpOiBBYnN0cmFjdENvbnRyb2w8TGlzdEl0ZW0gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2ZpZWxkVHlwZScpO1xuICB9XG4gIHB1YmxpYyBnZXQgZmllbGRUeXBlVmFsdWUkKCk6IE9ic2VydmFibGU8TGlzdEl0ZW0gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRUeXBlLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmZpZWxkVHlwZS52YWx1ZSkpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IFRhc2tMaXN0U2VhcmNoRmllbGREYXRhVHlwZSA9IFRhc2tMaXN0U2VhcmNoRmllbGREYXRhVHlwZTtcbiAgcHVibGljIHJlYWRvbmx5IFRhc2tMaXN0U2VhcmNoRmllbGRGaWVsZFR5cGUgPSBUYXNrTGlzdFNlYXJjaEZpZWxkRmllbGRUeXBlO1xuICBwdWJsaWMgcmVhZG9ubHkgVGFza0xpc3RTZWFyY2hEcm9wZG93bkRhdGFQcm92aWRlciA9IFRhc2tMaXN0U2VhcmNoRHJvcGRvd25EYXRhUHJvdmlkZXI7XG5cbiAgcHVibGljIGdldCBrZXlWYWx1ZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBjb250cm9sVmFsdWUgPSB0aGlzLmZvcm0uZ2V0KCdrZXknKT8udmFsdWU7XG5cbiAgICByZXR1cm4gIWNvbnRyb2xWYWx1ZSA/IG51bGwgOiBjb250cm9sVmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRhdGFUeXBlVmFsdWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgY29udHJvbFZhbHVlID0gdGhpcy5mb3JtLmdldCgnZGF0YVR5cGUnKT8udmFsdWU7XG4gICAgdGhpcy5fZGF0YVR5cGVWYWx1ZSQubmV4dChjb250cm9sVmFsdWU/LmlkKTtcblxuICAgIHJldHVybiAhY29udHJvbFZhbHVlID8gbnVsbCA6IGNvbnRyb2xWYWx1ZS5pZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmllbGRUeXBlVmFsdWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgY29udHJvbFZhbHVlID0gdGhpcy5mb3JtLmdldCgnZmllbGRUeXBlJyk/LnZhbHVlO1xuXG4gICAgcmV0dXJuICFjb250cm9sVmFsdWUgPyBudWxsIDogY29udHJvbFZhbHVlLmlkO1xuICB9XG5cbiAgcHVibGljIGdldCBkcm9wZG93bkRhdGFQcm92aWRlclZhbHVlKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGNvbnRyb2xWYWx1ZSA9IHRoaXMuZm9ybS5nZXQoJ2Ryb3Bkb3duRGF0YVByb3ZpZGVyJyk/LnZhbHVlO1xuICAgIHRoaXMuX2Ryb3Bkb3duUHJvdmlkZXJWYWx1ZSQubmV4dChjb250cm9sVmFsdWU/LmlkKTtcblxuICAgIHJldHVybiAhY29udHJvbFZhbHVlID8gbnVsbCA6IGNvbnRyb2xWYWx1ZS5pZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZHJvcGRvd25WYWx1ZXNBcnJheSgpOiBGb3JtQXJyYXkgfCBudWxsIHtcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmZvcm0uZ2V0KCdkcm9wZG93blZhbHVlcycpO1xuXG4gICAgcmV0dXJuICFmb3JtQXJyYXkgPyBudWxsIDogKGZvcm1BcnJheSBhcyBGb3JtQXJyYXkpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IERST1BET1dOX0ZJRUxEUzogQ29sdW1uQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAga2V5OiAna2V5JyxcbiAgICAgIGxhYmVsOiAnc2VhcmNoRmllbGRzT3ZlcnZpZXcua2V5JyxcbiAgICAgIHZpZXdUeXBlOiBWaWV3VHlwZS5URVhULFxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAndmFsdWUnLFxuICAgICAgbGFiZWw6ICdzZWFyY2hGaWVsZHNPdmVydmlldy50ZXh0JyxcbiAgICAgIHZpZXdUeXBlOiBWaWV3VHlwZS5URVhULFxuICAgIH0sXG4gIF07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZGF0YVR5cGVWYWx1ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRhc2tMaXN0U2VhcmNoRmllbGREYXRhVHlwZSB8IG51bGwgfCB1bmRlZmluZWRcbiAgPihudWxsKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kcm9wZG93blByb3ZpZGVyVmFsdWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUYXNrTGlzdFNlYXJjaERyb3Bkb3duRGF0YVByb3ZpZGVyIHwgbnVsbCB8IHVuZGVmaW5lZFxuICA+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgZHJvcGRvd25SZWFkb25seUl0ZW1zJCA9IHRoaXMuX2Ryb3Bkb3duUHJvdmlkZXJWYWx1ZSQucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIGZpbHRlcih2YWwgPT4gISF2YWwgJiYgdmFsID09PSBUYXNrTGlzdFNlYXJjaERyb3Bkb3duRGF0YVByb3ZpZGVyLkpTT04pLFxuICAgIHN3aXRjaE1hcCgocHJvdmlkZXI6IFRhc2tMaXN0U2VhcmNoRHJvcGRvd25EYXRhUHJvdmlkZXIgfCBudWxsIHwgdW5kZWZpbmVkKSA9PlxuICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0RHJvcGRvd25EYXRhKFxuICAgICAgICBwcm92aWRlciA/PyAnJyxcbiAgICAgICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lID8/ICcnLFxuICAgICAgICB0aGlzLmtleVZhbHVlID8/ICcnXG4gICAgICApXG4gICAgKSxcbiAgICBtYXAoZHJvcGRvd25EYXRhID0+XG4gICAgICBkcm9wZG93bkRhdGEgPyBPYmplY3QuZW50cmllcyhkcm9wZG93bkRhdGEpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoe2tleSwgdmFsdWV9KSkgOiBbXVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZGF0YVR5cGVJdGVtcyQ6IE9ic2VydmFibGU8TGlzdEl0ZW1bXT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmRhdGFUeXBlVmFsdWUkLFxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2RhdGFUeXBlVmFsdWVdKSA9PlxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3NlYXJjaEZpZWxkcy50ZXh0JyksXG4gICAgICAgICAgaWQ6IFRhc2tMaXN0U2VhcmNoRmllbGREYXRhVHlwZS5URVhULFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3NlYXJjaEZpZWxkcy5ib29sZWFuJyksXG4gICAgICAgICAgaWQ6IFRhc2tMaXN0U2VhcmNoRmllbGREYXRhVHlwZS5CT09MRUFOLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3NlYXJjaEZpZWxkcy5kYXRlJyksXG4gICAgICAgICAgaWQ6IFRhc2tMaXN0U2VhcmNoRmllbGREYXRhVHlwZS5EQVRFLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3NlYXJjaEZpZWxkcy5kYXRldGltZScpLFxuICAgICAgICAgIGlkOiBUYXNrTGlzdFNlYXJjaEZpZWxkRGF0YVR5cGUuREFURVRJTUUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjb250ZW50OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnc2VhcmNoRmllbGRzLm51bWJlcicpLFxuICAgICAgICAgIGlkOiBUYXNrTGlzdFNlYXJjaEZpZWxkRGF0YVR5cGUuTlVNQkVSLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3NlYXJjaEZpZWxkcy50aW1lJyksXG4gICAgICAgICAgaWQ6IFRhc2tMaXN0U2VhcmNoRmllbGREYXRhVHlwZS5USU1FLFxuICAgICAgICB9LFxuICAgICAgXS5tYXAoaXRlbSA9PiAoey4uLml0ZW0sIHNlbGVjdGVkOiBpdGVtLmlkID09PSBkYXRhVHlwZVZhbHVlPy5pZH0pKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZmllbGRUeXBlSXRlbXMkOiBPYnNlcnZhYmxlPExpc3RJdGVtW10+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5fZGF0YVR5cGVWYWx1ZSQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKSxcbiAgICB0aGlzLmZpZWxkVHlwZVZhbHVlJCxcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtkYXRhVHlwZVZhbHVlLCBmaWVsZFR5cGVWYWx1ZV0pID0+XG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb250ZW50OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnc2VhcmNoRmllbGRzT3ZlcnZpZXcuc2luZ2xlJyksXG4gICAgICAgICAgaWQ6IFRhc2tMaXN0U2VhcmNoRmllbGRGaWVsZFR5cGUuU0lOR0xFLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnJhbmdlJyksXG4gICAgICAgICAgaWQ6IFRhc2tMaXN0U2VhcmNoRmllbGRGaWVsZFR5cGUuUkFOR0UsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLihkYXRhVHlwZVZhbHVlID09PSBUYXNrTGlzdFNlYXJjaEZpZWxkRGF0YVR5cGUuVEVYVFxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICAgICAgICAnc2VhcmNoRmllbGRzT3ZlcnZpZXcuc2luZ2xlLXNlbGVjdC1kcm9wZG93bidcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGlkOiBUYXNrTGlzdFNlYXJjaEZpZWxkRmllbGRUeXBlLlNJTkdMRV9TRUxFQ1RfRFJPUERPV04sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAgICAgICAgICdzZWFyY2hGaWVsZHNPdmVydmlldy5tdWx0aS1zZWxlY3QtZHJvcGRvd24nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBpZDogVGFza0xpc3RTZWFyY2hGaWVsZEZpZWxkVHlwZS5NVUxUSV9TRUxFQ1RfRFJPUERPV04sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXSksXG4gICAgICBdLm1hcChpdGVtID0+ICh7Li4uaXRlbSwgc2VsZWN0ZWQ6IGl0ZW0uaWQgPT09IGZpZWxkVHlwZVZhbHVlPy5pZH0pKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZGF0YVByb3ZpZGVySXRlbXMkOiBPYnNlcnZhYmxlPExpc3RJdGVtW10+ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlXG4gICAgLnN0cmVhbSgna2V5JylcbiAgICAucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmRyb3Bkb3duRGF0YVByb3ZpZGVyVmFsdWUkKSxcbiAgICAgIG1hcChkYXRhUHJvdmlkZXJWYWx1ZSA9PlxuICAgICAgICBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICAgICdzZWFyY2hGaWVsZHNPdmVydmlldy5kcm9wZG93bkRhdGFiYXNlRGF0YVByb3ZpZGVyJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlkOiBUYXNrTGlzdFNlYXJjaERyb3Bkb3duRGF0YVByb3ZpZGVyLkRBVEFCQVNFLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICAgICdzZWFyY2hGaWVsZHNPdmVydmlldy5kcm9wZG93bkpzb25GaWxlRGF0YVByb3ZpZGVyJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlkOiBUYXNrTGlzdFNlYXJjaERyb3Bkb3duRGF0YVByb3ZpZGVyLkpTT04sXG4gICAgICAgICAgfSxcbiAgICAgICAgXS5tYXAoaXRlbSA9PiAoey4uLml0ZW0sIHNlbGVjdGVkOiBpdGVtLmlkID09PSBkYXRhUHJvdmlkZXJWYWx1ZT8uaWR9KSlcbiAgICAgIClcbiAgICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBtYXRjaFR5cGVJdGVtcyQ6IE9ic2VydmFibGU8TGlzdEl0ZW1bXT4gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VcbiAgICAuc3RyZWFtKCdrZXknKVxuICAgIC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMubWF0Y2hUeXBlVmFsdWUkKSxcbiAgICAgIG1hcChtYXRjaFR5cGVWYWx1ZSA9PlxuICAgICAgICBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3NlYXJjaEZpZWxkc092ZXJ2aWV3Lmxpa2UnKSxcbiAgICAgICAgICAgIGlkOiBUYXNrTGlzdFNlYXJjaEZpZWxkTWF0Y2hUeXBlLkxJS0UsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb250ZW50OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnc2VhcmNoRmllbGRzT3ZlcnZpZXcuZXhhY3QnKSxcbiAgICAgICAgICAgIGlkOiBUYXNrTGlzdFNlYXJjaEZpZWxkTWF0Y2hUeXBlLkVYQUNULFxuICAgICAgICAgIH0sXG4gICAgICAgIF0ubWFwKGl0ZW0gPT4gKHsuLi5pdGVtLCBzZWxlY3RlZDogaXRlbS5pZCA9PT0gbWF0Y2hUeXBlVmFsdWU/LmlkfSkpXG4gICAgICApXG4gICAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNvblNlcnZpY2U6IEljb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICApIHtcbiAgICB0aGlzLmljb25TZXJ2aWNlLnJlZ2lzdGVyQWxsKFtUcmFzaENhbjE2LCBJbmZvcm1hdGlvbkZpbGxlZDE2XSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtLnNldFZhbGlkYXRvcnMoW3RoaXMuZHJvcGRvd25EYXRhUHJvdmlkZXJWYWxpZGF0b3IsIHRoaXMuZHJvcGRvd25WYWx1ZXNWYWxpZGF0b3JdKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGREcm9wZG93blZhbHVlKHByZWZpbGxWYWx1ZT86IHtrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZ30pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZHJvcGRvd25WYWx1ZXNBcnJheSkgcmV0dXJuO1xuXG4gICAgdGhpcy5kcm9wZG93blZhbHVlc0FycmF5LnB1c2goXG4gICAgICB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAga2V5OiB0aGlzLmZiLmNvbnRyb2wocHJlZmlsbFZhbHVlPy5rZXkgPz8gJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICB2YWx1ZTogdGhpcy5mYi5jb250cm9sKHByZWZpbGxWYWx1ZT8udmFsdWUgPz8gJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZURyb3Bkb3duVmFsdWUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5kcm9wZG93blZhbHVlc0FycmF5KSByZXR1cm47XG5cbiAgICB0aGlzLmRyb3Bkb3duVmFsdWVzQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xuICB9XG5cbiAgcHVibGljIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VFdmVudC5lbWl0KG51bGwpO1xuICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gIH1cblxuICBwdWJsaWMgb25TYXZlKCk6IHZvaWQge1xuICAgIGNvbnN0IGdyb3VwVmFsdWUgPSB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICB0aGlzLmNsb3NlRXZlbnQuZW1pdCh7XG4gICAgICAuLi4oZ3JvdXBWYWx1ZS50aXRsZSAmJiB7dGl0bGU6IGdyb3VwVmFsdWUudGl0bGV9KSxcbiAgICAgIC4uLihncm91cFZhbHVlLmtleSAmJiB7a2V5OiBncm91cFZhbHVlLmtleX0pLFxuICAgICAgLi4uKGdyb3VwVmFsdWUucGF0aCAmJiB7cGF0aDogZ3JvdXBWYWx1ZS5wYXRofSksXG4gICAgICAuLi4oZ3JvdXBWYWx1ZS5kYXRhVHlwZT8uY29udGVudCAmJiB7ZGF0YVR5cGU6IGdyb3VwVmFsdWUuZGF0YVR5cGUuaWR9KSxcbiAgICAgIC4uLihncm91cFZhbHVlLm1hdGNoVHlwZT8uY29udGVudCAmJiB7bWF0Y2hUeXBlOiBncm91cFZhbHVlLm1hdGNoVHlwZS5pZH0pLFxuICAgICAgLi4uKGdyb3VwVmFsdWUuZmllbGRUeXBlPy5jb250ZW50ICYmIHtmaWVsZFR5cGU6IGdyb3VwVmFsdWUuZmllbGRUeXBlLmlkfSksXG4gICAgICAuLi4oZ3JvdXBWYWx1ZS5kcm9wZG93bkRhdGFQcm92aWRlcj8uY29udGVudCAmJiB7XG4gICAgICAgIGRyb3Bkb3duRGF0YVByb3ZpZGVyOiBncm91cFZhbHVlLmRyb3Bkb3duRGF0YVByb3ZpZGVyLmlkLFxuICAgICAgfSksXG4gICAgICAuLi4oZ3JvdXBWYWx1ZS5kcm9wZG93blZhbHVlcyAmJiB7XG4gICAgICAgIGRyb3Bkb3duVmFsdWVzOiBncm91cFZhbHVlLmRyb3Bkb3duVmFsdWVzLnJlZHVjZShcbiAgICAgICAgICAoYWNjLCBjdXJyKSA9PiAoey4uLmFjYywgLi4uKCEhY3Vycj8ua2V5ICYmIHtbY3Vyci5rZXldOiBjdXJyLnZhbHVlfSl9KSxcbiAgICAgICAgICB7fVxuICAgICAgICApLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQcmVmaWxsZWRGb3JtKHByZWZpbGxEYXRhOiBUYXNrTGlzdFNlYXJjaEZpZWxkIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICghcHJlZmlsbERhdGEpIHJldHVybjtcblxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIC4uLnByZWZpbGxEYXRhLFxuICAgICAgZGF0YVR5cGU6ICFwcmVmaWxsRGF0YS5kYXRhVHlwZVxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiB7XG4gICAgICAgICAgICBjb250ZW50OiBwcmVmaWxsRGF0YS5kYXRhVHlwZSxcbiAgICAgICAgICAgIGlkOiBwcmVmaWxsRGF0YS5kYXRhVHlwZSxcbiAgICAgICAgICAgIHNlbGVjdGVkOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICBtYXRjaFR5cGU6ICFwcmVmaWxsRGF0YS5tYXRjaFR5cGVcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDoge1xuICAgICAgICAgICAgY29udGVudDogcHJlZmlsbERhdGEubWF0Y2hUeXBlLFxuICAgICAgICAgICAgaWQ6IHByZWZpbGxEYXRhLm1hdGNoVHlwZSxcbiAgICAgICAgICAgIHNlbGVjdGVkOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICBmaWVsZFR5cGU6ICFwcmVmaWxsRGF0YS5maWVsZFR5cGVcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDoge1xuICAgICAgICAgICAgY29udGVudDogcHJlZmlsbERhdGEuZmllbGRUeXBlLFxuICAgICAgICAgICAgaWQ6IHByZWZpbGxEYXRhLmZpZWxkVHlwZSxcbiAgICAgICAgICAgIHNlbGVjdGVkOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICBkcm9wZG93bkRhdGFQcm92aWRlcjogIXByZWZpbGxEYXRhLmRyb3Bkb3duRGF0YVByb3ZpZGVyXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHByZWZpbGxEYXRhLmRyb3Bkb3duRGF0YVByb3ZpZGVyLFxuICAgICAgICAgICAgaWQ6IHByZWZpbGxEYXRhLmRyb3Bkb3duRGF0YVByb3ZpZGVyLFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgIGRyb3Bkb3duVmFsdWVzOiBbXSxcbiAgICB9KTtcblxuICAgIGlmIChwcmVmaWxsRGF0YS5kcm9wZG93bkRhdGFQcm92aWRlciAmJiBwcmVmaWxsRGF0YS5kcm9wZG93blZhbHVlcylcbiAgICAgIHRoaXMuc2V0UHJlZmlsbGVkRHJvcGRvd25WYWx1ZXMocHJlZmlsbERhdGEuZHJvcGRvd25WYWx1ZXMpO1xuICAgIHRoaXMuZm9ybS5nZXQoJ2tleScpPy5kaXNhYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIHNldFByZWZpbGxlZERyb3Bkb3duVmFsdWVzKGRyb3Bkb3duVmFsdWU6IFRhc2tMaXN0U2VhcmNoRHJvcGRvd25WYWx1ZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kcm9wZG93blZhbHVlc0FycmF5IHx8ICF0aGlzLmRyb3Bkb3duRGF0YVByb3ZpZGVyVmFsdWUpIHJldHVybjtcblxuICAgIE9iamVjdC5lbnRyaWVzKGRyb3Bkb3duVmFsdWUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgdGhpcy5hZGREcm9wZG93blZhbHVlKHtrZXksIHZhbHVlfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG1hdGNoVHlwZVZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBudWxsIHwge1trZXk6IHN0cmluZ106IHN0cmluZ30ge1xuICAgIGNvbnN0IGNvbnRyb2xWYWx1ZTogTGlzdEl0ZW0gfCB1bmRlZmluZWQgPSBjb250cm9sLnZhbHVlO1xuICAgIGNvbnN0IGRhdGFUeXBlQ29udHJvbFZhbHVlOiBMaXN0SXRlbSB8IG51bGwgfCB1bmRlZmluZWQgPVxuICAgICAgY29udHJvbC5wYXJlbnQ/LmdldCgnZGF0YVR5cGUnKT8udmFsdWU7XG5cbiAgICBpZiAoXG4gICAgICBkYXRhVHlwZUNvbnRyb2xWYWx1ZT8uaWQgPT09IFRhc2tMaXN0U2VhcmNoRmllbGREYXRhVHlwZS5URVhUICYmXG4gICAgICAoIWNvbnRyb2xWYWx1ZSB8fCAhY29udHJvbFZhbHVlLnNlbGVjdGVkKVxuICAgIClcbiAgICAgIHJldHVybiB7ZXJyb3I6ICdNYXRjaCB0eXBlIG5vdCBzZWxlY3RlZCd9O1xuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGRyb3Bkb3duRGF0YVByb3ZpZGVyVmFsaWRhdG9yKGdyb3VwOiB0eXBlb2YgdGhpcy5mb3JtKTogVmFsaWRhdGlvbkVycm9ycyB7XG4gICAgY29uc3QgY29udHJvbFZhbHVlOiBMaXN0SXRlbSB8IHVuZGVmaW5lZCA9IGdyb3VwLmdldCgnZHJvcGRvd25EYXRhUHJvdmlkZXInKT8udmFsdWU7XG4gICAgY29uc3QgZmllbGRUeXBlQ29udHJvbFZhbHVlOiBMaXN0SXRlbSB8IG51bGwgfCB1bmRlZmluZWQgPSBncm91cC5nZXQoJ2ZpZWxkVHlwZScpPy52YWx1ZTtcblxuICAgIGlmIChcbiAgICAgIFtcbiAgICAgICAgVGFza0xpc3RTZWFyY2hGaWVsZEZpZWxkVHlwZS5TSU5HTEVfU0VMRUNUX0RST1BET1dOLFxuICAgICAgICBUYXNrTGlzdFNlYXJjaEZpZWxkRmllbGRUeXBlLk1VTFRJX1NFTEVDVF9EUk9QRE9XTixcbiAgICAgIF0uaW5jbHVkZXMoZmllbGRUeXBlQ29udHJvbFZhbHVlPy5pZCkgJiZcbiAgICAgICFjb250cm9sVmFsdWVcbiAgICApXG4gICAgICByZXR1cm4ge2Vycm9yOiAnRHJvcGRvd24gc291cmNlIHByb3ZpZGVyIGlzIG5vdCBzcGVjaWZpZWQnfTtcblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBkcm9wZG93blZhbHVlc1ZhbGlkYXRvcihncm91cDogdHlwZW9mIHRoaXMuZm9ybSk6IFZhbGlkYXRpb25FcnJvcnMge1xuICAgIGNvbnN0IGNvbnRyb2xWYWx1ZToge2tleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nfVtdIHwgdW5kZWZpbmVkID1cbiAgICAgIGdyb3VwLmdldCgnZHJvcGRvd25WYWx1ZXMnKT8udmFsdWU7XG4gICAgY29uc3QgZmllbGRUeXBlQ29udHJvbFZhbHVlID0gZ3JvdXAuZ2V0KCdmaWVsZFR5cGUnKT8udmFsdWU/LmlkO1xuICAgIGNvbnN0IGRyb3Bkb3duUHJvdmlkZXJWYWx1ZSA9IGdyb3VwLmdldCgnZHJvcGRvd25EYXRhUHJvdmlkZXInKT8udmFsdWU/LmlkO1xuXG4gICAgaWYgKFxuICAgICAgW1xuICAgICAgICBUYXNrTGlzdFNlYXJjaEZpZWxkRmllbGRUeXBlLlNJTkdMRV9TRUxFQ1RfRFJPUERPV04sXG4gICAgICAgIFRhc2tMaXN0U2VhcmNoRmllbGRGaWVsZFR5cGUuTVVMVElfU0VMRUNUX0RST1BET1dOLFxuICAgICAgXS5pbmNsdWRlcyhmaWVsZFR5cGVDb250cm9sVmFsdWUpICYmXG4gICAgICAoIWNvbnRyb2xWYWx1ZSB8fCBjb250cm9sVmFsdWU/Lmxlbmd0aCA9PT0gMCkgJiZcbiAgICAgIGRyb3Bkb3duUHJvdmlkZXJWYWx1ZSA9PT0gVGFza0xpc3RTZWFyY2hEcm9wZG93bkRhdGFQcm92aWRlci5EQVRBQkFTRVxuICAgIClcbiAgICAgIHJldHVybiB7ZXJyb3I6ICdEcm9wZG93biBzb3VyY2UgcHJvdmlkZXIgaXMgbm90IHNwZWNpZmllZCBvciBpcyBlbXB0eSd9O1xuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0Rm9ybSgpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHdoaWxlICghIXRoaXMuZHJvcGRvd25WYWx1ZXNBcnJheT8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZHJvcGRvd25WYWx1ZXNBcnJheS5yZW1vdmVBdCgwKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xuICAgICAgdGhpcy5mb3JtLmVuYWJsZSgpO1xuICAgIH0sIENBUkJPTl9DT05TVEFOVFMubW9kYWxBbmltYXRpb25Ncyk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cbjxjZHMtbW9kYWwgW29wZW5dPVwib3BlblwiIHNob3dGb290ZXI9XCJ0cnVlXCI+XG4gIDxjZHMtbW9kYWwtaGVhZGVyIFtzaG93Q2xvc2VCdXR0b25dPVwidHJ1ZVwiIChjbG9zZVNlbGVjdCk9XCJvbkNhbmNlbCgpXCI+XG4gICAgPGgzIGNkc01vZGFsSGVhZGVySGVhZGluZz5cbiAgICAgIHt7ICghcHJlZmlsbERhdGEgPyAnc2VhcmNoRmllbGRzT3ZlcnZpZXcuYWRkJyA6ICdzZWFyY2hGaWVsZHNPdmVydmlldy5lZGl0JykgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2gzPlxuICA8L2Nkcy1tb2RhbC1oZWFkZXI+XG5cbiAgPHNlY3Rpb24gY2RzTW9kYWxDb250ZW50PlxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwidmFsdGltby10YXNrLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcy1tb2RhbF9fY29udGVudFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInZhbHRpbW8tdGFzay1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHMtbW9kYWxfX2lucHV0XCI+XG4gICAgICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy50aXRsZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidzZWFyY2hGaWVsZHNPdmVydmlld1Rvb2x0aXBzLnRpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID5cbiAgICAgICAgPC92LWlucHV0LWxhYmVsPlxuXG4gICAgICAgIDxpbnB1dCBjZHNUZXh0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ2YWx0aW1vLXRhc2stbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzLW1vZGFsX19pbnB1dFwiPlxuICAgICAgICA8di1pbnB1dC1sYWJlbFxuICAgICAgICAgIFt0aXRsZV09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcua2V5JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3VG9vbHRpcHMua2V5JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID5cbiAgICAgICAgPC92LWlucHV0LWxhYmVsPlxuXG4gICAgICAgIDxpbnB1dCBjZHNUZXh0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwia2V5XCIgLz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidmFsdGltby10YXNrLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcy1tb2RhbF9faW5wdXRcIj5cbiAgICAgICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgICAgICBbdGl0bGVdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnBhdGgnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbdG9vbHRpcF09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXdUb29sdGlwcy5wYXRoJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID5cbiAgICAgICAgPC92LWlucHV0LWxhYmVsPlxuXG4gICAgICAgIDxpbnB1dCBjZHNUZXh0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwicGF0aFwiIC8+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInZhbHRpbW8tdGFzay1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHMtbW9kYWxfX2lucHV0XCI+XG4gICAgICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5kYXRhVHlwZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidzZWFyY2hGaWVsZHNPdmVydmlld1Rvb2x0aXBzLmRhdGFUeXBlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID5cbiAgICAgICAgPC92LWlucHV0LWxhYmVsPlxuXG4gICAgICAgIDxjZHMtZHJvcGRvd24gZm9ybUNvbnRyb2xOYW1lPVwiZGF0YVR5cGVcIj5cbiAgICAgICAgICA8Y2RzLWRyb3Bkb3duLWxpc3QgW2l0ZW1zXT1cImRhdGFUeXBlSXRlbXMkIHwgYXN5bmNcIj48L2Nkcy1kcm9wZG93bi1saXN0PlxuICAgICAgICA8L2Nkcy1kcm9wZG93bj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICBAaWYgKGRhdGFUeXBlVmFsdWUgPT09IFRhc2tMaXN0U2VhcmNoRmllbGREYXRhVHlwZS5URVhUKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2YWx0aW1vLXRhc2stbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzLW1vZGFsX19pbnB1dFwiPlxuICAgICAgICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3Lm1hdGNoVHlwZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3VG9vbHRpcHMubWF0Y2hUeXBlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvdi1pbnB1dC1sYWJlbD5cblxuICAgICAgICAgIDxjZHMtZHJvcGRvd24gZm9ybUNvbnRyb2xOYW1lPVwibWF0Y2hUeXBlXCI+XG4gICAgICAgICAgICA8Y2RzLWRyb3Bkb3duLWxpc3QgW2l0ZW1zXT1cIm1hdGNoVHlwZUl0ZW1zJCB8IGFzeW5jXCI+PC9jZHMtZHJvcGRvd24tbGlzdD5cbiAgICAgICAgICA8L2Nkcy1kcm9wZG93bj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ2YWx0aW1vLXRhc2stbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzLW1vZGFsX19pbnB1dFwiPlxuICAgICAgICA8di1pbnB1dC1sYWJlbFxuICAgICAgICAgIFt0aXRsZV09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcuZmllbGRUeXBlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3VG9vbHRpcHMuZmllbGRUeXBlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID5cbiAgICAgICAgPC92LWlucHV0LWxhYmVsPlxuXG4gICAgICAgIDxjZHMtZHJvcGRvd24gZm9ybUNvbnRyb2xOYW1lPVwiZmllbGRUeXBlXCI+XG4gICAgICAgICAgPGNkcy1kcm9wZG93bi1saXN0IFtpdGVtc109XCJmaWVsZFR5cGVJdGVtcyQgfCBhc3luY1wiPjwvY2RzLWRyb3Bkb3duLWxpc3Q+XG4gICAgICAgIDwvY2RzLWRyb3Bkb3duPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIEBpZiAoXG4gICAgICAgIGRhdGFUeXBlVmFsdWUgPT09IFRhc2tMaXN0U2VhcmNoRmllbGREYXRhVHlwZS5URVhUICYmXG4gICAgICAgIChmaWVsZFR5cGVWYWx1ZSA9PT0gVGFza0xpc3RTZWFyY2hGaWVsZEZpZWxkVHlwZS5TSU5HTEVfU0VMRUNUX0RST1BET1dOIHx8XG4gICAgICAgICAgZmllbGRUeXBlVmFsdWUgPT09IFRhc2tMaXN0U2VhcmNoRmllbGRGaWVsZFR5cGUuTVVMVElfU0VMRUNUX0RST1BET1dOKVxuICAgICAgKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2YWx0aW1vLXRhc2stbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzLW1vZGFsX19pbnB1dFwiPlxuICAgICAgICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmRyb3Bkb3duRGF0YVByb3ZpZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbdG9vbHRpcF09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXdUb29sdGlwcy5kcm9wZG93bkRhdGFQcm92aWRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L3YtaW5wdXQtbGFiZWw+XG5cbiAgICAgICAgICA8Y2RzLWRyb3Bkb3duIGZvcm1Db250cm9sTmFtZT1cImRyb3Bkb3duRGF0YVByb3ZpZGVyXCI+XG4gICAgICAgICAgICA8Y2RzLWRyb3Bkb3duLWxpc3QgW2l0ZW1zXT1cImRhdGFQcm92aWRlckl0ZW1zJCB8IGFzeW5jXCI+PC9jZHMtZHJvcGRvd24tbGlzdD5cbiAgICAgICAgICA8L2Nkcy1kcm9wZG93bj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgQGlmIChkcm9wZG93bkRhdGFQcm92aWRlclZhbHVlID09PSBUYXNrTGlzdFNlYXJjaERyb3Bkb3duRGF0YVByb3ZpZGVyLkRBVEFCQVNFKSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJ2YWx0aW1vLXRhc2stbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzLW1vZGFsX19saXN0XCJcbiAgICAgICAgICAgIGZvcm1BcnJheU5hbWU9XCJkcm9wZG93blZhbHVlc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5kcm9wZG93bkxpc3RWYWx1ZXMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3VG9vbHRpcHMuZHJvcGRvd25MaXN0VmFsdWVzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFtub01hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvdi1pbnB1dC1sYWJlbD5cblxuICAgICAgICAgICAgQGZvciAoZHJvcGRvd25WYWx1ZSBvZiBkcm9wZG93blZhbHVlc0FycmF5Py5jb250cm9sczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgIDxmb3JtXG4gICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJkcm9wZG93blZhbHVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInZhbHRpbW8tdGFzay1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHMtbW9kYWxfX2Ryb3Bkb3duLXZhbHVlc1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Y2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICB7eyAnaW50ZXJmYWNlLmtleScgfCB0cmFuc2xhdGUgfX1cblxuICAgICAgICAgICAgICAgICAgPGlucHV0IGNkc1RleHQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJrZXlcIiAvPlxuICAgICAgICAgICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG5cbiAgICAgICAgICAgICAgICA8Y2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICB7eyAnaW50ZXJmYWNlLnZhbHVlJyB8IHRyYW5zbGF0ZSB9fVxuXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgY2RzVGV4dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cInZhbHVlXCIgLz5cbiAgICAgICAgICAgICAgICA8L2Nkcy10ZXh0LWxhYmVsPlxuXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2RzQnV0dG9uPVwiZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIkY291bnQgPT09IDFcIlxuICAgICAgICAgICAgICAgICAgW2ljb25Pbmx5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZURyb3Bkb3duVmFsdWUoJGluZGV4KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cInRyYXNoLWNhblwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDxidXR0b24gY2RzQnV0dG9uPVwicHJpbWFyeVwiIChjbGljayk9XCJhZGREcm9wZG93blZhbHVlKClcIj5cbiAgICAgICAgICAgICAge3sgJ2ludGVyZmFjZS5hZGRSb3cnIHwgdHJhbnNsYXRlIH19XG5cbiAgICAgICAgICAgICAgPHN2ZyBjZHNJY29uPVwiYWRkXCIgc2l6ZT1cIjE2XCIgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiPjwvc3ZnPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2UgaWYgKGRyb3Bkb3duRGF0YVByb3ZpZGVyVmFsdWUgPT09IFRhc2tMaXN0U2VhcmNoRHJvcGRvd25EYXRhUHJvdmlkZXIuSlNPTikge1xuICAgICAgICAgIDx2YWx0aW1vLWNhcmJvbi1saXN0XG4gICAgICAgICAgICBbaGVhZGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtoaWRlVG9vbGJhcl09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtmaWVsZHNdPVwiRFJPUERPV05fRklFTERTXCJcbiAgICAgICAgICAgIFtpdGVtc109XCJkcm9wZG93blJlYWRvbmx5SXRlbXMkIHwgYXN5bmNcIlxuICAgICAgICAgID48L3ZhbHRpbW8tY2FyYm9uLWxpc3Q+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA8L2Zvcm0+XG4gIDwvc2VjdGlvbj5cblxuICA8Y2RzLW1vZGFsLWZvb3Rlcj5cbiAgICA8YnV0dG9uIGNkc0J1dHRvbj1cImdob3N0XCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5cbiAgICAgIHt7ICdpbnRlcmZhY2UuY2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiBjZHNCdXR0b249XCJwcmltYXJ5XCIgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZFwiIChjbGljayk9XCJvblNhdmUoKVwiPlxuICAgICAge3sgJ2ludGVyZmFjZS5zYXZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Nkcy1tb2RhbC1mb290ZXI+XG48L2Nkcy1tb2RhbD5cbiJdfQ==
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
*/
|
|
16
16
|
var TaskManagementTab;
|
|
17
17
|
(function (TaskManagementTab) {
|
|
18
|
-
TaskManagementTab[
|
|
18
|
+
TaskManagementTab["COLUMNS"] = "columns";
|
|
19
|
+
TaskManagementTab["SEARCH_FIELDS"] = "searchFields";
|
|
19
20
|
})(TaskManagementTab || (TaskManagementTab = {}));
|
|
20
21
|
export { TaskManagementTab };
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1tYW5hZ2VtZW50Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby90YXNrLW1hbmFnZW1lbnQvc3JjL2xpYi9tb2RlbHMvdGFzay1tYW5hZ2VtZW50Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsSUFBSyxpQkFHSjtBQUhELFdBQUssaUJBQWlCO0lBQ3BCLHdDQUFtQixDQUFBO0lBQ25CLG1EQUE4QixDQUFBO0FBQ2hDLENBQUMsRUFISSxpQkFBaUIsS0FBakIsaUJBQWlCLFFBR3JCO0FBRUQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5lbnVtIFRhc2tNYW5hZ2VtZW50VGFiIHtcbiAgQ09MVU1OUyA9ICdjb2x1bW5zJyxcbiAgU0VBUkNIX0ZJRUxEUyA9ICdzZWFyY2hGaWVsZHMnLFxufVxuXG5leHBvcnQge1Rhc2tNYW5hZ2VtZW50VGFifTtcbiJdfQ==
|
|
@@ -15,4 +15,5 @@
|
|
|
15
15
|
*/
|
|
16
16
|
export * from './task-management.service';
|
|
17
17
|
export * from './task-management-api.service';
|
|
18
|
-
|
|
18
|
+
export * from './task-management-search-fields.service';
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL3Rhc2stbWFuYWdlbWVudC9zcmMvbGliL3NlcnZpY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMseUNBQXlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3Rhc2stbWFuYWdlbWVudC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdGFzay1tYW5hZ2VtZW50LWFwaS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdGFzay1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHMuc2VydmljZSc7XG4iXX0=
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { BaseApiService } from '@valtimo/config';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common/http";
|
|
5
|
+
import * as i2 from "@valtimo/config";
|
|
6
|
+
export class TaskManagementSearchFieldsService extends BaseApiService {
|
|
7
|
+
constructor(httpClient, configService) {
|
|
8
|
+
super(httpClient, configService);
|
|
9
|
+
this.httpClient = httpClient;
|
|
10
|
+
this.configService = configService;
|
|
11
|
+
}
|
|
12
|
+
setDocumentDefinitionName(documentDefinitionName) {
|
|
13
|
+
this._documentDefinitionName = documentDefinitionName;
|
|
14
|
+
}
|
|
15
|
+
getTaskListSearchFields() {
|
|
16
|
+
return this.httpClient.get(this.getApiUrl(`/v1/search/field/TaskListSearchColumns/${this._documentDefinitionName}`));
|
|
17
|
+
}
|
|
18
|
+
createTaskListSearchField(searchField) {
|
|
19
|
+
return this.httpClient.post(this.getApiUrl(`/v1/search/field/${this._documentDefinitionName}`), {
|
|
20
|
+
...searchField,
|
|
21
|
+
ownerType: 'TaskListSearchColumns',
|
|
22
|
+
ownerId: this._documentDefinitionName,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
updateTaskListSearchField(searchField) {
|
|
26
|
+
return this.httpClient.put(this.getApiUrl(`/v1/search/field/${this._documentDefinitionName}/${searchField.key}`), {
|
|
27
|
+
...searchField,
|
|
28
|
+
ownerType: 'TaskListSearchColumns',
|
|
29
|
+
ownerId: this._documentDefinitionName,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
deleteTaskListSearchField(searchFieldKey) {
|
|
33
|
+
return this.httpClient.delete(this.getApiUrl(`/v1/search/field/TaskListSearchColumns/${this._documentDefinitionName}/${searchFieldKey}`));
|
|
34
|
+
}
|
|
35
|
+
orderTaskListSearchFields(searchFields) {
|
|
36
|
+
return this.httpClient.put(this.getApiUrl(`/v1/search/field/${this._documentDefinitionName}/fields`), searchFields);
|
|
37
|
+
}
|
|
38
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: TaskManagementSearchFieldsService, deps: [{ token: i1.HttpClient }, { token: i2.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
39
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: TaskManagementSearchFieldsService, providedIn: 'root' }); }
|
|
40
|
+
}
|
|
41
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: TaskManagementSearchFieldsService, decorators: [{
|
|
42
|
+
type: Injectable,
|
|
43
|
+
args: [{
|
|
44
|
+
providedIn: 'root',
|
|
45
|
+
}]
|
|
46
|
+
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.ConfigService }] });
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vdGFzay1tYW5hZ2VtZW50L3NyYy9saWIvc2VydmljZXMvdGFzay1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsY0FBYyxFQUFnQixNQUFNLGlCQUFpQixDQUFDOzs7O0FBTzlELE1BQU0sT0FBTyxpQ0FBa0MsU0FBUSxjQUFjO0lBR25FLFlBQ3FCLFVBQXNCLEVBQ3RCLGFBQTRCO1FBRS9DLEtBQUssQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFIZCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBR2pELENBQUM7SUFFTSx5QkFBeUIsQ0FBQyxzQkFBOEI7UUFDN0QsSUFBSSxDQUFDLHVCQUF1QixHQUFHLHNCQUFzQixDQUFDO0lBQ3hELENBQUM7SUFFTSx1QkFBdUI7UUFDNUIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQywwQ0FBMEMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FDekYsQ0FBQztJQUNKLENBQUM7SUFFTSx5QkFBeUIsQ0FDOUIsV0FBZ0M7UUFFaEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsRUFDbEU7WUFDRSxHQUFHLFdBQVc7WUFDZCxTQUFTLEVBQUUsdUJBQXVCO1lBQ2xDLE9BQU8sRUFBRSxJQUFJLENBQUMsdUJBQXVCO1NBQ3RDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTSx5QkFBeUIsQ0FDOUIsV0FBZ0M7UUFFaEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLHVCQUF1QixJQUFJLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUNyRjtZQUNFLEdBQUcsV0FBVztZQUNkLFNBQVMsRUFBRSx1QkFBdUI7WUFDbEMsT0FBTyxFQUFFLElBQUksQ0FBQyx1QkFBdUI7U0FDdEMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVNLHlCQUF5QixDQUFDLGNBQXNCO1FBQ3JELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQzNCLElBQUksQ0FBQyxTQUFTLENBQ1osMENBQTBDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxjQUFjLEVBQUUsQ0FDM0YsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVNLHlCQUF5QixDQUFDLFlBQW1DO1FBQ2xFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLElBQUksQ0FBQyx1QkFBdUIsU0FBUyxDQUFDLEVBQ3pFLFlBQVksQ0FDYixDQUFDO0lBQ0osQ0FBQzs4R0EzRFUsaUNBQWlDO2tIQUFqQyxpQ0FBaUMsY0FGaEMsTUFBTTs7MkZBRVAsaUNBQWlDO2tCQUg3QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmFzZUFwaVNlcnZpY2UsIENvbmZpZ1NlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge1Rhc2tMaXN0U2VhcmNoRmllbGR9IGZyb20gJ0B2YWx0aW1vL3Rhc2snO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFRhc2tNYW5hZ2VtZW50U2VhcmNoRmllbGRzU2VydmljZSBleHRlbmRzIEJhc2VBcGlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByZWFkb25seSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgIHByb3RlY3RlZCByZWFkb25seSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGh0dHBDbGllbnQsIGNvbmZpZ1NlcnZpY2UpO1xuICB9XG5cbiAgcHVibGljIHNldERvY3VtZW50RGVmaW5pdGlvbk5hbWUoZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9IGRvY3VtZW50RGVmaW5pdGlvbk5hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0VGFza0xpc3RTZWFyY2hGaWVsZHMoKTogT2JzZXJ2YWJsZTxUYXNrTGlzdFNlYXJjaEZpZWxkW10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxUYXNrTGlzdFNlYXJjaEZpZWxkW10+KFxuICAgICAgdGhpcy5nZXRBcGlVcmwoYC92MS9zZWFyY2gvZmllbGQvVGFza0xpc3RTZWFyY2hDb2x1bW5zLyR7dGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZX1gKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlVGFza0xpc3RTZWFyY2hGaWVsZChcbiAgICBzZWFyY2hGaWVsZDogVGFza0xpc3RTZWFyY2hGaWVsZFxuICApOiBPYnNlcnZhYmxlPFRhc2tMaXN0U2VhcmNoRmllbGQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8VGFza0xpc3RTZWFyY2hGaWVsZD4oXG4gICAgICB0aGlzLmdldEFwaVVybChgL3YxL3NlYXJjaC9maWVsZC8ke3RoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9YCksXG4gICAgICB7XG4gICAgICAgIC4uLnNlYXJjaEZpZWxkLFxuICAgICAgICBvd25lclR5cGU6ICdUYXNrTGlzdFNlYXJjaENvbHVtbnMnLFxuICAgICAgICBvd25lcklkOiB0aGlzLl9kb2N1bWVudERlZmluaXRpb25OYW1lLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlVGFza0xpc3RTZWFyY2hGaWVsZChcbiAgICBzZWFyY2hGaWVsZDogVGFza0xpc3RTZWFyY2hGaWVsZFxuICApOiBPYnNlcnZhYmxlPFRhc2tMaXN0U2VhcmNoRmllbGQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnB1dDxUYXNrTGlzdFNlYXJjaEZpZWxkPihcbiAgICAgIHRoaXMuZ2V0QXBpVXJsKGAvdjEvc2VhcmNoL2ZpZWxkLyR7dGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZX0vJHtzZWFyY2hGaWVsZC5rZXl9YCksXG4gICAgICB7XG4gICAgICAgIC4uLnNlYXJjaEZpZWxkLFxuICAgICAgICBvd25lclR5cGU6ICdUYXNrTGlzdFNlYXJjaENvbHVtbnMnLFxuICAgICAgICBvd25lcklkOiB0aGlzLl9kb2N1bWVudERlZmluaXRpb25OYW1lLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlVGFza0xpc3RTZWFyY2hGaWVsZChzZWFyY2hGaWVsZEtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5kZWxldGU8dm9pZD4oXG4gICAgICB0aGlzLmdldEFwaVVybChcbiAgICAgICAgYC92MS9zZWFyY2gvZmllbGQvVGFza0xpc3RTZWFyY2hDb2x1bW5zLyR7dGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZX0vJHtzZWFyY2hGaWVsZEtleX1gXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvcmRlclRhc2tMaXN0U2VhcmNoRmllbGRzKHNlYXJjaEZpZWxkczogVGFza0xpc3RTZWFyY2hGaWVsZFtdKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucHV0PGFueVtdPihcbiAgICAgIHRoaXMuZ2V0QXBpVXJsKGAvdjEvc2VhcmNoL2ZpZWxkLyR7dGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZX0vZmllbGRzYCksXG4gICAgICBzZWFyY2hGaWVsZHNcbiAgICApO1xuICB9XG59XG4iXX0=
|