@valtimo/form-view-model 12.5.0 → 12.6.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 +71 -34
- package/esm2022/lib/services/view-model.service.mjs +17 -11
- package/fesm2022/valtimo-form-view-model.mjs +86 -43
- package/fesm2022/valtimo-form-view-model.mjs.map +1 -1
- package/lib/components/form-view-model/form-view-model.component.d.ts +12 -8
- 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,7 +15,7 @@
|
|
|
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,
|
|
18
|
+
import { BehaviorSubject, catchError, combineLatest, debounceTime, EMPTY, of, switchMap, take, tap, } from 'rxjs';
|
|
19
19
|
import { FormioModule, } from '@formio/angular';
|
|
20
20
|
import { distinctUntilChanged, map } from 'rxjs/operators';
|
|
21
21
|
import { deepmerge } from 'deepmerge-ts';
|
|
@@ -49,9 +49,6 @@ export class FormViewModelComponent {
|
|
|
49
49
|
set taskInstanceId(taskInstanceId) {
|
|
50
50
|
this.taskInstanceId$.next(taskInstanceId);
|
|
51
51
|
}
|
|
52
|
-
set readOnly(readOnlyValue) {
|
|
53
|
-
this.readOnly$.next(readOnlyValue);
|
|
54
|
-
}
|
|
55
52
|
set isStartForm(isStartFormValue) {
|
|
56
53
|
this.isStartForm$.next(isStartFormValue);
|
|
57
54
|
}
|
|
@@ -66,16 +63,19 @@ export class FormViewModelComponent {
|
|
|
66
63
|
this.translateService = translateService;
|
|
67
64
|
this.stateService = stateService;
|
|
68
65
|
this.formSubmit = new EventEmitter();
|
|
66
|
+
this.errors = [];
|
|
69
67
|
this.refreshForm = new EventEmitter();
|
|
68
|
+
this._preventNextPage = false;
|
|
69
|
+
this._preventPreviousPage = false;
|
|
70
|
+
this._isWizard = false;
|
|
70
71
|
this.submission$ = new BehaviorSubject({});
|
|
71
72
|
this.form$ = new BehaviorSubject(undefined);
|
|
72
73
|
this.formName$ = new BehaviorSubject(undefined);
|
|
73
74
|
this.options$ = new BehaviorSubject(undefined);
|
|
74
75
|
this.taskInstanceId$ = new BehaviorSubject(undefined);
|
|
75
|
-
this.readOnly$ = new BehaviorSubject(false);
|
|
76
76
|
this.tokenSetInLocalStorage$ = new BehaviorSubject(false);
|
|
77
77
|
this.change$ = new BehaviorSubject(null);
|
|
78
|
-
this.
|
|
78
|
+
this.blur$ = new BehaviorSubject(null);
|
|
79
79
|
this.loading$ = new BehaviorSubject(true);
|
|
80
80
|
this.isStartForm$ = new BehaviorSubject(false);
|
|
81
81
|
this.processDefinitionKey$ = new BehaviorSubject(undefined);
|
|
@@ -131,7 +131,7 @@ export class FormViewModelComponent {
|
|
|
131
131
|
return of(response);
|
|
132
132
|
}), catchError(error => {
|
|
133
133
|
this.handleFormError(error);
|
|
134
|
-
callback({ message:
|
|
134
|
+
callback({ message: ' ', component: null }, null);
|
|
135
135
|
return EMPTY; // return an empty observable to complete the stream
|
|
136
136
|
}))
|
|
137
137
|
: this.viewModelService
|
|
@@ -141,32 +141,65 @@ export class FormViewModelComponent {
|
|
|
141
141
|
return of(response);
|
|
142
142
|
}), catchError(error => {
|
|
143
143
|
this.handleFormError(error);
|
|
144
|
-
callback({ message:
|
|
144
|
+
callback({ message: ' ', component: null }, null);
|
|
145
145
|
return EMPTY; // return an empty observable to complete the stream
|
|
146
146
|
}))))
|
|
147
147
|
.subscribe();
|
|
148
148
|
}
|
|
149
149
|
handleFormError(error) {
|
|
150
150
|
const formInstance = this.formio.formio;
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
151
|
+
this.errors = [];
|
|
152
|
+
if (error.error.componentErrors) {
|
|
153
|
+
error.error.componentErrors.forEach(componentError => {
|
|
154
|
+
const component = formInstance.getComponent(componentError.component);
|
|
155
|
+
if (component == null) {
|
|
156
|
+
this.errors.push(componentError.message);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
component?.setCustomValidity(componentError.message);
|
|
160
|
+
}
|
|
161
|
+
});
|
|
155
162
|
}
|
|
156
163
|
else {
|
|
157
|
-
component
|
|
158
|
-
|
|
164
|
+
const component = formInstance.getComponent(error.error?.component);
|
|
165
|
+
if (component == null) {
|
|
166
|
+
this.errors.push(error.error.error);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
component?.setCustomValidity(error.error.error);
|
|
170
|
+
}
|
|
159
171
|
}
|
|
160
172
|
}
|
|
161
173
|
onSubmit(submission) {
|
|
162
174
|
this.formSubmit.next(submission);
|
|
163
175
|
}
|
|
176
|
+
onBlur(blurEvent) {
|
|
177
|
+
this.blur$.next(blurEvent);
|
|
178
|
+
this.handleChanges();
|
|
179
|
+
}
|
|
164
180
|
onChange(object) {
|
|
165
181
|
if (object.data) {
|
|
166
182
|
this.change$.next(object);
|
|
167
183
|
}
|
|
168
|
-
|
|
169
|
-
|
|
184
|
+
}
|
|
185
|
+
onNextPage() {
|
|
186
|
+
this._preventNextPage = true;
|
|
187
|
+
this.formio.formio.setPage(this.formio.formio.page - 1);
|
|
188
|
+
this.handleChanges();
|
|
189
|
+
}
|
|
190
|
+
onPreviousPage() {
|
|
191
|
+
this._preventPreviousPage = true;
|
|
192
|
+
this.formio.formio.setPage(this.formio.formio.page + 1);
|
|
193
|
+
this.handleChanges();
|
|
194
|
+
}
|
|
195
|
+
handlePageChange() {
|
|
196
|
+
if (this._preventNextPage) {
|
|
197
|
+
this._preventNextPage = false;
|
|
198
|
+
this.formio.formio.setPage(this.formio.formio.page + 1);
|
|
199
|
+
}
|
|
200
|
+
else if (this._preventPreviousPage) {
|
|
201
|
+
this._preventPreviousPage = false;
|
|
202
|
+
this.formio.formio.setPage(this.formio.formio.page - 1);
|
|
170
203
|
}
|
|
171
204
|
}
|
|
172
205
|
loadInitialViewModel() {
|
|
@@ -176,6 +209,7 @@ export class FormViewModelComponent {
|
|
|
176
209
|
this.change$.pipe(take(1)).subscribe(() => {
|
|
177
210
|
this.loading$.next(false);
|
|
178
211
|
});
|
|
212
|
+
this._isWizard = this.formio.form.display === 'wizard';
|
|
179
213
|
}))))
|
|
180
214
|
.subscribe();
|
|
181
215
|
}
|
|
@@ -184,11 +218,17 @@ export class FormViewModelComponent {
|
|
|
184
218
|
.pipe(take(1), switchMap(updating => {
|
|
185
219
|
if (!updating) {
|
|
186
220
|
this.loading$.next(true);
|
|
187
|
-
return combineLatest([this.formName$, this.taskInstanceId$, this.change$]).pipe(take(1), switchMap(([formName, taskInstanceId, change]) => this.viewModelService
|
|
221
|
+
return combineLatest([this.formName$, this.taskInstanceId$, this.change$]).pipe(take(1), switchMap(([formName, taskInstanceId, change]) => this.viewModelService
|
|
222
|
+
.updateViewModel(formName, taskInstanceId, change.data, this.formio.formio.page, this._isWizard)
|
|
223
|
+
.pipe(tap({
|
|
188
224
|
next: viewModel => {
|
|
189
|
-
this.submission$.
|
|
225
|
+
const submission = this.submission$.value;
|
|
226
|
+
submission.data = viewModel;
|
|
227
|
+
this.submission$.next(submission);
|
|
228
|
+
this.handlePageChange();
|
|
229
|
+
this.refreshForm.emit({ submission: submission });
|
|
190
230
|
this.loading$.next(false);
|
|
191
|
-
this.errors
|
|
231
|
+
this.errors = [];
|
|
192
232
|
},
|
|
193
233
|
error: error => {
|
|
194
234
|
this.loading$.next(false);
|
|
@@ -207,6 +247,7 @@ export class FormViewModelComponent {
|
|
|
207
247
|
this.change$.pipe(take(1)).subscribe(() => {
|
|
208
248
|
this.loading$.next(false);
|
|
209
249
|
});
|
|
250
|
+
this._isWizard = this.formio.form.display === 'wizard';
|
|
210
251
|
}))))
|
|
211
252
|
.subscribe();
|
|
212
253
|
}
|
|
@@ -216,12 +257,16 @@ export class FormViewModelComponent {
|
|
|
216
257
|
if (!updating) {
|
|
217
258
|
this.loading$.next(true);
|
|
218
259
|
return combineLatest([this.formName$, this.processDefinitionKey$, this.change$]).pipe(take(1), switchMap(([formName, processDefinitionKey, change]) => this.viewModelService
|
|
219
|
-
.updateViewModelForStartForm(formName, processDefinitionKey, change.data)
|
|
260
|
+
.updateViewModelForStartForm(formName, processDefinitionKey, change.data, this.formio.formio.page, this._isWizard)
|
|
220
261
|
.pipe(tap({
|
|
221
262
|
next: viewModel => {
|
|
222
|
-
this.submission$.
|
|
263
|
+
const submission = this.submission$.value;
|
|
264
|
+
submission.data = viewModel;
|
|
265
|
+
this.submission$.next(submission);
|
|
266
|
+
this.handlePageChange();
|
|
267
|
+
this.refreshForm.emit({ submission: submission });
|
|
223
268
|
this.loading$.next(false);
|
|
224
|
-
this.errors
|
|
269
|
+
this.errors = [];
|
|
225
270
|
},
|
|
226
271
|
error: error => {
|
|
227
272
|
this.loading$.next(false);
|
|
@@ -234,11 +279,7 @@ export class FormViewModelComponent {
|
|
|
234
279
|
.subscribe();
|
|
235
280
|
}
|
|
236
281
|
handleChanges() {
|
|
237
|
-
this.
|
|
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(() => {
|
|
282
|
+
this.blur$.pipe(debounceTime(500)).subscribe(() => {
|
|
242
283
|
if (this.isStartForm$.value) {
|
|
243
284
|
this.updateViewModelForStartForm();
|
|
244
285
|
}
|
|
@@ -248,11 +289,11 @@ export class FormViewModelComponent {
|
|
|
248
289
|
});
|
|
249
290
|
}
|
|
250
291
|
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: "
|
|
292
|
+
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 (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
293
|
}
|
|
253
294
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormViewModelComponent, decorators: [{
|
|
254
295
|
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
|
|
296
|
+
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 (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
297
|
}], ctorParameters: () => [{ type: i1.ViewModelService }, { type: i2.TranslateService }, { type: i3.FormIoStateService }], propDecorators: { formio: [{
|
|
257
298
|
type: ViewChild,
|
|
258
299
|
args: ['formio']
|
|
@@ -266,17 +307,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
266
307
|
type: Input
|
|
267
308
|
}], taskInstanceId: [{
|
|
268
309
|
type: Input
|
|
269
|
-
}], readOnly: [{
|
|
270
|
-
type: Input
|
|
271
310
|
}], isStartForm: [{
|
|
272
311
|
type: Input
|
|
273
312
|
}], processDefinitionKey: [{
|
|
274
313
|
type: Input
|
|
275
314
|
}], documentDefinitionName: [{
|
|
276
315
|
type: Input
|
|
277
|
-
}], formRefresh$: [{
|
|
278
|
-
type: Input
|
|
279
316
|
}], formSubmit: [{
|
|
280
317
|
type: Output
|
|
281
318
|
}] } });
|
|
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
|
|
319
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LW1vZGVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZm9ybS12aWV3LW1vZGVsL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLXZpZXctbW9kZWwvZm9ybS12aWV3LW1vZGVsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZm9ybS12aWV3LW1vZGVsL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLXZpZXctbW9kZWwvZm9ybS12aWV3LW1vZGVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLGFBQWEsRUFDYixZQUFZLEVBQ1osS0FBSyxFQUVMLEVBQUUsRUFDRixTQUFTLEVBQ1QsSUFBSSxFQUNKLEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFFTCxZQUFZLEdBSWIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUl2QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7QUFFN0MsTUFBTSxDQUFDLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQztBQVMzQyxNQUFNLE9BQU8sc0JBQXNCO0lBR2pDLElBQWEsT0FBTyxDQUFDLFlBQWlCO1FBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMs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TixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0E1V1Usc0JBQXNCO21HQUF0QixzQkFBc0Isd2RDckRuQyw0bURBcURBLGdUREZZLFlBQVksb1RBQUUsWUFBWTs7NEZBRXpCLHNCQUFzQjtrQkFQbEMsU0FBUzsrQkFDRSx5QkFBeUIsY0FHdkIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQztxSkFHaEIsTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRO2dCQUVOLE9BQU87c0JBQW5CLEtBQUs7Z0JBSU8sVUFBVTtzQkFBdEIsS0FBSztnQkFJTyxJQUFJO3NCQUFoQixLQUFLO2dCQVVPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBSU8sY0FBYztzQkFBMUIsS0FBSztnQkFJTyxXQUFXO3NCQUF2QixLQUFLO2dCQUlPLG9CQUFvQjtzQkFBaEMsS0FBSztnQkFJTyxzQkFBc0I7c0JBQWxDLEtBQUs7Z0JBSUksVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNhdGNoRXJyb3IsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRlYm91bmNlVGltZSxcbiAgRU1QVFksXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBGb3JtaW9Db21wb25lbnQsXG4gIEZvcm1pb01vZHVsZSxcbiAgRm9ybWlvT3B0aW9ucyxcbiAgRm9ybWlvU3VibWlzc2lvbixcbiAgRm9ybWlvU3VibWlzc2lvbkNhbGxiYWNrLFxufSBmcm9tICdAZm9ybWlvL2FuZ3VsYXInO1xuaW1wb3J0IHtWaWV3TW9kZWxTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge2Rpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7ZGVlcG1lcmdlfSBmcm9tICdkZWVwbWVyZ2UtdHMnO1xuaW1wb3J0IHtGb3JtSW9TdGF0ZVNlcnZpY2UsIFZhbHRpbW9Gb3JtaW9PcHRpb25zfSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0h0dHBFcnJvclJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxubW9tZW50LmRlZmF1bHRGb3JtYXQgPSAnREQgTU1NIFlZWVkgSEg6bW0nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWZvcm0tdmlldy1tb2RlbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLXZpZXctbW9kZWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mb3JtLXZpZXctbW9kZWwuY29tcG9uZW50LmNzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3JtaW9Nb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtVmlld01vZGVsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQFZpZXdDaGlsZCgnZm9ybWlvJykgZm9ybWlvOiBGb3JtaW9Db21wb25lbnQ7XG5cbiAgQElucHV0KCkgc2V0IG9wdGlvbnMob3B0aW9uc1ZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLm9wdGlvbnMkLm5leHQob3B0aW9uc1ZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBzdWJtaXNzaW9uKHN1Ym1pc3Npb25WYWx1ZTogRm9ybWlvU3VibWlzc2lvbikge1xuICAgIHRoaXMuc3VibWlzc2lvbiQubmV4dChzdWJtaXNzaW9uVmFsdWUpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGZvcm0oZm9ybVZhbHVlOiBvYmplY3QpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXM7XG4gICAgY29uc3QgZm9ybSA9IHtcbiAgICAgIGxvYWRJbml0aWFsVmlld01vZGVsOiAoKSA9PiBpbnN0YW5jZS5sb2FkSW5pdGlhbFZpZXdNb2RlbCgpLFxuICAgICAgdXBkYXRlVmlld01vZGVsOiAoKSA9PiBpbnN0YW5jZS51cGRhdGVWaWV3TW9kZWwoKSxcbiAgICAgIC4uLmZvcm1WYWx1ZSxcbiAgICB9O1xuICAgIHRoaXMuZm9ybSQubmV4dChmb3JtKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBmb3JtTmFtZShmb3JtTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5mb3JtTmFtZSQubmV4dChmb3JtTmFtZSk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgdGFza0luc3RhbmNlSWQodGFza0luc3RhbmNlSWQ6IHN0cmluZykge1xuICAgIHRoaXMudGFza0luc3RhbmNlSWQkLm5leHQodGFza0luc3RhbmNlSWQpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGlzU3RhcnRGb3JtKGlzU3RhcnRGb3JtVmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzU3RhcnRGb3JtJC5uZXh0KGlzU3RhcnRGb3JtVmFsdWUpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHByb2Nlc3NEZWZpbml0aW9uS2V5KHByb2Nlc3NEZWZpbml0aW9uS2V5VmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25LZXkkLm5leHQocHJvY2Vzc0RlZmluaXRpb25LZXlWYWx1ZSk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZG9jdW1lbnREZWZpbml0aW9uTmFtZShkb2N1bWVudERlZmluaXRpb25OYW1lVmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQubmV4dChkb2N1bWVudERlZmluaXRpb25OYW1lVmFsdWUpO1xuICB9XG5cbiAgQE91dHB1dCgpIGZvcm1TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBwdWJsaWMgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgcmVmcmVzaEZvcm0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSBfcHJldmVudE5leHRQYWdlID0gZmFsc2U7XG4gIHByaXZhdGUgX3ByZXZlbnRQcmV2aW91c1BhZ2UgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaXNXaXphcmQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc3VibWlzc2lvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe30pO1xuICBwdWJsaWMgcmVhZG9ubHkgZm9ybSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG9iamVjdD4odW5kZWZpbmVkKTtcbiAgcHVibGljIHJlYWRvbmx5IGZvcm1OYW1lJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xuICBwdWJsaWMgcmVhZG9ubHkgb3B0aW9ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFZhbHRpbW9Gb3JtaW9PcHRpb25zPih1bmRlZmluZWQpO1xuICBwdWJsaWMgcmVhZG9ubHkgdGFza0luc3RhbmNlSWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyByZWFkb25seSB0b2tlblNldEluTG9jYWxTdG9yYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgY2hhbmdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IGJsdXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGb2N1c0V2ZW50PihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHVibGljIHJlYWRvbmx5IGlzU3RhcnRGb3JtJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvY2Vzc0RlZmluaXRpb25LZXkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudERlZmluaXRpb25OYW1lJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xuXG4gIHB1YmxpYyByZWFkb25seSBjdXJyZW50TGFuZ3VhZ2UkID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JykucGlwZShcbiAgICBtYXAoKCkgPT4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb3ZlcnJpZGVPcHRpb25zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Rm9ybWlvT3B0aW9ucz4oe1xuICAgIGhvb2tzOiB7XG4gICAgICBiZWZvcmVTdWJtaXQ6IHRoaXMuYmVmb3JlU3VibWl0SG9vayh0aGlzKSxcbiAgICB9LFxuICB9KTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZm9ybWlvT3B0aW9ucyQ6IE9ic2VydmFibGU8VmFsdGltb0Zvcm1pb09wdGlvbnMgfCBGb3JtaW9PcHRpb25zPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuY3VycmVudExhbmd1YWdlJCxcbiAgICB0aGlzLm9wdGlvbnMkLFxuICAgIHRoaXMuX292ZXJyaWRlT3B0aW9ucyQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbbGFuZ3VhZ2UsIG9wdGlvbnMsIG92ZXJyaWRlT3B0aW9uc10pID0+IHtcbiAgICAgIGNvbnN0IGZvcm1pb1RyYW5zbGF0aW9ucyA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdmb3JtaW9UcmFuc2xhdGlvbnMnKTtcblxuICAgICAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAuLi4oZm9ybWlvVHJhbnNsYXRpb25zID09PSAnb2JqZWN0JyAmJiB7XG4gICAgICAgICAgaTE4bjoge1xuICAgICAgICAgICAgW2xhbmd1YWdlXTogdGhpcy5zdGF0ZVNlcnZpY2UuZmxhdHRlblRyYW5zbGF0aW9uc09iamVjdChmb3JtaW9UcmFuc2xhdGlvbnMpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGRlZXBtZXJnZShkZWZhdWx0T3B0aW9ucywgb3ZlcnJpZGVPcHRpb25zKTtcbiAgICB9KVxuICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld01vZGVsU2VydmljZTogVmlld01vZGVsU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdGF0ZVNlcnZpY2U6IEZvcm1Jb1N0YXRlU2VydmljZVxuICApIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzU3RhcnRGb3JtJC52YWx1ZSkge1xuICAgICAgdGhpcy5sb2FkSW5pdGlhbFZpZXdNb2RlbEZvclN0YXJ0Rm9ybSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvYWRJbml0aWFsVmlld01vZGVsKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGJlZm9yZVN1Ym1pdEhvb2soaW5zdGFuY2U6IEZvcm1WaWV3TW9kZWxDb21wb25lbnQpOiAoc3VibWlzc2lvbiwgY2FsbGJhY2spID0+IHZvaWQge1xuICAgIHJldHVybiAoc3VibWlzc2lvbiwgY2FsbGJhY2spID0+IGluc3RhbmNlLmJlZm9yZVN1Ym1pdChzdWJtaXNzaW9uLCBjYWxsYmFjayk7XG4gIH1cblxuICBwdWJsaWMgYmVmb3JlU3VibWl0KHN1Ym1pc3Npb246IGFueSwgY2FsbGJhY2s6IEZvcm1pb1N1Ym1pc3Npb25DYWxsYmFjayk6IHZvaWQge1xuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5mb3JtTmFtZSQsXG4gICAgICB0aGlzLnRhc2tJbnN0YW5jZUlkJCxcbiAgICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25LZXkkLFxuICAgICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJCxcbiAgICAgIHRoaXMuaXNTdGFydEZvcm0kLFxuICAgIF0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKFxuICAgICAgICAgIChbXG4gICAgICAgICAgICBmb3JtTmFtZSxcbiAgICAgICAgICAgIHRhc2tJbnN0YW5jZUlkLFxuICAgICAgICAgICAgcHJvY2Vzc0RlZmluaXRpb25LZXksXG4gICAgICAgICAgICBkb2N1bWVudERlZmluaXRpb25OYW1lLFxuICAgICAgICAgICAgaXNTdGFydEZvcm0sXG4gICAgICAgICAgXSkgPT5cbiAgICAgICAgICAgIGlzU3RhcnRGb3JtXG4gICAgICAgICAgICAgID8gdGhpcy52aWV3TW9kZWxTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAuc3VibWl0Vmlld01vZGVsRm9yU3RhcnRGb3JtKFxuICAgICAgICAgICAgICAgICAgICBmb3JtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0RlZmluaXRpb25LZXksXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHN1Ym1pc3Npb24uZGF0YVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgc3VibWlzc2lvbik7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRm9ybUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh7bWVzc2FnZTogJyAnLCBjb21wb25lbnQ6IG51bGx9LCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7IC8vIHJldHVybiBhbiBlbXB0eSBvYnNlcnZhYmxlIHRvIGNvbXBsZXRlIHRoZSBzdHJlYW1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiB0aGlzLnZpZXdNb2RlbFNlcnZpY2VcbiAgICAgICAgICAgICAgICAgIC5zdWJtaXRWaWV3TW9kZWwoZm9ybU5hbWUsIHRhc2tJbnN0YW5jZUlkLCBzdWJtaXNzaW9uLmRhdGEpXG4gICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBzdWJtaXNzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGb3JtRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHttZXNzYWdlOiAnICcsIGNvbXBvbmVudDogbnVsbH0sIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTsgLy8gcmV0dXJuIGFuIGVtcHR5IG9ic2VydmFibGUgdG8gY29tcGxldGUgdGhlIHN0cmVhbVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUZvcm1FcnJvcihlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtSW5zdGFuY2UgPSB0aGlzLmZvcm1pby5mb3JtaW87XG4gICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICBpZiAoZXJyb3IuZXJyb3IuY29tcG9uZW50RXJyb3JzKSB7XG4gICAgICBlcnJvci5lcnJvci5jb21wb25lbnRFcnJvcnMuZm9yRWFjaChjb21wb25lbnRFcnJvciA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGZvcm1JbnN0YW5jZS5nZXRDb21wb25lbnQoY29tcG9uZW50RXJyb3IuY29tcG9uZW50KTtcbiAgICAgICAgaWYgKGNvbXBvbmVudCA9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5lcnJvcnMucHVzaChjb21wb25lbnRFcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21wb25lbnQ/LnNldEN1c3RvbVZhbGlkaXR5KGNvbXBvbmVudEVycm9yLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gZm9ybUluc3RhbmNlLmdldENvbXBvbmVudChlcnJvci5lcnJvcj8uY29tcG9uZW50KTtcbiAgICAgIGlmIChjb21wb25lbnQgPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yLmVycm9yLmVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXBvbmVudD8uc2V0Q3VzdG9tVmFsaWRpdHkoZXJyb3IuZXJyb3IuZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvblN1Ym1pdChzdWJtaXNzaW9uOiBGb3JtaW9TdWJtaXNzaW9uKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtU3VibWl0Lm5leHQoc3VibWlzc2lvbik7XG4gIH1cblxuICBwdWJsaWMgb25CbHVyKGJsdXJFdmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuYmx1ciQubmV4dChibHVyRXZlbnQpO1xuICAgIHRoaXMuaGFuZGxlQ2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIG9uQ2hhbmdlKG9iamVjdDogYW55KTogdm9pZCB7XG4gICAgaWYgKG9iamVjdC5kYXRhKSB7XG4gICAgICB0aGlzLmNoYW5nZSQubmV4dChvYmplY3QpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbk5leHRQYWdlKCk6IHZvaWQge1xuICAgIHRoaXMuX3ByZXZlbnROZXh0UGFnZSA9IHRydWU7XG4gICAgdGhpcy5mb3JtaW8uZm9ybWlvLnNldFBhZ2UodGhpcy5mb3JtaW8uZm9ybWlvLnBhZ2UgLSAxKTtcbiAgICB0aGlzLmhhbmRsZUNoYW5nZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBvblByZXZpb3VzUGFnZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wcmV2ZW50UHJldmlvdXNQYWdlID0gdHJ1ZTtcbiAgICB0aGlzLmZvcm1pby5mb3JtaW8uc2V0UGFnZSh0aGlzLmZvcm1pby5mb3JtaW8ucGFnZSArIDEpO1xuICAgIHRoaXMuaGFuZGxlQ2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQYWdlQ2hhbmdlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wcmV2ZW50TmV4dFBhZ2UpIHtcbiAgICAgIHRoaXMuX3ByZXZlbnROZXh0UGFnZSA9IGZhbHNlO1xuICAgICAgdGhpcy5mb3JtaW8uZm9ybWlvLnNldFBhZ2UodGhpcy5mb3JtaW8uZm9ybWlvLnBhZ2UgKyAxKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3ByZXZlbnRQcmV2aW91c1BhZ2UpIHtcbiAgICAgIHRoaXMuX3ByZXZlbnRQcmV2aW91c1BhZ2UgPSBmYWxzZTtcbiAgICAgIHRoaXMuZm9ybWlvLmZvcm1pby5zZXRQYWdlKHRoaXMuZm9ybWlvLmZvcm1pby5wYWdlIC0gMSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGxvYWRJbml0aWFsVmlld01vZGVsKCk6IHZvaWQge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuZm9ybU5hbWUkLCB0aGlzLnRhc2tJbnN0YW5jZUlkJF0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKChbZm9ybU5hbWUsIHRhc2tJbnN0YW5jZUlkXSkgPT5cbiAgICAgICAgICB0aGlzLnZpZXdNb2RlbFNlcnZpY2UuZ2V0Vmlld01vZGVsKGZvcm1OYW1lLCB0YXNrSW5zdGFuY2VJZCkucGlwZShcbiAgICAgICAgICAgIHRhcCh2aWV3TW9kZWwgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnN1Ym1pc3Npb24kLm5leHQoe2RhdGE6IHZpZXdNb2RlbH0pO1xuICAgICAgICAgICAgICB0aGlzLmNoYW5nZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLl9pc1dpemFyZCA9IHRoaXMuZm9ybWlvLmZvcm0uZGlzcGxheSA9PT0gJ3dpemFyZCc7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVZpZXdNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmckXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKHVwZGF0aW5nID0+IHtcbiAgICAgICAgICBpZiAoIXVwZGF0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5mb3JtTmFtZSQsIHRoaXMudGFza0luc3RhbmNlSWQkLCB0aGlzLmNoYW5nZSRdKS5waXBlKFxuICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICBzd2l0Y2hNYXAoKFtmb3JtTmFtZSwgdGFza0luc3RhbmNlSWQsIGNoYW5nZV0pID0+XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3TW9kZWxTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAudXBkYXRlVmlld01vZGVsKFxuICAgICAgICAgICAgICAgICAgICBmb3JtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdGFza0luc3RhbmNlSWQsXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1pby5mb3JtaW8ucGFnZSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNXaXphcmRcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YXAoe1xuICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IHZpZXdNb2RlbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWJtaXNzaW9uID0gdGhpcy5zdWJtaXNzaW9uJC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pc3Npb24uZGF0YSA9IHZpZXdNb2RlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWlzc2lvbiQubmV4dChzdWJtaXNzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUGFnZUNoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoRm9ybS5lbWl0KHtzdWJtaXNzaW9uOiBzdWJtaXNzaW9ufSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGb3JtRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvZihudWxsKTsgLy8gRmFsbGJhY2sgdG8gcmV0dXJuIGFuIG9ic2VydmFibGUgaWYgdXBkYXRpbmcgaXMgdHJ1ZVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIGxvYWRJbml0aWFsVmlld01vZGVsRm9yU3RhcnRGb3JtKCk6IHZvaWQge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuZm9ybU5hbWUkLCB0aGlzLnByb2Nlc3NEZWZpbml0aW9uS2V5JF0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKChbZm9ybU5hbWUsIHByb2Nlc3NEZWZpbml0aW9uS2V5XSkgPT5cbiAgICAgICAgICB0aGlzLnZpZXdNb2RlbFNlcnZpY2UuZ2V0Vmlld01vZGVsRm9yU3RhcnRGb3JtKGZvcm1OYW1lLCBwcm9jZXNzRGVmaW5pdGlvbktleSkucGlwZShcbiAgICAgICAgICAgIHRhcCh2aWV3TW9kZWwgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnN1Ym1pc3Npb24kLm5leHQoe2RhdGE6IHZpZXdNb2RlbH0pO1xuICAgICAgICAgICAgICB0aGlzLmNoYW5nZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLl9pc1dpemFyZCA9IHRoaXMuZm9ybWlvLmZvcm0uZGlzcGxheSA9PT0gJ3dpemFyZCc7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVZpZXdNb2RlbEZvclN0YXJ0Rm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmckXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKHVwZGF0aW5nID0+IHtcbiAgICAgICAgICBpZiAoIXVwZGF0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5mb3JtTmFtZSQsIHRoaXMucHJvY2Vzc0RlZmluaXRpb25LZXkkLCB0aGlzLmNoYW5nZSRdKS5waXBlKFxuICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICBzd2l0Y2hNYXAoKFtmb3JtTmFtZSwgcHJvY2Vzc0RlZmluaXRpb25LZXksIGNoYW5nZV0pID0+XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3TW9kZWxTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAudXBkYXRlVmlld01vZGVsRm9yU3RhcnRGb3JtKFxuICAgICAgICAgICAgICAgICAgICBmb3JtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0RlZmluaXRpb25LZXksXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1pby5mb3JtaW8ucGFnZSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNXaXphcmRcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YXAoe1xuICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IHZpZXdNb2RlbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWJtaXNzaW9uID0gdGhpcy5zdWJtaXNzaW9uJC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pc3Npb24uZGF0YSA9IHZpZXdNb2RlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWlzc2lvbiQubmV4dChzdWJtaXNzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUGFnZUNoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoRm9ybS5lbWl0KHtzdWJtaXNzaW9uOiBzdWJtaXNzaW9ufSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGb3JtRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvZihudWxsKTsgLy8gRmFsbGJhY2sgdG8gcmV0dXJuIGFuIG9ic2VydmFibGUgaWYgdXBkYXRpbmcgaXMgdHJ1ZVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuYmx1ciQucGlwZShkZWJvdW5jZVRpbWUoNTAwKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzU3RhcnRGb3JtJC52YWx1ZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVZpZXdNb2RlbEZvclN0YXJ0Rm9ybSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3TW9kZWwoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48ZGl2XG4gIGNsYXNzPVwiZm9ybS1jb250YWluZXIgZm9ybWlvLWNhcmJvblwiXG4gICpuZ0lmPVwie1xuICAgIHN1Ym1pc3Npb246IHN1Ym1pc3Npb24kIHwgYXN5bmMsXG4gICAgZm9ybTogZm9ybSQgfCBhc3luYyxcbiAgICB0b2tlblNldEluTG9jYWxTdG9yYWdlOiB0b2tlblNldEluTG9jYWxTdG9yYWdlJCB8IGFzeW5jLFxuICAgIGZvcm1pb09wdGlvbnM6IGZvcm1pb09wdGlvbnMkIHwgYXN5bmMsXG4gICAgbG9hZGluZzogbG9hZGluZyQgfCBhc3luYyxcbiAgfSBhcyBvYnNcIlxuPlxuICA8ZGl2ICpuZ0lmPVwib2JzLmxvYWRpbmdcIiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lclwiPlxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zcGlubmVyIGZhLXNwaW5cIj48L2k+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJlcnJvcnMubGVuZ3RoID4gMFwiIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIHB0LTUgcGItNSBtYi0yXCI+XG4gICAgPG9sPlxuICAgICAgPGxpICpuZ0Zvcj1cImxldCBlcnJvciBvZiBlcnJvcnNcIiBjbGFzcz1cInBsLTJcIj5cbiAgICAgICAge3sgZXJyb3IgfX1cbiAgICAgIDwvbGk+XG4gICAgPC9vbD5cbiAgPC9kaXY+XG5cbiAgPGZvcm1pb1xuICAgICNmb3JtaW9cbiAgICBbc3VibWlzc2lvbl09XCJvYnMuc3VibWlzc2lvblwiXG4gICAgW2Zvcm1dPVwib2JzLmZvcm1cIlxuICAgIFtvcHRpb25zXT1cIm9icy5mb3JtaW9PcHRpb25zXCJcbiAgICBbcmVmcmVzaF09XCJyZWZyZXNoRm9ybVwiXG4gICAgKHN1Ym1pdCk9XCJvblN1Ym1pdCgkZXZlbnQpXCJcbiAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIlxuICAgIChmb2N1c291dCk9XCJvbkJsdXIoJGV2ZW50KVwiXG4gICAgKG5leHRQYWdlKT1cIm9uTmV4dFBhZ2UoKVwiXG4gICAgKHByZXZQYWdlKT1cIm9uUHJldmlvdXNQYWdlKClcIlxuICA+PC9mb3JtaW8+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -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,7 +1,7 @@
|
|
|
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, combineLatest, take, switchMap, of, catchError, EMPTY, tap, debounceTime } 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';
|
|
@@ -46,12 +46,15 @@ class ViewModelService extends BaseApiService {
|
|
|
46
46
|
headers: new HttpHeaders().set(InterceptorSkip, '400'),
|
|
47
47
|
});
|
|
48
48
|
}
|
|
49
|
-
updateViewModel(formName, taskInstanceId, viewModel) {
|
|
49
|
+
updateViewModel(formName, taskInstanceId, viewModel, page, isWizard) {
|
|
50
|
+
const params = {
|
|
51
|
+
formName,
|
|
52
|
+
taskInstanceId,
|
|
53
|
+
isWizard,
|
|
54
|
+
...(!isNaN(page) && { page }),
|
|
55
|
+
};
|
|
50
56
|
return this.httpClient.post(this.getApiUrl(`/v1/form/view-model/user-task`), viewModel, {
|
|
51
|
-
params
|
|
52
|
-
formName,
|
|
53
|
-
taskInstanceId,
|
|
54
|
-
},
|
|
57
|
+
params,
|
|
55
58
|
headers: new HttpHeaders().set(InterceptorSkip, '400'),
|
|
56
59
|
});
|
|
57
60
|
}
|
|
@@ -73,12 +76,15 @@ class ViewModelService extends BaseApiService {
|
|
|
73
76
|
headers: new HttpHeaders().set(InterceptorSkip, '400'),
|
|
74
77
|
});
|
|
75
78
|
}
|
|
76
|
-
updateViewModelForStartForm(formName, processDefinitionKey, viewModel) {
|
|
79
|
+
updateViewModelForStartForm(formName, processDefinitionKey, viewModel, page, isWizard) {
|
|
80
|
+
const params = {
|
|
81
|
+
formName,
|
|
82
|
+
processDefinitionKey,
|
|
83
|
+
isWizard,
|
|
84
|
+
...(!isNaN(page) && { page }),
|
|
85
|
+
};
|
|
77
86
|
return this.httpClient.post(this.getApiUrl(`/v1/form/view-model/start-form`), viewModel, {
|
|
78
|
-
params
|
|
79
|
-
formName,
|
|
80
|
-
processDefinitionKey,
|
|
81
|
-
},
|
|
87
|
+
params,
|
|
82
88
|
headers: new HttpHeaders().set(InterceptorSkip, '400'),
|
|
83
89
|
});
|
|
84
90
|
}
|
|
@@ -154,9 +160,6 @@ class FormViewModelComponent {
|
|
|
154
160
|
set taskInstanceId(taskInstanceId) {
|
|
155
161
|
this.taskInstanceId$.next(taskInstanceId);
|
|
156
162
|
}
|
|
157
|
-
set readOnly(readOnlyValue) {
|
|
158
|
-
this.readOnly$.next(readOnlyValue);
|
|
159
|
-
}
|
|
160
163
|
set isStartForm(isStartFormValue) {
|
|
161
164
|
this.isStartForm$.next(isStartFormValue);
|
|
162
165
|
}
|
|
@@ -171,16 +174,19 @@ class FormViewModelComponent {
|
|
|
171
174
|
this.translateService = translateService;
|
|
172
175
|
this.stateService = stateService;
|
|
173
176
|
this.formSubmit = new EventEmitter();
|
|
177
|
+
this.errors = [];
|
|
174
178
|
this.refreshForm = new EventEmitter();
|
|
179
|
+
this._preventNextPage = false;
|
|
180
|
+
this._preventPreviousPage = false;
|
|
181
|
+
this._isWizard = false;
|
|
175
182
|
this.submission$ = new BehaviorSubject({});
|
|
176
183
|
this.form$ = new BehaviorSubject(undefined);
|
|
177
184
|
this.formName$ = new BehaviorSubject(undefined);
|
|
178
185
|
this.options$ = new BehaviorSubject(undefined);
|
|
179
186
|
this.taskInstanceId$ = new BehaviorSubject(undefined);
|
|
180
|
-
this.readOnly$ = new BehaviorSubject(false);
|
|
181
187
|
this.tokenSetInLocalStorage$ = new BehaviorSubject(false);
|
|
182
188
|
this.change$ = new BehaviorSubject(null);
|
|
183
|
-
this.
|
|
189
|
+
this.blur$ = new BehaviorSubject(null);
|
|
184
190
|
this.loading$ = new BehaviorSubject(true);
|
|
185
191
|
this.isStartForm$ = new BehaviorSubject(false);
|
|
186
192
|
this.processDefinitionKey$ = new BehaviorSubject(undefined);
|
|
@@ -236,7 +242,7 @@ class FormViewModelComponent {
|
|
|
236
242
|
return of(response);
|
|
237
243
|
}), catchError(error => {
|
|
238
244
|
this.handleFormError(error);
|
|
239
|
-
callback({ message:
|
|
245
|
+
callback({ message: ' ', component: null }, null);
|
|
240
246
|
return EMPTY; // return an empty observable to complete the stream
|
|
241
247
|
}))
|
|
242
248
|
: this.viewModelService
|
|
@@ -246,32 +252,65 @@ class FormViewModelComponent {
|
|
|
246
252
|
return of(response);
|
|
247
253
|
}), catchError(error => {
|
|
248
254
|
this.handleFormError(error);
|
|
249
|
-
callback({ message:
|
|
255
|
+
callback({ message: ' ', component: null }, null);
|
|
250
256
|
return EMPTY; // return an empty observable to complete the stream
|
|
251
257
|
}))))
|
|
252
258
|
.subscribe();
|
|
253
259
|
}
|
|
254
260
|
handleFormError(error) {
|
|
255
261
|
const formInstance = this.formio.formio;
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
262
|
+
this.errors = [];
|
|
263
|
+
if (error.error.componentErrors) {
|
|
264
|
+
error.error.componentErrors.forEach(componentError => {
|
|
265
|
+
const component = formInstance.getComponent(componentError.component);
|
|
266
|
+
if (component == null) {
|
|
267
|
+
this.errors.push(componentError.message);
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
component?.setCustomValidity(componentError.message);
|
|
271
|
+
}
|
|
272
|
+
});
|
|
260
273
|
}
|
|
261
274
|
else {
|
|
262
|
-
component
|
|
263
|
-
|
|
275
|
+
const component = formInstance.getComponent(error.error?.component);
|
|
276
|
+
if (component == null) {
|
|
277
|
+
this.errors.push(error.error.error);
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
component?.setCustomValidity(error.error.error);
|
|
281
|
+
}
|
|
264
282
|
}
|
|
265
283
|
}
|
|
266
284
|
onSubmit(submission) {
|
|
267
285
|
this.formSubmit.next(submission);
|
|
268
286
|
}
|
|
287
|
+
onBlur(blurEvent) {
|
|
288
|
+
this.blur$.next(blurEvent);
|
|
289
|
+
this.handleChanges();
|
|
290
|
+
}
|
|
269
291
|
onChange(object) {
|
|
270
292
|
if (object.data) {
|
|
271
293
|
this.change$.next(object);
|
|
272
294
|
}
|
|
273
|
-
|
|
274
|
-
|
|
295
|
+
}
|
|
296
|
+
onNextPage() {
|
|
297
|
+
this._preventNextPage = true;
|
|
298
|
+
this.formio.formio.setPage(this.formio.formio.page - 1);
|
|
299
|
+
this.handleChanges();
|
|
300
|
+
}
|
|
301
|
+
onPreviousPage() {
|
|
302
|
+
this._preventPreviousPage = true;
|
|
303
|
+
this.formio.formio.setPage(this.formio.formio.page + 1);
|
|
304
|
+
this.handleChanges();
|
|
305
|
+
}
|
|
306
|
+
handlePageChange() {
|
|
307
|
+
if (this._preventNextPage) {
|
|
308
|
+
this._preventNextPage = false;
|
|
309
|
+
this.formio.formio.setPage(this.formio.formio.page + 1);
|
|
310
|
+
}
|
|
311
|
+
else if (this._preventPreviousPage) {
|
|
312
|
+
this._preventPreviousPage = false;
|
|
313
|
+
this.formio.formio.setPage(this.formio.formio.page - 1);
|
|
275
314
|
}
|
|
276
315
|
}
|
|
277
316
|
loadInitialViewModel() {
|
|
@@ -281,6 +320,7 @@ class FormViewModelComponent {
|
|
|
281
320
|
this.change$.pipe(take(1)).subscribe(() => {
|
|
282
321
|
this.loading$.next(false);
|
|
283
322
|
});
|
|
323
|
+
this._isWizard = this.formio.form.display === 'wizard';
|
|
284
324
|
}))))
|
|
285
325
|
.subscribe();
|
|
286
326
|
}
|
|
@@ -289,11 +329,17 @@ class FormViewModelComponent {
|
|
|
289
329
|
.pipe(take(1), switchMap(updating => {
|
|
290
330
|
if (!updating) {
|
|
291
331
|
this.loading$.next(true);
|
|
292
|
-
return combineLatest([this.formName$, this.taskInstanceId$, this.change$]).pipe(take(1), switchMap(([formName, taskInstanceId, change]) => this.viewModelService
|
|
332
|
+
return combineLatest([this.formName$, this.taskInstanceId$, this.change$]).pipe(take(1), switchMap(([formName, taskInstanceId, change]) => this.viewModelService
|
|
333
|
+
.updateViewModel(formName, taskInstanceId, change.data, this.formio.formio.page, this._isWizard)
|
|
334
|
+
.pipe(tap({
|
|
293
335
|
next: viewModel => {
|
|
294
|
-
this.submission$.
|
|
336
|
+
const submission = this.submission$.value;
|
|
337
|
+
submission.data = viewModel;
|
|
338
|
+
this.submission$.next(submission);
|
|
339
|
+
this.handlePageChange();
|
|
340
|
+
this.refreshForm.emit({ submission: submission });
|
|
295
341
|
this.loading$.next(false);
|
|
296
|
-
this.errors
|
|
342
|
+
this.errors = [];
|
|
297
343
|
},
|
|
298
344
|
error: error => {
|
|
299
345
|
this.loading$.next(false);
|
|
@@ -312,6 +358,7 @@ class FormViewModelComponent {
|
|
|
312
358
|
this.change$.pipe(take(1)).subscribe(() => {
|
|
313
359
|
this.loading$.next(false);
|
|
314
360
|
});
|
|
361
|
+
this._isWizard = this.formio.form.display === 'wizard';
|
|
315
362
|
}))))
|
|
316
363
|
.subscribe();
|
|
317
364
|
}
|
|
@@ -321,12 +368,16 @@ class FormViewModelComponent {
|
|
|
321
368
|
if (!updating) {
|
|
322
369
|
this.loading$.next(true);
|
|
323
370
|
return combineLatest([this.formName$, this.processDefinitionKey$, this.change$]).pipe(take(1), switchMap(([formName, processDefinitionKey, change]) => this.viewModelService
|
|
324
|
-
.updateViewModelForStartForm(formName, processDefinitionKey, change.data)
|
|
371
|
+
.updateViewModelForStartForm(formName, processDefinitionKey, change.data, this.formio.formio.page, this._isWizard)
|
|
325
372
|
.pipe(tap({
|
|
326
373
|
next: viewModel => {
|
|
327
|
-
this.submission$.
|
|
374
|
+
const submission = this.submission$.value;
|
|
375
|
+
submission.data = viewModel;
|
|
376
|
+
this.submission$.next(submission);
|
|
377
|
+
this.handlePageChange();
|
|
378
|
+
this.refreshForm.emit({ submission: submission });
|
|
328
379
|
this.loading$.next(false);
|
|
329
|
-
this.errors
|
|
380
|
+
this.errors = [];
|
|
330
381
|
},
|
|
331
382
|
error: error => {
|
|
332
383
|
this.loading$.next(false);
|
|
@@ -339,11 +390,7 @@ class FormViewModelComponent {
|
|
|
339
390
|
.subscribe();
|
|
340
391
|
}
|
|
341
392
|
handleChanges() {
|
|
342
|
-
this.
|
|
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(() => {
|
|
393
|
+
this.blur$.pipe(debounceTime(500)).subscribe(() => {
|
|
347
394
|
if (this.isStartForm$.value) {
|
|
348
395
|
this.updateViewModelForStartForm();
|
|
349
396
|
}
|
|
@@ -353,11 +400,11 @@ class FormViewModelComponent {
|
|
|
353
400
|
});
|
|
354
401
|
}
|
|
355
402
|
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: "
|
|
403
|
+
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 (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
404
|
}
|
|
358
405
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormViewModelComponent, decorators: [{
|
|
359
406
|
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
|
|
407
|
+
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 (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
408
|
}], ctorParameters: () => [{ type: ViewModelService }, { type: i2$1.TranslateService }, { type: i3.FormIoStateService }], propDecorators: { formio: [{
|
|
362
409
|
type: ViewChild,
|
|
363
410
|
args: ['formio']
|
|
@@ -371,16 +418,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
371
418
|
type: Input
|
|
372
419
|
}], taskInstanceId: [{
|
|
373
420
|
type: Input
|
|
374
|
-
}], readOnly: [{
|
|
375
|
-
type: Input
|
|
376
421
|
}], isStartForm: [{
|
|
377
422
|
type: Input
|
|
378
423
|
}], processDefinitionKey: [{
|
|
379
424
|
type: Input
|
|
380
425
|
}], documentDefinitionName: [{
|
|
381
426
|
type: Input
|
|
382
|
-
}], formRefresh$: [{
|
|
383
|
-
type: Input
|
|
384
427
|
}], formSubmit: [{
|
|
385
428
|
type: Output
|
|
386
429
|
}] } });
|
|
@@ -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, OnInit, Output, ViewChild} from '@angular/core';\nimport moment from 'moment';\nimport {\n BehaviorSubject,\n catchError,\n combineLatest,\n debounceTime,\n EMPTY,\n Observable,\n of,\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 {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 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 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\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: ' ', 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 onBlur(blurEvent: FocusEvent): void {\n this.blur$.next(blurEvent);\n this.handleChanges();\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.handleChanges();\n }\n\n public onPreviousPage(): void {\n this._preventPreviousPage = true;\n this.formio.formio.setPage(this.formio.formio.page + 1);\n this.handleChanges();\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 private handleChanges(): void {\n this.blur$.pipe(debounceTime(500)).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 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 (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":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { EventEmitter, OnInit } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject, Observable
|
|
2
|
+
import { BehaviorSubject, Observable } 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';
|
|
@@ -16,22 +15,23 @@ 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$: BehaviorSubject<FocusEvent>;
|
|
35
35
|
readonly loading$: BehaviorSubject<boolean>;
|
|
36
36
|
readonly isStartForm$: BehaviorSubject<boolean>;
|
|
37
37
|
readonly processDefinitionKey$: BehaviorSubject<string>;
|
|
@@ -45,13 +45,17 @@ export declare class FormViewModelComponent implements OnInit {
|
|
|
45
45
|
beforeSubmit(submission: any, callback: FormioSubmissionCallback): void;
|
|
46
46
|
private handleFormError;
|
|
47
47
|
onSubmit(submission: FormioSubmission): void;
|
|
48
|
+
onBlur(blurEvent: FocusEvent): void;
|
|
48
49
|
onChange(object: any): void;
|
|
50
|
+
onNextPage(): void;
|
|
51
|
+
onPreviousPage(): void;
|
|
52
|
+
private handlePageChange;
|
|
49
53
|
loadInitialViewModel(): void;
|
|
50
54
|
updateViewModel(): void;
|
|
51
55
|
loadInitialViewModelForStartForm(): void;
|
|
52
56
|
updateViewModelForStartForm(): void;
|
|
53
57
|
private handleChanges;
|
|
54
58
|
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; }; "
|
|
59
|
+
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
60
|
}
|
|
57
61
|
//# 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;AAExF,OAAO,EACL,eAAe,
|
|
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;AAExF,OAAO,EACL,eAAe,EAKf,UAAU,EAKX,MAAM,MAAM,CAAC;AACd,OAAO,EACL,eAAe,EAEf,aAAa,EACb,gBAAgB,EAChB,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAC,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EAAC,kBAAkB,EAAE,oBAAoB,EAAC,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAC;;AAMrD,qBAOa,sBAAuB,YAAW,MAAM;IAiGjD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAlGV,MAAM,EAAE,eAAe,CAAC;IAE7C,IAAa,OAAO,CAAC,YAAY,EAAE,GAAG,EAErC;IAED,IAAa,UAAU,CAAC,eAAe,EAAE,gBAAgB,EAExD;IAED,IAAa,IAAI,CAAC,SAAS,EAAE,MAAM,EAQlC;IAED,IAAa,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAErC;IAED,IAAa,cAAc,CAAC,cAAc,EAAE,MAAM,EAEjD;IAED,IAAa,WAAW,CAAC,gBAAgB,EAAE,OAAO,EAEjD;IAED,IAAa,oBAAoB,CAAC,yBAAyB,EAAE,MAAM,EAElE;IAED,IAAa,sBAAsB,CAAC,2BAA2B,EAAE,MAAM,EAEtE;IAES,UAAU,oBAA2B;IAExC,MAAM,EAAE,MAAM,EAAE,CAAM;IACtB,WAAW,oBAAsB;IAExC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,SAAS,CAAkB;IAEnC,SAAgB,WAAW,uBAAgC;IAC3D,SAAgB,KAAK,0BAA0C;IAC/D,SAAgB,SAAS,0BAA0C;IACnE,SAAgB,QAAQ,wCAAwD;IAChF,SAAgB,eAAe,0BAA0C;IACzE,SAAgB,uBAAuB,2BAAuC;IAC9E,SAAgB,OAAO,uBAAkC;IACzD,SAAgB,KAAK,8BAAyC;IAC9D,SAAgB,QAAQ,2BAAsC;IAC9D,SAAgB,YAAY,2BAAuC;IACnE,SAAgB,qBAAqB,0BAA0C;IAC/E,SAAgB,uBAAuB,0BAA0C;IAEjF,SAAgB,gBAAgB,qBAG9B;IAEF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAI/B;IAEH,SAAgB,cAAc,EAAE,UAAU,CAAC,oBAAoB,GAAG,aAAa,CAAC,CAoB9E;gBAGiB,gBAAgB,EAAE,gBAAgB,EAClC,gBAAgB,EAAE,gBAAgB,EAClC,YAAY,EAAE,kBAAkB;IAG5C,QAAQ,IAAI,IAAI;IAQhB,gBAAgB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,CAAC,UAAU,KAAA,EAAE,QAAQ,KAAA,KAAK,IAAI;IAIlF,YAAY,CAAC,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,wBAAwB,GAAG,IAAI;IAyD9E,OAAO,CAAC,eAAe;IAsBhB,QAAQ,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI;IAI5C,MAAM,CAAC,SAAS,EAAE,UAAU,GAAG,IAAI;IAKnC,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI;IAM3B,UAAU,IAAI,IAAI;IAMlB,cAAc,IAAI,IAAI;IAM7B,OAAO,CAAC,gBAAgB;IAUjB,oBAAoB,IAAI,IAAI;IAmB5B,eAAe,IAAI,IAAI;IA4CvB,gCAAgC,IAAI,IAAI;IAmBxC,2BAA2B,IAAI,IAAI;IA4C1C,OAAO,CAAC,aAAa;yCApWV,sBAAsB;2CAAtB,sBAAsB;CA6WlC"}
|
|
@@ -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"}
|