@valtimo/form-view-model 12.5.1 → 12.7.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/form-view-model/form-view-model.component.mjs +109 -48
- package/esm2022/lib/services/view-model.service.mjs +17 -11
- package/fesm2022/valtimo-form-view-model.mjs +124 -57
- package/fesm2022/valtimo-form-view-model.mjs.map +1 -1
- package/lib/components/form-view-model/form-view-model.component.d.ts +19 -10
- package/lib/components/form-view-model/form-view-model.component.d.ts.map +1 -1
- package/lib/services/view-model.service.d.ts +2 -2
- package/lib/services/view-model.service.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -15,11 +15,12 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
17
17
|
import moment from 'moment';
|
|
18
|
-
import { BehaviorSubject, catchError, combineLatest, debounceTime, EMPTY, filter, of,
|
|
18
|
+
import { BehaviorSubject, catchError, combineLatest, debounceTime, EMPTY, filter, of, Subject, switchMap, take, tap, withLatestFrom, } from 'rxjs';
|
|
19
19
|
import { FormioModule, } from '@formio/angular';
|
|
20
20
|
import { distinctUntilChanged, map } from 'rxjs/operators';
|
|
21
21
|
import { deepmerge } from 'deepmerge-ts';
|
|
22
22
|
import { CommonModule } from '@angular/common';
|
|
23
|
+
import { isEqual } from 'lodash';
|
|
23
24
|
import * as i0 from "@angular/core";
|
|
24
25
|
import * as i1 from "../../services";
|
|
25
26
|
import * as i2 from "@ngx-translate/core";
|
|
@@ -49,9 +50,6 @@ export class FormViewModelComponent {
|
|
|
49
50
|
set taskInstanceId(taskInstanceId) {
|
|
50
51
|
this.taskInstanceId$.next(taskInstanceId);
|
|
51
52
|
}
|
|
52
|
-
set readOnly(readOnlyValue) {
|
|
53
|
-
this.readOnly$.next(readOnlyValue);
|
|
54
|
-
}
|
|
55
53
|
set isStartForm(isStartFormValue) {
|
|
56
54
|
this.isStartForm$.next(isStartFormValue);
|
|
57
55
|
}
|
|
@@ -66,20 +64,25 @@ export class FormViewModelComponent {
|
|
|
66
64
|
this.translateService = translateService;
|
|
67
65
|
this.stateService = stateService;
|
|
68
66
|
this.formSubmit = new EventEmitter();
|
|
67
|
+
this.errors = [];
|
|
69
68
|
this.refreshForm = new EventEmitter();
|
|
69
|
+
this._preventNextPage = false;
|
|
70
|
+
this._preventPreviousPage = false;
|
|
71
|
+
this._isWizard = false;
|
|
70
72
|
this.submission$ = new BehaviorSubject({});
|
|
71
73
|
this.form$ = new BehaviorSubject(undefined);
|
|
72
74
|
this.formName$ = new BehaviorSubject(undefined);
|
|
73
75
|
this.options$ = new BehaviorSubject(undefined);
|
|
74
76
|
this.taskInstanceId$ = new BehaviorSubject(undefined);
|
|
75
|
-
this.readOnly$ = new BehaviorSubject(false);
|
|
76
77
|
this.tokenSetInLocalStorage$ = new BehaviorSubject(false);
|
|
77
78
|
this.change$ = new BehaviorSubject(null);
|
|
78
|
-
this.
|
|
79
|
+
this.blur$ = new Subject();
|
|
80
|
+
this.focus$ = new BehaviorSubject(null);
|
|
79
81
|
this.loading$ = new BehaviorSubject(true);
|
|
80
82
|
this.isStartForm$ = new BehaviorSubject(false);
|
|
81
83
|
this.processDefinitionKey$ = new BehaviorSubject(undefined);
|
|
82
84
|
this.documentDefinitionName$ = new BehaviorSubject(undefined);
|
|
85
|
+
this.updateForm = new Subject();
|
|
83
86
|
this.currentLanguage$ = this.translateService.stream('key').pipe(map(() => this.translateService.currentLang), distinctUntilChanged());
|
|
84
87
|
this._overrideOptions$ = new BehaviorSubject({
|
|
85
88
|
hooks: {
|
|
@@ -95,11 +98,14 @@ export class FormViewModelComponent {
|
|
|
95
98
|
const defaultOptions = {
|
|
96
99
|
...options,
|
|
97
100
|
language,
|
|
98
|
-
...(formioTranslations === 'object'
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
101
|
+
...(typeof formioTranslations === 'object'
|
|
102
|
+
? {
|
|
103
|
+
language,
|
|
104
|
+
i18n: {
|
|
105
|
+
[language]: this.stateService.flattenTranslationsObject(formioTranslations),
|
|
106
|
+
},
|
|
107
|
+
}
|
|
108
|
+
: {}),
|
|
103
109
|
};
|
|
104
110
|
return deepmerge(defaultOptions, overrideOptions);
|
|
105
111
|
}));
|
|
@@ -111,6 +117,32 @@ export class FormViewModelComponent {
|
|
|
111
117
|
else {
|
|
112
118
|
this.loadInitialViewModel();
|
|
113
119
|
}
|
|
120
|
+
this.focusSubscription = this.focus$
|
|
121
|
+
.pipe(withLatestFrom(this.change$))
|
|
122
|
+
.subscribe(data => {
|
|
123
|
+
const dataAtFocus = !!data[1] && !!data[1].data ? JSON.parse(JSON.stringify(data[1].data)) : null;
|
|
124
|
+
this.blur$
|
|
125
|
+
.pipe(take(1))
|
|
126
|
+
.pipe(withLatestFrom(this.change$))
|
|
127
|
+
.subscribe(dataBlur => {
|
|
128
|
+
const dataEqual = isEqual(dataAtFocus, dataBlur[1]?.data);
|
|
129
|
+
if (!dataEqual) {
|
|
130
|
+
this.updateForm.next(true);
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
this.updateSubscription = this.updateForm.pipe(filter(it => it), debounceTime(500)).subscribe(() => {
|
|
135
|
+
if (this.isStartForm$.value) {
|
|
136
|
+
this.updateViewModelForStartForm();
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
this.updateViewModel();
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
ngOnDestroy() {
|
|
144
|
+
this.focusSubscription.unsubscribe();
|
|
145
|
+
this.updateSubscription.unsubscribe();
|
|
114
146
|
}
|
|
115
147
|
beforeSubmitHook(instance) {
|
|
116
148
|
return (submission, callback) => instance.beforeSubmit(submission, callback);
|
|
@@ -131,7 +163,7 @@ export class FormViewModelComponent {
|
|
|
131
163
|
return of(response);
|
|
132
164
|
}), catchError(error => {
|
|
133
165
|
this.handleFormError(error);
|
|
134
|
-
callback({ message:
|
|
166
|
+
callback({ message: ' ', component: null }, null);
|
|
135
167
|
return EMPTY; // return an empty observable to complete the stream
|
|
136
168
|
}))
|
|
137
169
|
: this.viewModelService
|
|
@@ -141,32 +173,67 @@ export class FormViewModelComponent {
|
|
|
141
173
|
return of(response);
|
|
142
174
|
}), catchError(error => {
|
|
143
175
|
this.handleFormError(error);
|
|
144
|
-
callback({ message:
|
|
176
|
+
callback({ message: ' ', component: null }, null);
|
|
145
177
|
return EMPTY; // return an empty observable to complete the stream
|
|
146
178
|
}))))
|
|
147
179
|
.subscribe();
|
|
148
180
|
}
|
|
149
181
|
handleFormError(error) {
|
|
150
182
|
const formInstance = this.formio.formio;
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
183
|
+
this.errors = [];
|
|
184
|
+
if (error.error.componentErrors) {
|
|
185
|
+
error.error.componentErrors.forEach(componentError => {
|
|
186
|
+
const component = formInstance.getComponent(componentError.component);
|
|
187
|
+
if (component == null) {
|
|
188
|
+
this.errors.push(componentError.message);
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
component?.setCustomValidity(componentError.message);
|
|
192
|
+
}
|
|
193
|
+
});
|
|
155
194
|
}
|
|
156
195
|
else {
|
|
157
|
-
component
|
|
158
|
-
|
|
196
|
+
const component = formInstance.getComponent(error.error?.component);
|
|
197
|
+
if (component == null) {
|
|
198
|
+
this.errors.push(error.error.error);
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
component?.setCustomValidity(error.error.error);
|
|
202
|
+
}
|
|
159
203
|
}
|
|
160
204
|
}
|
|
161
205
|
onSubmit(submission) {
|
|
162
206
|
this.formSubmit.next(submission);
|
|
163
207
|
}
|
|
208
|
+
onFocus($event) {
|
|
209
|
+
this.focus$.next($event);
|
|
210
|
+
}
|
|
211
|
+
onBlur(blurEvent) {
|
|
212
|
+
this.blur$.next(blurEvent);
|
|
213
|
+
}
|
|
164
214
|
onChange(object) {
|
|
165
215
|
if (object.data) {
|
|
166
216
|
this.change$.next(object);
|
|
167
217
|
}
|
|
168
|
-
|
|
169
|
-
|
|
218
|
+
}
|
|
219
|
+
onNextPage() {
|
|
220
|
+
this._preventNextPage = true;
|
|
221
|
+
this.formio.formio.setPage(this.formio.formio.page - 1);
|
|
222
|
+
this.updateForm.next(true);
|
|
223
|
+
}
|
|
224
|
+
onPreviousPage() {
|
|
225
|
+
this._preventPreviousPage = true;
|
|
226
|
+
this.formio.formio.setPage(this.formio.formio.page + 1);
|
|
227
|
+
this.updateForm.next(true);
|
|
228
|
+
}
|
|
229
|
+
handlePageChange() {
|
|
230
|
+
if (this._preventNextPage) {
|
|
231
|
+
this._preventNextPage = false;
|
|
232
|
+
this.formio.formio.setPage(this.formio.formio.page + 1);
|
|
233
|
+
}
|
|
234
|
+
else if (this._preventPreviousPage) {
|
|
235
|
+
this._preventPreviousPage = false;
|
|
236
|
+
this.formio.formio.setPage(this.formio.formio.page - 1);
|
|
170
237
|
}
|
|
171
238
|
}
|
|
172
239
|
loadInitialViewModel() {
|
|
@@ -176,6 +243,7 @@ export class FormViewModelComponent {
|
|
|
176
243
|
this.change$.pipe(take(1)).subscribe(() => {
|
|
177
244
|
this.loading$.next(false);
|
|
178
245
|
});
|
|
246
|
+
this._isWizard = this.formio.form.display === 'wizard';
|
|
179
247
|
}))))
|
|
180
248
|
.subscribe();
|
|
181
249
|
}
|
|
@@ -184,11 +252,17 @@ export class FormViewModelComponent {
|
|
|
184
252
|
.pipe(take(1), switchMap(updating => {
|
|
185
253
|
if (!updating) {
|
|
186
254
|
this.loading$.next(true);
|
|
187
|
-
return combineLatest([this.formName$, this.taskInstanceId$, this.change$]).pipe(take(1), switchMap(([formName, taskInstanceId, change]) => this.viewModelService
|
|
255
|
+
return combineLatest([this.formName$, this.taskInstanceId$, this.change$]).pipe(take(1), switchMap(([formName, taskInstanceId, change]) => this.viewModelService
|
|
256
|
+
.updateViewModel(formName, taskInstanceId, change.data, this.formio.formio.page, this._isWizard)
|
|
257
|
+
.pipe(tap({
|
|
188
258
|
next: viewModel => {
|
|
189
|
-
this.submission$.
|
|
259
|
+
const submission = this.submission$.value;
|
|
260
|
+
submission.data = viewModel;
|
|
261
|
+
this.submission$.next(submission);
|
|
262
|
+
this.handlePageChange();
|
|
263
|
+
this.refreshForm.emit({ submission: submission });
|
|
190
264
|
this.loading$.next(false);
|
|
191
|
-
this.errors
|
|
265
|
+
this.errors = [];
|
|
192
266
|
},
|
|
193
267
|
error: error => {
|
|
194
268
|
this.loading$.next(false);
|
|
@@ -207,6 +281,7 @@ export class FormViewModelComponent {
|
|
|
207
281
|
this.change$.pipe(take(1)).subscribe(() => {
|
|
208
282
|
this.loading$.next(false);
|
|
209
283
|
});
|
|
284
|
+
this._isWizard = this.formio.form.display === 'wizard';
|
|
210
285
|
}))))
|
|
211
286
|
.subscribe();
|
|
212
287
|
}
|
|
@@ -216,12 +291,16 @@ export class FormViewModelComponent {
|
|
|
216
291
|
if (!updating) {
|
|
217
292
|
this.loading$.next(true);
|
|
218
293
|
return combineLatest([this.formName$, this.processDefinitionKey$, this.change$]).pipe(take(1), switchMap(([formName, processDefinitionKey, change]) => this.viewModelService
|
|
219
|
-
.updateViewModelForStartForm(formName, processDefinitionKey, change.data)
|
|
294
|
+
.updateViewModelForStartForm(formName, processDefinitionKey, change.data, this.formio.formio.page, this._isWizard)
|
|
220
295
|
.pipe(tap({
|
|
221
296
|
next: viewModel => {
|
|
222
|
-
this.submission$.
|
|
297
|
+
const submission = this.submission$.value;
|
|
298
|
+
submission.data = viewModel;
|
|
299
|
+
this.submission$.next(submission);
|
|
300
|
+
this.handlePageChange();
|
|
301
|
+
this.refreshForm.emit({ submission: submission });
|
|
223
302
|
this.loading$.next(false);
|
|
224
|
-
this.errors
|
|
303
|
+
this.errors = [];
|
|
225
304
|
},
|
|
226
305
|
error: error => {
|
|
227
306
|
this.loading$.next(false);
|
|
@@ -233,26 +312,12 @@ export class FormViewModelComponent {
|
|
|
233
312
|
}))
|
|
234
313
|
.subscribe();
|
|
235
314
|
}
|
|
236
|
-
handleChanges() {
|
|
237
|
-
this.change$
|
|
238
|
-
.pipe(pairwise(), debounceTime(500), filter(([prevChange, currentChange]) => prevChange?.changed?.value !== undefined &&
|
|
239
|
-
currentChange?.changed?.value !== undefined &&
|
|
240
|
-
prevChange.changed.value !== currentChange.changed.value))
|
|
241
|
-
.subscribe(() => {
|
|
242
|
-
if (this.isStartForm$.value) {
|
|
243
|
-
this.updateViewModelForStartForm();
|
|
244
|
-
}
|
|
245
|
-
else {
|
|
246
|
-
this.updateViewModel();
|
|
247
|
-
}
|
|
248
|
-
});
|
|
249
|
-
}
|
|
250
315
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormViewModelComponent, deps: [{ token: i1.ViewModelService }, { token: i2.TranslateService }, { token: i3.FormIoStateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
251
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
316
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FormViewModelComponent, isStandalone: true, selector: "valtimo-form-view-model", inputs: { options: "options", submission: "submission", form: "form", formName: "formName", taskInstanceId: "taskInstanceId", isStartForm: "isStartForm", processDefinitionKey: "processDefinitionKey", documentDefinitionName: "documentDefinitionName" }, outputs: { formSubmit: "formSubmit" }, viewQueries: [{ propertyName: "formio", first: true, predicate: ["formio"], 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<div\n class=\"form-container formio-carbon\"\n *ngIf=\"{\n submission: submission$ | async,\n form: form$ | async,\n tokenSetInLocalStorage: tokenSetInLocalStorage$ | async,\n formioOptions: formioOptions$ | async,\n loading: loading$ | async,\n } as obs\"\n>\n <div *ngIf=\"obs.loading\" class=\"overlay\">\n <div class=\"spinner\">\n <i class=\"fa fa-spinner fa-spin\"></i>\n </div>\n </div>\n\n <div *ngIf=\"errors.length > 0\" class=\"alert alert-danger pt-5 pb-5 mb-2\">\n <ol>\n <li *ngFor=\"let error of errors\" class=\"pl-2\">\n {{ error }}\n </li>\n </ol>\n </div>\n\n <formio\n #formio\n [submission]=\"obs.submission\"\n [form]=\"obs.form\"\n [options]=\"obs.formioOptions\"\n [refresh]=\"refreshForm\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n (focusin)=\"onFocus($event)\"\n (focusout)=\"onBlur($event)\"\n (nextPage)=\"onNextPage()\"\n (prevPage)=\"onPreviousPage()\"\n ></formio>\n</div>\n", styles: [".form-container{position:relative}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#fffc;z-index:1000;display:flex;justify-content:center;align-items:center;pointer-events:all}.spinner{font-size:3rem;color:#007bff}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormioModule }, { kind: "component", type: i5.FormioComponent, selector: "formio" }] }); }
|
|
252
317
|
}
|
|
253
318
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormViewModelComponent, decorators: [{
|
|
254
319
|
type: Component,
|
|
255
|
-
args: [{ selector: 'valtimo-form-view-model', standalone: true, imports: [CommonModule, FormioModule], 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<div\n class=\"form-container\"\n *ngIf=\"{\n submission: submission$ | async,\n
|
|
320
|
+
args: [{ selector: 'valtimo-form-view-model', standalone: true, imports: [CommonModule, FormioModule], 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<div\n class=\"form-container formio-carbon\"\n *ngIf=\"{\n submission: submission$ | async,\n form: form$ | async,\n tokenSetInLocalStorage: tokenSetInLocalStorage$ | async,\n formioOptions: formioOptions$ | async,\n loading: loading$ | async,\n } as obs\"\n>\n <div *ngIf=\"obs.loading\" class=\"overlay\">\n <div class=\"spinner\">\n <i class=\"fa fa-spinner fa-spin\"></i>\n </div>\n </div>\n\n <div *ngIf=\"errors.length > 0\" class=\"alert alert-danger pt-5 pb-5 mb-2\">\n <ol>\n <li *ngFor=\"let error of errors\" class=\"pl-2\">\n {{ error }}\n </li>\n </ol>\n </div>\n\n <formio\n #formio\n [submission]=\"obs.submission\"\n [form]=\"obs.form\"\n [options]=\"obs.formioOptions\"\n [refresh]=\"refreshForm\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n (focusin)=\"onFocus($event)\"\n (focusout)=\"onBlur($event)\"\n (nextPage)=\"onNextPage()\"\n (prevPage)=\"onPreviousPage()\"\n ></formio>\n</div>\n", styles: [".form-container{position:relative}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#fffc;z-index:1000;display:flex;justify-content:center;align-items:center;pointer-events:all}.spinner{font-size:3rem;color:#007bff}\n"] }]
|
|
256
321
|
}], ctorParameters: () => [{ type: i1.ViewModelService }, { type: i2.TranslateService }, { type: i3.FormIoStateService }], propDecorators: { formio: [{
|
|
257
322
|
type: ViewChild,
|
|
258
323
|
args: ['formio']
|
|
@@ -266,17 +331,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
266
331
|
type: Input
|
|
267
332
|
}], taskInstanceId: [{
|
|
268
333
|
type: Input
|
|
269
|
-
}], readOnly: [{
|
|
270
|
-
type: Input
|
|
271
334
|
}], isStartForm: [{
|
|
272
335
|
type: Input
|
|
273
336
|
}], processDefinitionKey: [{
|
|
274
337
|
type: Input
|
|
275
338
|
}], documentDefinitionName: [{
|
|
276
339
|
type: Input
|
|
277
|
-
}], formRefresh$: [{
|
|
278
|
-
type: Input
|
|
279
340
|
}], formSubmit: [{
|
|
280
341
|
type: Output
|
|
281
342
|
}] } });
|
|
282
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LW1vZGVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZm9ybS12aWV3LW1vZGVsL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLXZpZXctbW9kZWwvZm9ybS12aWV3LW1vZGVsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZm9ybS12aWV3LW1vZGVsL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLXZpZXctbW9kZWwvZm9ybS12aWV3LW1vZGVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLGFBQWEsRUFDYixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFFTixFQUFFLEVBQ0YsUUFBUSxFQUVSLFNBQVMsRUFDVCxJQUFJLEVBQ0osR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUVMLFlBQVksR0FJYixNQUFNLGlCQUFpQixDQUFDO0FBR3pCLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBSXZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7OztBQUU3QyxNQUFNLENBQUMsYUFBYSxHQUFHLG1CQUFtQixDQUFDO0FBUzNDLE1BQU0sT0FBTyxzQkFBc0I7SUFHakMsSUFBYSxPQUFPLENBQUMsWUFBaUI7UUFDcEMs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MjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY2F0Y2hFcnJvcixcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBFTVBUWSxcbiAgZmlsdGVyLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgcGFpcndpc2UsXG4gIFN1YmplY3QsXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEZvcm1pb0NvbXBvbmVudCxcbiAgRm9ybWlvTW9kdWxlLFxuICBGb3JtaW9PcHRpb25zLFxuICBGb3JtaW9TdWJtaXNzaW9uLFxuICBGb3JtaW9TdWJtaXNzaW9uQ2FsbGJhY2ssXG59IGZyb20gJ0Bmb3JtaW8vYW5ndWxhcic7XG5pbXBvcnQge0Zvcm1pb1JlZnJlc2hWYWx1ZX0gZnJvbSAnQGZvcm1pby9hbmd1bGFyL2Zvcm1pby5jb21tb24nO1xuaW1wb3J0IHtWaWV3TW9kZWxTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge2Rpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7ZGVlcG1lcmdlfSBmcm9tICdkZWVwbWVyZ2UtdHMnO1xuaW1wb3J0IHtGb3JtSW9TdGF0ZVNlcnZpY2UsIFZhbHRpbW9Gb3JtaW9PcHRpb25zfSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0h0dHBFcnJvclJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxubW9tZW50LmRlZmF1bHRGb3JtYXQgPSAnREQgTU1NIFlZWVkgSEg6bW0nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWZvcm0tdmlldy1tb2RlbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLXZpZXctbW9kZWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mb3JtLXZpZXctbW9kZWwuY29tcG9uZW50LmNzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3JtaW9Nb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtVmlld01vZGVsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQFZpZXdDaGlsZCgnZm9ybWlvJykgZm9ybWlvOiBGb3JtaW9Db21wb25lbnQ7XG5cbiAgQElucHV0KCkgc2V0IG9wdGlvbnMob3B0aW9uc1ZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLm9wdGlvbnMkLm5leHQob3B0aW9uc1ZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBzdWJtaXNzaW9uKHN1Ym1pc3Npb25WYWx1ZTogRm9ybWlvU3VibWlzc2lvbikge1xuICAgIHRoaXMuc3VibWlzc2lvbiQubmV4dChzdWJtaXNzaW9uVmFsdWUpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGZvcm0oZm9ybVZhbHVlOiBvYmplY3QpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXM7XG4gICAgY29uc3QgZm9ybSA9IHtcbiAgICAgIGxvYWRJbml0aWFsVmlld01vZGVsOiAoKSA9PiBpbnN0YW5jZS5sb2FkSW5pdGlhbFZpZXdNb2RlbCgpLFxuICAgICAgdXBkYXRlVmlld01vZGVsOiAoKSA9PiBpbnN0YW5jZS51cGRhdGVWaWV3TW9kZWwoKSxcbiAgICAgIC4uLmZvcm1WYWx1ZSxcbiAgICB9O1xuICAgIHRoaXMuZm9ybSQubmV4dChmb3JtKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBmb3JtTmFtZShmb3JtTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5mb3JtTmFtZSQubmV4dChmb3JtTmFtZSk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgdGFza0luc3RhbmNlSWQodGFza0luc3RhbmNlSWQ6IHN0cmluZykge1xuICAgIHRoaXMudGFza0luc3RhbmNlSWQkLm5leHQodGFza0luc3RhbmNlSWQpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHJlYWRPbmx5KHJlYWRPbmx5VmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJlYWRPbmx5JC5uZXh0KHJlYWRPbmx5VmFsdWUpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGlzU3RhcnRGb3JtKGlzU3RhcnRGb3JtVmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzU3RhcnRGb3JtJC5uZXh0KGlzU3RhcnRGb3JtVmFsdWUpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHByb2Nlc3NEZWZpbml0aW9uS2V5KHByb2Nlc3NEZWZpbml0aW9uS2V5VmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25LZXkkLm5leHQocHJvY2Vzc0RlZmluaXRpb25LZXlWYWx1ZSk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZG9jdW1lbnREZWZpbml0aW9uTmFtZShkb2N1bWVudERlZmluaXRpb25OYW1lVmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQubmV4dChkb2N1bWVudERlZmluaXRpb25OYW1lVmFsdWUpO1xuICB9XG5cbiAgQElucHV0KCkgZm9ybVJlZnJlc2gkITogU3ViamVjdDxGb3JtaW9SZWZyZXNoVmFsdWU+O1xuICBAT3V0cHV0KCkgZm9ybVN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHB1YmxpYyByZWZyZXNoRm9ybSA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybWlvUmVmcmVzaFZhbHVlPigpO1xuXG4gIHB1YmxpYyByZWFkb25seSBzdWJtaXNzaW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7fSk7XG4gIHB1YmxpYyByZWFkb25seSBmb3JtJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8b2JqZWN0Pih1bmRlZmluZWQpO1xuICBwdWJsaWMgcmVhZG9ubHkgZm9ybU5hbWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyByZWFkb25seSBvcHRpb25zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VmFsdGltb0Zvcm1pb09wdGlvbnM+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyByZWFkb25seSB0YXNrSW5zdGFuY2VJZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4odW5kZWZpbmVkKTtcbiAgcHVibGljIHJlYWRvbmx5IHJlYWRPbmx5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgdG9rZW5TZXRJbkxvY2FsU3RvcmFnZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IGNoYW5nZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBlcnJvcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxzdHJpbmc+PihbXSk7XG4gIHB1YmxpYyByZWFkb25seSBsb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHB1YmxpYyByZWFkb25seSBpc1N0YXJ0Rm9ybSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IHByb2Nlc3NEZWZpbml0aW9uS2V5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xuICBwdWJsaWMgcmVhZG9ubHkgZG9jdW1lbnREZWZpbml0aW9uTmFtZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4odW5kZWZpbmVkKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgY3VycmVudExhbmd1YWdlJCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLnBpcGUoXG4gICAgbWFwKCgpID0+IHRoaXMudHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZyksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX292ZXJyaWRlT3B0aW9ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZvcm1pb09wdGlvbnM+KHtcbiAgICBob29rczoge1xuICAgICAgYmVmb3JlU3VibWl0OiB0aGlzLmJlZm9yZVN1Ym1pdEhvb2sodGhpcyksXG4gICAgfSxcbiAgfSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGZvcm1pb09wdGlvbnMkOiBPYnNlcnZhYmxlPFZhbHRpbW9Gb3JtaW9PcHRpb25zIHwgRm9ybWlvT3B0aW9ucz4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZSQsXG4gICAgdGhpcy5vcHRpb25zJCxcbiAgICB0aGlzLl9vdmVycmlkZU9wdGlvbnMkLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2xhbmd1YWdlLCBvcHRpb25zLCBvdmVycmlkZU9wdGlvbnNdKSA9PiB7XG4gICAgICBjb25zdCBmb3JtaW9UcmFuc2xhdGlvbnMgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZm9ybWlvVHJhbnNsYXRpb25zJyk7XG5cbiAgICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgLi4uKGZvcm1pb1RyYW5zbGF0aW9ucyA9PT0gJ29iamVjdCcgJiYge1xuICAgICAgICAgIGkxOG46IHtcbiAgICAgICAgICAgIFtsYW5ndWFnZV06IHRoaXMuc3RhdGVTZXJ2aWNlLmZsYXR0ZW5UcmFuc2xhdGlvbnNPYmplY3QoZm9ybWlvVHJhbnNsYXRpb25zKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBkZWVwbWVyZ2UoZGVmYXVsdE9wdGlvbnMsIG92ZXJyaWRlT3B0aW9ucyk7XG4gICAgfSlcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZpZXdNb2RlbFNlcnZpY2U6IFZpZXdNb2RlbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhdGVTZXJ2aWNlOiBGb3JtSW9TdGF0ZVNlcnZpY2VcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1N0YXJ0Rm9ybSQudmFsdWUpIHtcbiAgICAgIHRoaXMubG9hZEluaXRpYWxWaWV3TW9kZWxGb3JTdGFydEZvcm0oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2FkSW5pdGlhbFZpZXdNb2RlbCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBiZWZvcmVTdWJtaXRIb29rKGluc3RhbmNlOiBGb3JtVmlld01vZGVsQ29tcG9uZW50KTogKHN1Ym1pc3Npb24sIGNhbGxiYWNrKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gKHN1Ym1pc3Npb24sIGNhbGxiYWNrKSA9PiBpbnN0YW5jZS5iZWZvcmVTdWJtaXQoc3VibWlzc2lvbiwgY2FsbGJhY2spO1xuICB9XG5cbiAgcHVibGljIGJlZm9yZVN1Ym1pdChzdWJtaXNzaW9uOiBhbnksIGNhbGxiYWNrOiBGb3JtaW9TdWJtaXNzaW9uQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuZm9ybU5hbWUkLFxuICAgICAgdGhpcy50YXNrSW5zdGFuY2VJZCQsXG4gICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uS2V5JCxcbiAgICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQsXG4gICAgICB0aGlzLmlzU3RhcnRGb3JtJCxcbiAgICBdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHN3aXRjaE1hcChcbiAgICAgICAgICAoW1xuICAgICAgICAgICAgZm9ybU5hbWUsXG4gICAgICAgICAgICB0YXNrSW5zdGFuY2VJZCxcbiAgICAgICAgICAgIHByb2Nlc3NEZWZpbml0aW9uS2V5LFxuICAgICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZSxcbiAgICAgICAgICAgIGlzU3RhcnRGb3JtLFxuICAgICAgICAgIF0pID0+XG4gICAgICAgICAgICBpc1N0YXJ0Rm9ybVxuICAgICAgICAgICAgICA/IHRoaXMudmlld01vZGVsU2VydmljZVxuICAgICAgICAgICAgICAgICAgLnN1Ym1pdFZpZXdNb2RlbEZvclN0YXJ0Rm9ybShcbiAgICAgICAgICAgICAgICAgICAgZm9ybU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NEZWZpbml0aW9uS2V5LFxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudERlZmluaXRpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICBzdWJtaXNzaW9uLmRhdGFcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHN1Ym1pc3Npb24pO1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZvcm1FcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soe21lc3NhZ2U6IGVycm9yLmVycm9yLmVycm9yLCBjb21wb25lbnQ6IG51bGx9LCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7IC8vIHJldHVybiBhbiBlbXB0eSBvYnNlcnZhYmxlIHRvIGNvbXBsZXRlIHRoZSBzdHJlYW1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiB0aGlzLnZpZXdNb2RlbFNlcnZpY2VcbiAgICAgICAgICAgICAgICAgIC5zdWJtaXRWaWV3TW9kZWwoZm9ybU5hbWUsIHRhc2tJbnN0YW5jZUlkLCBzdWJtaXNzaW9uLmRhdGEpXG4gICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBzdWJtaXNzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGb3JtRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHttZXNzYWdlOiBlcnJvci5lcnJvci5lcnJvciwgY29tcG9uZW50OiBudWxsfSwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZOyAvLyByZXR1cm4gYW4gZW1wdHkgb2JzZXJ2YWJsZSB0byBjb21wbGV0ZSB0aGUgc3RyZWFtXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRm9ybUVycm9yKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1JbnN0YW5jZSA9IHRoaXMuZm9ybWlvLmZvcm1pbztcbiAgICBjb25zdCBjb21wb25lbnQgPSBmb3JtSW5zdGFuY2UuZ2V0Q29tcG9uZW50KGVycm9yLmVycm9yPy5jb21wb25lbnQpO1xuICAgIGNvbnN0IHN1Ym1pdENvbXBvbmVudCA9IGZvcm1JbnN0YW5jZS5nZXRDb21wb25lbnQoJ3N1Ym1pdCcpO1xuICAgIGlmIChjb21wb25lbnQgPT0gbnVsbCkge1xuICAgICAgdGhpcy5lcnJvcnMkLm5leHQoW2Vycm9yLmVycm9yLmVycm9yXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBvbmVudD8uc2V0Q3VzdG9tVmFsaWRpdHkoZXJyb3IuZXJyb3IuZXJyb3IpO1xuICAgICAgc3VibWl0Q29tcG9uZW50LmRpc2FibGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25TdWJtaXQoc3VibWlzc2lvbjogRm9ybWlvU3VibWlzc2lvbik6IHZvaWQge1xuICAgIHRoaXMuZm9ybVN1Ym1pdC5uZXh0KHN1Ym1pc3Npb24pO1xuICB9XG5cbiAgcHVibGljIG9uQ2hhbmdlKG9iamVjdDogYW55KTogdm9pZCB7XG4gICAgaWYgKG9iamVjdC5kYXRhKSB7XG4gICAgICB0aGlzLmNoYW5nZSQubmV4dChvYmplY3QpO1xuICAgIH1cblxuICAgIGlmIChvYmplY3QuY2hhbmdlZCkge1xuICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGxvYWRJbml0aWFsVmlld01vZGVsKCk6IHZvaWQge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuZm9ybU5hbWUkLCB0aGlzLnRhc2tJbnN0YW5jZUlkJF0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKChbZm9ybU5hbWUsIHRhc2tJbnN0YW5jZUlkXSkgPT5cbiAgICAgICAgICB0aGlzLnZpZXdNb2RlbFNlcnZpY2UuZ2V0Vmlld01vZGVsKGZvcm1OYW1lLCB0YXNrSW5zdGFuY2VJZCkucGlwZShcbiAgICAgICAgICAgIHRhcCh2aWV3TW9kZWwgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnN1Ym1pc3Npb24kLm5leHQoe2RhdGE6IHZpZXdNb2RlbH0pO1xuICAgICAgICAgICAgICB0aGlzLmNoYW5nZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVWaWV3TW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkaW5nJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHN3aXRjaE1hcCh1cGRhdGluZyA9PiB7XG4gICAgICAgICAgaWYgKCF1cGRhdGluZykge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW3RoaXMuZm9ybU5hbWUkLCB0aGlzLnRhc2tJbnN0YW5jZUlkJCwgdGhpcy5jaGFuZ2UkXSkucGlwZShcbiAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgc3dpdGNoTWFwKChbZm9ybU5hbWUsIHRhc2tJbnN0YW5jZUlkLCBjaGFuZ2VdKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMudmlld01vZGVsU2VydmljZS51cGRhdGVWaWV3TW9kZWwoZm9ybU5hbWUsIHRhc2tJbnN0YW5jZUlkLCBjaGFuZ2UuZGF0YSkucGlwZShcbiAgICAgICAgICAgICAgICAgIHRhcCh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IHZpZXdNb2RlbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXNzaW9uJC5uZXh0KHtkYXRhOiB2aWV3TW9kZWx9KTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JzJC5uZXh0KFtdKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRm9ybUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7IC8vIEZhbGxiYWNrIHRvIHJldHVybiBhbiBvYnNlcnZhYmxlIGlmIHVwZGF0aW5nIGlzIHRydWVcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBsb2FkSW5pdGlhbFZpZXdNb2RlbEZvclN0YXJ0Rm9ybSgpOiB2b2lkIHtcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLmZvcm1OYW1lJCwgdGhpcy5wcm9jZXNzRGVmaW5pdGlvbktleSRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHN3aXRjaE1hcCgoW2Zvcm1OYW1lLCBwcm9jZXNzRGVmaW5pdGlvbktleV0pID0+XG4gICAgICAgICAgdGhpcy52aWV3TW9kZWxTZXJ2aWNlLmdldFZpZXdNb2RlbEZvclN0YXJ0Rm9ybShmb3JtTmFtZSwgcHJvY2Vzc0RlZmluaXRpb25LZXkpLnBpcGUoXG4gICAgICAgICAgICB0YXAodmlld01vZGVsID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zdWJtaXNzaW9uJC5uZXh0KHtkYXRhOiB2aWV3TW9kZWx9KTtcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2UkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlVmlld01vZGVsRm9yU3RhcnRGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMubG9hZGluZyRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBzd2l0Y2hNYXAodXBkYXRpbmcgPT4ge1xuICAgICAgICAgIGlmICghdXBkYXRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFt0aGlzLmZvcm1OYW1lJCwgdGhpcy5wcm9jZXNzRGVmaW5pdGlvbktleSQsIHRoaXMuY2hhbmdlJF0pLnBpcGUoXG4gICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgIHN3aXRjaE1hcCgoW2Zvcm1OYW1lLCBwcm9jZXNzRGVmaW5pdGlvbktleSwgY2hhbmdlXSkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdNb2RlbFNlcnZpY2VcbiAgICAgICAgICAgICAgICAgIC51cGRhdGVWaWV3TW9kZWxGb3JTdGFydEZvcm0oZm9ybU5hbWUsIHByb2Nlc3NEZWZpbml0aW9uS2V5LCBjaGFuZ2UuZGF0YSlcbiAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YXAoe1xuICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IHZpZXdNb2RlbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pc3Npb24kLm5leHQoe2RhdGE6IHZpZXdNb2RlbH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JzJC5uZXh0KFtdKTtcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGb3JtRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvZihudWxsKTsgLy8gRmFsbGJhY2sgdG8gcmV0dXJuIGFuIG9ic2VydmFibGUgaWYgdXBkYXRpbmcgaXMgdHJ1ZVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHBhaXJ3aXNlKCksXG4gICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxuICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgKFtwcmV2Q2hhbmdlLCBjdXJyZW50Q2hhbmdlXSkgPT5cbiAgICAgICAgICAgIHByZXZDaGFuZ2U/LmNoYW5nZWQ/LnZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIGN1cnJlbnRDaGFuZ2U/LmNoYW5nZWQ/LnZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHByZXZDaGFuZ2UuY2hhbmdlZC52YWx1ZSAhPT0gY3VycmVudENoYW5nZS5jaGFuZ2VkLnZhbHVlXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pc1N0YXJ0Rm9ybSQudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVZpZXdNb2RlbEZvclN0YXJ0Rm9ybSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmlld01vZGVsKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxkaXZcbiAgY2xhc3M9XCJmb3JtLWNvbnRhaW5lclwiXG4gICpuZ0lmPVwie1xuICAgIHN1Ym1pc3Npb246IHN1Ym1pc3Npb24kIHwgYXN5bmMsXG4gICAgcmVhZE9ubHk6IHJlYWRPbmx5JCB8IGFzeW5jLFxuICAgIGZvcm06IGZvcm0kIHwgYXN5bmMsXG4gICAgdG9rZW5TZXRJbkxvY2FsU3RvcmFnZTogdG9rZW5TZXRJbkxvY2FsU3RvcmFnZSQgfCBhc3luYyxcbiAgICBmb3JtaW9PcHRpb25zOiBmb3JtaW9PcHRpb25zJCB8IGFzeW5jLFxuICAgIGxvYWRpbmc6IGxvYWRpbmckIHwgYXN5bmMsXG4gICAgZXJyb3JzOiBlcnJvcnMkIHwgYXN5bmMsXG4gIH0gYXMgb2JzXCJcbj5cbiAgPGRpdiAqbmdJZj1cIm9icy5sb2FkaW5nXCIgY2xhc3M9XCJsb2FkaW5nLWljb25cIj5cbiAgICA8aSBjbGFzcz1cImZhIGZhLXNwaW5uZXIgZmEtc3BpblwiPjwvaT5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJvYnMuZXJyb3JzLmxlbmd0aCA+IDBcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBwdC01IHBiLTUgbWItMlwiPlxuICAgIDxvbD5cbiAgICAgIEBmb3IgKGVycm9yIG9mIG9icy5lcnJvcnM7IHRyYWNrIGVycm9yKSB7XG4gICAgICAgIDxsaSBjbGFzcz1cInBsLTJcIj5cbiAgICAgICAgICB7eyBlcnJvciB9fVxuICAgICAgICA8L2xpPlxuICAgICAgfVxuICAgIDwvb2w+XG4gIDwvZGl2PlxuICA8Zm9ybWlvXG4gICAgI2Zvcm1pb1xuICAgIFtzdWJtaXNzaW9uXT1cIm9icy5zdWJtaXNzaW9uXCJcbiAgICBbZm9ybV09XCJvYnMuZm9ybVwiXG4gICAgW3JlZnJlc2hdPVwicmVmcmVzaEZvcm1cIlxuICAgIFtyZWFkT25seV09XCJvYnMucmVhZE9ubHlcIlxuICAgIFtvcHRpb25zXT1cIm9icy5mb3JtaW9PcHRpb25zXCJcbiAgICAoc3VibWl0KT1cIm9uU3VibWl0KCRldmVudClcIlxuICAgIChjaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiXG4gID48L2Zvcm1pbz5cbjwvZGl2PlxuIl19
|
|
343
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LW1vZGVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZm9ybS12aWV3LW1vZGVsL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLXZpZXctbW9kZWwvZm9ybS12aWV3LW1vZGVsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZm9ybS12aWV3LW1vZGVsL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLXZpZXctbW9kZWwvZm9ybS12aWV3LW1vZGVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFDVixhQUFhLEVBQ2IsWUFBWSxFQUNaLEtBQUssRUFBRSxNQUFNLEVBRWIsRUFBRSxFQUFFLE9BQU8sRUFDWCxTQUFTLEVBQ1QsSUFBSSxFQUNKLEdBQUcsRUFBRSxjQUFjLEdBQ3BCLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUVMLFlBQVksR0FJYixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBSXZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sUUFBUSxDQUFDOzs7Ozs7O0FBRS9CLE1BQU0sQ0FBQyxhQUFhLEdBQUcsbUJBQW1CLENBQUM7QUFT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TUFBTSxHQUFHLEVBQUUsQ0FBQztvQkFDbkIsQ0FBQztvQkFDRCxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUU7d0JBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzlCLENBQUM7aUJBQ0YsQ0FBQyxDQUNILENBQ0osQ0FDRixDQUFDO1lBQ0osQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsdURBQXVEO1FBQzFFLENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQzsrR0F6WVUsc0JBQXNCO21HQUF0QixzQkFBc0Isd2RDdERuQywrb0RBc0RBLGdUREZZLFlBQVksb1RBQUUsWUFBWTs7NEZBRXpCLHNCQUFzQjtrQkFQbEMsU0FBUzsrQkFDRSx5QkFBeUIsY0FHdkIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQztxSkFHaEIsTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRO2dCQUVOLE9BQU87c0JBQW5CLEtBQUs7Z0JBSU8sVUFBVTtzQkFBdEIsS0FBSztnQkFJTyxJQUFJO3NCQUFoQixLQUFLO2dCQVVPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBSU8sY0FBYztzQkFBMUIsS0FBSztnQkFJTyxXQUFXO3NCQUF2QixLQUFLO2dCQUlPLG9CQUFvQjtzQkFBaEMsS0FBSztnQkFJTyxzQkFBc0I7c0JBQWxDLEtBQUs7Z0JBSUksVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY2F0Y2hFcnJvcixcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBFTVBUWSwgZmlsdGVyLFxuICBPYnNlcnZhYmxlLFxuICBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRhcCwgd2l0aExhdGVzdEZyb20sXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgRm9ybWlvQ29tcG9uZW50LFxuICBGb3JtaW9Nb2R1bGUsXG4gIEZvcm1pb09wdGlvbnMsXG4gIEZvcm1pb1N1Ym1pc3Npb24sXG4gIEZvcm1pb1N1Ym1pc3Npb25DYWxsYmFjayxcbn0gZnJvbSAnQGZvcm1pby9hbmd1bGFyJztcbmltcG9ydCB7Vmlld01vZGVsU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge2RlZXBtZXJnZX0gZnJvbSAnZGVlcG1lcmdlLXRzJztcbmltcG9ydCB7Rm9ybUlvU3RhdGVTZXJ2aWNlLCBWYWx0aW1vRm9ybWlvT3B0aW9uc30gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtIdHRwRXJyb3JSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge2lzRXF1YWx9IGZyb20gJ2xvZGFzaCc7XG5cbm1vbWVudC5kZWZhdWx0Rm9ybWF0ID0gJ0REIE1NTSBZWVlZIEhIOm1tJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1mb3JtLXZpZXctbW9kZWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS12aWV3LW1vZGVsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS12aWV3LW1vZGVsLmNvbXBvbmVudC5jc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybWlvTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybVZpZXdNb2RlbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnZm9ybWlvJykgZm9ybWlvOiBGb3JtaW9Db21wb25lbnQ7XG5cbiAgQElucHV0KCkgc2V0IG9wdGlvbnMob3B0aW9uc1ZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLm9wdGlvbnMkLm5leHQob3B0aW9uc1ZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBzdWJtaXNzaW9uKHN1Ym1pc3Npb25WYWx1ZTogRm9ybWlvU3VibWlzc2lvbikge1xuICAgIHRoaXMuc3VibWlzc2lvbiQubmV4dChzdWJtaXNzaW9uVmFsdWUpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGZvcm0oZm9ybVZhbHVlOiBvYmplY3QpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXM7XG4gICAgY29uc3QgZm9ybSA9IHtcbiAgICAgIGxvYWRJbml0aWFsVmlld01vZGVsOiAoKSA9PiBpbnN0YW5jZS5sb2FkSW5pdGlhbFZpZXdNb2RlbCgpLFxuICAgICAgdXBkYXRlVmlld01vZGVsOiAoKSA9PiBpbnN0YW5jZS51cGRhdGVWaWV3TW9kZWwoKSxcbiAgICAgIC4uLmZvcm1WYWx1ZSxcbiAgICB9O1xuICAgIHRoaXMuZm9ybSQubmV4dChmb3JtKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBmb3JtTmFtZShmb3JtTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5mb3JtTmFtZSQubmV4dChmb3JtTmFtZSk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgdGFza0luc3RhbmNlSWQodGFza0luc3RhbmNlSWQ6IHN0cmluZykge1xuICAgIHRoaXMudGFza0luc3RhbmNlSWQkLm5leHQodGFza0luc3RhbmNlSWQpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGlzU3RhcnRGb3JtKGlzU3RhcnRGb3JtVmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzU3RhcnRGb3JtJC5uZXh0KGlzU3RhcnRGb3JtVmFsdWUpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHByb2Nlc3NEZWZpbml0aW9uS2V5KHByb2Nlc3NEZWZpbml0aW9uS2V5VmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25LZXkkLm5leHQocHJvY2Vzc0RlZmluaXRpb25LZXlWYWx1ZSk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZG9jdW1lbnREZWZpbml0aW9uTmFtZShkb2N1bWVudERlZmluaXRpb25OYW1lVmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQubmV4dChkb2N1bWVudERlZmluaXRpb25OYW1lVmFsdWUpO1xuICB9XG5cbiAgQE91dHB1dCgpIGZvcm1TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBwdWJsaWMgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgcmVmcmVzaEZvcm0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSBfcHJldmVudE5leHRQYWdlID0gZmFsc2U7XG4gIHByaXZhdGUgX3ByZXZlbnRQcmV2aW91c1BhZ2UgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaXNXaXphcmQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc3VibWlzc2lvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe30pO1xuICBwdWJsaWMgcmVhZG9ubHkgZm9ybSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG9iamVjdD4odW5kZWZpbmVkKTtcbiAgcHVibGljIHJlYWRvbmx5IGZvcm1OYW1lJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xuICBwdWJsaWMgcmVhZG9ubHkgb3B0aW9ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFZhbHRpbW9Gb3JtaW9PcHRpb25zPih1bmRlZmluZWQpO1xuICBwdWJsaWMgcmVhZG9ubHkgdGFza0luc3RhbmNlSWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyByZWFkb25seSB0b2tlblNldEluTG9jYWxTdG9yYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgY2hhbmdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IGJsdXIkID0gbmV3IFN1YmplY3Q8Rm9jdXNFdmVudD4oKTtcbiAgcHVibGljIHJlYWRvbmx5IGZvY3VzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Rm9jdXNFdmVudD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBsb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHB1YmxpYyByZWFkb25seSBpc1N0YXJ0Rm9ybSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IHByb2Nlc3NEZWZpbml0aW9uS2V5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xuICBwdWJsaWMgcmVhZG9ubHkgZG9jdW1lbnREZWZpbml0aW9uTmFtZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4odW5kZWZpbmVkKTtcbiAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZUZvcm0gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gIHB1YmxpYyByZWFkb25seSBjdXJyZW50TGFuZ3VhZ2UkID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JykucGlwZShcbiAgICBtYXAoKCkgPT4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb3ZlcnJpZGVPcHRpb25zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Rm9ybWlvT3B0aW9ucz4oe1xuICAgIGhvb2tzOiB7XG4gICAgICBiZWZvcmVTdWJtaXQ6IHRoaXMuYmVmb3JlU3VibWl0SG9vayh0aGlzKSxcbiAgICB9LFxuICB9KTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZm9ybWlvT3B0aW9ucyQ6IE9ic2VydmFibGU8VmFsdGltb0Zvcm1pb09wdGlvbnMgfCBGb3JtaW9PcHRpb25zPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuY3VycmVudExhbmd1YWdlJCxcbiAgICB0aGlzLm9wdGlvbnMkLFxuICAgIHRoaXMuX292ZXJyaWRlT3B0aW9ucyQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbbGFuZ3VhZ2UsIG9wdGlvbnMsIG92ZXJyaWRlT3B0aW9uc10pID0+IHtcbiAgICAgIGNvbnN0IGZvcm1pb1RyYW5zbGF0aW9ucyA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdmb3JtaW9UcmFuc2xhdGlvbnMnKTtcblxuICAgICAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAuLi4odHlwZW9mIGZvcm1pb1RyYW5zbGF0aW9ucyA9PT0gJ29iamVjdCdcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgICAgaTE4bjoge1xuICAgICAgICAgICAgICBbbGFuZ3VhZ2VdOiB0aGlzLnN0YXRlU2VydmljZS5mbGF0dGVuVHJhbnNsYXRpb25zT2JqZWN0KGZvcm1pb1RyYW5zbGF0aW9ucyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBkZWVwbWVyZ2UoZGVmYXVsdE9wdGlvbnMsIG92ZXJyaWRlT3B0aW9ucyk7XG4gICAgfSlcbiAgKTtcblxuICBwcml2YXRlIGZvY3VzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb25cbiAgcHJpdmF0ZSB1cGRhdGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld01vZGVsU2VydmljZTogVmlld01vZGVsU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdGF0ZVNlcnZpY2U6IEZvcm1Jb1N0YXRlU2VydmljZVxuICApIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzU3RhcnRGb3JtJC52YWx1ZSkge1xuICAgICAgdGhpcy5sb2FkSW5pdGlhbFZpZXdNb2RlbEZvclN0YXJ0Rm9ybSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvYWRJbml0aWFsVmlld01vZGVsKCk7XG4gICAgfVxuXG4gICAgdGhpcy5mb2N1c1N1YnNjcmlwdGlvbiA9IHRoaXMuZm9jdXMkXG4gICAgICAucGlwZSh3aXRoTGF0ZXN0RnJvbSh0aGlzLmNoYW5nZSQpKVxuICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgY29uc3QgZGF0YUF0Rm9jdXMgPSAhIWRhdGFbMV0gJiYgISFkYXRhWzFdLmRhdGEgPyBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGFbMV0uZGF0YSkpIDogbnVsbFxuICAgICAgICB0aGlzLmJsdXIkXG4gICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAucGlwZSh3aXRoTGF0ZXN0RnJvbSh0aGlzLmNoYW5nZSQpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoZGF0YUJsdXIgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YUVxdWFsID0gaXNFcXVhbChkYXRhQXRGb2N1cywgZGF0YUJsdXJbMV0/LmRhdGEpXG4gICAgICAgICAgICBpZighZGF0YUVxdWFsKSB7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlRm9ybS5uZXh0KHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgIH0pXG5cbiAgICB0aGlzLnVwZGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMudXBkYXRlRm9ybS5waXBlKGZpbHRlcihpdCA9PiBpdCksIGRlYm91bmNlVGltZSg1MDApKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNTdGFydEZvcm0kLnZhbHVlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVmlld01vZGVsRm9yU3RhcnRGb3JtKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVwZGF0ZVZpZXdNb2RlbCgpO1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5mb2N1c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gICAgdGhpcy51cGRhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICB9XG5cbiAgcHVibGljIGJlZm9yZVN1Ym1pdEhvb2soaW5zdGFuY2U6IEZvcm1WaWV3TW9kZWxDb21wb25lbnQpOiAoc3VibWlzc2lvbiwgY2FsbGJhY2spID0+IHZvaWQge1xuICAgIHJldHVybiAoc3VibWlzc2lvbiwgY2FsbGJhY2spID0+IGluc3RhbmNlLmJlZm9yZVN1Ym1pdChzdWJtaXNzaW9uLCBjYWxsYmFjayk7XG4gIH1cblxuICBwdWJsaWMgYmVmb3JlU3VibWl0KHN1Ym1pc3Npb246IGFueSwgY2FsbGJhY2s6IEZvcm1pb1N1Ym1pc3Npb25DYWxsYmFjayk6IHZvaWQge1xuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5mb3JtTmFtZSQsXG4gICAgICB0aGlzLnRhc2tJbnN0YW5jZUlkJCxcbiAgICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25LZXkkLFxuICAgICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJCxcbiAgICAgIHRoaXMuaXNTdGFydEZvcm0kLFxuICAgIF0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKFxuICAgICAgICAgIChbXG4gICAgICAgICAgICBmb3JtTmFtZSxcbiAgICAgICAgICAgIHRhc2tJbnN0YW5jZUlkLFxuICAgICAgICAgICAgcHJvY2Vzc0RlZmluaXRpb25LZXksXG4gICAgICAgICAgICBkb2N1bWVudERlZmluaXRpb25OYW1lLFxuICAgICAgICAgICAgaXNTdGFydEZvcm0sXG4gICAgICAgICAgXSkgPT5cbiAgICAgICAgICAgIGlzU3RhcnRGb3JtXG4gICAgICAgICAgICAgID8gdGhpcy52aWV3TW9kZWxTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAuc3VibWl0Vmlld01vZGVsRm9yU3RhcnRGb3JtKFxuICAgICAgICAgICAgICAgICAgICBmb3JtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0RlZmluaXRpb25LZXksXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHN1Ym1pc3Npb24uZGF0YVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgc3VibWlzc2lvbik7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRm9ybUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh7bWVzc2FnZTogJyAnLCBjb21wb25lbnQ6IG51bGx9LCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7IC8vIHJldHVybiBhbiBlbXB0eSBvYnNlcnZhYmxlIHRvIGNvbXBsZXRlIHRoZSBzdHJlYW1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiB0aGlzLnZpZXdNb2RlbFNlcnZpY2VcbiAgICAgICAgICAgICAgICAgIC5zdWJtaXRWaWV3TW9kZWwoZm9ybU5hbWUsIHRhc2tJbnN0YW5jZUlkLCBzdWJtaXNzaW9uLmRhdGEpXG4gICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBzdWJtaXNzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGb3JtRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHttZXNzYWdlOiAnICcsIGNvbXBvbmVudDogbnVsbH0sIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTsgLy8gcmV0dXJuIGFuIGVtcHR5IG9ic2VydmFibGUgdG8gY29tcGxldGUgdGhlIHN0cmVhbVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUZvcm1FcnJvcihlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtSW5zdGFuY2UgPSB0aGlzLmZvcm1pby5mb3JtaW87XG4gICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICBpZiAoZXJyb3IuZXJyb3IuY29tcG9uZW50RXJyb3JzKSB7XG4gICAgICBlcnJvci5lcnJvci5jb21wb25lbnRFcnJvcnMuZm9yRWFjaChjb21wb25lbnRFcnJvciA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGZvcm1JbnN0YW5jZS5nZXRDb21wb25lbnQoY29tcG9uZW50RXJyb3IuY29tcG9uZW50KTtcbiAgICAgICAgaWYgKGNvbXBvbmVudCA9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5lcnJvcnMucHVzaChjb21wb25lbnRFcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21wb25lbnQ/LnNldEN1c3RvbVZhbGlkaXR5KGNvbXBvbmVudEVycm9yLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gZm9ybUluc3RhbmNlLmdldENvbXBvbmVudChlcnJvci5lcnJvcj8uY29tcG9uZW50KTtcbiAgICAgIGlmIChjb21wb25lbnQgPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yLmVycm9yLmVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXBvbmVudD8uc2V0Q3VzdG9tVmFsaWRpdHkoZXJyb3IuZXJyb3IuZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvblN1Ym1pdChzdWJtaXNzaW9uOiBGb3JtaW9TdWJtaXNzaW9uKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtU3VibWl0Lm5leHQoc3VibWlzc2lvbik7XG4gIH1cblxuICBwdWJsaWMgb25Gb2N1cygkZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzJC5uZXh0KCRldmVudCk7XG4gIH1cblxuICBwdWJsaWMgb25CbHVyKGJsdXJFdmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuYmx1ciQubmV4dChibHVyRXZlbnQpO1xuICB9XG5cbiAgcHVibGljIG9uQ2hhbmdlKG9iamVjdDogYW55KTogdm9pZCB7XG4gICAgaWYgKG9iamVjdC5kYXRhKSB7XG4gICAgICB0aGlzLmNoYW5nZSQubmV4dChvYmplY3QpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbk5leHRQYWdlKCk6IHZvaWQge1xuICAgIHRoaXMuX3ByZXZlbnROZXh0UGFnZSA9IHRydWU7XG4gICAgdGhpcy5mb3JtaW8uZm9ybWlvLnNldFBhZ2UodGhpcy5mb3JtaW8uZm9ybWlvLnBhZ2UgLSAxKTtcbiAgICB0aGlzLnVwZGF0ZUZvcm0ubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBvblByZXZpb3VzUGFnZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wcmV2ZW50UHJldmlvdXNQYWdlID0gdHJ1ZTtcbiAgICB0aGlzLmZvcm1pby5mb3JtaW8uc2V0UGFnZSh0aGlzLmZvcm1pby5mb3JtaW8ucGFnZSArIDEpO1xuICAgIHRoaXMudXBkYXRlRm9ybS5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQYWdlQ2hhbmdlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wcmV2ZW50TmV4dFBhZ2UpIHtcbiAgICAgIHRoaXMuX3ByZXZlbnROZXh0UGFnZSA9IGZhbHNlO1xuICAgICAgdGhpcy5mb3JtaW8uZm9ybWlvLnNldFBhZ2UodGhpcy5mb3JtaW8uZm9ybWlvLnBhZ2UgKyAxKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3ByZXZlbnRQcmV2aW91c1BhZ2UpIHtcbiAgICAgIHRoaXMuX3ByZXZlbnRQcmV2aW91c1BhZ2UgPSBmYWxzZTtcbiAgICAgIHRoaXMuZm9ybWlvLmZvcm1pby5zZXRQYWdlKHRoaXMuZm9ybWlvLmZvcm1pby5wYWdlIC0gMSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGxvYWRJbml0aWFsVmlld01vZGVsKCk6IHZvaWQge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuZm9ybU5hbWUkLCB0aGlzLnRhc2tJbnN0YW5jZUlkJF0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKChbZm9ybU5hbWUsIHRhc2tJbnN0YW5jZUlkXSkgPT5cbiAgICAgICAgICB0aGlzLnZpZXdNb2RlbFNlcnZpY2UuZ2V0Vmlld01vZGVsKGZvcm1OYW1lLCB0YXNrSW5zdGFuY2VJZCkucGlwZShcbiAgICAgICAgICAgIHRhcCh2aWV3TW9kZWwgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnN1Ym1pc3Npb24kLm5leHQoe2RhdGE6IHZpZXdNb2RlbH0pO1xuICAgICAgICAgICAgICB0aGlzLmNoYW5nZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLl9pc1dpemFyZCA9IHRoaXMuZm9ybWlvLmZvcm0uZGlzcGxheSA9PT0gJ3dpemFyZCc7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVZpZXdNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmckXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKHVwZGF0aW5nID0+IHtcbiAgICAgICAgICBpZiAoIXVwZGF0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5mb3JtTmFtZSQsIHRoaXMudGFza0luc3RhbmNlSWQkLCB0aGlzLmNoYW5nZSRdKS5waXBlKFxuICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICBzd2l0Y2hNYXAoKFtmb3JtTmFtZSwgdGFza0luc3RhbmNlSWQsIGNoYW5nZV0pID0+XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3TW9kZWxTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAudXBkYXRlVmlld01vZGVsKFxuICAgICAgICAgICAgICAgICAgICBmb3JtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdGFza0luc3RhbmNlSWQsXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1pby5mb3JtaW8ucGFnZSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNXaXphcmRcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YXAoe1xuICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IHZpZXdNb2RlbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWJtaXNzaW9uID0gdGhpcy5zdWJtaXNzaW9uJC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pc3Npb24uZGF0YSA9IHZpZXdNb2RlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWlzc2lvbiQubmV4dChzdWJtaXNzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUGFnZUNoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoRm9ybS5lbWl0KHtzdWJtaXNzaW9uOiBzdWJtaXNzaW9ufSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGb3JtRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvZihudWxsKTsgLy8gRmFsbGJhY2sgdG8gcmV0dXJuIGFuIG9ic2VydmFibGUgaWYgdXBkYXRpbmcgaXMgdHJ1ZVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIGxvYWRJbml0aWFsVmlld01vZGVsRm9yU3RhcnRGb3JtKCk6IHZvaWQge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuZm9ybU5hbWUkLCB0aGlzLnByb2Nlc3NEZWZpbml0aW9uS2V5JF0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKChbZm9ybU5hbWUsIHByb2Nlc3NEZWZpbml0aW9uS2V5XSkgPT5cbiAgICAgICAgICB0aGlzLnZpZXdNb2RlbFNlcnZpY2UuZ2V0Vmlld01vZGVsRm9yU3RhcnRGb3JtKGZvcm1OYW1lLCBwcm9jZXNzRGVmaW5pdGlvbktleSkucGlwZShcbiAgICAgICAgICAgIHRhcCh2aWV3TW9kZWwgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnN1Ym1pc3Npb24kLm5leHQoe2RhdGE6IHZpZXdNb2RlbH0pO1xuICAgICAgICAgICAgICB0aGlzLmNoYW5nZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLl9pc1dpemFyZCA9IHRoaXMuZm9ybWlvLmZvcm0uZGlzcGxheSA9PT0gJ3dpemFyZCc7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVZpZXdNb2RlbEZvclN0YXJ0Rm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmckXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKHVwZGF0aW5nID0+IHtcbiAgICAgICAgICBpZiAoIXVwZGF0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5mb3JtTmFtZSQsIHRoaXMucHJvY2Vzc0RlZmluaXRpb25LZXkkLCB0aGlzLmNoYW5nZSRdKS5waXBlKFxuICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICBzd2l0Y2hNYXAoKFtmb3JtTmFtZSwgcHJvY2Vzc0RlZmluaXRpb25LZXksIGNoYW5nZV0pID0+XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3TW9kZWxTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAudXBkYXRlVmlld01vZGVsRm9yU3RhcnRGb3JtKFxuICAgICAgICAgICAgICAgICAgICBmb3JtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0RlZmluaXRpb25LZXksXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1pby5mb3JtaW8ucGFnZSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNXaXphcmRcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YXAoe1xuICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IHZpZXdNb2RlbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWJtaXNzaW9uID0gdGhpcy5zdWJtaXNzaW9uJC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pc3Npb24uZGF0YSA9IHZpZXdNb2RlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWlzc2lvbiQubmV4dChzdWJtaXNzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUGFnZUNoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoRm9ybS5lbWl0KHtzdWJtaXNzaW9uOiBzdWJtaXNzaW9ufSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGb3JtRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvZihudWxsKTsgLy8gRmFsbGJhY2sgdG8gcmV0dXJuIGFuIG9ic2VydmFibGUgaWYgdXBkYXRpbmcgaXMgdHJ1ZVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxkaXZcbiAgY2xhc3M9XCJmb3JtLWNvbnRhaW5lciBmb3JtaW8tY2FyYm9uXCJcbiAgKm5nSWY9XCJ7XG4gICAgc3VibWlzc2lvbjogc3VibWlzc2lvbiQgfCBhc3luYyxcbiAgICBmb3JtOiBmb3JtJCB8IGFzeW5jLFxuICAgIHRva2VuU2V0SW5Mb2NhbFN0b3JhZ2U6IHRva2VuU2V0SW5Mb2NhbFN0b3JhZ2UkIHwgYXN5bmMsXG4gICAgZm9ybWlvT3B0aW9uczogZm9ybWlvT3B0aW9ucyQgfCBhc3luYyxcbiAgICBsb2FkaW5nOiBsb2FkaW5nJCB8IGFzeW5jLFxuICB9IGFzIG9ic1wiXG4+XG4gIDxkaXYgKm5nSWY9XCJvYnMubG9hZGluZ1wiIGNsYXNzPVwib3ZlcmxheVwiPlxuICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyXCI+XG4gICAgICA8aSBjbGFzcz1cImZhIGZhLXNwaW5uZXIgZmEtc3BpblwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cImVycm9ycy5sZW5ndGggPiAwXCIgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgcHQtNSBwYi01IG1iLTJcIj5cbiAgICA8b2w+XG4gICAgICA8bGkgKm5nRm9yPVwibGV0IGVycm9yIG9mIGVycm9yc1wiIGNsYXNzPVwicGwtMlwiPlxuICAgICAgICB7eyBlcnJvciB9fVxuICAgICAgPC9saT5cbiAgICA8L29sPlxuICA8L2Rpdj5cblxuICA8Zm9ybWlvXG4gICAgI2Zvcm1pb1xuICAgIFtzdWJtaXNzaW9uXT1cIm9icy5zdWJtaXNzaW9uXCJcbiAgICBbZm9ybV09XCJvYnMuZm9ybVwiXG4gICAgW29wdGlvbnNdPVwib2JzLmZvcm1pb09wdGlvbnNcIlxuICAgIFtyZWZyZXNoXT1cInJlZnJlc2hGb3JtXCJcbiAgICAoc3VibWl0KT1cIm9uU3VibWl0KCRldmVudClcIlxuICAgIChjaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgKGZvY3VzaW4pPVwib25Gb2N1cygkZXZlbnQpXCJcbiAgICAoZm9jdXNvdXQpPVwib25CbHVyKCRldmVudClcIlxuICAgIChuZXh0UGFnZSk9XCJvbk5leHRQYWdlKClcIlxuICAgIChwcmV2UGFnZSk9XCJvblByZXZpb3VzUGFnZSgpXCJcbiAgPjwvZm9ybWlvPlxuPC9kaXY+XG4iXX0=
|
|
@@ -35,12 +35,15 @@ export class ViewModelService extends BaseApiService {
|
|
|
35
35
|
headers: new HttpHeaders().set(InterceptorSkip, '400'),
|
|
36
36
|
});
|
|
37
37
|
}
|
|
38
|
-
updateViewModel(formName, taskInstanceId, viewModel) {
|
|
38
|
+
updateViewModel(formName, taskInstanceId, viewModel, page, isWizard) {
|
|
39
|
+
const params = {
|
|
40
|
+
formName,
|
|
41
|
+
taskInstanceId,
|
|
42
|
+
isWizard,
|
|
43
|
+
...(!isNaN(page) && { page }),
|
|
44
|
+
};
|
|
39
45
|
return this.httpClient.post(this.getApiUrl(`/v1/form/view-model/user-task`), viewModel, {
|
|
40
|
-
params
|
|
41
|
-
formName,
|
|
42
|
-
taskInstanceId,
|
|
43
|
-
},
|
|
46
|
+
params,
|
|
44
47
|
headers: new HttpHeaders().set(InterceptorSkip, '400'),
|
|
45
48
|
});
|
|
46
49
|
}
|
|
@@ -62,12 +65,15 @@ export class ViewModelService extends BaseApiService {
|
|
|
62
65
|
headers: new HttpHeaders().set(InterceptorSkip, '400'),
|
|
63
66
|
});
|
|
64
67
|
}
|
|
65
|
-
updateViewModelForStartForm(formName, processDefinitionKey, viewModel) {
|
|
68
|
+
updateViewModelForStartForm(formName, processDefinitionKey, viewModel, page, isWizard) {
|
|
69
|
+
const params = {
|
|
70
|
+
formName,
|
|
71
|
+
processDefinitionKey,
|
|
72
|
+
isWizard,
|
|
73
|
+
...(!isNaN(page) && { page }),
|
|
74
|
+
};
|
|
66
75
|
return this.httpClient.post(this.getApiUrl(`/v1/form/view-model/start-form`), viewModel, {
|
|
67
|
-
params
|
|
68
|
-
formName,
|
|
69
|
-
processDefinitionKey,
|
|
70
|
-
},
|
|
76
|
+
params,
|
|
71
77
|
headers: new HttpHeaders().set(InterceptorSkip, '400'),
|
|
72
78
|
});
|
|
73
79
|
}
|
|
@@ -88,4 +94,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
88
94
|
type: Injectable,
|
|
89
95
|
args: [{ providedIn: 'root' }]
|
|
90
96
|
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.ConfigService }] });
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1tb2RlbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9mb3JtLXZpZXctbW9kZWwvc3JjL2xpYi9zZXJ2aWNlcy92aWV3LW1vZGVsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBYSxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUU3RCxPQUFPLEVBQUMsY0FBYyxFQUFnQixNQUFNLGlCQUFpQixDQUFDO0FBQzlELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQzs7OztBQUdsRCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsY0FBYztJQUNsRCxZQUNxQixVQUFzQixFQUN0QixhQUE0QjtRQUUvQyxLQUFLLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBSGQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUdqRCxDQUFDO0lBRU0sWUFBWSxDQUFDLFFBQWdCLEVBQUUsY0FBc0I7UUFDMUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBTSxJQUFJLENBQUMsU0FBUyxDQUFDLCtCQUErQixDQUFDLEVBQUU7WUFDL0UsTUFBTSxFQUFFO2dCQUNOLFFBQVE7Z0JBQ1IsY0FBYzthQUNmO1lBQ0QsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUM7U0FDdkQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGVBQWUsQ0FDcEIsUUFBZ0IsRUFDaEIsY0FBc0IsRUFDdEIsU0FBaUIsRUFDakIsSUFBWSxFQUNaLFFBQWlCO1FBRWpCLE1BQU0sTUFBTSxHQUFHO1lBQ2IsUUFBUTtZQUNSLGNBQWM7WUFDZCxRQUFRO1lBQ1IsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLENBQUM7U0FDNUIsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQywrQkFBK0IsQ0FBQyxFQUFFLFNBQVMsRUFBRTtZQUN0RixNQUFNO1lBQ04sT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUM7U0FDdkQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGVBQWUsQ0FDcEIsUUFBZ0IsRUFDaEIsY0FBc0IsRUFDdEIsU0FBaUI7UUFFakIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLHNDQUFzQyxDQUFDLEVBQUUsU0FBUyxFQUFFO1lBQzdGLE1BQU0sRUFBRTtnQkFDTixRQUFRO2dCQUNSLGNBQWM7YUFDZjtZQUNELE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDO1NBQ3ZELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSx3QkFBd0IsQ0FDN0IsUUFBZ0IsRUFDaEIsb0JBQTRCO1FBRTVCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFO1lBQ2hGLE1BQU0sRUFBRTtnQkFDTixRQUFRO2dCQUNSLG9CQUFvQjthQUNyQjtZQUNELE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDO1NBQ3ZELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSwyQkFBMkIsQ0FDaEMsUUFBZ0IsRUFDaEIsb0JBQTRCLEVBQzVCLFNBQWlCLEVBQ2pCLElBQVksRUFDWixRQUFpQjtRQUVqQixNQUFNLE1BQU0sR0FBRztZQUNiLFFBQVE7WUFDUixvQkFBb0I7WUFDcEIsUUFBUTtZQUNSLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxDQUFDO1NBQzVCLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZ0NBQWdDLENBQUMsRUFBRSxTQUFTLEVBQUU7WUFDdkYsTUFBTTtZQUNOLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDO1NBQ3ZELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSwyQkFBMkIsQ0FDaEMsUUFBZ0IsRUFDaEIsb0JBQTRCLEVBQzVCLHNCQUE4QixFQUM5QixTQUFpQjtRQUVqQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLHVDQUF1QyxDQUFDLEVBQ3ZELFNBQVMsRUFDVDtZQUNFLE1BQU0sRUFBRTtnQkFDTixRQUFRO2dCQUNSLG9CQUFvQjtnQkFDcEIsc0JBQXNCO2FBQ3ZCO1lBQ0QsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUM7U0FDdkQsQ0FDRixDQUFDO0lBQ0osQ0FBQzsrR0FyR1UsZ0JBQWdCO21IQUFoQixnQkFBZ0IsY0FESixNQUFNOzs0RkFDbEIsZ0JBQWdCO2tCQUQ1QixVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBIZWFkZXJzfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtCYXNlQXBpU2VydmljZSwgQ29uZmlnU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7SW50ZXJjZXB0b3JTa2lwfSBmcm9tICdAdmFsdGltby9zZWN1cml0eSc7XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIFZpZXdNb2RlbFNlcnZpY2UgZXh0ZW5kcyBCYXNlQXBpU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByZWFkb25seSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgIHByb3RlY3RlZCByZWFkb25seSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGh0dHBDbGllbnQsIGNvbmZpZ1NlcnZpY2UpO1xuICB9XG5cbiAgcHVibGljIGdldFZpZXdNb2RlbChmb3JtTmFtZTogc3RyaW5nLCB0YXNrSW5zdGFuY2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxvYmplY3Q+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxhbnk+KHRoaXMuZ2V0QXBpVXJsKCcvdjEvZm9ybS92aWV3LW1vZGVsL3VzZXItdGFzaycpLCB7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgZm9ybU5hbWUsXG4gICAgICAgIHRhc2tJbnN0YW5jZUlkLFxuICAgICAgfSxcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldChJbnRlcmNlcHRvclNraXAsICc0MDAnKSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVWaWV3TW9kZWwoXG4gICAgZm9ybU5hbWU6IHN0cmluZyxcbiAgICB0YXNrSW5zdGFuY2VJZDogc3RyaW5nLFxuICAgIHZpZXdNb2RlbDogb2JqZWN0LFxuICAgIHBhZ2U6IG51bWJlcixcbiAgICBpc1dpemFyZDogYm9vbGVhblxuICApOiBPYnNlcnZhYmxlPG9iamVjdD4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGZvcm1OYW1lLFxuICAgICAgdGFza0luc3RhbmNlSWQsXG4gICAgICBpc1dpemFyZCxcbiAgICAgIC4uLighaXNOYU4ocGFnZSkgJiYge3BhZ2V9KSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdCh0aGlzLmdldEFwaVVybChgL3YxL2Zvcm0vdmlldy1tb2RlbC91c2VyLXRhc2tgKSwgdmlld01vZGVsLCB7XG4gICAgICBwYXJhbXMsXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoSW50ZXJjZXB0b3JTa2lwLCAnNDAwJyksXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3VibWl0Vmlld01vZGVsKFxuICAgIGZvcm1OYW1lOiBzdHJpbmcsXG4gICAgdGFza0luc3RhbmNlSWQ6IHN0cmluZyxcbiAgICB2aWV3TW9kZWw6IG9iamVjdFxuICApOiBPYnNlcnZhYmxlPG9iamVjdD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdCh0aGlzLmdldEFwaVVybChgL3YxL2Zvcm0vdmlldy1tb2RlbC9zdWJtaXQvdXNlci10YXNrYCksIHZpZXdNb2RlbCwge1xuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIGZvcm1OYW1lLFxuICAgICAgICB0YXNrSW5zdGFuY2VJZCxcbiAgICAgIH0sXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoSW50ZXJjZXB0b3JTa2lwLCAnNDAwJyksXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Vmlld01vZGVsRm9yU3RhcnRGb3JtKFxuICAgIGZvcm1OYW1lOiBzdHJpbmcsXG4gICAgcHJvY2Vzc0RlZmluaXRpb25LZXk6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPG9iamVjdD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PGFueT4odGhpcy5nZXRBcGlVcmwoJy92MS9mb3JtL3ZpZXctbW9kZWwvc3RhcnQtZm9ybScpLCB7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgZm9ybU5hbWUsXG4gICAgICAgIHByb2Nlc3NEZWZpbml0aW9uS2V5LFxuICAgICAgfSxcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldChJbnRlcmNlcHRvclNraXAsICc0MDAnKSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVWaWV3TW9kZWxGb3JTdGFydEZvcm0oXG4gICAgZm9ybU5hbWU6IHN0cmluZyxcbiAgICBwcm9jZXNzRGVmaW5pdGlvbktleTogc3RyaW5nLFxuICAgIHZpZXdNb2RlbDogb2JqZWN0LFxuICAgIHBhZ2U6IG51bWJlcixcbiAgICBpc1dpemFyZDogYm9vbGVhblxuICApOiBPYnNlcnZhYmxlPG9iamVjdD4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGZvcm1OYW1lLFxuICAgICAgcHJvY2Vzc0RlZmluaXRpb25LZXksXG4gICAgICBpc1dpemFyZCxcbiAgICAgIC4uLighaXNOYU4ocGFnZSkgJiYge3BhZ2V9KSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdCh0aGlzLmdldEFwaVVybChgL3YxL2Zvcm0vdmlldy1tb2RlbC9zdGFydC1mb3JtYCksIHZpZXdNb2RlbCwge1xuICAgICAgcGFyYW1zLFxuICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KEludGVyY2VwdG9yU2tpcCwgJzQwMCcpLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN1Ym1pdFZpZXdNb2RlbEZvclN0YXJ0Rm9ybShcbiAgICBmb3JtTmFtZTogc3RyaW5nLFxuICAgIHByb2Nlc3NEZWZpbml0aW9uS2V5OiBzdHJpbmcsXG4gICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nLFxuICAgIHZpZXdNb2RlbDogb2JqZWN0XG4gICk6IE9ic2VydmFibGU8b2JqZWN0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0KFxuICAgICAgdGhpcy5nZXRBcGlVcmwoYC92MS9mb3JtL3ZpZXctbW9kZWwvc3VibWl0L3N0YXJ0LWZvcm1gKSxcbiAgICAgIHZpZXdNb2RlbCxcbiAgICAgIHtcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgZm9ybU5hbWUsXG4gICAgICAgICAgcHJvY2Vzc0RlZmluaXRpb25LZXksXG4gICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZSxcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KEludGVyY2VwdG9yU2tpcCwgJzQwMCcpLFxuICAgICAgfVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { Injectable, EventEmitter, Component, ViewChild, Input, Output, NgModule } from '@angular/core';
|
|
3
3
|
import moment from 'moment';
|
|
4
|
-
import { BehaviorSubject, combineLatest, take, switchMap, of, catchError, EMPTY, tap
|
|
4
|
+
import { BehaviorSubject, Subject, combineLatest, withLatestFrom, take, filter, debounceTime, switchMap, of, catchError, EMPTY, tap } from 'rxjs';
|
|
5
5
|
import * as i5 from '@formio/angular';
|
|
6
6
|
import { FormioModule } from '@formio/angular';
|
|
7
7
|
import { map, distinctUntilChanged } from 'rxjs/operators';
|
|
8
8
|
import { deepmerge } from 'deepmerge-ts';
|
|
9
9
|
import * as i4 from '@angular/common';
|
|
10
10
|
import { CommonModule } from '@angular/common';
|
|
11
|
+
import { isEqual } from 'lodash';
|
|
11
12
|
import * as i1 from '@angular/common/http';
|
|
12
13
|
import { HttpHeaders } from '@angular/common/http';
|
|
13
14
|
import * as i2 from '@valtimo/config';
|
|
@@ -46,12 +47,15 @@ class ViewModelService extends BaseApiService {
|
|
|
46
47
|
headers: new HttpHeaders().set(InterceptorSkip, '400'),
|
|
47
48
|
});
|
|
48
49
|
}
|
|
49
|
-
updateViewModel(formName, taskInstanceId, viewModel) {
|
|
50
|
+
updateViewModel(formName, taskInstanceId, viewModel, page, isWizard) {
|
|
51
|
+
const params = {
|
|
52
|
+
formName,
|
|
53
|
+
taskInstanceId,
|
|
54
|
+
isWizard,
|
|
55
|
+
...(!isNaN(page) && { page }),
|
|
56
|
+
};
|
|
50
57
|
return this.httpClient.post(this.getApiUrl(`/v1/form/view-model/user-task`), viewModel, {
|
|
51
|
-
params
|
|
52
|
-
formName,
|
|
53
|
-
taskInstanceId,
|
|
54
|
-
},
|
|
58
|
+
params,
|
|
55
59
|
headers: new HttpHeaders().set(InterceptorSkip, '400'),
|
|
56
60
|
});
|
|
57
61
|
}
|
|
@@ -73,12 +77,15 @@ class ViewModelService extends BaseApiService {
|
|
|
73
77
|
headers: new HttpHeaders().set(InterceptorSkip, '400'),
|
|
74
78
|
});
|
|
75
79
|
}
|
|
76
|
-
updateViewModelForStartForm(formName, processDefinitionKey, viewModel) {
|
|
80
|
+
updateViewModelForStartForm(formName, processDefinitionKey, viewModel, page, isWizard) {
|
|
81
|
+
const params = {
|
|
82
|
+
formName,
|
|
83
|
+
processDefinitionKey,
|
|
84
|
+
isWizard,
|
|
85
|
+
...(!isNaN(page) && { page }),
|
|
86
|
+
};
|
|
77
87
|
return this.httpClient.post(this.getApiUrl(`/v1/form/view-model/start-form`), viewModel, {
|
|
78
|
-
params
|
|
79
|
-
formName,
|
|
80
|
-
processDefinitionKey,
|
|
81
|
-
},
|
|
88
|
+
params,
|
|
82
89
|
headers: new HttpHeaders().set(InterceptorSkip, '400'),
|
|
83
90
|
});
|
|
84
91
|
}
|
|
@@ -154,9 +161,6 @@ class FormViewModelComponent {
|
|
|
154
161
|
set taskInstanceId(taskInstanceId) {
|
|
155
162
|
this.taskInstanceId$.next(taskInstanceId);
|
|
156
163
|
}
|
|
157
|
-
set readOnly(readOnlyValue) {
|
|
158
|
-
this.readOnly$.next(readOnlyValue);
|
|
159
|
-
}
|
|
160
164
|
set isStartForm(isStartFormValue) {
|
|
161
165
|
this.isStartForm$.next(isStartFormValue);
|
|
162
166
|
}
|
|
@@ -171,20 +175,25 @@ class FormViewModelComponent {
|
|
|
171
175
|
this.translateService = translateService;
|
|
172
176
|
this.stateService = stateService;
|
|
173
177
|
this.formSubmit = new EventEmitter();
|
|
178
|
+
this.errors = [];
|
|
174
179
|
this.refreshForm = new EventEmitter();
|
|
180
|
+
this._preventNextPage = false;
|
|
181
|
+
this._preventPreviousPage = false;
|
|
182
|
+
this._isWizard = false;
|
|
175
183
|
this.submission$ = new BehaviorSubject({});
|
|
176
184
|
this.form$ = new BehaviorSubject(undefined);
|
|
177
185
|
this.formName$ = new BehaviorSubject(undefined);
|
|
178
186
|
this.options$ = new BehaviorSubject(undefined);
|
|
179
187
|
this.taskInstanceId$ = new BehaviorSubject(undefined);
|
|
180
|
-
this.readOnly$ = new BehaviorSubject(false);
|
|
181
188
|
this.tokenSetInLocalStorage$ = new BehaviorSubject(false);
|
|
182
189
|
this.change$ = new BehaviorSubject(null);
|
|
183
|
-
this.
|
|
190
|
+
this.blur$ = new Subject();
|
|
191
|
+
this.focus$ = new BehaviorSubject(null);
|
|
184
192
|
this.loading$ = new BehaviorSubject(true);
|
|
185
193
|
this.isStartForm$ = new BehaviorSubject(false);
|
|
186
194
|
this.processDefinitionKey$ = new BehaviorSubject(undefined);
|
|
187
195
|
this.documentDefinitionName$ = new BehaviorSubject(undefined);
|
|
196
|
+
this.updateForm = new Subject();
|
|
188
197
|
this.currentLanguage$ = this.translateService.stream('key').pipe(map(() => this.translateService.currentLang), distinctUntilChanged());
|
|
189
198
|
this._overrideOptions$ = new BehaviorSubject({
|
|
190
199
|
hooks: {
|
|
@@ -200,11 +209,14 @@ class FormViewModelComponent {
|
|
|
200
209
|
const defaultOptions = {
|
|
201
210
|
...options,
|
|
202
211
|
language,
|
|
203
|
-
...(formioTranslations === 'object'
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
212
|
+
...(typeof formioTranslations === 'object'
|
|
213
|
+
? {
|
|
214
|
+
language,
|
|
215
|
+
i18n: {
|
|
216
|
+
[language]: this.stateService.flattenTranslationsObject(formioTranslations),
|
|
217
|
+
},
|
|
218
|
+
}
|
|
219
|
+
: {}),
|
|
208
220
|
};
|
|
209
221
|
return deepmerge(defaultOptions, overrideOptions);
|
|
210
222
|
}));
|
|
@@ -216,6 +228,32 @@ class FormViewModelComponent {
|
|
|
216
228
|
else {
|
|
217
229
|
this.loadInitialViewModel();
|
|
218
230
|
}
|
|
231
|
+
this.focusSubscription = this.focus$
|
|
232
|
+
.pipe(withLatestFrom(this.change$))
|
|
233
|
+
.subscribe(data => {
|
|
234
|
+
const dataAtFocus = !!data[1] && !!data[1].data ? JSON.parse(JSON.stringify(data[1].data)) : null;
|
|
235
|
+
this.blur$
|
|
236
|
+
.pipe(take(1))
|
|
237
|
+
.pipe(withLatestFrom(this.change$))
|
|
238
|
+
.subscribe(dataBlur => {
|
|
239
|
+
const dataEqual = isEqual(dataAtFocus, dataBlur[1]?.data);
|
|
240
|
+
if (!dataEqual) {
|
|
241
|
+
this.updateForm.next(true);
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
this.updateSubscription = this.updateForm.pipe(filter(it => it), debounceTime(500)).subscribe(() => {
|
|
246
|
+
if (this.isStartForm$.value) {
|
|
247
|
+
this.updateViewModelForStartForm();
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
this.updateViewModel();
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
ngOnDestroy() {
|
|
255
|
+
this.focusSubscription.unsubscribe();
|
|
256
|
+
this.updateSubscription.unsubscribe();
|
|
219
257
|
}
|
|
220
258
|
beforeSubmitHook(instance) {
|
|
221
259
|
return (submission, callback) => instance.beforeSubmit(submission, callback);
|
|
@@ -236,7 +274,7 @@ class FormViewModelComponent {
|
|
|
236
274
|
return of(response);
|
|
237
275
|
}), catchError(error => {
|
|
238
276
|
this.handleFormError(error);
|
|
239
|
-
callback({ message:
|
|
277
|
+
callback({ message: ' ', component: null }, null);
|
|
240
278
|
return EMPTY; // return an empty observable to complete the stream
|
|
241
279
|
}))
|
|
242
280
|
: this.viewModelService
|
|
@@ -246,32 +284,67 @@ class FormViewModelComponent {
|
|
|
246
284
|
return of(response);
|
|
247
285
|
}), catchError(error => {
|
|
248
286
|
this.handleFormError(error);
|
|
249
|
-
callback({ message:
|
|
287
|
+
callback({ message: ' ', component: null }, null);
|
|
250
288
|
return EMPTY; // return an empty observable to complete the stream
|
|
251
289
|
}))))
|
|
252
290
|
.subscribe();
|
|
253
291
|
}
|
|
254
292
|
handleFormError(error) {
|
|
255
293
|
const formInstance = this.formio.formio;
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
294
|
+
this.errors = [];
|
|
295
|
+
if (error.error.componentErrors) {
|
|
296
|
+
error.error.componentErrors.forEach(componentError => {
|
|
297
|
+
const component = formInstance.getComponent(componentError.component);
|
|
298
|
+
if (component == null) {
|
|
299
|
+
this.errors.push(componentError.message);
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
component?.setCustomValidity(componentError.message);
|
|
303
|
+
}
|
|
304
|
+
});
|
|
260
305
|
}
|
|
261
306
|
else {
|
|
262
|
-
component
|
|
263
|
-
|
|
307
|
+
const component = formInstance.getComponent(error.error?.component);
|
|
308
|
+
if (component == null) {
|
|
309
|
+
this.errors.push(error.error.error);
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
component?.setCustomValidity(error.error.error);
|
|
313
|
+
}
|
|
264
314
|
}
|
|
265
315
|
}
|
|
266
316
|
onSubmit(submission) {
|
|
267
317
|
this.formSubmit.next(submission);
|
|
268
318
|
}
|
|
319
|
+
onFocus($event) {
|
|
320
|
+
this.focus$.next($event);
|
|
321
|
+
}
|
|
322
|
+
onBlur(blurEvent) {
|
|
323
|
+
this.blur$.next(blurEvent);
|
|
324
|
+
}
|
|
269
325
|
onChange(object) {
|
|
270
326
|
if (object.data) {
|
|
271
327
|
this.change$.next(object);
|
|
272
328
|
}
|
|
273
|
-
|
|
274
|
-
|
|
329
|
+
}
|
|
330
|
+
onNextPage() {
|
|
331
|
+
this._preventNextPage = true;
|
|
332
|
+
this.formio.formio.setPage(this.formio.formio.page - 1);
|
|
333
|
+
this.updateForm.next(true);
|
|
334
|
+
}
|
|
335
|
+
onPreviousPage() {
|
|
336
|
+
this._preventPreviousPage = true;
|
|
337
|
+
this.formio.formio.setPage(this.formio.formio.page + 1);
|
|
338
|
+
this.updateForm.next(true);
|
|
339
|
+
}
|
|
340
|
+
handlePageChange() {
|
|
341
|
+
if (this._preventNextPage) {
|
|
342
|
+
this._preventNextPage = false;
|
|
343
|
+
this.formio.formio.setPage(this.formio.formio.page + 1);
|
|
344
|
+
}
|
|
345
|
+
else if (this._preventPreviousPage) {
|
|
346
|
+
this._preventPreviousPage = false;
|
|
347
|
+
this.formio.formio.setPage(this.formio.formio.page - 1);
|
|
275
348
|
}
|
|
276
349
|
}
|
|
277
350
|
loadInitialViewModel() {
|
|
@@ -281,6 +354,7 @@ class FormViewModelComponent {
|
|
|
281
354
|
this.change$.pipe(take(1)).subscribe(() => {
|
|
282
355
|
this.loading$.next(false);
|
|
283
356
|
});
|
|
357
|
+
this._isWizard = this.formio.form.display === 'wizard';
|
|
284
358
|
}))))
|
|
285
359
|
.subscribe();
|
|
286
360
|
}
|
|
@@ -289,11 +363,17 @@ class FormViewModelComponent {
|
|
|
289
363
|
.pipe(take(1), switchMap(updating => {
|
|
290
364
|
if (!updating) {
|
|
291
365
|
this.loading$.next(true);
|
|
292
|
-
return combineLatest([this.formName$, this.taskInstanceId$, this.change$]).pipe(take(1), switchMap(([formName, taskInstanceId, change]) => this.viewModelService
|
|
366
|
+
return combineLatest([this.formName$, this.taskInstanceId$, this.change$]).pipe(take(1), switchMap(([formName, taskInstanceId, change]) => this.viewModelService
|
|
367
|
+
.updateViewModel(formName, taskInstanceId, change.data, this.formio.formio.page, this._isWizard)
|
|
368
|
+
.pipe(tap({
|
|
293
369
|
next: viewModel => {
|
|
294
|
-
this.submission$.
|
|
370
|
+
const submission = this.submission$.value;
|
|
371
|
+
submission.data = viewModel;
|
|
372
|
+
this.submission$.next(submission);
|
|
373
|
+
this.handlePageChange();
|
|
374
|
+
this.refreshForm.emit({ submission: submission });
|
|
295
375
|
this.loading$.next(false);
|
|
296
|
-
this.errors
|
|
376
|
+
this.errors = [];
|
|
297
377
|
},
|
|
298
378
|
error: error => {
|
|
299
379
|
this.loading$.next(false);
|
|
@@ -312,6 +392,7 @@ class FormViewModelComponent {
|
|
|
312
392
|
this.change$.pipe(take(1)).subscribe(() => {
|
|
313
393
|
this.loading$.next(false);
|
|
314
394
|
});
|
|
395
|
+
this._isWizard = this.formio.form.display === 'wizard';
|
|
315
396
|
}))))
|
|
316
397
|
.subscribe();
|
|
317
398
|
}
|
|
@@ -321,12 +402,16 @@ class FormViewModelComponent {
|
|
|
321
402
|
if (!updating) {
|
|
322
403
|
this.loading$.next(true);
|
|
323
404
|
return combineLatest([this.formName$, this.processDefinitionKey$, this.change$]).pipe(take(1), switchMap(([formName, processDefinitionKey, change]) => this.viewModelService
|
|
324
|
-
.updateViewModelForStartForm(formName, processDefinitionKey, change.data)
|
|
405
|
+
.updateViewModelForStartForm(formName, processDefinitionKey, change.data, this.formio.formio.page, this._isWizard)
|
|
325
406
|
.pipe(tap({
|
|
326
407
|
next: viewModel => {
|
|
327
|
-
this.submission$.
|
|
408
|
+
const submission = this.submission$.value;
|
|
409
|
+
submission.data = viewModel;
|
|
410
|
+
this.submission$.next(submission);
|
|
411
|
+
this.handlePageChange();
|
|
412
|
+
this.refreshForm.emit({ submission: submission });
|
|
328
413
|
this.loading$.next(false);
|
|
329
|
-
this.errors
|
|
414
|
+
this.errors = [];
|
|
330
415
|
},
|
|
331
416
|
error: error => {
|
|
332
417
|
this.loading$.next(false);
|
|
@@ -338,26 +423,12 @@ class FormViewModelComponent {
|
|
|
338
423
|
}))
|
|
339
424
|
.subscribe();
|
|
340
425
|
}
|
|
341
|
-
handleChanges() {
|
|
342
|
-
this.change$
|
|
343
|
-
.pipe(pairwise(), debounceTime(500), filter(([prevChange, currentChange]) => prevChange?.changed?.value !== undefined &&
|
|
344
|
-
currentChange?.changed?.value !== undefined &&
|
|
345
|
-
prevChange.changed.value !== currentChange.changed.value))
|
|
346
|
-
.subscribe(() => {
|
|
347
|
-
if (this.isStartForm$.value) {
|
|
348
|
-
this.updateViewModelForStartForm();
|
|
349
|
-
}
|
|
350
|
-
else {
|
|
351
|
-
this.updateViewModel();
|
|
352
|
-
}
|
|
353
|
-
});
|
|
354
|
-
}
|
|
355
426
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormViewModelComponent, deps: [{ token: ViewModelService }, { token: i2$1.TranslateService }, { token: i3.FormIoStateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
356
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
427
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FormViewModelComponent, isStandalone: true, selector: "valtimo-form-view-model", inputs: { options: "options", submission: "submission", form: "form", formName: "formName", taskInstanceId: "taskInstanceId", isStartForm: "isStartForm", processDefinitionKey: "processDefinitionKey", documentDefinitionName: "documentDefinitionName" }, outputs: { formSubmit: "formSubmit" }, viewQueries: [{ propertyName: "formio", first: true, predicate: ["formio"], 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<div\n class=\"form-container formio-carbon\"\n *ngIf=\"{\n submission: submission$ | async,\n form: form$ | async,\n tokenSetInLocalStorage: tokenSetInLocalStorage$ | async,\n formioOptions: formioOptions$ | async,\n loading: loading$ | async,\n } as obs\"\n>\n <div *ngIf=\"obs.loading\" class=\"overlay\">\n <div class=\"spinner\">\n <i class=\"fa fa-spinner fa-spin\"></i>\n </div>\n </div>\n\n <div *ngIf=\"errors.length > 0\" class=\"alert alert-danger pt-5 pb-5 mb-2\">\n <ol>\n <li *ngFor=\"let error of errors\" class=\"pl-2\">\n {{ error }}\n </li>\n </ol>\n </div>\n\n <formio\n #formio\n [submission]=\"obs.submission\"\n [form]=\"obs.form\"\n [options]=\"obs.formioOptions\"\n [refresh]=\"refreshForm\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n (focusin)=\"onFocus($event)\"\n (focusout)=\"onBlur($event)\"\n (nextPage)=\"onNextPage()\"\n (prevPage)=\"onPreviousPage()\"\n ></formio>\n</div>\n", styles: [".form-container{position:relative}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#fffc;z-index:1000;display:flex;justify-content:center;align-items:center;pointer-events:all}.spinner{font-size:3rem;color:#007bff}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormioModule }, { kind: "component", type: i5.FormioComponent, selector: "formio" }] }); }
|
|
357
428
|
}
|
|
358
429
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormViewModelComponent, decorators: [{
|
|
359
430
|
type: Component,
|
|
360
|
-
args: [{ selector: 'valtimo-form-view-model', standalone: true, imports: [CommonModule, FormioModule], 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<div\n class=\"form-container\"\n *ngIf=\"{\n submission: submission$ | async,\n
|
|
431
|
+
args: [{ selector: 'valtimo-form-view-model', standalone: true, imports: [CommonModule, FormioModule], 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<div\n class=\"form-container formio-carbon\"\n *ngIf=\"{\n submission: submission$ | async,\n form: form$ | async,\n tokenSetInLocalStorage: tokenSetInLocalStorage$ | async,\n formioOptions: formioOptions$ | async,\n loading: loading$ | async,\n } as obs\"\n>\n <div *ngIf=\"obs.loading\" class=\"overlay\">\n <div class=\"spinner\">\n <i class=\"fa fa-spinner fa-spin\"></i>\n </div>\n </div>\n\n <div *ngIf=\"errors.length > 0\" class=\"alert alert-danger pt-5 pb-5 mb-2\">\n <ol>\n <li *ngFor=\"let error of errors\" class=\"pl-2\">\n {{ error }}\n </li>\n </ol>\n </div>\n\n <formio\n #formio\n [submission]=\"obs.submission\"\n [form]=\"obs.form\"\n [options]=\"obs.formioOptions\"\n [refresh]=\"refreshForm\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n (focusin)=\"onFocus($event)\"\n (focusout)=\"onBlur($event)\"\n (nextPage)=\"onNextPage()\"\n (prevPage)=\"onPreviousPage()\"\n ></formio>\n</div>\n", styles: [".form-container{position:relative}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#fffc;z-index:1000;display:flex;justify-content:center;align-items:center;pointer-events:all}.spinner{font-size:3rem;color:#007bff}\n"] }]
|
|
361
432
|
}], ctorParameters: () => [{ type: ViewModelService }, { type: i2$1.TranslateService }, { type: i3.FormIoStateService }], propDecorators: { formio: [{
|
|
362
433
|
type: ViewChild,
|
|
363
434
|
args: ['formio']
|
|
@@ -371,16 +442,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
371
442
|
type: Input
|
|
372
443
|
}], taskInstanceId: [{
|
|
373
444
|
type: Input
|
|
374
|
-
}], readOnly: [{
|
|
375
|
-
type: Input
|
|
376
445
|
}], isStartForm: [{
|
|
377
446
|
type: Input
|
|
378
447
|
}], processDefinitionKey: [{
|
|
379
448
|
type: Input
|
|
380
449
|
}], documentDefinitionName: [{
|
|
381
450
|
type: Input
|
|
382
|
-
}], formRefresh$: [{
|
|
383
|
-
type: Input
|
|
384
451
|
}], formSubmit: [{
|
|
385
452
|
type: Output
|
|
386
453
|
}] } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valtimo-form-view-model.mjs","sources":["../../../../projects/valtimo/form-view-model/src/lib/services/view-model.service.ts","../../../../projects/valtimo/form-view-model/src/lib/services/index.ts","../../../../projects/valtimo/form-view-model/src/lib/components/form-view-model/form-view-model.component.ts","../../../../projects/valtimo/form-view-model/src/lib/components/form-view-model/form-view-model.component.html","../../../../projects/valtimo/form-view-model/src/lib/components/form-view-model/index.ts","../../../../projects/valtimo/form-view-model/src/lib/form-view-model.module.ts","../../../../projects/valtimo/form-view-model/src/public_api.ts","../../../../projects/valtimo/form-view-model/src/valtimo-form-view-model.ts"],"sourcesContent":["/*\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\nimport {Injectable} from '@angular/core';\nimport {HttpClient, HttpHeaders, HttpParams, HttpResponse} from '@angular/common/http';\nimport {Observable} from 'rxjs';\nimport {BaseApiService, ConfigService} from '@valtimo/config';\nimport {InterceptorSkip} from '@valtimo/security';\n\n@Injectable({providedIn: 'root'})\nexport class ViewModelService extends BaseApiService {\n constructor(\n protected readonly httpClient: HttpClient,\n protected readonly configService: ConfigService\n ) {\n super(httpClient, configService);\n }\n\n public getViewModel(formName: string, taskInstanceId: string): Observable<object> {\n return this.httpClient.get<any>(this.getApiUrl('/v1/form/view-model/user-task'), {\n params: {\n formName,\n taskInstanceId,\n },\n headers: new HttpHeaders().set(InterceptorSkip, '400'),\n });\n }\n\n public updateViewModel(\n formName: string,\n taskInstanceId: string,\n viewModel: object\n ): Observable<object> {\n return this.httpClient.post(this.getApiUrl(`/v1/form/view-model/user-task`), viewModel, {\n params: {\n formName,\n taskInstanceId,\n },\n headers: new HttpHeaders().set(InterceptorSkip, '400'),\n });\n }\n\n public submitViewModel(\n formName: string,\n taskInstanceId: string,\n viewModel: object\n ): Observable<object> {\n return this.httpClient.post(this.getApiUrl(`/v1/form/view-model/submit/user-task`), viewModel, {\n params: {\n formName,\n taskInstanceId,\n },\n headers: new HttpHeaders().set(InterceptorSkip, '400'),\n });\n }\n\n public getViewModelForStartForm(\n formName: string,\n processDefinitionKey: string\n ): Observable<object> {\n return this.httpClient.get<any>(this.getApiUrl('/v1/form/view-model/start-form'), {\n params: {\n formName,\n processDefinitionKey,\n },\n headers: new HttpHeaders().set(InterceptorSkip, '400'),\n });\n }\n\n public updateViewModelForStartForm(\n formName: string,\n processDefinitionKey: string,\n viewModel: object\n ): Observable<object> {\n return this.httpClient.post(this.getApiUrl(`/v1/form/view-model/start-form`), viewModel, {\n params: {\n formName,\n processDefinitionKey,\n },\n headers: new HttpHeaders().set(InterceptorSkip, '400'),\n });\n }\n\n public submitViewModelForStartForm(\n formName: string,\n processDefinitionKey: string,\n documentDefinitionName: string,\n viewModel: object\n ): Observable<object> {\n return this.httpClient.post(\n this.getApiUrl(`/v1/form/view-model/submit/start-form`),\n viewModel,\n {\n params: {\n formName,\n processDefinitionKey,\n documentDefinitionName,\n },\n headers: new HttpHeaders().set(InterceptorSkip, '400'),\n }\n );\n }\n}\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\nexport * from './view-model.service';\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 */\nimport {Component, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';\nimport moment from 'moment';\nimport {\n BehaviorSubject,\n catchError,\n combineLatest,\n debounceTime,\n EMPTY,\n filter,\n Observable,\n of,\n pairwise,\n Subject,\n switchMap,\n take,\n tap,\n} from 'rxjs';\nimport {\n FormioComponent,\n FormioModule,\n FormioOptions,\n FormioSubmission,\n FormioSubmissionCallback,\n} from '@formio/angular';\nimport {FormioRefreshValue} from '@formio/angular/formio.common';\nimport {ViewModelService} from '../../services';\nimport {distinctUntilChanged, map} from 'rxjs/operators';\nimport {deepmerge} from 'deepmerge-ts';\nimport {FormIoStateService, ValtimoFormioOptions} from '@valtimo/components';\nimport {TranslateService} from '@ngx-translate/core';\nimport {HttpErrorResponse} from '@angular/common/http';\nimport {CommonModule} from '@angular/common';\n\nmoment.defaultFormat = 'DD MMM YYYY HH:mm';\n\n@Component({\n selector: 'valtimo-form-view-model',\n templateUrl: './form-view-model.component.html',\n styleUrls: ['./form-view-model.component.css'],\n standalone: true,\n imports: [CommonModule, FormioModule],\n})\nexport class FormViewModelComponent implements OnInit {\n @ViewChild('formio') formio: FormioComponent;\n\n @Input() set options(optionsValue: any) {\n this.options$.next(optionsValue);\n }\n\n @Input() set submission(submissionValue: FormioSubmission) {\n this.submission$.next(submissionValue);\n }\n\n @Input() set form(formValue: object) {\n const instance = this;\n const form = {\n loadInitialViewModel: () => instance.loadInitialViewModel(),\n updateViewModel: () => instance.updateViewModel(),\n ...formValue,\n };\n this.form$.next(form);\n }\n\n @Input() set formName(formName: string) {\n this.formName$.next(formName);\n }\n\n @Input() set taskInstanceId(taskInstanceId: string) {\n this.taskInstanceId$.next(taskInstanceId);\n }\n\n @Input() set readOnly(readOnlyValue: boolean) {\n this.readOnly$.next(readOnlyValue);\n }\n\n @Input() set isStartForm(isStartFormValue: boolean) {\n this.isStartForm$.next(isStartFormValue);\n }\n\n @Input() set processDefinitionKey(processDefinitionKeyValue: string) {\n this.processDefinitionKey$.next(processDefinitionKeyValue);\n }\n\n @Input() set documentDefinitionName(documentDefinitionNameValue: string) {\n this.documentDefinitionName$.next(documentDefinitionNameValue);\n }\n\n @Input() formRefresh$!: Subject<FormioRefreshValue>;\n @Output() formSubmit = new EventEmitter<any>();\n\n public refreshForm = new EventEmitter<FormioRefreshValue>();\n\n public readonly submission$ = new BehaviorSubject<any>({});\n public readonly form$ = new BehaviorSubject<object>(undefined);\n public readonly formName$ = new BehaviorSubject<string>(undefined);\n public readonly options$ = new BehaviorSubject<ValtimoFormioOptions>(undefined);\n public readonly taskInstanceId$ = new BehaviorSubject<string>(undefined);\n public readonly readOnly$ = new BehaviorSubject<boolean>(false);\n public readonly tokenSetInLocalStorage$ = new BehaviorSubject<boolean>(false);\n public readonly change$ = new BehaviorSubject<any>(null);\n public readonly errors$ = new BehaviorSubject<Array<string>>([]);\n public readonly loading$ = new BehaviorSubject<boolean>(true);\n public readonly isStartForm$ = new BehaviorSubject<boolean>(false);\n public readonly processDefinitionKey$ = new BehaviorSubject<string>(undefined);\n public readonly documentDefinitionName$ = new BehaviorSubject<string>(undefined);\n\n public readonly currentLanguage$ = this.translateService.stream('key').pipe(\n map(() => this.translateService.currentLang),\n distinctUntilChanged()\n );\n\n private readonly _overrideOptions$ = new BehaviorSubject<FormioOptions>({\n hooks: {\n beforeSubmit: this.beforeSubmitHook(this),\n },\n });\n\n public readonly formioOptions$: Observable<ValtimoFormioOptions | FormioOptions> = combineLatest([\n this.currentLanguage$,\n this.options$,\n this._overrideOptions$,\n ]).pipe(\n map(([language, options, overrideOptions]) => {\n const formioTranslations = this.translateService.instant('formioTranslations');\n\n const defaultOptions = {\n ...options,\n language,\n ...(formioTranslations === 'object' && {\n i18n: {\n [language]: this.stateService.flattenTranslationsObject(formioTranslations),\n },\n }),\n };\n\n return deepmerge(defaultOptions, overrideOptions);\n })\n );\n\n constructor(\n private readonly viewModelService: ViewModelService,\n private readonly translateService: TranslateService,\n private readonly stateService: FormIoStateService\n ) {}\n\n public ngOnInit(): void {\n if (this.isStartForm$.value) {\n this.loadInitialViewModelForStartForm();\n } else {\n this.loadInitialViewModel();\n }\n }\n\n public beforeSubmitHook(instance: FormViewModelComponent): (submission, callback) => void {\n return (submission, callback) => instance.beforeSubmit(submission, callback);\n }\n\n public beforeSubmit(submission: any, callback: FormioSubmissionCallback): void {\n combineLatest([\n this.formName$,\n this.taskInstanceId$,\n this.processDefinitionKey$,\n this.documentDefinitionName$,\n this.isStartForm$,\n ])\n .pipe(\n take(1),\n switchMap(\n ([\n formName,\n taskInstanceId,\n processDefinitionKey,\n documentDefinitionName,\n isStartForm,\n ]) =>\n isStartForm\n ? this.viewModelService\n .submitViewModelForStartForm(\n formName,\n processDefinitionKey,\n documentDefinitionName,\n submission.data\n )\n .pipe(\n take(1),\n switchMap(response => {\n callback(null, submission);\n return of(response);\n }),\n catchError(error => {\n this.handleFormError(error);\n callback({message: error.error.error, component: null}, null);\n return EMPTY; // return an empty observable to complete the stream\n })\n )\n : this.viewModelService\n .submitViewModel(formName, taskInstanceId, submission.data)\n .pipe(\n take(1),\n switchMap(response => {\n callback(null, submission);\n return of(response);\n }),\n catchError(error => {\n this.handleFormError(error);\n callback({message: error.error.error, component: null}, null);\n return EMPTY; // return an empty observable to complete the stream\n })\n )\n )\n )\n .subscribe();\n }\n\n private handleFormError(error: HttpErrorResponse): void {\n const formInstance = this.formio.formio;\n const component = formInstance.getComponent(error.error?.component);\n const submitComponent = formInstance.getComponent('submit');\n if (component == null) {\n this.errors$.next([error.error.error]);\n } else {\n component?.setCustomValidity(error.error.error);\n submitComponent.disabled = true;\n }\n }\n\n public onSubmit(submission: FormioSubmission): void {\n this.formSubmit.next(submission);\n }\n\n public onChange(object: any): void {\n if (object.data) {\n this.change$.next(object);\n }\n\n if (object.changed) {\n this.handleChanges();\n }\n }\n\n public loadInitialViewModel(): void {\n combineLatest([this.formName$, this.taskInstanceId$])\n .pipe(\n take(1),\n switchMap(([formName, taskInstanceId]) =>\n this.viewModelService.getViewModel(formName, taskInstanceId).pipe(\n tap(viewModel => {\n this.submission$.next({data: viewModel});\n this.change$.pipe(take(1)).subscribe(() => {\n this.loading$.next(false);\n });\n })\n )\n )\n )\n .subscribe();\n }\n\n public updateViewModel(): void {\n this.loading$\n .pipe(\n take(1),\n switchMap(updating => {\n if (!updating) {\n this.loading$.next(true);\n return combineLatest([this.formName$, this.taskInstanceId$, this.change$]).pipe(\n take(1),\n switchMap(([formName, taskInstanceId, change]) =>\n this.viewModelService.updateViewModel(formName, taskInstanceId, change.data).pipe(\n tap({\n next: viewModel => {\n this.submission$.next({data: viewModel});\n this.loading$.next(false);\n this.errors$.next([]);\n },\n error: error => {\n this.loading$.next(false);\n this.handleFormError(error);\n },\n })\n )\n )\n );\n }\n return of(null); // Fallback to return an observable if updating is true\n })\n )\n .subscribe();\n }\n\n public loadInitialViewModelForStartForm(): void {\n combineLatest([this.formName$, this.processDefinitionKey$])\n .pipe(\n take(1),\n switchMap(([formName, processDefinitionKey]) =>\n this.viewModelService.getViewModelForStartForm(formName, processDefinitionKey).pipe(\n tap(viewModel => {\n this.submission$.next({data: viewModel});\n this.change$.pipe(take(1)).subscribe(() => {\n this.loading$.next(false);\n });\n })\n )\n )\n )\n .subscribe();\n }\n\n public updateViewModelForStartForm(): void {\n this.loading$\n .pipe(\n take(1),\n switchMap(updating => {\n if (!updating) {\n this.loading$.next(true);\n return combineLatest([this.formName$, this.processDefinitionKey$, this.change$]).pipe(\n take(1),\n switchMap(([formName, processDefinitionKey, change]) =>\n this.viewModelService\n .updateViewModelForStartForm(formName, processDefinitionKey, change.data)\n .pipe(\n tap({\n next: viewModel => {\n this.submission$.next({data: viewModel});\n this.loading$.next(false);\n this.errors$.next([]);\n },\n error: error => {\n this.loading$.next(false);\n this.handleFormError(error);\n },\n })\n )\n )\n );\n }\n return of(null); // Fallback to return an observable if updating is true\n })\n )\n .subscribe();\n }\n\n private handleChanges(): void {\n this.change$\n .pipe(\n pairwise(),\n debounceTime(500),\n filter(\n ([prevChange, currentChange]) =>\n prevChange?.changed?.value !== undefined &&\n currentChange?.changed?.value !== undefined &&\n prevChange.changed.value !== currentChange.changed.value\n )\n )\n .subscribe(() => {\n if (this.isStartForm$.value) {\n this.updateViewModelForStartForm();\n } else {\n this.updateViewModel();\n }\n });\n }\n}\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\n<div\n class=\"form-container\"\n *ngIf=\"{\n submission: submission$ | async,\n readOnly: readOnly$ | async,\n form: form$ | async,\n tokenSetInLocalStorage: tokenSetInLocalStorage$ | async,\n formioOptions: formioOptions$ | async,\n loading: loading$ | async,\n errors: errors$ | async,\n } as obs\"\n>\n <div *ngIf=\"obs.loading\" class=\"loading-icon\">\n <i class=\"fa fa-spinner fa-spin\"></i>\n </div>\n <div *ngIf=\"obs.errors.length > 0\" class=\"alert alert-danger pt-5 pb-5 mb-2\">\n <ol>\n @for (error of obs.errors; track error) {\n <li class=\"pl-2\">\n {{ error }}\n </li>\n }\n </ol>\n </div>\n <formio\n #formio\n [submission]=\"obs.submission\"\n [form]=\"obs.form\"\n [refresh]=\"refreshForm\"\n [readOnly]=\"obs.readOnly\"\n [options]=\"obs.formioOptions\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n ></formio>\n</div>\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\nexport * from './form-view-model.component';\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 */\nimport {NgModule} from '@angular/core';\nimport {FORM_VIEW_MODEL_TOKEN} from '@valtimo/config';\nimport {FormViewModelComponent} from './components/form-view-model';\n\n@NgModule({\n providers: [\n {\n provide: FORM_VIEW_MODEL_TOKEN,\n useValue: {component: FormViewModelComponent},\n },\n ],\n})\nexport class FormViewModelModule {}\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\n/*\n * Public API Surface of form view model\n */\n\nexport * from './lib/components/form-view-model/form-view-model.component';\nexport * from './lib/services';\nexport * from './lib/form-view-model.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.ViewModelService","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"valtimo-form-view-model.mjs","sources":["../../../../projects/valtimo/form-view-model/src/lib/services/view-model.service.ts","../../../../projects/valtimo/form-view-model/src/lib/services/index.ts","../../../../projects/valtimo/form-view-model/src/lib/components/form-view-model/form-view-model.component.ts","../../../../projects/valtimo/form-view-model/src/lib/components/form-view-model/form-view-model.component.html","../../../../projects/valtimo/form-view-model/src/lib/components/form-view-model/index.ts","../../../../projects/valtimo/form-view-model/src/lib/form-view-model.module.ts","../../../../projects/valtimo/form-view-model/src/public_api.ts","../../../../projects/valtimo/form-view-model/src/valtimo-form-view-model.ts"],"sourcesContent":["/*\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\nimport {Injectable} from '@angular/core';\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\nimport {Observable} from 'rxjs';\nimport {BaseApiService, ConfigService} from '@valtimo/config';\nimport {InterceptorSkip} from '@valtimo/security';\n\n@Injectable({providedIn: 'root'})\nexport class ViewModelService extends BaseApiService {\n constructor(\n protected readonly httpClient: HttpClient,\n protected readonly configService: ConfigService\n ) {\n super(httpClient, configService);\n }\n\n public getViewModel(formName: string, taskInstanceId: string): Observable<object> {\n return this.httpClient.get<any>(this.getApiUrl('/v1/form/view-model/user-task'), {\n params: {\n formName,\n taskInstanceId,\n },\n headers: new HttpHeaders().set(InterceptorSkip, '400'),\n });\n }\n\n public updateViewModel(\n formName: string,\n taskInstanceId: string,\n viewModel: object,\n page: number,\n isWizard: boolean\n ): Observable<object> {\n const params = {\n formName,\n taskInstanceId,\n isWizard,\n ...(!isNaN(page) && {page}),\n };\n return this.httpClient.post(this.getApiUrl(`/v1/form/view-model/user-task`), viewModel, {\n params,\n headers: new HttpHeaders().set(InterceptorSkip, '400'),\n });\n }\n\n public submitViewModel(\n formName: string,\n taskInstanceId: string,\n viewModel: object\n ): Observable<object> {\n return this.httpClient.post(this.getApiUrl(`/v1/form/view-model/submit/user-task`), viewModel, {\n params: {\n formName,\n taskInstanceId,\n },\n headers: new HttpHeaders().set(InterceptorSkip, '400'),\n });\n }\n\n public getViewModelForStartForm(\n formName: string,\n processDefinitionKey: string\n ): Observable<object> {\n return this.httpClient.get<any>(this.getApiUrl('/v1/form/view-model/start-form'), {\n params: {\n formName,\n processDefinitionKey,\n },\n headers: new HttpHeaders().set(InterceptorSkip, '400'),\n });\n }\n\n public updateViewModelForStartForm(\n formName: string,\n processDefinitionKey: string,\n viewModel: object,\n page: number,\n isWizard: boolean\n ): Observable<object> {\n const params = {\n formName,\n processDefinitionKey,\n isWizard,\n ...(!isNaN(page) && {page}),\n };\n return this.httpClient.post(this.getApiUrl(`/v1/form/view-model/start-form`), viewModel, {\n params,\n headers: new HttpHeaders().set(InterceptorSkip, '400'),\n });\n }\n\n public submitViewModelForStartForm(\n formName: string,\n processDefinitionKey: string,\n documentDefinitionName: string,\n viewModel: object\n ): Observable<object> {\n return this.httpClient.post(\n this.getApiUrl(`/v1/form/view-model/submit/start-form`),\n viewModel,\n {\n params: {\n formName,\n processDefinitionKey,\n documentDefinitionName,\n },\n headers: new HttpHeaders().set(InterceptorSkip, '400'),\n }\n );\n }\n}\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\nexport * from './view-model.service';\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 */\nimport {Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild} from '@angular/core';\nimport moment from 'moment';\nimport {\n BehaviorSubject,\n catchError,\n combineLatest,\n debounceTime,\n EMPTY, filter,\n Observable,\n of, Subject, Subscription,\n switchMap,\n take,\n tap, withLatestFrom,\n} from 'rxjs';\nimport {\n FormioComponent,\n FormioModule,\n FormioOptions,\n FormioSubmission,\n FormioSubmissionCallback,\n} from '@formio/angular';\nimport {ViewModelService} from '../../services';\nimport {distinctUntilChanged, map} from 'rxjs/operators';\nimport {deepmerge} from 'deepmerge-ts';\nimport {FormIoStateService, ValtimoFormioOptions} from '@valtimo/components';\nimport {TranslateService} from '@ngx-translate/core';\nimport {HttpErrorResponse} from '@angular/common/http';\nimport {CommonModule} from '@angular/common';\nimport {isEqual} from 'lodash';\n\nmoment.defaultFormat = 'DD MMM YYYY HH:mm';\n\n@Component({\n selector: 'valtimo-form-view-model',\n templateUrl: './form-view-model.component.html',\n styleUrls: ['./form-view-model.component.css'],\n standalone: true,\n imports: [CommonModule, FormioModule],\n})\nexport class FormViewModelComponent implements OnInit, OnDestroy {\n @ViewChild('formio') formio: FormioComponent;\n\n @Input() set options(optionsValue: any) {\n this.options$.next(optionsValue);\n }\n\n @Input() set submission(submissionValue: FormioSubmission) {\n this.submission$.next(submissionValue);\n }\n\n @Input() set form(formValue: object) {\n const instance = this;\n const form = {\n loadInitialViewModel: () => instance.loadInitialViewModel(),\n updateViewModel: () => instance.updateViewModel(),\n ...formValue,\n };\n this.form$.next(form);\n }\n\n @Input() set formName(formName: string) {\n this.formName$.next(formName);\n }\n\n @Input() set taskInstanceId(taskInstanceId: string) {\n this.taskInstanceId$.next(taskInstanceId);\n }\n\n @Input() set isStartForm(isStartFormValue: boolean) {\n this.isStartForm$.next(isStartFormValue);\n }\n\n @Input() set processDefinitionKey(processDefinitionKeyValue: string) {\n this.processDefinitionKey$.next(processDefinitionKeyValue);\n }\n\n @Input() set documentDefinitionName(documentDefinitionNameValue: string) {\n this.documentDefinitionName$.next(documentDefinitionNameValue);\n }\n\n @Output() formSubmit = new EventEmitter<any>();\n\n public errors: string[] = [];\n public refreshForm = new EventEmitter();\n\n private _preventNextPage = false;\n private _preventPreviousPage = false;\n private _isWizard: boolean = false;\n\n public readonly submission$ = new BehaviorSubject<any>({});\n public readonly form$ = new BehaviorSubject<object>(undefined);\n public readonly formName$ = new BehaviorSubject<string>(undefined);\n public readonly options$ = new BehaviorSubject<ValtimoFormioOptions>(undefined);\n public readonly taskInstanceId$ = new BehaviorSubject<string>(undefined);\n public readonly tokenSetInLocalStorage$ = new BehaviorSubject<boolean>(false);\n public readonly change$ = new BehaviorSubject<any>(null);\n public readonly blur$ = new Subject<FocusEvent>();\n public readonly focus$ = new BehaviorSubject<FocusEvent>(null);\n public readonly loading$ = new BehaviorSubject<boolean>(true);\n public readonly isStartForm$ = new BehaviorSubject<boolean>(false);\n public readonly processDefinitionKey$ = new BehaviorSubject<string>(undefined);\n public readonly documentDefinitionName$ = new BehaviorSubject<string>(undefined);\n public readonly updateForm = new Subject<boolean>();\n\n public readonly currentLanguage$ = this.translateService.stream('key').pipe(\n map(() => this.translateService.currentLang),\n distinctUntilChanged()\n );\n\n private readonly _overrideOptions$ = new BehaviorSubject<FormioOptions>({\n hooks: {\n beforeSubmit: this.beforeSubmitHook(this),\n },\n });\n\n public readonly formioOptions$: Observable<ValtimoFormioOptions | FormioOptions> = combineLatest([\n this.currentLanguage$,\n this.options$,\n this._overrideOptions$,\n ]).pipe(\n map(([language, options, overrideOptions]) => {\n const formioTranslations = this.translateService.instant('formioTranslations');\n\n const defaultOptions = {\n ...options,\n language,\n ...(typeof formioTranslations === 'object'\n ? {\n language,\n i18n: {\n [language]: this.stateService.flattenTranslationsObject(formioTranslations),\n },\n }\n : {}),\n };\n\n return deepmerge(defaultOptions, overrideOptions);\n })\n );\n\n private focusSubscription: Subscription\n private updateSubscription: Subscription\n\n constructor(\n private readonly viewModelService: ViewModelService,\n private readonly translateService: TranslateService,\n private readonly stateService: FormIoStateService\n ) {}\n\n public ngOnInit(): void {\n if (this.isStartForm$.value) {\n this.loadInitialViewModelForStartForm();\n } else {\n this.loadInitialViewModel();\n }\n\n this.focusSubscription = this.focus$\n .pipe(withLatestFrom(this.change$))\n .subscribe(data => {\n const dataAtFocus = !!data[1] && !!data[1].data ? JSON.parse(JSON.stringify(data[1].data)) : null\n this.blur$\n .pipe(take(1))\n .pipe(withLatestFrom(this.change$))\n .subscribe(dataBlur => {\n const dataEqual = isEqual(dataAtFocus, dataBlur[1]?.data)\n if(!dataEqual) {\n this.updateForm.next(true)\n }\n })\n })\n\n this.updateSubscription = this.updateForm.pipe(filter(it => it), debounceTime(500)).subscribe(() => {\n if (this.isStartForm$.value) {\n this.updateViewModelForStartForm();\n } else {\n this.updateViewModel();\n }\n })\n }\n\n public ngOnDestroy(): void {\n this.focusSubscription.unsubscribe()\n this.updateSubscription.unsubscribe()\n }\n\n public beforeSubmitHook(instance: FormViewModelComponent): (submission, callback) => void {\n return (submission, callback) => instance.beforeSubmit(submission, callback);\n }\n\n public beforeSubmit(submission: any, callback: FormioSubmissionCallback): void {\n combineLatest([\n this.formName$,\n this.taskInstanceId$,\n this.processDefinitionKey$,\n this.documentDefinitionName$,\n this.isStartForm$,\n ])\n .pipe(\n take(1),\n switchMap(\n ([\n formName,\n taskInstanceId,\n processDefinitionKey,\n documentDefinitionName,\n isStartForm,\n ]) =>\n isStartForm\n ? this.viewModelService\n .submitViewModelForStartForm(\n formName,\n processDefinitionKey,\n documentDefinitionName,\n submission.data\n )\n .pipe(\n take(1),\n switchMap(response => {\n callback(null, submission);\n return of(response);\n }),\n catchError(error => {\n this.handleFormError(error);\n callback({message: ' ', component: null}, null);\n return EMPTY; // return an empty observable to complete the stream\n })\n )\n : this.viewModelService\n .submitViewModel(formName, taskInstanceId, submission.data)\n .pipe(\n take(1),\n switchMap(response => {\n callback(null, submission);\n return of(response);\n }),\n catchError(error => {\n this.handleFormError(error);\n callback({message: ' ', component: null}, null);\n return EMPTY; // return an empty observable to complete the stream\n })\n )\n )\n )\n .subscribe();\n }\n\n private handleFormError(error: HttpErrorResponse): void {\n const formInstance = this.formio.formio;\n this.errors = [];\n if (error.error.componentErrors) {\n error.error.componentErrors.forEach(componentError => {\n const component = formInstance.getComponent(componentError.component);\n if (component == null) {\n this.errors.push(componentError.message);\n } else {\n component?.setCustomValidity(componentError.message);\n }\n });\n } else {\n const component = formInstance.getComponent(error.error?.component);\n if (component == null) {\n this.errors.push(error.error.error);\n } else {\n component?.setCustomValidity(error.error.error);\n }\n }\n }\n\n public onSubmit(submission: FormioSubmission): void {\n this.formSubmit.next(submission);\n }\n\n public onFocus($event: FocusEvent): void {\n this.focus$.next($event);\n }\n\n public onBlur(blurEvent: FocusEvent): void {\n this.blur$.next(blurEvent);\n }\n\n public onChange(object: any): void {\n if (object.data) {\n this.change$.next(object);\n }\n }\n\n public onNextPage(): void {\n this._preventNextPage = true;\n this.formio.formio.setPage(this.formio.formio.page - 1);\n this.updateForm.next(true);\n }\n\n public onPreviousPage(): void {\n this._preventPreviousPage = true;\n this.formio.formio.setPage(this.formio.formio.page + 1);\n this.updateForm.next(true);\n }\n\n private handlePageChange(): void {\n if (this._preventNextPage) {\n this._preventNextPage = false;\n this.formio.formio.setPage(this.formio.formio.page + 1);\n } else if (this._preventPreviousPage) {\n this._preventPreviousPage = false;\n this.formio.formio.setPage(this.formio.formio.page - 1);\n }\n }\n\n public loadInitialViewModel(): void {\n combineLatest([this.formName$, this.taskInstanceId$])\n .pipe(\n take(1),\n switchMap(([formName, taskInstanceId]) =>\n this.viewModelService.getViewModel(formName, taskInstanceId).pipe(\n tap(viewModel => {\n this.submission$.next({data: viewModel});\n this.change$.pipe(take(1)).subscribe(() => {\n this.loading$.next(false);\n });\n this._isWizard = this.formio.form.display === 'wizard';\n })\n )\n )\n )\n .subscribe();\n }\n\n public updateViewModel(): void {\n this.loading$\n .pipe(\n take(1),\n switchMap(updating => {\n if (!updating) {\n this.loading$.next(true);\n return combineLatest([this.formName$, this.taskInstanceId$, this.change$]).pipe(\n take(1),\n switchMap(([formName, taskInstanceId, change]) =>\n this.viewModelService\n .updateViewModel(\n formName,\n taskInstanceId,\n change.data,\n this.formio.formio.page,\n this._isWizard\n )\n .pipe(\n tap({\n next: viewModel => {\n const submission = this.submission$.value;\n submission.data = viewModel;\n this.submission$.next(submission);\n this.handlePageChange();\n this.refreshForm.emit({submission: submission});\n this.loading$.next(false);\n this.errors = [];\n },\n error: error => {\n this.loading$.next(false);\n this.handleFormError(error);\n },\n })\n )\n )\n );\n }\n return of(null); // Fallback to return an observable if updating is true\n })\n )\n .subscribe();\n }\n\n public loadInitialViewModelForStartForm(): void {\n combineLatest([this.formName$, this.processDefinitionKey$])\n .pipe(\n take(1),\n switchMap(([formName, processDefinitionKey]) =>\n this.viewModelService.getViewModelForStartForm(formName, processDefinitionKey).pipe(\n tap(viewModel => {\n this.submission$.next({data: viewModel});\n this.change$.pipe(take(1)).subscribe(() => {\n this.loading$.next(false);\n });\n this._isWizard = this.formio.form.display === 'wizard';\n })\n )\n )\n )\n .subscribe();\n }\n\n public updateViewModelForStartForm(): void {\n this.loading$\n .pipe(\n take(1),\n switchMap(updating => {\n if (!updating) {\n this.loading$.next(true);\n return combineLatest([this.formName$, this.processDefinitionKey$, this.change$]).pipe(\n take(1),\n switchMap(([formName, processDefinitionKey, change]) =>\n this.viewModelService\n .updateViewModelForStartForm(\n formName,\n processDefinitionKey,\n change.data,\n this.formio.formio.page,\n this._isWizard\n )\n .pipe(\n tap({\n next: viewModel => {\n const submission = this.submission$.value;\n submission.data = viewModel;\n this.submission$.next(submission);\n this.handlePageChange();\n this.refreshForm.emit({submission: submission});\n this.loading$.next(false);\n this.errors = [];\n },\n error: error => {\n this.loading$.next(false);\n this.handleFormError(error);\n },\n })\n )\n )\n );\n }\n return of(null); // Fallback to return an observable if updating is true\n })\n )\n .subscribe();\n }\n}\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\n<div\n class=\"form-container formio-carbon\"\n *ngIf=\"{\n submission: submission$ | async,\n form: form$ | async,\n tokenSetInLocalStorage: tokenSetInLocalStorage$ | async,\n formioOptions: formioOptions$ | async,\n loading: loading$ | async,\n } as obs\"\n>\n <div *ngIf=\"obs.loading\" class=\"overlay\">\n <div class=\"spinner\">\n <i class=\"fa fa-spinner fa-spin\"></i>\n </div>\n </div>\n\n <div *ngIf=\"errors.length > 0\" class=\"alert alert-danger pt-5 pb-5 mb-2\">\n <ol>\n <li *ngFor=\"let error of errors\" class=\"pl-2\">\n {{ error }}\n </li>\n </ol>\n </div>\n\n <formio\n #formio\n [submission]=\"obs.submission\"\n [form]=\"obs.form\"\n [options]=\"obs.formioOptions\"\n [refresh]=\"refreshForm\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n (focusin)=\"onFocus($event)\"\n (focusout)=\"onBlur($event)\"\n (nextPage)=\"onNextPage()\"\n (prevPage)=\"onPreviousPage()\"\n ></formio>\n</div>\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\nexport * from './form-view-model.component';\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 */\nimport {NgModule} from '@angular/core';\nimport {FORM_VIEW_MODEL_TOKEN} from '@valtimo/config';\nimport {FormViewModelComponent} from './components/form-view-model';\n\n@NgModule({\n providers: [\n {\n provide: FORM_VIEW_MODEL_TOKEN,\n useValue: {component: FormViewModelComponent},\n },\n ],\n})\nexport class FormViewModelModule {}\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\n/*\n * Public API Surface of form view model\n */\n\nexport * from './lib/components/form-view-model/form-view-model.component';\nexport * from './lib/services';\nexport * from './lib/form-view-model.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.ViewModelService","i2"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;AAcG;AASG,MAAO,gBAAiB,SAAQ,cAAc,CAAA;IAClD,WACqB,CAAA,UAAsB,EACtB,aAA4B,EAAA;AAE/C,QAAA,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC;QAHb,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAa,CAAA,aAAA,GAAb,aAAa;;IAK3B,YAAY,CAAC,QAAgB,EAAE,cAAsB,EAAA;AAC1D,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAM,IAAI,CAAC,SAAS,CAAC,+BAA+B,CAAC,EAAE;AAC/E,YAAA,MAAM,EAAE;gBACN,QAAQ;gBACR,cAAc;AACf,aAAA;YACD,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC;AACvD,SAAA,CAAC;;IAGG,eAAe,CACpB,QAAgB,EAChB,cAAsB,EACtB,SAAiB,EACjB,IAAY,EACZ,QAAiB,EAAA;AAEjB,QAAA,MAAM,MAAM,GAAG;YACb,QAAQ;YACR,cAAc;YACd,QAAQ;YACR,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAC,IAAI,EAAC,CAAC;SAC5B;AACD,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA,6BAAA,CAA+B,CAAC,EAAE,SAAS,EAAE;YACtF,MAAM;YACN,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC;AACvD,SAAA,CAAC;;AAGG,IAAA,eAAe,CACpB,QAAgB,EAChB,cAAsB,EACtB,SAAiB,EAAA;AAEjB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA,oCAAA,CAAsC,CAAC,EAAE,SAAS,EAAE;AAC7F,YAAA,MAAM,EAAE;gBACN,QAAQ;gBACR,cAAc;AACf,aAAA;YACD,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC;AACvD,SAAA,CAAC;;IAGG,wBAAwB,CAC7B,QAAgB,EAChB,oBAA4B,EAAA;AAE5B,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAM,IAAI,CAAC,SAAS,CAAC,gCAAgC,CAAC,EAAE;AAChF,YAAA,MAAM,EAAE;gBACN,QAAQ;gBACR,oBAAoB;AACrB,aAAA;YACD,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC;AACvD,SAAA,CAAC;;IAGG,2BAA2B,CAChC,QAAgB,EAChB,oBAA4B,EAC5B,SAAiB,EACjB,IAAY,EACZ,QAAiB,EAAA;AAEjB,QAAA,MAAM,MAAM,GAAG;YACb,QAAQ;YACR,oBAAoB;YACpB,QAAQ;YACR,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAC,IAAI,EAAC,CAAC;SAC5B;AACD,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA,8BAAA,CAAgC,CAAC,EAAE,SAAS,EAAE;YACvF,MAAM;YACN,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC;AACvD,SAAA,CAAC;;AAGG,IAAA,2BAA2B,CAChC,QAAgB,EAChB,oBAA4B,EAC5B,sBAA8B,EAC9B,SAAiB,EAAA;AAEjB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CACzB,IAAI,CAAC,SAAS,CAAC,CAAA,qCAAA,CAAuC,CAAC,EACvD,SAAS,EACT;AACE,YAAA,MAAM,EAAE;gBACN,QAAQ;gBACR,oBAAoB;gBACpB,sBAAsB;AACvB,aAAA;YACD,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC;AACvD,SAAA,CACF;;+GApGQ,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADJ,MAAM,EAAA,CAAA,CAAA;;4FAClB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;ACtBhC;;;;;;;;;;;;;;AAcG;;ACdH;;;;;;;;;;;;;;AAcG;AA+BH,MAAM,CAAC,aAAa,GAAG,mBAAmB;MAS7B,sBAAsB,CAAA;IAGjC,IAAa,OAAO,CAAC,YAAiB,EAAA;AACpC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;;IAGlC,IAAa,UAAU,CAAC,eAAiC,EAAA;AACvD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC;;IAGxC,IAAa,IAAI,CAAC,SAAiB,EAAA;QACjC,MAAM,QAAQ,GAAG,IAAI;AACrB,QAAA,MAAM,IAAI,GAAG;AACX,YAAA,oBAAoB,EAAE,MAAM,QAAQ,CAAC,oBAAoB,EAAE;AAC3D,YAAA,eAAe,EAAE,MAAM,QAAQ,CAAC,eAAe,EAAE;AACjD,YAAA,GAAG,SAAS;SACb;AACD,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;IAGvB,IAAa,QAAQ,CAAC,QAAgB,EAAA;AACpC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;;IAG/B,IAAa,cAAc,CAAC,cAAsB,EAAA;AAChD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC;;IAG3C,IAAa,WAAW,CAAC,gBAAyB,EAAA;AAChD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC;;IAG1C,IAAa,oBAAoB,CAAC,yBAAiC,EAAA;AACjE,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,yBAAyB,CAAC;;IAG5D,IAAa,sBAAsB,CAAC,2BAAmC,EAAA;AACrE,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,2BAA2B,CAAC;;AAkEhE,IAAA,WAAA,CACmB,gBAAkC,EAClC,gBAAkC,EAClC,YAAgC,EAAA;QAFhC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAY,CAAA,YAAA,GAAZ,YAAY;AAlErB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAO;QAEvC,IAAM,CAAA,MAAA,GAAa,EAAE;AACrB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAE;QAE/B,IAAgB,CAAA,gBAAA,GAAG,KAAK;QACxB,IAAoB,CAAA,oBAAA,GAAG,KAAK;QAC5B,IAAS,CAAA,SAAA,GAAY,KAAK;AAElB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAM,EAAE,CAAC;AAC1C,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,eAAe,CAAS,SAAS,CAAC;AAC9C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAS,SAAS,CAAC;AAClD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAAuB,SAAS,CAAC;AAC/D,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAS,SAAS,CAAC;AACxD,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAC7D,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,eAAe,CAAM,IAAI,CAAC;AACxC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,OAAO,EAAc;AACjC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAa,IAAI,CAAC;AAC9C,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC;AAC7C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAClD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,eAAe,CAAS,SAAS,CAAC;AAC9D,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,eAAe,CAAS,SAAS,CAAC;AAChE,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,OAAO,EAAW;QAEnC,IAAgB,CAAA,gBAAA,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CACzE,GAAG,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAC5C,oBAAoB,EAAE,CACvB;QAEgB,IAAiB,CAAA,iBAAA,GAAG,IAAI,eAAe,CAAgB;AACtE,YAAA,KAAK,EAAE;AACL,gBAAA,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AAC1C,aAAA;AACF,SAAA,CAAC;QAEc,IAAc,CAAA,cAAA,GAAqD,aAAa,CAAC;AAC/F,YAAA,IAAI,CAAC,gBAAgB;AACrB,YAAA,IAAI,CAAC,QAAQ;AACb,YAAA,IAAI,CAAC,iBAAiB;AACvB,SAAA,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,eAAe,CAAC,KAAI;YAC3C,MAAM,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,oBAAoB,CAAC;AAE9E,YAAA,MAAM,cAAc,GAAG;AACrB,gBAAA,GAAG,OAAO;gBACV,QAAQ;AACR,gBAAA,IAAI,OAAO,kBAAkB,KAAK;AAChC,sBAAE;wBACA,QAAQ;AACR,wBAAA,IAAI,EAAE;4BACJ,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,yBAAyB,CAAC,kBAAkB,CAAC;AAC5E,yBAAA;AACF;sBACC,EAAE,CAAC;aACR;AAED,YAAA,OAAO,SAAS,CAAC,cAAc,EAAE,eAAe,CAAC;SAClD,CAAC,CACH;;IAWM,QAAQ,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;YAC3B,IAAI,CAAC,gCAAgC,EAAE;;aAClC;YACL,IAAI,CAAC,oBAAoB,EAAE;;AAG7B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC3B,aAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;aACjC,SAAS,CAAC,IAAI,IAAG;AAChB,YAAA,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI;AACjG,YAAA,IAAI,CAAC;AACF,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;iBACjC,SAAS,CAAC,QAAQ,IAAG;AACpB,gBAAA,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;gBACzD,IAAG,CAAC,SAAS,EAAE;AACb,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;AAE9B,aAAC,CAAC;AACN,SAAC,CAAC;QAEJ,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACjG,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;gBAC3B,IAAI,CAAC,2BAA2B,EAAE;;iBAC7B;gBACL,IAAI,CAAC,eAAe,EAAE;;AAE1B,SAAC,CAAC;;IAGG,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;AACpC,QAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;;AAGhC,IAAA,gBAAgB,CAAC,QAAgC,EAAA;AACtD,QAAA,OAAO,CAAC,UAAU,EAAE,QAAQ,KAAK,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC;;IAGvE,YAAY,CAAC,UAAe,EAAE,QAAkC,EAAA;AACrE,QAAA,aAAa,CAAC;AACZ,YAAA,IAAI,CAAC,SAAS;AACd,YAAA,IAAI,CAAC,eAAe;AACpB,YAAA,IAAI,CAAC,qBAAqB;AAC1B,YAAA,IAAI,CAAC,uBAAuB;AAC5B,YAAA,IAAI,CAAC,YAAY;SAClB;aACE,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CACP,CAAC,CACC,QAAQ,EACR,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,WAAW,EACZ,KACC;cACI,IAAI,CAAC;iBACF,2BAA2B,CAC1B,QAAQ,EACR,oBAAoB,EACpB,sBAAsB,EACtB,UAAU,CAAC,IAAI;iBAEhB,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,QAAQ,IAAG;AACnB,gBAAA,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;AAC1B,gBAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;AACrB,aAAC,CAAC,EACF,UAAU,CAAC,KAAK,IAAG;AACjB,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC3B,gBAAA,QAAQ,CAAC,EAAC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAC,EAAE,IAAI,CAAC;gBAC/C,OAAO,KAAK,CAAC;AACf,aAAC,CAAC;cAEN,IAAI,CAAC;iBACF,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,CAAC,IAAI;iBACzD,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,QAAQ,IAAG;AACnB,gBAAA,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;AAC1B,gBAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;AACrB,aAAC,CAAC,EACF,UAAU,CAAC,KAAK,IAAG;AACjB,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC3B,gBAAA,QAAQ,CAAC,EAAC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAC,EAAE,IAAI,CAAC;gBAC/C,OAAO,KAAK,CAAC;aACd,CAAC,CACH,CACV;AAEF,aAAA,SAAS,EAAE;;AAGR,IAAA,eAAe,CAAC,KAAwB,EAAA;AAC9C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;AACvC,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,KAAK,CAAC,KAAK,CAAC,eAAe,EAAE;YAC/B,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,IAAG;gBACnD,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC;AACrE,gBAAA,IAAI,SAAS,IAAI,IAAI,EAAE;oBACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;;qBACnC;AACL,oBAAA,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,OAAO,CAAC;;AAExD,aAAC,CAAC;;aACG;AACL,YAAA,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;AACnE,YAAA,IAAI,SAAS,IAAI,IAAI,EAAE;gBACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;;iBAC9B;gBACL,SAAS,EAAE,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;;;;AAK9C,IAAA,QAAQ,CAAC,UAA4B,EAAA;AAC1C,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;;AAG3B,IAAA,OAAO,CAAC,MAAkB,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;;AAGnB,IAAA,MAAM,CAAC,SAAqB,EAAA;AACjC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;;AAGrB,IAAA,QAAQ,CAAC,MAAW,EAAA;AACzB,QAAA,IAAI,MAAM,CAAC,IAAI,EAAE;AACf,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;;;IAItB,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;AACvD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;IAGrB,cAAc,GAAA;AACnB,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;AACvD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;IAGpB,gBAAgB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;;AAClD,aAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AACpC,YAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;AACjC,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;;;IAIpD,oBAAoB,GAAA;QACzB,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC;AACjD,aAAA,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,cAAc,CAAC,KACnC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,IAAI,CAC/D,GAAG,CAAC,SAAS,IAAG;YACd,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,SAAS,EAAC,CAAC;AACxC,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACxC,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,aAAC,CAAC;AACF,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,QAAQ;SACvD,CAAC,CACH,CACF;AAEF,aAAA,SAAS,EAAE;;IAGT,eAAe,GAAA;AACpB,QAAA,IAAI,CAAC;aACF,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,QAAQ,IAAG;YACnB,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,gBAAA,OAAO,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAC7E,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,CAAC,KAC3C,IAAI,CAAC;qBACF,eAAe,CACd,QAAQ,EACR,cAAc,EACd,MAAM,CAAC,IAAI,EACX,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EACvB,IAAI,CAAC,SAAS;qBAEf,IAAI,CACH,GAAG,CAAC;oBACF,IAAI,EAAE,SAAS,IAAG;AAChB,wBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK;AACzC,wBAAA,UAAU,CAAC,IAAI,GAAG,SAAS;AAC3B,wBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;wBACjC,IAAI,CAAC,gBAAgB,EAAE;wBACvB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAC,UAAU,EAAE,UAAU,EAAC,CAAC;AAC/C,wBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AACzB,wBAAA,IAAI,CAAC,MAAM,GAAG,EAAE;qBACjB;oBACD,KAAK,EAAE,KAAK,IAAG;AACb,wBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AACzB,wBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;qBAC5B;iBACF,CAAC,CACH,CACJ,CACF;;AAEH,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AAClB,SAAC,CAAC;AAEH,aAAA,SAAS,EAAE;;IAGT,gCAAgC,GAAA;QACrC,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,qBAAqB,CAAC;AACvD,aAAA,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,oBAAoB,CAAC,KACzC,IAAI,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC,IAAI,CACjF,GAAG,CAAC,SAAS,IAAG;YACd,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,SAAS,EAAC,CAAC;AACxC,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACxC,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,aAAC,CAAC;AACF,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,QAAQ;SACvD,CAAC,CACH,CACF;AAEF,aAAA,SAAS,EAAE;;IAGT,2BAA2B,GAAA;AAChC,QAAA,IAAI,CAAC;aACF,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,QAAQ,IAAG;YACnB,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,gBAAA,OAAO,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CACnF,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,oBAAoB,EAAE,MAAM,CAAC,KACjD,IAAI,CAAC;qBACF,2BAA2B,CAC1B,QAAQ,EACR,oBAAoB,EACpB,MAAM,CAAC,IAAI,EACX,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EACvB,IAAI,CAAC,SAAS;qBAEf,IAAI,CACH,GAAG,CAAC;oBACF,IAAI,EAAE,SAAS,IAAG;AAChB,wBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK;AACzC,wBAAA,UAAU,CAAC,IAAI,GAAG,SAAS;AAC3B,wBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;wBACjC,IAAI,CAAC,gBAAgB,EAAE;wBACvB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAC,UAAU,EAAE,UAAU,EAAC,CAAC;AAC/C,wBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AACzB,wBAAA,IAAI,CAAC,MAAM,GAAG,EAAE;qBACjB;oBACD,KAAK,EAAE,KAAK,IAAG;AACb,wBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AACzB,wBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;qBAC5B;iBACF,CAAC,CACH,CACJ,CACF;;AAEH,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AAClB,SAAC,CAAC;AAEH,aAAA,SAAS,EAAE;;+GAxYL,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,ECtDnC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,+oDAsDA,EDFY,MAAA,EAAA,CAAA,yPAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,oTAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,QAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEzB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAPlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,cAGvB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,YAAY,CAAC,EAAA,QAAA,EAAA,+oDAAA,EAAA,MAAA,EAAA,CAAA,yPAAA,CAAA,EAAA;oJAGhB,MAAM,EAAA,CAAA;sBAA1B,SAAS;uBAAC,QAAQ;gBAEN,OAAO,EAAA,CAAA;sBAAnB;gBAIY,UAAU,EAAA,CAAA;sBAAtB;gBAIY,IAAI,EAAA,CAAA;sBAAhB;gBAUY,QAAQ,EAAA,CAAA;sBAApB;gBAIY,cAAc,EAAA,CAAA;sBAA1B;gBAIY,WAAW,EAAA,CAAA;sBAAvB;gBAIY,oBAAoB,EAAA,CAAA;sBAAhC;gBAIY,sBAAsB,EAAA,CAAA;sBAAlC;gBAIS,UAAU,EAAA,CAAA;sBAAnB;;;AE/FH;;;;;;;;;;;;;;AAcG;;ACdH;;;;;;;;;;;;;;AAcG;MAaU,mBAAmB,CAAA;+GAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAnB,mBAAmB,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,EAPnB,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,qBAAqB;AAC9B,gBAAA,QAAQ,EAAE,EAAC,SAAS,EAAE,sBAAsB,EAAC;AAC9C,aAAA;AACF,SAAA,EAAA,CAAA,CAAA;;4FAEU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAR/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,qBAAqB;AAC9B,4BAAA,QAAQ,EAAE,EAAC,SAAS,EAAE,sBAAsB,EAAC;AAC9C,yBAAA;AACF,qBAAA;AACF,iBAAA;;;AC1BD;;;;;;;;;;;;;;AAcG;AAEH;;AAEG;;AClBH;;AAEG;;;;"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import { EventEmitter, OnInit } from '@angular/core';
|
|
1
|
+
import { EventEmitter, OnDestroy, OnInit } from '@angular/core';
|
|
2
2
|
import { BehaviorSubject, Observable, Subject } from 'rxjs';
|
|
3
3
|
import { FormioComponent, FormioOptions, FormioSubmission, FormioSubmissionCallback } from '@formio/angular';
|
|
4
|
-
import { FormioRefreshValue } from '@formio/angular/formio.common';
|
|
5
4
|
import { ViewModelService } from '../../services';
|
|
6
5
|
import { FormIoStateService, ValtimoFormioOptions } from '@valtimo/components';
|
|
7
6
|
import { TranslateService } from '@ngx-translate/core';
|
|
8
7
|
import * as i0 from "@angular/core";
|
|
9
|
-
export declare class FormViewModelComponent implements OnInit {
|
|
8
|
+
export declare class FormViewModelComponent implements OnInit, OnDestroy {
|
|
10
9
|
private readonly viewModelService;
|
|
11
10
|
private readonly translateService;
|
|
12
11
|
private readonly stateService;
|
|
@@ -16,42 +15,52 @@ export declare class FormViewModelComponent implements OnInit {
|
|
|
16
15
|
set form(formValue: object);
|
|
17
16
|
set formName(formName: string);
|
|
18
17
|
set taskInstanceId(taskInstanceId: string);
|
|
19
|
-
set readOnly(readOnlyValue: boolean);
|
|
20
18
|
set isStartForm(isStartFormValue: boolean);
|
|
21
19
|
set processDefinitionKey(processDefinitionKeyValue: string);
|
|
22
20
|
set documentDefinitionName(documentDefinitionNameValue: string);
|
|
23
|
-
formRefresh$: Subject<FormioRefreshValue>;
|
|
24
21
|
formSubmit: EventEmitter<any>;
|
|
25
|
-
|
|
22
|
+
errors: string[];
|
|
23
|
+
refreshForm: EventEmitter<any>;
|
|
24
|
+
private _preventNextPage;
|
|
25
|
+
private _preventPreviousPage;
|
|
26
|
+
private _isWizard;
|
|
26
27
|
readonly submission$: BehaviorSubject<any>;
|
|
27
28
|
readonly form$: BehaviorSubject<object>;
|
|
28
29
|
readonly formName$: BehaviorSubject<string>;
|
|
29
30
|
readonly options$: BehaviorSubject<ValtimoFormioOptions>;
|
|
30
31
|
readonly taskInstanceId$: BehaviorSubject<string>;
|
|
31
|
-
readonly readOnly$: BehaviorSubject<boolean>;
|
|
32
32
|
readonly tokenSetInLocalStorage$: BehaviorSubject<boolean>;
|
|
33
33
|
readonly change$: BehaviorSubject<any>;
|
|
34
|
-
readonly
|
|
34
|
+
readonly blur$: Subject<FocusEvent>;
|
|
35
|
+
readonly focus$: BehaviorSubject<FocusEvent>;
|
|
35
36
|
readonly loading$: BehaviorSubject<boolean>;
|
|
36
37
|
readonly isStartForm$: BehaviorSubject<boolean>;
|
|
37
38
|
readonly processDefinitionKey$: BehaviorSubject<string>;
|
|
38
39
|
readonly documentDefinitionName$: BehaviorSubject<string>;
|
|
40
|
+
readonly updateForm: Subject<boolean>;
|
|
39
41
|
readonly currentLanguage$: Observable<string>;
|
|
40
42
|
private readonly _overrideOptions$;
|
|
41
43
|
readonly formioOptions$: Observable<ValtimoFormioOptions | FormioOptions>;
|
|
44
|
+
private focusSubscription;
|
|
45
|
+
private updateSubscription;
|
|
42
46
|
constructor(viewModelService: ViewModelService, translateService: TranslateService, stateService: FormIoStateService);
|
|
43
47
|
ngOnInit(): void;
|
|
48
|
+
ngOnDestroy(): void;
|
|
44
49
|
beforeSubmitHook(instance: FormViewModelComponent): (submission: any, callback: any) => void;
|
|
45
50
|
beforeSubmit(submission: any, callback: FormioSubmissionCallback): void;
|
|
46
51
|
private handleFormError;
|
|
47
52
|
onSubmit(submission: FormioSubmission): void;
|
|
53
|
+
onFocus($event: FocusEvent): void;
|
|
54
|
+
onBlur(blurEvent: FocusEvent): void;
|
|
48
55
|
onChange(object: any): void;
|
|
56
|
+
onNextPage(): void;
|
|
57
|
+
onPreviousPage(): void;
|
|
58
|
+
private handlePageChange;
|
|
49
59
|
loadInitialViewModel(): void;
|
|
50
60
|
updateViewModel(): void;
|
|
51
61
|
loadInitialViewModelForStartForm(): void;
|
|
52
62
|
updateViewModelForStartForm(): void;
|
|
53
|
-
private handleChanges;
|
|
54
63
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormViewModelComponent, never>;
|
|
55
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FormViewModelComponent, "valtimo-form-view-model", never, { "options": { "alias": "options"; "required": false; }; "submission": { "alias": "submission"; "required": false; }; "form": { "alias": "form"; "required": false; }; "formName": { "alias": "formName"; "required": false; }; "taskInstanceId": { "alias": "taskInstanceId"; "required": false; }; "
|
|
64
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FormViewModelComponent, "valtimo-form-view-model", never, { "options": { "alias": "options"; "required": false; }; "submission": { "alias": "submission"; "required": false; }; "form": { "alias": "form"; "required": false; }; "formName": { "alias": "formName"; "required": false; }; "taskInstanceId": { "alias": "taskInstanceId"; "required": false; }; "isStartForm": { "alias": "isStartForm"; "required": false; }; "processDefinitionKey": { "alias": "processDefinitionKey"; "required": false; }; "documentDefinitionName": { "alias": "documentDefinitionName"; "required": false; }; }, { "formSubmit": "formSubmit"; }, never, never, true, never>;
|
|
56
65
|
}
|
|
57
66
|
//# sourceMappingURL=form-view-model.component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-view-model.component.d.ts","sourceRoot":"","sources":["../../../../../../projects/valtimo/form-view-model/src/lib/components/form-view-model/form-view-model.component.ts"],"names":[],"mappings":"AAeA,OAAO,EAAY,YAAY,EAAS,MAAM,EAAoB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"form-view-model.component.d.ts","sourceRoot":"","sources":["../../../../../../projects/valtimo/form-view-model/src/lib/components/form-view-model/form-view-model.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,10 +7,10 @@ export declare class ViewModelService extends BaseApiService {
|
|
|
7
7
|
protected readonly configService: ConfigService;
|
|
8
8
|
constructor(httpClient: HttpClient, configService: ConfigService);
|
|
9
9
|
getViewModel(formName: string, taskInstanceId: string): Observable<object>;
|
|
10
|
-
updateViewModel(formName: string, taskInstanceId: string, viewModel: object): Observable<object>;
|
|
10
|
+
updateViewModel(formName: string, taskInstanceId: string, viewModel: object, page: number, isWizard: boolean): Observable<object>;
|
|
11
11
|
submitViewModel(formName: string, taskInstanceId: string, viewModel: object): Observable<object>;
|
|
12
12
|
getViewModelForStartForm(formName: string, processDefinitionKey: string): Observable<object>;
|
|
13
|
-
updateViewModelForStartForm(formName: string, processDefinitionKey: string, viewModel: object): Observable<object>;
|
|
13
|
+
updateViewModelForStartForm(formName: string, processDefinitionKey: string, viewModel: object, page: number, isWizard: boolean): Observable<object>;
|
|
14
14
|
submitViewModelForStartForm(formName: string, processDefinitionKey: string, documentDefinitionName: string, viewModel: object): Observable<object>;
|
|
15
15
|
static ɵfac: i0.ɵɵFactoryDeclaration<ViewModelService, never>;
|
|
16
16
|
static ɵprov: i0.ɵɵInjectableDeclaration<ViewModelService>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-model.service.d.ts","sourceRoot":"","sources":["../../../../../projects/valtimo/form-view-model/src/lib/services/view-model.service.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"view-model.service.d.ts","sourceRoot":"","sources":["../../../../../projects/valtimo/form-view-model/src/lib/services/view-model.service.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAC,UAAU,EAAc,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAC,UAAU,EAAC,MAAM,MAAM,CAAC;AAChC,OAAO,EAAC,cAAc,EAAE,aAAa,EAAC,MAAM,iBAAiB,CAAC;;AAG9D,qBACa,gBAAiB,SAAQ,cAAc;IAEhD,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU;IACzC,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa;gBAD5B,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa;IAK1C,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAU1E,eAAe,CACpB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,GAChB,UAAU,CAAC,MAAM,CAAC;IAad,eAAe,CACpB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,GAChB,UAAU,CAAC,MAAM,CAAC;IAUd,wBAAwB,CAC7B,QAAQ,EAAE,MAAM,EAChB,oBAAoB,EAAE,MAAM,GAC3B,UAAU,CAAC,MAAM,CAAC;IAUd,2BAA2B,CAChC,QAAQ,EAAE,MAAM,EAChB,oBAAoB,EAAE,MAAM,EAC5B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,GAChB,UAAU,CAAC,MAAM,CAAC;IAad,2BAA2B,CAChC,QAAQ,EAAE,MAAM,EAChB,oBAAoB,EAAE,MAAM,EAC5B,sBAAsB,EAAE,MAAM,EAC9B,SAAS,EAAE,MAAM,GAChB,UAAU,CAAC,MAAM,CAAC;yCAxFV,gBAAgB;6CAAhB,gBAAgB;CAsG5B"}
|