@valtimo/task 12.19.0 → 13.0.1-next-minor.81
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/fesm2022/valtimo-task.mjs +257 -180
- package/fesm2022/valtimo-task.mjs.map +1 -1
- package/lib/components/assign-user-to-task/assign-user-to-task.component.d.ts +3 -2
- package/lib/components/assign-user-to-task/assign-user-to-task.component.d.ts.map +1 -1
- package/lib/components/task-detail-content/task-detail-content.component.d.ts +3 -4
- package/lib/components/task-detail-content/task-detail-content.component.d.ts.map +1 -1
- package/lib/components/task-detail-intermediate-save/task-detail-intermediate-save.component.d.ts +5 -6
- package/lib/components/task-detail-intermediate-save/task-detail-intermediate-save.component.d.ts.map +1 -1
- package/lib/components/task-detail-modal/task-detail-modal.component.d.ts +21 -5
- package/lib/components/task-detail-modal/task-detail-modal.component.d.ts.map +1 -1
- package/lib/components/task-list/task-list.component.d.ts +8 -4
- package/lib/components/task-list/task-list.component.d.ts.map +1 -1
- package/lib/models/index.d.ts +1 -0
- package/lib/models/index.d.ts.map +1 -1
- package/lib/models/task-list.model.d.ts +2 -2
- package/lib/models/task-list.model.d.ts.map +1 -1
- package/lib/models/task-sse-event.model.d.ts +8 -0
- package/lib/models/task-sse-event.model.d.ts.map +1 -0
- package/lib/models/task.model.d.ts +1 -1
- package/lib/services/task-intermediate-save.service.d.ts +1 -1
- package/lib/services/task-intermediate-save.service.d.ts.map +1 -1
- package/lib/services/task-list-pagination.service.d.ts +1 -1
- package/lib/services/task-list-search.service.d.ts +1 -1
- package/lib/services/task-list-sort.service.d.ts +1 -1
- package/lib/services/task-list.service.d.ts +4 -7
- package/lib/services/task-list.service.d.ts.map +1 -1
- package/lib/services/task.service.d.ts +4 -4
- package/lib/services/task.service.d.ts.map +1 -1
- package/lib/task-permissions.d.ts +1 -1
- package/lib/task-permissions.d.ts.map +1 -1
- package/lib/task.module.d.ts +9 -10
- package/lib/task.module.d.ts.map +1 -1
- package/package.json +4 -7
- package/esm2022/lib/components/assign-user-to-task/assign-user-to-task.component.mjs +0 -210
- package/esm2022/lib/components/set-task-due-date/set-task-due-date.component.mjs +0 -128
- package/esm2022/lib/components/task-detail-content/task-detail-content.component.mjs +0 -398
- package/esm2022/lib/components/task-detail-intermediate-save/task-detail-intermediate-save.component.mjs +0 -168
- package/esm2022/lib/components/task-detail-modal/task-detail-modal.component.mjs +0 -151
- package/esm2022/lib/components/task-list/task-list.component.mjs +0 -361
- package/esm2022/lib/constants/index.mjs +0 -17
- package/esm2022/lib/constants/task-list.constants.mjs +0 -22
- package/esm2022/lib/models/index.mjs +0 -21
- package/esm2022/lib/models/task-definition.model.mjs +0 -17
- package/esm2022/lib/models/task-intermediate-save.model.mjs +0 -17
- package/esm2022/lib/models/task-list-search-field.model.mjs +0 -43
- package/esm2022/lib/models/task-list.model.mjs +0 -22
- package/esm2022/lib/models/task.model.mjs +0 -17
- package/esm2022/lib/services/index.mjs +0 -23
- package/esm2022/lib/services/task-intermediate-save.service.mjs +0 -73
- package/esm2022/lib/services/task-list-column.service.mjs +0 -193
- package/esm2022/lib/services/task-list-pagination.service.mjs +0 -74
- package/esm2022/lib/services/task-list-query-param.service.mjs +0 -53
- package/esm2022/lib/services/task-list-search.service.mjs +0 -99
- package/esm2022/lib/services/task-list-sort.service.mjs +0 -116
- package/esm2022/lib/services/task-list.service.mjs +0 -60
- package/esm2022/lib/services/task.service.mjs +0 -104
- package/esm2022/lib/task-permissions.mjs +0 -44
- package/esm2022/lib/task-routing.module.mjs +0 -45
- package/esm2022/lib/task.module.mjs +0 -158
- package/esm2022/public_api.mjs +0 -31
- package/esm2022/valtimo-task.mjs +0 -5
|
@@ -1,168 +0,0 @@
|
|
|
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, signal, } from '@angular/core';
|
|
18
|
-
import { RecentlyViewed16 } from '@carbon/icons';
|
|
19
|
-
import { TranslateModule } from '@ngx-translate/core';
|
|
20
|
-
import { ConfirmationModalModule, TooltipModule } from '@valtimo/components';
|
|
21
|
-
import { ButtonModule, IconModule, ModalModule } from 'carbon-components-angular';
|
|
22
|
-
import moment from 'moment';
|
|
23
|
-
import { BehaviorSubject, combineLatest, switchMap, take } from 'rxjs';
|
|
24
|
-
import * as i0 from "@angular/core";
|
|
25
|
-
import * as i1 from "@valtimo/config";
|
|
26
|
-
import * as i2 from "carbon-components-angular";
|
|
27
|
-
import * as i3 from "@ngx-translate/core";
|
|
28
|
-
import * as i4 from "../../services";
|
|
29
|
-
import * as i5 from "ngx-toastr";
|
|
30
|
-
import * as i6 from "@angular/common";
|
|
31
|
-
import * as i7 from "@valtimo/components";
|
|
32
|
-
export class TaskDetailIntermediateSaveComponent {
|
|
33
|
-
set task(value) {
|
|
34
|
-
if (!value)
|
|
35
|
-
return;
|
|
36
|
-
this.taskService
|
|
37
|
-
.getTaskProcessLink(value.id)
|
|
38
|
-
.pipe(take(1))
|
|
39
|
-
.subscribe(res => {
|
|
40
|
-
this.setFormFlow(res);
|
|
41
|
-
});
|
|
42
|
-
this.taskValue.set(value);
|
|
43
|
-
this.page.set({
|
|
44
|
-
title: value.name,
|
|
45
|
-
subtitle: `${this.translateService.instant('taskDetail.taskCreated')} ${value.created}`,
|
|
46
|
-
});
|
|
47
|
-
this.getCurrentProgress(value);
|
|
48
|
-
}
|
|
49
|
-
set taskAndProcessLink(value) {
|
|
50
|
-
if (!value)
|
|
51
|
-
return;
|
|
52
|
-
this.setFormFlow(value.processLinkActivityResult);
|
|
53
|
-
this.taskValue.set(value.task);
|
|
54
|
-
this.page.set({
|
|
55
|
-
title: value?.task.name,
|
|
56
|
-
subtitle: `${this.translateService.instant('taskDetail.taskCreated')} ${value?.task.created}`,
|
|
57
|
-
});
|
|
58
|
-
this.getCurrentProgress(value.task);
|
|
59
|
-
}
|
|
60
|
-
constructor(configService, iconService, translateService, taskIntermediateSaveService, taskService, toastr) {
|
|
61
|
-
this.configService = configService;
|
|
62
|
-
this.iconService = iconService;
|
|
63
|
-
this.translateService = translateService;
|
|
64
|
-
this.taskIntermediateSaveService = taskIntermediateSaveService;
|
|
65
|
-
this.taskService = taskService;
|
|
66
|
-
this.toastr = toastr;
|
|
67
|
-
this.currentIntermediateSaveEvent = new EventEmitter();
|
|
68
|
-
this.showModalEvent = new EventEmitter();
|
|
69
|
-
this.formFlowInstanceId$ = new BehaviorSubject(undefined);
|
|
70
|
-
this.showConfirmationModal$ = new BehaviorSubject(false);
|
|
71
|
-
this.taskValue = signal(null);
|
|
72
|
-
this.page = signal(null);
|
|
73
|
-
this.canAssignUserToTask = signal(false);
|
|
74
|
-
this.submission$ = this.taskIntermediateSaveService.submission$;
|
|
75
|
-
this.formIoFormData$ = this.taskIntermediateSaveService.formIoFormData$;
|
|
76
|
-
this.intermediateSaveEnabled = false;
|
|
77
|
-
this.currentIntermediateSave = null;
|
|
78
|
-
this.intermediateSaveEnabled = !!this.configService.featureToggles?.enableIntermediateSave;
|
|
79
|
-
this.iconService.registerAll([RecentlyViewed16]);
|
|
80
|
-
}
|
|
81
|
-
saveCurrentProgress() {
|
|
82
|
-
combineLatest([this.submission$, this.formIoFormData$])
|
|
83
|
-
.pipe(switchMap(([submission, formIoFormData]) => {
|
|
84
|
-
const intermediateSaveRequest = {
|
|
85
|
-
submission: submission?.data ? submission.data : formIoFormData,
|
|
86
|
-
taskInstanceId: this.taskValue()?.id ?? '',
|
|
87
|
-
};
|
|
88
|
-
return this.taskIntermediateSaveService.storeIntermediateSubmission(intermediateSaveRequest);
|
|
89
|
-
}), take(1))
|
|
90
|
-
.subscribe({
|
|
91
|
-
next: intermediateSubmission => {
|
|
92
|
-
this.toastr.success(this.translateService.instant('formManagement.intermediateSave.success'));
|
|
93
|
-
this.currentIntermediateSave = this.formatIntermediateSubmission(intermediateSubmission);
|
|
94
|
-
this.currentIntermediateSaveEvent.emit(this.currentIntermediateSave);
|
|
95
|
-
},
|
|
96
|
-
error: () => {
|
|
97
|
-
this.toastr.error(this.translateService.instant('formManagement.intermediateSave.error'));
|
|
98
|
-
},
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
revertSaveClick() {
|
|
102
|
-
if (this.showModalEvent.observed) {
|
|
103
|
-
this.showModalEvent.emit();
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
this.showConfirmationModal$.next(true);
|
|
107
|
-
}
|
|
108
|
-
clearCurrentProgress() {
|
|
109
|
-
this.taskIntermediateSaveService
|
|
110
|
-
.clearIntermediateSubmission(this.taskValue()?.id ?? '')
|
|
111
|
-
.pipe(take(1))
|
|
112
|
-
.subscribe(() => {
|
|
113
|
-
this.taskIntermediateSaveService.setSubmission({});
|
|
114
|
-
this.currentIntermediateSave = null;
|
|
115
|
-
this.currentIntermediateSaveEvent.emit(this.currentIntermediateSave);
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
setFormFlow(processLink) {
|
|
119
|
-
if (processLink !== null && processLink.type === 'form-flow') {
|
|
120
|
-
this.formFlowInstanceId$.next(processLink.properties.formFlowInstanceId);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
formatIntermediateSubmission(intermediateSubmission) {
|
|
124
|
-
intermediateSubmission.createdOn = moment(intermediateSubmission.createdOn).format('DD MMM YYYY HH:mm');
|
|
125
|
-
if (intermediateSubmission.editedOn) {
|
|
126
|
-
intermediateSubmission.editedOn = moment(new Date(intermediateSubmission.editedOn)).format('DD MMM YYYY HH:mm');
|
|
127
|
-
}
|
|
128
|
-
return intermediateSubmission;
|
|
129
|
-
}
|
|
130
|
-
getCurrentProgress(task) {
|
|
131
|
-
this.taskIntermediateSaveService
|
|
132
|
-
.getIntermediateSubmission(task.id ?? '')
|
|
133
|
-
.pipe(take(1))
|
|
134
|
-
.subscribe(intermediateSave => {
|
|
135
|
-
if (intermediateSave !== null) {
|
|
136
|
-
this.currentIntermediateSave = this.formatIntermediateSubmission(intermediateSave);
|
|
137
|
-
}
|
|
138
|
-
else {
|
|
139
|
-
this.currentIntermediateSave = null;
|
|
140
|
-
this.taskIntermediateSaveService.setSubmission({});
|
|
141
|
-
}
|
|
142
|
-
this.currentIntermediateSaveEvent.emit(this.currentIntermediateSave);
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskDetailIntermediateSaveComponent, deps: [{ token: i1.ConfigService }, { token: i2.IconService }, { token: i3.TranslateService }, { token: i4.TaskIntermediateSaveService }, { token: i4.TaskService }, { token: i5.ToastrService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
146
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TaskDetailIntermediateSaveComponent, isStandalone: true, selector: "valtimo-task-detail-intermediate-save", inputs: { task: "task", taskAndProcessLink: "taskAndProcessLink" }, outputs: { currentIntermediateSaveEvent: "currentIntermediateSaveEvent", showModalEvent: "showModalEvent" }, 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@if (intermediateSaveEnabled && (formFlowInstanceId$ | async) === undefined) {\n <button\n cdsButton=\"ghost\"\n iconOnly=\"true\"\n cdsIcon=\"save\"\n [vTooltip]=\"'formManagement.intermediateSave.save' | translate\"\n (click)=\"saveCurrentProgress()\"\n ></button>\n\n <button\n cdsButton=\"ghost\"\n iconOnly=\"true\"\n cdsIcon=\"recently-viewed\"\n [disabled]=\"!currentIntermediateSave\"\n [vTooltip]=\"'formManagement.intermediateSave.clear' | translate\"\n (click)=\"revertSaveClick()\"\n ></button>\n}\n\n<valtimo-confirmation-modal\n [showModalSubject$]=\"showConfirmationModal$\"\n (confirmEvent)=\"clearCurrentProgress()\"\n (cancelEvent)=\"showConfirmationModal$.next(false)\"\n cancelButtonType=\"ghost\"\n confirmButtonTextTranslationKey=\"interface.confirm\"\n titleTranslationKey=\"formManagement.intermediateSave.clear\"\n contentTranslationKey=\"formManagement.intermediateSave.clearConfirm\"\n></valtimo-confirmation-modal>\n", styles: [":host{flex-shrink: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: "ngmodule", type: CommonModule }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.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: ConfirmationModalModule }, { kind: "component", type: i7.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: "ngmodule", type: IconModule }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: ModalModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i7.TooltipDirective, selector: "[vTooltip]", inputs: ["vTooltip", "onBottom", "tooltipDisabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
147
|
-
}
|
|
148
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskDetailIntermediateSaveComponent, decorators: [{
|
|
149
|
-
type: Component,
|
|
150
|
-
args: [{ selector: 'valtimo-task-detail-intermediate-save', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
151
|
-
CommonModule,
|
|
152
|
-
TranslateModule,
|
|
153
|
-
ButtonModule,
|
|
154
|
-
ConfirmationModalModule,
|
|
155
|
-
IconModule,
|
|
156
|
-
ModalModule,
|
|
157
|
-
TooltipModule,
|
|
158
|
-
], 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@if (intermediateSaveEnabled && (formFlowInstanceId$ | async) === undefined) {\n <button\n cdsButton=\"ghost\"\n iconOnly=\"true\"\n cdsIcon=\"save\"\n [vTooltip]=\"'formManagement.intermediateSave.save' | translate\"\n (click)=\"saveCurrentProgress()\"\n ></button>\n\n <button\n cdsButton=\"ghost\"\n iconOnly=\"true\"\n cdsIcon=\"recently-viewed\"\n [disabled]=\"!currentIntermediateSave\"\n [vTooltip]=\"'formManagement.intermediateSave.clear' | translate\"\n (click)=\"revertSaveClick()\"\n ></button>\n}\n\n<valtimo-confirmation-modal\n [showModalSubject$]=\"showConfirmationModal$\"\n (confirmEvent)=\"clearCurrentProgress()\"\n (cancelEvent)=\"showConfirmationModal$.next(false)\"\n cancelButtonType=\"ghost\"\n confirmButtonTextTranslationKey=\"interface.confirm\"\n titleTranslationKey=\"formManagement.intermediateSave.clear\"\n contentTranslationKey=\"formManagement.intermediateSave.clearConfirm\"\n></valtimo-confirmation-modal>\n", styles: [":host{flex-shrink: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"] }]
|
|
159
|
-
}], ctorParameters: () => [{ type: i1.ConfigService }, { type: i2.IconService }, { type: i3.TranslateService }, { type: i4.TaskIntermediateSaveService }, { type: i4.TaskService }, { type: i5.ToastrService }], propDecorators: { task: [{
|
|
160
|
-
type: Input
|
|
161
|
-
}], taskAndProcessLink: [{
|
|
162
|
-
type: Input
|
|
163
|
-
}], currentIntermediateSaveEvent: [{
|
|
164
|
-
type: Output
|
|
165
|
-
}], showModalEvent: [{
|
|
166
|
-
type: Output
|
|
167
|
-
}] } });
|
|
168
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1kZXRhaWwtaW50ZXJtZWRpYXRlLXNhdmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby90YXNrL3NyYy9saWIvY29tcG9uZW50cy90YXNrLWRldGFpbC1pbnRlcm1lZGlhdGUtc2F2ZS90YXNrLWRldGFpbC1pbnRlcm1lZGlhdGUtc2F2ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL3Rhc2svc3JjL2xpYi9jb21wb25lbnRzL3Rhc2stZGV0YWlsLWludGVybWVkaWF0ZS1zYXZlL3Rhc2stZGV0YWlsLWludGVybWVkaWF0ZS1zYXZlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFDLGVBQWUsRUFBbUIsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsYUFBYSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFM0UsT0FBTyxFQUFDLFlBQVksRUFBRSxVQUFVLEVBQWUsV0FBVyxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDN0YsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7OztBQXFCckUsTUFBTSxPQUFPLG1DQUFtQztJQUM5QyxJQUFv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QkFnQmMsa0JBQWtCO3NCQUFyQyxLQUFLO2dCQVdvQiw0QkFBNEI7c0JBQXJELE1BQU07Z0JBRW1CLGNBQWM7c0JBQXZDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JlY2VudGx5Vmlld2VkMTZ9IGZyb20gJ0BjYXJib24vaWNvbnMnO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDb25maXJtYXRpb25Nb2RhbE1vZHVsZSwgVG9vbHRpcE1vZHVsZX0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge0NvbmZpZ1NlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge0J1dHRvbk1vZHVsZSwgSWNvbk1vZHVsZSwgSWNvblNlcnZpY2UsIE1vZGFsTW9kdWxlfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7VG9hc3RyU2VydmljZX0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgc3dpdGNoTWFwLCB0YWtlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7SW50ZXJtZWRpYXRlU2F2ZVJlcXVlc3QsIEludGVybWVkaWF0ZVN1Ym1pc3Npb24sIFRhc2t9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge1Rhc2tJbnRlcm1lZGlhdGVTYXZlU2VydmljZSwgVGFza1NlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7VGFza1Byb2Nlc3NMaW5rUmVzdWx0LCBUYXNrV2l0aFByb2Nlc3NMaW5rfSBmcm9tICdAdmFsdGltby9wcm9jZXNzLWxpbmsnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLXRhc2stZGV0YWlsLWludGVybWVkaWF0ZS1zYXZlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rhc2stZGV0YWlsLWludGVybWVkaWF0ZS1zYXZlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFzay1kZXRhaWwtaW50ZXJtZWRpYXRlLXNhdmUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBDb25maXJtYXRpb25Nb2RhbE1vZHVsZSxcbiAgICBJY29uTW9kdWxlLFxuICAgIE1vZGFsTW9kdWxlLFxuICAgIFRvb2x0aXBNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFRhc2tEZXRhaWxJbnRlcm1lZGlhdGVTYXZlQ29tcG9uZW50IHtcbiAgQElucHV0KCkgcHVibGljIHNldCB0YXNrKHZhbHVlOiBUYXNrIHwgbnVsbCkge1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICB0aGlzLnRhc2tTZXJ2aWNlXG4gICAgICAuZ2V0VGFza1Byb2Nlc3NMaW5rKHZhbHVlLmlkKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgdGhpcy5zZXRGb3JtRmxvdyhyZXMpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnRhc2tWYWx1ZS5zZXQodmFsdWUpO1xuICAgIHRoaXMucGFnZS5zZXQoe1xuICAgICAgdGl0bGU6IHZhbHVlLm5hbWUsXG4gICAgICBzdWJ0aXRsZTogYCR7dGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3Rhc2tEZXRhaWwudGFza0NyZWF0ZWQnKX0gJHt2YWx1ZS5jcmVhdGVkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5nZXRDdXJyZW50UHJvZ3Jlc3ModmFsdWUpO1xuICB9XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgdGFza0FuZFByb2Nlc3NMaW5rKHZhbHVlOiBUYXNrV2l0aFByb2Nlc3NMaW5rIHwgbnVsbCkge1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgIHRoaXMuc2V0Rm9ybUZsb3codmFsdWUucHJvY2Vzc0xpbmtBY3Rpdml0eVJlc3VsdCk7XG4gICAgdGhpcy50YXNrVmFsdWUuc2V0KHZhbHVlLnRhc2sgYXMgYW55KTtcbiAgICB0aGlzLnBhZ2Uuc2V0KHtcbiAgICAgIHRpdGxlOiB2YWx1ZT8udGFzay5uYW1lLFxuICAgICAgc3VidGl0bGU6IGAke3RoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd0YXNrRGV0YWlsLnRhc2tDcmVhdGVkJyl9ICR7dmFsdWU/LnRhc2suY3JlYXRlZH1gLFxuICAgIH0pO1xuICAgIHRoaXMuZ2V0Q3VycmVudFByb2dyZXNzKHZhbHVlLnRhc2sgYXMgYW55KTtcbiAgfVxuICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IGN1cnJlbnRJbnRlcm1lZGlhdGVTYXZlRXZlbnQgPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8SW50ZXJtZWRpYXRlU3VibWlzc2lvbiB8IG51bGw+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgc2hvd01vZGFsRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGZvcm1GbG93SW5zdGFuY2VJZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHVibGljIHJlYWRvbmx5IHNob3dDb25maXJtYXRpb25Nb2RhbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgdGFza1ZhbHVlID0gc2lnbmFsPFRhc2sgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IHBhZ2UgPSBzaWduYWw8e3RpdGxlOiBzdHJpbmc7IHN1YnRpdGxlOiBzdHJpbmd9IHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBjYW5Bc3NpZ25Vc2VyVG9UYXNrID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IHN1Ym1pc3Npb24kID0gdGhpcy50YXNrSW50ZXJtZWRpYXRlU2F2ZVNlcnZpY2Uuc3VibWlzc2lvbiQ7XG4gIHB1YmxpYyByZWFkb25seSBmb3JtSW9Gb3JtRGF0YSQgPSB0aGlzLnRhc2tJbnRlcm1lZGlhdGVTYXZlU2VydmljZS5mb3JtSW9Gb3JtRGF0YSQ7XG5cbiAgcHVibGljIGludGVybWVkaWF0ZVNhdmVFbmFibGVkID0gZmFsc2U7XG4gIHB1YmxpYyBjdXJyZW50SW50ZXJtZWRpYXRlU2F2ZTogSW50ZXJtZWRpYXRlU3VibWlzc2lvbiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGljb25TZXJ2aWNlOiBJY29uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXNrSW50ZXJtZWRpYXRlU2F2ZVNlcnZpY2U6IFRhc2tJbnRlcm1lZGlhdGVTYXZlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhc2tTZXJ2aWNlOiBUYXNrU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRvYXN0cjogVG9hc3RyU2VydmljZVxuICApIHtcbiAgICB0aGlzLmludGVybWVkaWF0ZVNhdmVFbmFibGVkID0gISF0aGlzLmNvbmZpZ1NlcnZpY2UuZmVhdHVyZVRvZ2dsZXM/LmVuYWJsZUludGVybWVkaWF0ZVNhdmU7XG4gICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlckFsbChbUmVjZW50bHlWaWV3ZWQxNl0pO1xuICB9XG5cbiAgcHVibGljIHNhdmVDdXJyZW50UHJvZ3Jlc3MoKTogdm9pZCB7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5zdWJtaXNzaW9uJCwgdGhpcy5mb3JtSW9Gb3JtRGF0YSRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoW3N1Ym1pc3Npb24sIGZvcm1Jb0Zvcm1EYXRhXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGludGVybWVkaWF0ZVNhdmVSZXF1ZXN0OiBJbnRlcm1lZGlhdGVTYXZlUmVxdWVzdCA9IHtcbiAgICAgICAgICAgIHN1Ym1pc3Npb246IHN1Ym1pc3Npb24/LmRhdGEgPyBzdWJtaXNzaW9uLmRhdGEgOiBmb3JtSW9Gb3JtRGF0YSxcbiAgICAgICAgICAgIHRhc2tJbnN0YW5jZUlkOiB0aGlzLnRhc2tWYWx1ZSgpPy5pZCA/PyAnJyxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgcmV0dXJuIHRoaXMudGFza0ludGVybWVkaWF0ZVNhdmVTZXJ2aWNlLnN0b3JlSW50ZXJtZWRpYXRlU3VibWlzc2lvbihcbiAgICAgICAgICAgIGludGVybWVkaWF0ZVNhdmVSZXF1ZXN0XG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2UoMSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBpbnRlcm1lZGlhdGVTdWJtaXNzaW9uID0+IHtcbiAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKFxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2Zvcm1NYW5hZ2VtZW50LmludGVybWVkaWF0ZVNhdmUuc3VjY2VzcycpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRJbnRlcm1lZGlhdGVTYXZlID0gdGhpcy5mb3JtYXRJbnRlcm1lZGlhdGVTdWJtaXNzaW9uKGludGVybWVkaWF0ZVN1Ym1pc3Npb24pO1xuICAgICAgICAgIHRoaXMuY3VycmVudEludGVybWVkaWF0ZVNhdmVFdmVudC5lbWl0KHRoaXMuY3VycmVudEludGVybWVkaWF0ZVNhdmUpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdmb3JtTWFuYWdlbWVudC5pbnRlcm1lZGlhdGVTYXZlLmVycm9yJykpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmV2ZXJ0U2F2ZUNsaWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNob3dNb2RhbEV2ZW50Lm9ic2VydmVkKSB7XG4gICAgICB0aGlzLnNob3dNb2RhbEV2ZW50LmVtaXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dDb25maXJtYXRpb25Nb2RhbCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhckN1cnJlbnRQcm9ncmVzcygpOiB2b2lkIHtcbiAgICB0aGlzLnRhc2tJbnRlcm1lZGlhdGVTYXZlU2VydmljZVxuICAgICAgLmNsZWFySW50ZXJtZWRpYXRlU3VibWlzc2lvbih0aGlzLnRhc2tWYWx1ZSgpPy5pZCA/PyAnJylcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy50YXNrSW50ZXJtZWRpYXRlU2F2ZVNlcnZpY2Uuc2V0U3VibWlzc2lvbih7fSk7XG4gICAgICAgIHRoaXMuY3VycmVudEludGVybWVkaWF0ZVNhdmUgPSBudWxsO1xuICAgICAgICB0aGlzLmN1cnJlbnRJbnRlcm1lZGlhdGVTYXZlRXZlbnQuZW1pdCh0aGlzLmN1cnJlbnRJbnRlcm1lZGlhdGVTYXZlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb3JtRmxvdyhwcm9jZXNzTGluazogVGFza1Byb2Nlc3NMaW5rUmVzdWx0KTogdm9pZCB7XG4gICAgaWYgKHByb2Nlc3NMaW5rICE9PSBudWxsICYmIHByb2Nlc3NMaW5rLnR5cGUgPT09ICdmb3JtLWZsb3cnKSB7XG4gICAgICB0aGlzLmZvcm1GbG93SW5zdGFuY2VJZCQubmV4dChwcm9jZXNzTGluay5wcm9wZXJ0aWVzLmZvcm1GbG93SW5zdGFuY2VJZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRJbnRlcm1lZGlhdGVTdWJtaXNzaW9uKFxuICAgIGludGVybWVkaWF0ZVN1Ym1pc3Npb246IEludGVybWVkaWF0ZVN1Ym1pc3Npb25cbiAgKTogSW50ZXJtZWRpYXRlU3VibWlzc2lvbiB7XG4gICAgaW50ZXJtZWRpYXRlU3VibWlzc2lvbi5jcmVhdGVkT24gPSBtb21lbnQoaW50ZXJtZWRpYXRlU3VibWlzc2lvbi5jcmVhdGVkT24pLmZvcm1hdChcbiAgICAgICdERCBNTU0gWVlZWSBISDptbSdcbiAgICApO1xuICAgIGlmIChpbnRlcm1lZGlhdGVTdWJtaXNzaW9uLmVkaXRlZE9uKSB7XG4gICAgICBpbnRlcm1lZGlhdGVTdWJtaXNzaW9uLmVkaXRlZE9uID0gbW9tZW50KG5ldyBEYXRlKGludGVybWVkaWF0ZVN1Ym1pc3Npb24uZWRpdGVkT24pKS5mb3JtYXQoXG4gICAgICAgICdERCBNTU0gWVlZWSBISDptbSdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGludGVybWVkaWF0ZVN1Ym1pc3Npb247XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRQcm9ncmVzcyh0YXNrOiBUYXNrKTogdm9pZCB7XG4gICAgdGhpcy50YXNrSW50ZXJtZWRpYXRlU2F2ZVNlcnZpY2VcbiAgICAgIC5nZXRJbnRlcm1lZGlhdGVTdWJtaXNzaW9uKHRhc2suaWQgPz8gJycpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZShpbnRlcm1lZGlhdGVTYXZlID0+IHtcbiAgICAgICAgaWYgKGludGVybWVkaWF0ZVNhdmUgIT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRJbnRlcm1lZGlhdGVTYXZlID0gdGhpcy5mb3JtYXRJbnRlcm1lZGlhdGVTdWJtaXNzaW9uKGludGVybWVkaWF0ZVNhdmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY3VycmVudEludGVybWVkaWF0ZVNhdmUgPSBudWxsO1xuICAgICAgICAgIHRoaXMudGFza0ludGVybWVkaWF0ZVNhdmVTZXJ2aWNlLnNldFN1Ym1pc3Npb24oe30pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jdXJyZW50SW50ZXJtZWRpYXRlU2F2ZUV2ZW50LmVtaXQodGhpcy5jdXJyZW50SW50ZXJtZWRpYXRlU2F2ZSk7XG4gICAgICB9KTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG5AaWYgKGludGVybWVkaWF0ZVNhdmVFbmFibGVkICYmIChmb3JtRmxvd0luc3RhbmNlSWQkIHwgYXN5bmMpID09PSB1bmRlZmluZWQpIHtcbiAgPGJ1dHRvblxuICAgIGNkc0J1dHRvbj1cImdob3N0XCJcbiAgICBpY29uT25seT1cInRydWVcIlxuICAgIGNkc0ljb249XCJzYXZlXCJcbiAgICBbdlRvb2x0aXBdPVwiJ2Zvcm1NYW5hZ2VtZW50LmludGVybWVkaWF0ZVNhdmUuc2F2ZScgfCB0cmFuc2xhdGVcIlxuICAgIChjbGljayk9XCJzYXZlQ3VycmVudFByb2dyZXNzKClcIlxuICA+PC9idXR0b24+XG5cbiAgPGJ1dHRvblxuICAgIGNkc0J1dHRvbj1cImdob3N0XCJcbiAgICBpY29uT25seT1cInRydWVcIlxuICAgIGNkc0ljb249XCJyZWNlbnRseS12aWV3ZWRcIlxuICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEludGVybWVkaWF0ZVNhdmVcIlxuICAgIFt2VG9vbHRpcF09XCInZm9ybU1hbmFnZW1lbnQuaW50ZXJtZWRpYXRlU2F2ZS5jbGVhcicgfCB0cmFuc2xhdGVcIlxuICAgIChjbGljayk9XCJyZXZlcnRTYXZlQ2xpY2soKVwiXG4gID48L2J1dHRvbj5cbn1cblxuPHZhbHRpbW8tY29uZmlybWF0aW9uLW1vZGFsXG4gIFtzaG93TW9kYWxTdWJqZWN0JF09XCJzaG93Q29uZmlybWF0aW9uTW9kYWwkXCJcbiAgKGNvbmZpcm1FdmVudCk9XCJjbGVhckN1cnJlbnRQcm9ncmVzcygpXCJcbiAgKGNhbmNlbEV2ZW50KT1cInNob3dDb25maXJtYXRpb25Nb2RhbCQubmV4dChmYWxzZSlcIlxuICBjYW5jZWxCdXR0b25UeXBlPVwiZ2hvc3RcIlxuICBjb25maXJtQnV0dG9uVGV4dFRyYW5zbGF0aW9uS2V5PVwiaW50ZXJmYWNlLmNvbmZpcm1cIlxuICB0aXRsZVRyYW5zbGF0aW9uS2V5PVwiZm9ybU1hbmFnZW1lbnQuaW50ZXJtZWRpYXRlU2F2ZS5jbGVhclwiXG4gIGNvbnRlbnRUcmFuc2xhdGlvbktleT1cImZvcm1NYW5hZ2VtZW50LmludGVybWVkaWF0ZVNhdmUuY2xlYXJDb25maXJtXCJcbj48L3ZhbHRpbW8tY29uZmlybWF0aW9uLW1vZGFsPlxuIl19
|
|
@@ -1,151 +0,0 @@
|
|
|
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 { Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation, } from '@angular/core';
|
|
17
|
-
import { formSizeToCarbonModalSizeMap } from '@valtimo/process-link';
|
|
18
|
-
import moment from 'moment';
|
|
19
|
-
import { BehaviorSubject, Subscription } from 'rxjs';
|
|
20
|
-
import { CAN_ASSIGN_TASK_PERMISSION, CAN_MODIFY_TASK_PERMISSION, TASK_DETAIL_PERMISSION_RESOURCE, } from '../../task-permissions';
|
|
21
|
-
import { TaskDetailIntermediateSaveComponent } from '../task-detail-intermediate-save/task-detail-intermediate-save.component';
|
|
22
|
-
import * as i0 from "@angular/core";
|
|
23
|
-
import * as i1 from "@angular/router";
|
|
24
|
-
import * as i2 from "@ngx-translate/core";
|
|
25
|
-
import * as i3 from "@valtimo/access-control";
|
|
26
|
-
import * as i4 from "ngx-logger";
|
|
27
|
-
import * as i5 from "../../services";
|
|
28
|
-
import * as i6 from "@angular/common";
|
|
29
|
-
import * as i7 from "carbon-components-angular";
|
|
30
|
-
import * as i8 from "@valtimo/components";
|
|
31
|
-
import * as i9 from "../assign-user-to-task/assign-user-to-task.component";
|
|
32
|
-
import * as i10 from "../task-detail-content/task-detail-content.component";
|
|
33
|
-
import * as i11 from "../task-detail-intermediate-save/task-detail-intermediate-save.component";
|
|
34
|
-
import * as i12 from "../set-task-due-date/set-task-due-date.component";
|
|
35
|
-
moment.locale(localStorage.getItem('langKey') || '');
|
|
36
|
-
export class TaskDetailModalComponent {
|
|
37
|
-
set modalSize(value) {
|
|
38
|
-
if (value)
|
|
39
|
-
this.size$.next(formSizeToCarbonModalSizeMap[value]);
|
|
40
|
-
}
|
|
41
|
-
constructor(router, translateService, permissionService, logger, taskIntermediateSaveService) {
|
|
42
|
-
this.router = router;
|
|
43
|
-
this.translateService = translateService;
|
|
44
|
-
this.permissionService = permissionService;
|
|
45
|
-
this.logger = logger;
|
|
46
|
-
this.taskIntermediateSaveService = taskIntermediateSaveService;
|
|
47
|
-
this.formSubmit = new EventEmitter();
|
|
48
|
-
this.assignmentOfTaskChanged = new EventEmitter();
|
|
49
|
-
this.currentIntermediateSave$ = new BehaviorSubject(null);
|
|
50
|
-
this.processLinkPreloaded$ = new BehaviorSubject(false);
|
|
51
|
-
this.task$ = new BehaviorSubject(null);
|
|
52
|
-
this.taskAndProcessLink$ = new BehaviorSubject(null);
|
|
53
|
-
this.task = new BehaviorSubject(null);
|
|
54
|
-
this.submission$ = new BehaviorSubject({});
|
|
55
|
-
this.page$ = new BehaviorSubject(null);
|
|
56
|
-
this.showConfirmationModal$ = new BehaviorSubject(false);
|
|
57
|
-
this.size$ = new BehaviorSubject('md');
|
|
58
|
-
this.canAssignUserToTask$ = new BehaviorSubject(false);
|
|
59
|
-
this.canModifyTask$ = new BehaviorSubject(false);
|
|
60
|
-
this.modalCloseEvent$ = new BehaviorSubject(false);
|
|
61
|
-
this._subscriptions = new Subscription();
|
|
62
|
-
}
|
|
63
|
-
ngOnInit() {
|
|
64
|
-
this._subscriptions.add(this.task$.subscribe(task => {
|
|
65
|
-
if (task) {
|
|
66
|
-
this.logger.debug('Checking if user allowed to assign a user to Task with id:', task.id);
|
|
67
|
-
this.permissionService
|
|
68
|
-
.requestPermission(CAN_ASSIGN_TASK_PERMISSION, {
|
|
69
|
-
resource: TASK_DETAIL_PERMISSION_RESOURCE.task,
|
|
70
|
-
identifier: task.id,
|
|
71
|
-
})
|
|
72
|
-
.subscribe((allowed) => {
|
|
73
|
-
this.canAssignUserToTask$.next(allowed);
|
|
74
|
-
});
|
|
75
|
-
this.permissionService
|
|
76
|
-
.requestPermission(CAN_MODIFY_TASK_PERMISSION, {
|
|
77
|
-
resource: TASK_DETAIL_PERMISSION_RESOURCE.task,
|
|
78
|
-
identifier: task.id,
|
|
79
|
-
})
|
|
80
|
-
.subscribe((allowed) => {
|
|
81
|
-
this.canModifyTask$.next(allowed);
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
this.logger.debug('Reset is user allowed to assign a user to Task as task is null');
|
|
86
|
-
this.canAssignUserToTask$.next(false);
|
|
87
|
-
}
|
|
88
|
-
}));
|
|
89
|
-
}
|
|
90
|
-
clearCurrentProgress() {
|
|
91
|
-
this._intermediateSaveComponent.clearCurrentProgress();
|
|
92
|
-
}
|
|
93
|
-
openTaskDetails(task) {
|
|
94
|
-
this.task$.next({ ...task });
|
|
95
|
-
this.page$.next({
|
|
96
|
-
title: task?.name,
|
|
97
|
-
subtitle: `${this.translateService.instant('taskDetail.taskCreated')} ${task?.created}`,
|
|
98
|
-
});
|
|
99
|
-
this.openModal();
|
|
100
|
-
}
|
|
101
|
-
openTaskAndProcessLinkDetails(taskWithProcessLink) {
|
|
102
|
-
this.processLinkPreloaded$.next(true);
|
|
103
|
-
this.taskAndProcessLink$.next(taskWithProcessLink);
|
|
104
|
-
this.task$.next({ ...taskWithProcessLink.task });
|
|
105
|
-
this.page$.next({
|
|
106
|
-
title: taskWithProcessLink.task?.name,
|
|
107
|
-
subtitle: `${this.translateService.instant('taskDetail.taskCreated')} ${taskWithProcessLink.task?.created}`,
|
|
108
|
-
});
|
|
109
|
-
this.openModal();
|
|
110
|
-
}
|
|
111
|
-
gotoProcessLinkScreen() {
|
|
112
|
-
this.closeModal();
|
|
113
|
-
this.router.navigate(['process-links']);
|
|
114
|
-
}
|
|
115
|
-
onCurrentIntermediateSaveEvent(value) {
|
|
116
|
-
this.currentIntermediateSave$.next(value);
|
|
117
|
-
}
|
|
118
|
-
onFormSubmit() {
|
|
119
|
-
this.formSubmit.emit();
|
|
120
|
-
}
|
|
121
|
-
onShowModalEvent() {
|
|
122
|
-
this.showConfirmationModal$.next(true);
|
|
123
|
-
}
|
|
124
|
-
closeModal() {
|
|
125
|
-
this._modal.open = false;
|
|
126
|
-
this.taskIntermediateSaveService.setSubmission({});
|
|
127
|
-
this.modalCloseEvent$.next(!this.modalCloseEvent$.getValue());
|
|
128
|
-
}
|
|
129
|
-
openModal() {
|
|
130
|
-
this._modal.open = true;
|
|
131
|
-
}
|
|
132
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskDetailModalComponent, deps: [{ token: i1.Router }, { token: i2.TranslateService }, { token: i3.PermissionService }, { token: i4.NGXLogger }, { token: i5.TaskIntermediateSaveService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
133
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TaskDetailModalComponent, selector: "valtimo-task-detail-modal", inputs: { modalSize: "modalSize" }, outputs: { formSubmit: "formSubmit", assignmentOfTaskChanged: "assignmentOfTaskChanged" }, viewQueries: [{ propertyName: "_modal", first: true, predicate: ["taskDetailModal"], descendants: true }, { propertyName: "_intermediateSaveComponent", first: true, predicate: TaskDetailIntermediateSaveComponent, 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<cds-modal\n #taskDetailModal\n id=\"taskDetailModal\"\n [size]=\"size$ | async\"\n valtimoCdsModal\n [enableOverflow]=\"true\"\n>\n <cds-modal-header (closeSelect)=\"closeModal()\">\n <div class=\"title-container\">\n <p class=\"cds--modal-header__heading cds--type-beta\">{{ (page$ | async)?.title }}</p>\n\n <p class=\"cds--modal-header__label cds--type-delta\">{{ (page$ | async)?.subtitle }}</p>\n\n <p\n class=\"cds--modal-header__label cds--type-delta\"\n *ngIf=\"currentIntermediateSave$ | async as currentIntermediateSave\"\n >\n {{ 'formManagement.intermediateSave.lastSavedBy' | translate }}:\n\n {{\n currentIntermediateSave?.editedBy\n ? currentIntermediateSave?.editedBy\n : currentIntermediateSave.createdBy\n }}\n\n {{ 'formManagement.intermediateSave.on' | translate }}:\n\n {{\n currentIntermediateSave?.editedOn\n ? currentIntermediateSave?.editedOn\n : currentIntermediateSave.createdOn\n }}\n </p>\n\n <ng-container *ngTemplateOutlet=\"assignUserToTask\"></ng-container>\n </div>\n\n @if (processLinkPreloaded$ | async) {\n <valtimo-task-detail-intermediate-save\n class=\"save-buttons-margin\"\n [taskAndProcessLink]=\"taskAndProcessLink$ | async\"\n (currentIntermediateSaveEvent)=\"onCurrentIntermediateSaveEvent($event)\"\n (showModalEvent)=\"onShowModalEvent()\"\n ></valtimo-task-detail-intermediate-save>\n } @else {\n <valtimo-task-detail-intermediate-save\n class=\"save-buttons-margin\"\n [task]=\"task$ | async\"\n (currentIntermediateSaveEvent)=\"onCurrentIntermediateSaveEvent($event)\"\n (showModalEvent)=\"onShowModalEvent()\"\n ></valtimo-task-detail-intermediate-save>\n }\n </cds-modal-header>\n\n <div body class=\"cds--modal-content pb-1\">\n @if (processLinkPreloaded$ | async) {\n <valtimo-task-detail-content\n [taskAndProcessLink]=\"taskAndProcessLink$ | async\"\n [modalClosed]=\"modalCloseEvent$ | async\"\n (formSubmit)=\"onFormSubmit()\"\n (closeModalEvent)=\"closeModal()\"\n ></valtimo-task-detail-content>\n } @else {\n <valtimo-task-detail-content\n [task]=\"task$ | async\"\n [modalClosed]=\"modalCloseEvent$ | async\"\n (formSubmit)=\"onFormSubmit()\"\n (closeModalEvent)=\"closeModal()\"\n ></valtimo-task-detail-content>\n }\n </div>\n</cds-modal>\n\n<valtimo-confirmation-modal\n [showModalSubject$]=\"showConfirmationModal$\"\n (confirmEvent)=\"clearCurrentProgress()\"\n (cancelEvent)=\"showConfirmationModal$.next(false)\"\n cancelButtonType=\"ghost\"\n confirmButtonTextTranslationKey=\"interface.confirm\"\n titleTranslationKey=\"formManagement.intermediateSave.clear\"\n contentTranslationKey=\"formManagement.intermediateSave.clearConfirm\"\n></valtimo-confirmation-modal>\n\n<ng-template #assignUserToTask>\n <div\n *ngIf=\"{\n task: task$ | async,\n canAssignUserToTask: canAssignUserToTask$ | async,\n canModifyTask: canModifyTask$ | async,\n } as obs\"\n class=\"task-actions\"\n >\n <valtimo-assign-user-to-task\n *ngIf=\"obs.task && assignmentOfTaskChanged\"\n [taskId]=\"obs.task.id\"\n [assigneeId]=\"obs.task.assignee\"\n [canAssignUserToTask]=\"obs.canAssignUserToTask\"\n (assignmentOfTaskChanged)=\"assignmentOfTaskChanged.emit()\"\n ></valtimo-assign-user-to-task>\n\n <valtimo-set-task-due-date\n [task]=\"obs.task\"\n [canModifyTask]=\"obs.canModifyTask\"\n ></valtimo-set-task-due-date>\n </div>\n</ng-template>\n", styles: ["#taskDetailModal .formio-component-submit{text-align:right}cds-modal-header .cds--modal-header{display:flex;justify-content:space-between}.save-buttons-margin{margin-top:-15px}.task-actions{display:flex;flex-wrap:wrap;width:100%;padding-top:8px;gap:8px}\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: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i7.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i7.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i8.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: i9.AssignUserToTaskComponent, selector: "valtimo-assign-user-to-task", inputs: ["taskId", "assigneeId", "canAssignUserToTask"], outputs: ["assignmentOfTaskChanged"] }, { kind: "component", type: i10.TaskDetailContentComponent, selector: "valtimo-task-detail-content", inputs: ["task", "taskAndProcessLink", "modalClosed"], outputs: ["closeModalEvent", "formSubmit", "activeChange"] }, { kind: "component", type: i11.TaskDetailIntermediateSaveComponent, selector: "valtimo-task-detail-intermediate-save", inputs: ["task", "taskAndProcessLink"], outputs: ["currentIntermediateSaveEvent", "showModalEvent"] }, { kind: "component", type: i12.SetTaskDueDateComponent, selector: "valtimo-set-task-due-date", inputs: ["canModifyTask", "task"] }, { kind: "directive", type: i8.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["enableOverflow"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
134
|
-
}
|
|
135
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskDetailModalComponent, decorators: [{
|
|
136
|
-
type: Component,
|
|
137
|
-
args: [{ selector: 'valtimo-task-detail-modal', encapsulation: ViewEncapsulation.None, 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 #taskDetailModal\n id=\"taskDetailModal\"\n [size]=\"size$ | async\"\n valtimoCdsModal\n [enableOverflow]=\"true\"\n>\n <cds-modal-header (closeSelect)=\"closeModal()\">\n <div class=\"title-container\">\n <p class=\"cds--modal-header__heading cds--type-beta\">{{ (page$ | async)?.title }}</p>\n\n <p class=\"cds--modal-header__label cds--type-delta\">{{ (page$ | async)?.subtitle }}</p>\n\n <p\n class=\"cds--modal-header__label cds--type-delta\"\n *ngIf=\"currentIntermediateSave$ | async as currentIntermediateSave\"\n >\n {{ 'formManagement.intermediateSave.lastSavedBy' | translate }}:\n\n {{\n currentIntermediateSave?.editedBy\n ? currentIntermediateSave?.editedBy\n : currentIntermediateSave.createdBy\n }}\n\n {{ 'formManagement.intermediateSave.on' | translate }}:\n\n {{\n currentIntermediateSave?.editedOn\n ? currentIntermediateSave?.editedOn\n : currentIntermediateSave.createdOn\n }}\n </p>\n\n <ng-container *ngTemplateOutlet=\"assignUserToTask\"></ng-container>\n </div>\n\n @if (processLinkPreloaded$ | async) {\n <valtimo-task-detail-intermediate-save\n class=\"save-buttons-margin\"\n [taskAndProcessLink]=\"taskAndProcessLink$ | async\"\n (currentIntermediateSaveEvent)=\"onCurrentIntermediateSaveEvent($event)\"\n (showModalEvent)=\"onShowModalEvent()\"\n ></valtimo-task-detail-intermediate-save>\n } @else {\n <valtimo-task-detail-intermediate-save\n class=\"save-buttons-margin\"\n [task]=\"task$ | async\"\n (currentIntermediateSaveEvent)=\"onCurrentIntermediateSaveEvent($event)\"\n (showModalEvent)=\"onShowModalEvent()\"\n ></valtimo-task-detail-intermediate-save>\n }\n </cds-modal-header>\n\n <div body class=\"cds--modal-content pb-1\">\n @if (processLinkPreloaded$ | async) {\n <valtimo-task-detail-content\n [taskAndProcessLink]=\"taskAndProcessLink$ | async\"\n [modalClosed]=\"modalCloseEvent$ | async\"\n (formSubmit)=\"onFormSubmit()\"\n (closeModalEvent)=\"closeModal()\"\n ></valtimo-task-detail-content>\n } @else {\n <valtimo-task-detail-content\n [task]=\"task$ | async\"\n [modalClosed]=\"modalCloseEvent$ | async\"\n (formSubmit)=\"onFormSubmit()\"\n (closeModalEvent)=\"closeModal()\"\n ></valtimo-task-detail-content>\n }\n </div>\n</cds-modal>\n\n<valtimo-confirmation-modal\n [showModalSubject$]=\"showConfirmationModal$\"\n (confirmEvent)=\"clearCurrentProgress()\"\n (cancelEvent)=\"showConfirmationModal$.next(false)\"\n cancelButtonType=\"ghost\"\n confirmButtonTextTranslationKey=\"interface.confirm\"\n titleTranslationKey=\"formManagement.intermediateSave.clear\"\n contentTranslationKey=\"formManagement.intermediateSave.clearConfirm\"\n></valtimo-confirmation-modal>\n\n<ng-template #assignUserToTask>\n <div\n *ngIf=\"{\n task: task$ | async,\n canAssignUserToTask: canAssignUserToTask$ | async,\n canModifyTask: canModifyTask$ | async,\n } as obs\"\n class=\"task-actions\"\n >\n <valtimo-assign-user-to-task\n *ngIf=\"obs.task && assignmentOfTaskChanged\"\n [taskId]=\"obs.task.id\"\n [assigneeId]=\"obs.task.assignee\"\n [canAssignUserToTask]=\"obs.canAssignUserToTask\"\n (assignmentOfTaskChanged)=\"assignmentOfTaskChanged.emit()\"\n ></valtimo-assign-user-to-task>\n\n <valtimo-set-task-due-date\n [task]=\"obs.task\"\n [canModifyTask]=\"obs.canModifyTask\"\n ></valtimo-set-task-due-date>\n </div>\n</ng-template>\n", styles: ["#taskDetailModal .formio-component-submit{text-align:right}cds-modal-header .cds--modal-header{display:flex;justify-content:space-between}.save-buttons-margin{margin-top:-15px}.task-actions{display:flex;flex-wrap:wrap;width:100%;padding-top:8px;gap:8px}\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"] }]
|
|
138
|
-
}], ctorParameters: () => [{ type: i1.Router }, { type: i2.TranslateService }, { type: i3.PermissionService }, { type: i4.NGXLogger }, { type: i5.TaskIntermediateSaveService }], propDecorators: { _modal: [{
|
|
139
|
-
type: ViewChild,
|
|
140
|
-
args: ['taskDetailModal']
|
|
141
|
-
}], _intermediateSaveComponent: [{
|
|
142
|
-
type: ViewChild,
|
|
143
|
-
args: [TaskDetailIntermediateSaveComponent]
|
|
144
|
-
}], formSubmit: [{
|
|
145
|
-
type: Output
|
|
146
|
-
}], assignmentOfTaskChanged: [{
|
|
147
|
-
type: Output
|
|
148
|
-
}], modalSize: [{
|
|
149
|
-
type: Input
|
|
150
|
-
}] } });
|
|
151
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1kZXRhaWwtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby90YXNrL3NyYy9saWIvY29tcG9uZW50cy90YXNrLWRldGFpbC1tb2RhbC90YXNrLWRldGFpbC1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL3Rhc2svc3JjL2xpYi9jb21wb25lbnRzL3Rhc2stZGV0YWlsLW1vZGFsL3Rhc2stZGV0YWlsLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBVyw0QkFBNEIsRUFBc0IsTUFBTSx1QkFBdUIsQ0FBQztBQUVsRyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUIsT0FBTyxFQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFHbkQsT0FBTyxFQUNMLDBCQUEwQixFQUMxQiwwQkFBMEIsRUFDMUIsK0JBQStCLEdBQ2hDLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFDLG1DQUFtQyxFQUFDLE1BQU0sMEVBQTBFLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBRTdILE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQVFyRCxNQUFNLE9BQU8sd0JBQXdCO0lBUW5DLElBQWEsU0FBUyxDQUFDLEtBQWU7UUFDcEMsSUFBSSxLQUFLO1lBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxD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QUM7SUFDMUMsQ0FBQztJQUVNLDhCQUE4QixDQUFDLEtBQW9DO1FBQ3hFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVNLFlBQVk7UUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVNLFVBQVU7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLDJCQUEyQixDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVPLFNBQVM7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQzsrR0F6SFUsd0JBQXdCO21HQUF4Qix3QkFBd0Isd1ZBRXhCLG1DQUFtQyxnRENwRGhELDh3SUEwSEE7OzRGRHhFYSx3QkFBd0I7a0JBTnBDLFNBQVM7K0JBQ0UsMkJBQTJCLGlCQUd0QixpQkFBaUIsQ0FBQyxJQUFJOzRNQUdVLE1BQU07c0JBQXBELFNBQVM7dUJBQUMsaUJBQWlCO2dCQUVYLDBCQUEwQjtzQkFEMUMsU0FBUzt1QkFBQyxtQ0FBbUM7Z0JBR3BDLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csdUJBQXVCO3NCQUFoQyxNQUFNO2dCQUVNLFNBQVM7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1Blcm1pc3Npb25TZXJ2aWNlfSBmcm9tICdAdmFsdGltby9hY2Nlc3MtY29udHJvbCc7XG5pbXBvcnQge0NhcmJvbk1vZGFsU2l6ZX0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge0Zvcm1TaXplLCBmb3JtU2l6ZVRvQ2FyYm9uTW9kYWxTaXplTWFwLCBUYXNrV2l0aFByb2Nlc3NMaW5rfSBmcm9tICdAdmFsdGltby9wcm9jZXNzLWxpbmsnO1xuaW1wb3J0IHtNb2RhbH0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge05HWExvZ2dlcn0gZnJvbSAnbmd4LWxvZ2dlcic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7SW50ZXJtZWRpYXRlU3VibWlzc2lvbiwgVGFza30gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7VGFza0ludGVybWVkaWF0ZVNhdmVTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge1xuICBDQU5fQVNTSUdOX1RBU0tfUEVSTUlTU0lPTixcbiAgQ0FOX01PRElGWV9UQVNLX1BFUk1JU1NJT04sXG4gIFRBU0tfREVUQUlMX1BFUk1JU1NJT05fUkVTT1VSQ0UsXG59IGZyb20gJy4uLy4uL3Rhc2stcGVybWlzc2lvbnMnO1xuaW1wb3J0IHtUYXNrRGV0YWlsSW50ZXJtZWRpYXRlU2F2ZUNvbXBvbmVudH0gZnJvbSAnLi4vdGFzay1kZXRhaWwtaW50ZXJtZWRpYXRlLXNhdmUvdGFzay1kZXRhaWwtaW50ZXJtZWRpYXRlLXNhdmUuY29tcG9uZW50JztcblxubW9tZW50LmxvY2FsZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZ0tleScpIHx8ICcnKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby10YXNrLWRldGFpbC1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90YXNrLWRldGFpbC1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Rhc2stZGV0YWlsLW1vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIFRhc2tEZXRhaWxNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ3Rhc2tEZXRhaWxNb2RhbCcpIHByaXZhdGUgcmVhZG9ubHkgX21vZGFsOiBNb2RhbDtcbiAgQFZpZXdDaGlsZChUYXNrRGV0YWlsSW50ZXJtZWRpYXRlU2F2ZUNvbXBvbmVudClcbiAgcHJpdmF0ZSByZWFkb25seSBfaW50ZXJtZWRpYXRlU2F2ZUNvbXBvbmVudDogVGFza0RldGFpbEludGVybWVkaWF0ZVNhdmVDb21wb25lbnQ7XG5cbiAgQE91dHB1dCgpIGZvcm1TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBhc3NpZ25tZW50T2ZUYXNrQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASW5wdXQoKSBzZXQgbW9kYWxTaXplKHZhbHVlOiBGb3JtU2l6ZSkge1xuICAgIGlmICh2YWx1ZSkgdGhpcy5zaXplJC5uZXh0KGZvcm1TaXplVG9DYXJib25Nb2RhbFNpemVNYXBbdmFsdWVdKTtcbiAgfVxuXG4gIHB1YmxpYyBjdXJyZW50SW50ZXJtZWRpYXRlU2F2ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEludGVybWVkaWF0ZVN1Ym1pc3Npb24gfCBudWxsPihudWxsKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgcHJvY2Vzc0xpbmtQcmVsb2FkZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSB0YXNrJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFzayB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgdGFza0FuZFByb2Nlc3NMaW5rJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFza1dpdGhQcm9jZXNzTGluayB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgdGFzayA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFzayB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgc3VibWlzc2lvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe30pO1xuICBwdWJsaWMgcmVhZG9ubHkgcGFnZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBzaG93Q29uZmlybWF0aW9uTW9kYWwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNpemUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYXJib25Nb2RhbFNpemU+KCdtZCcpO1xuXG4gIHB1YmxpYyByZWFkb25seSBjYW5Bc3NpZ25Vc2VyVG9UYXNrJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgY2FuTW9kaWZ5VGFzayQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbW9kYWxDbG9zZUV2ZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IE5HWExvZ2dlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhc2tJbnRlcm1lZGlhdGVTYXZlU2VydmljZTogVGFza0ludGVybWVkaWF0ZVNhdmVTZXJ2aWNlXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnRhc2skLnN1YnNjcmliZSh0YXNrID0+IHtcbiAgICAgICAgaWYgKHRhc2spIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQ2hlY2tpbmcgaWYgdXNlciBhbGxvd2VkIHRvIGFzc2lnbiBhIHVzZXIgdG8gVGFzayB3aXRoIGlkOicsIHRhc2suaWQpO1xuXG4gICAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZVxuICAgICAgICAgICAgLnJlcXVlc3RQZXJtaXNzaW9uKENBTl9BU1NJR05fVEFTS19QRVJNSVNTSU9OLCB7XG4gICAgICAgICAgICAgIHJlc291cmNlOiBUQVNLX0RFVEFJTF9QRVJNSVNTSU9OX1JFU09VUkNFLnRhc2ssXG4gICAgICAgICAgICAgIGlkZW50aWZpZXI6IHRhc2suaWQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoYWxsb3dlZDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNhbkFzc2lnblVzZXJUb1Rhc2skLm5leHQoYWxsb3dlZCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMucGVybWlzc2lvblNlcnZpY2VcbiAgICAgICAgICAgIC5yZXF1ZXN0UGVybWlzc2lvbihDQU5fTU9ESUZZX1RBU0tfUEVSTUlTU0lPTiwge1xuICAgICAgICAgICAgICByZXNvdXJjZTogVEFTS19ERVRBSUxfUEVSTUlTU0lPTl9SRVNPVVJDRS50YXNrLFxuICAgICAgICAgICAgICBpZGVudGlmaWVyOiB0YXNrLmlkLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGFsbG93ZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jYW5Nb2RpZnlUYXNrJC5uZXh0KGFsbG93ZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1Jlc2V0IGlzIHVzZXIgYWxsb3dlZCB0byBhc3NpZ24gYSB1c2VyIHRvIFRhc2sgYXMgdGFzayBpcyBudWxsJyk7XG4gICAgICAgICAgdGhpcy5jYW5Bc3NpZ25Vc2VyVG9UYXNrJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGNsZWFyQ3VycmVudFByb2dyZXNzKCk6IHZvaWQge1xuICAgIHRoaXMuX2ludGVybWVkaWF0ZVNhdmVDb21wb25lbnQuY2xlYXJDdXJyZW50UHJvZ3Jlc3MoKTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuVGFza0RldGFpbHModGFzazogVGFzayB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLnRhc2skLm5leHQoey4uLnRhc2t9KTtcbiAgICB0aGlzLnBhZ2UkLm5leHQoe1xuICAgICAgdGl0bGU6IHRhc2s/Lm5hbWUsXG4gICAgICBzdWJ0aXRsZTogYCR7dGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3Rhc2tEZXRhaWwudGFza0NyZWF0ZWQnKX0gJHt0YXNrPy5jcmVhdGVkfWAsXG4gICAgfSk7XG5cbiAgICB0aGlzLm9wZW5Nb2RhbCgpO1xuICB9XG5cbiAgcHVibGljIG9wZW5UYXNrQW5kUHJvY2Vzc0xpbmtEZXRhaWxzKHRhc2tXaXRoUHJvY2Vzc0xpbms6IFRhc2tXaXRoUHJvY2Vzc0xpbmsgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5wcm9jZXNzTGlua1ByZWxvYWRlZCQubmV4dCh0cnVlKTtcbiAgICB0aGlzLnRhc2tBbmRQcm9jZXNzTGluayQubmV4dCh0YXNrV2l0aFByb2Nlc3NMaW5rKTtcbiAgICB0aGlzLnRhc2skLm5leHQoey4uLih0YXNrV2l0aFByb2Nlc3NMaW5rLnRhc2sgYXMgYW55KX0pO1xuICAgIHRoaXMucGFnZSQubmV4dCh7XG4gICAgICB0aXRsZTogdGFza1dpdGhQcm9jZXNzTGluay50YXNrPy5uYW1lLFxuICAgICAgc3VidGl0bGU6IGAke3RoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd0YXNrRGV0YWlsLnRhc2tDcmVhdGVkJyl9ICR7dGFza1dpdGhQcm9jZXNzTGluay50YXNrPy5jcmVhdGVkfWAsXG4gICAgfSk7XG5cbiAgICB0aGlzLm9wZW5Nb2RhbCgpO1xuICB9XG5cbiAgcHVibGljIGdvdG9Qcm9jZXNzTGlua1NjcmVlbigpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlTW9kYWwoKTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3Byb2Nlc3MtbGlua3MnXSk7XG4gIH1cblxuICBwdWJsaWMgb25DdXJyZW50SW50ZXJtZWRpYXRlU2F2ZUV2ZW50KHZhbHVlOiBJbnRlcm1lZGlhdGVTdWJtaXNzaW9uIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudEludGVybWVkaWF0ZVNhdmUkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIG9uRm9ybVN1Ym1pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1TdWJtaXQuZW1pdCgpO1xuICB9XG5cbiAgcHVibGljIG9uU2hvd01vZGFsRXZlbnQoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93Q29uZmlybWF0aW9uTW9kYWwkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgY2xvc2VNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLl9tb2RhbC5vcGVuID0gZmFsc2U7XG4gICAgdGhpcy50YXNrSW50ZXJtZWRpYXRlU2F2ZVNlcnZpY2Uuc2V0U3VibWlzc2lvbih7fSk7XG4gICAgdGhpcy5tb2RhbENsb3NlRXZlbnQkLm5leHQoIXRoaXMubW9kYWxDbG9zZUV2ZW50JC5nZXRWYWx1ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgb3Blbk1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuX21vZGFsLm9wZW4gPSB0cnVlO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxjZHMtbW9kYWxcbiAgI3Rhc2tEZXRhaWxNb2RhbFxuICBpZD1cInRhc2tEZXRhaWxNb2RhbFwiXG4gIFtzaXplXT1cInNpemUkIHwgYXN5bmNcIlxuICB2YWx0aW1vQ2RzTW9kYWxcbiAgW2VuYWJsZU92ZXJmbG93XT1cInRydWVcIlxuPlxuICA8Y2RzLW1vZGFsLWhlYWRlciAoY2xvc2VTZWxlY3QpPVwiY2xvc2VNb2RhbCgpXCI+XG4gICAgPGRpdiBjbGFzcz1cInRpdGxlLWNvbnRhaW5lclwiPlxuICAgICAgPHAgY2xhc3M9XCJjZHMtLW1vZGFsLWhlYWRlcl9faGVhZGluZyBjZHMtLXR5cGUtYmV0YVwiPnt7IChwYWdlJCB8IGFzeW5jKT8udGl0bGUgfX08L3A+XG5cbiAgICAgIDxwIGNsYXNzPVwiY2RzLS1tb2RhbC1oZWFkZXJfX2xhYmVsIGNkcy0tdHlwZS1kZWx0YVwiPnt7IChwYWdlJCB8IGFzeW5jKT8uc3VidGl0bGUgfX08L3A+XG5cbiAgICAgIDxwXG4gICAgICAgIGNsYXNzPVwiY2RzLS1tb2RhbC1oZWFkZXJfX2xhYmVsIGNkcy0tdHlwZS1kZWx0YVwiXG4gICAgICAgICpuZ0lmPVwiY3VycmVudEludGVybWVkaWF0ZVNhdmUkIHwgYXN5bmMgYXMgY3VycmVudEludGVybWVkaWF0ZVNhdmVcIlxuICAgICAgPlxuICAgICAgICB7eyAnZm9ybU1hbmFnZW1lbnQuaW50ZXJtZWRpYXRlU2F2ZS5sYXN0U2F2ZWRCeScgfCB0cmFuc2xhdGUgfX06XG5cbiAgICAgICAge3tcbiAgICAgICAgICBjdXJyZW50SW50ZXJtZWRpYXRlU2F2ZT8uZWRpdGVkQnlcbiAgICAgICAgICAgID8gY3VycmVudEludGVybWVkaWF0ZVNhdmU/LmVkaXRlZEJ5XG4gICAgICAgICAgICA6IGN1cnJlbnRJbnRlcm1lZGlhdGVTYXZlLmNyZWF0ZWRCeVxuICAgICAgICB9fVxuXG4gICAgICAgIHt7ICdmb3JtTWFuYWdlbWVudC5pbnRlcm1lZGlhdGVTYXZlLm9uJyB8IHRyYW5zbGF0ZSB9fTpcblxuICAgICAgICB7e1xuICAgICAgICAgIGN1cnJlbnRJbnRlcm1lZGlhdGVTYXZlPy5lZGl0ZWRPblxuICAgICAgICAgICAgPyBjdXJyZW50SW50ZXJtZWRpYXRlU2F2ZT8uZWRpdGVkT25cbiAgICAgICAgICAgIDogY3VycmVudEludGVybWVkaWF0ZVNhdmUuY3JlYXRlZE9uXG4gICAgICAgIH19XG4gICAgICA8L3A+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhc3NpZ25Vc2VyVG9UYXNrXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKHByb2Nlc3NMaW5rUHJlbG9hZGVkJCB8IGFzeW5jKSB7XG4gICAgICA8dmFsdGltby10YXNrLWRldGFpbC1pbnRlcm1lZGlhdGUtc2F2ZVxuICAgICAgICBjbGFzcz1cInNhdmUtYnV0dG9ucy1tYXJnaW5cIlxuICAgICAgICBbdGFza0FuZFByb2Nlc3NMaW5rXT1cInRhc2tBbmRQcm9jZXNzTGluayQgfCBhc3luY1wiXG4gICAgICAgIChjdXJyZW50SW50ZXJtZWRpYXRlU2F2ZUV2ZW50KT1cIm9uQ3VycmVudEludGVybWVkaWF0ZVNhdmVFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgKHNob3dNb2RhbEV2ZW50KT1cIm9uU2hvd01vZGFsRXZlbnQoKVwiXG4gICAgICA+PC92YWx0aW1vLXRhc2stZGV0YWlsLWludGVybWVkaWF0ZS1zYXZlPlxuICAgIH0gQGVsc2Uge1xuICAgICAgPHZhbHRpbW8tdGFzay1kZXRhaWwtaW50ZXJtZWRpYXRlLXNhdmVcbiAgICAgICAgY2xhc3M9XCJzYXZlLWJ1dHRvbnMtbWFyZ2luXCJcbiAgICAgICAgW3Rhc2tdPVwidGFzayQgfCBhc3luY1wiXG4gICAgICAgIChjdXJyZW50SW50ZXJtZWRpYXRlU2F2ZUV2ZW50KT1cIm9uQ3VycmVudEludGVybWVkaWF0ZVNhdmVFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgKHNob3dNb2RhbEV2ZW50KT1cIm9uU2hvd01vZGFsRXZlbnQoKVwiXG4gICAgICA+PC92YWx0aW1vLXRhc2stZGV0YWlsLWludGVybWVkaWF0ZS1zYXZlPlxuICAgIH1cbiAgPC9jZHMtbW9kYWwtaGVhZGVyPlxuXG4gIDxkaXYgYm9keSBjbGFzcz1cImNkcy0tbW9kYWwtY29udGVudCBwYi0xXCI+XG4gICAgQGlmIChwcm9jZXNzTGlua1ByZWxvYWRlZCQgfCBhc3luYykge1xuICAgICAgPHZhbHRpbW8tdGFzay1kZXRhaWwtY29udGVudFxuICAgICAgICBbdGFza0FuZFByb2Nlc3NMaW5rXT1cInRhc2tBbmRQcm9jZXNzTGluayQgfCBhc3luY1wiXG4gICAgICAgIFttb2RhbENsb3NlZF09XCJtb2RhbENsb3NlRXZlbnQkIHwgYXN5bmNcIlxuICAgICAgICAoZm9ybVN1Ym1pdCk9XCJvbkZvcm1TdWJtaXQoKVwiXG4gICAgICAgIChjbG9zZU1vZGFsRXZlbnQpPVwiY2xvc2VNb2RhbCgpXCJcbiAgICAgID48L3ZhbHRpbW8tdGFzay1kZXRhaWwtY29udGVudD5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDx2YWx0aW1vLXRhc2stZGV0YWlsLWNvbnRlbnRcbiAgICAgICAgW3Rhc2tdPVwidGFzayQgfCBhc3luY1wiXG4gICAgICAgIFttb2RhbENsb3NlZF09XCJtb2RhbENsb3NlRXZlbnQkIHwgYXN5bmNcIlxuICAgICAgICAoZm9ybVN1Ym1pdCk9XCJvbkZvcm1TdWJtaXQoKVwiXG4gICAgICAgIChjbG9zZU1vZGFsRXZlbnQpPVwiY2xvc2VNb2RhbCgpXCJcbiAgICAgID48L3ZhbHRpbW8tdGFzay1kZXRhaWwtY29udGVudD5cbiAgICB9XG4gIDwvZGl2PlxuPC9jZHMtbW9kYWw+XG5cbjx2YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbFxuICBbc2hvd01vZGFsU3ViamVjdCRdPVwic2hvd0NvbmZpcm1hdGlvbk1vZGFsJFwiXG4gIChjb25maXJtRXZlbnQpPVwiY2xlYXJDdXJyZW50UHJvZ3Jlc3MoKVwiXG4gIChjYW5jZWxFdmVudCk9XCJzaG93Q29uZmlybWF0aW9uTW9kYWwkLm5leHQoZmFsc2UpXCJcbiAgY2FuY2VsQnV0dG9uVHlwZT1cImdob3N0XCJcbiAgY29uZmlybUJ1dHRvblRleHRUcmFuc2xhdGlvbktleT1cImludGVyZmFjZS5jb25maXJtXCJcbiAgdGl0bGVUcmFuc2xhdGlvbktleT1cImZvcm1NYW5hZ2VtZW50LmludGVybWVkaWF0ZVNhdmUuY2xlYXJcIlxuICBjb250ZW50VHJhbnNsYXRpb25LZXk9XCJmb3JtTWFuYWdlbWVudC5pbnRlcm1lZGlhdGVTYXZlLmNsZWFyQ29uZmlybVwiXG4+PC92YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbD5cblxuPG5nLXRlbXBsYXRlICNhc3NpZ25Vc2VyVG9UYXNrPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJ7XG4gICAgICB0YXNrOiB0YXNrJCB8IGFzeW5jLFxuICAgICAgY2FuQXNzaWduVXNlclRvVGFzazogY2FuQXNzaWduVXNlclRvVGFzayQgfCBhc3luYyxcbiAgICAgIGNhbk1vZGlmeVRhc2s6IGNhbk1vZGlmeVRhc2skIHwgYXN5bmMsXG4gICAgfSBhcyBvYnNcIlxuICAgIGNsYXNzPVwidGFzay1hY3Rpb25zXCJcbiAgPlxuICAgIDx2YWx0aW1vLWFzc2lnbi11c2VyLXRvLXRhc2tcbiAgICAgICpuZ0lmPVwib2JzLnRhc2sgJiYgYXNzaWdubWVudE9mVGFza0NoYW5nZWRcIlxuICAgICAgW3Rhc2tJZF09XCJvYnMudGFzay5pZFwiXG4gICAgICBbYXNzaWduZWVJZF09XCJvYnMudGFzay5hc3NpZ25lZVwiXG4gICAgICBbY2FuQXNzaWduVXNlclRvVGFza109XCJvYnMuY2FuQXNzaWduVXNlclRvVGFza1wiXG4gICAgICAoYXNzaWdubWVudE9mVGFza0NoYW5nZWQpPVwiYXNzaWdubWVudE9mVGFza0NoYW5nZWQuZW1pdCgpXCJcbiAgICA+PC92YWx0aW1vLWFzc2lnbi11c2VyLXRvLXRhc2s+XG5cbiAgICA8dmFsdGltby1zZXQtdGFzay1kdWUtZGF0ZVxuICAgICAgW3Rhc2tdPVwib2JzLnRhc2tcIlxuICAgICAgW2Nhbk1vZGlmeVRhc2tdPVwib2JzLmNhbk1vZGlmeVRhc2tcIlxuICAgID48L3ZhbHRpbW8tc2V0LXRhc2stZHVlLWRhdGU+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|