@muraai/mnl-form 0.0.1-alpha-32ca3fa → 0.0.1-alpha-11e96eb
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/README.md +5 -5
- package/fesm2022/muraai-mnl-form.mjs +152 -145
- package/fesm2022/muraai-mnl-form.mjs.map +1 -1
- package/lib/{formly-lib/formly-lib.component.d.ts → mnl-form/mnl-form.component.d.ts} +3 -3
- package/lib/types/upload-file.d.ts +1 -1
- package/lib/workflow-status/ workflow-status.module.d.ts +8 -8
- package/lib/workflow-status/workflow-status.component.d.ts +1 -1
- package/package.json +4 -5
- package/public-api.d.ts +2 -2
- package/esm2022/lib/confirmation-dialog/confirmation-dialog.component.mjs +0 -34
- package/esm2022/lib/formly-lib/formly-lib.component.mjs +0 -199
- package/esm2022/lib/formly-lib/formly-standalone.module.mjs +0 -155
- package/esm2022/lib/models/custom-form-field.model.mjs +0 -2
- package/esm2022/lib/models/workflow-status.model.mjs +0 -2
- package/esm2022/lib/services/graphql.service.mjs +0 -30
- package/esm2022/lib/services/scoring.service.mjs +0 -103
- package/esm2022/lib/types/action-button-renderer.component.mjs +0 -59
- package/esm2022/lib/types/autocomplete-type.component.mjs +0 -68
- package/esm2022/lib/types/button.type.mjs +0 -72
- package/esm2022/lib/types/comments.type.mjs +0 -102
- package/esm2022/lib/types/country-code-input.type.mjs +0 -181
- package/esm2022/lib/types/custom-date.type.mjs +0 -20
- package/esm2022/lib/types/custom-input.component.mjs +0 -62
- package/esm2022/lib/types/date-format.type.mjs +0 -196
- package/esm2022/lib/types/expansion-panel.types.mjs +0 -85
- package/esm2022/lib/types/formly-field-panel.type.mjs +0 -70
- package/esm2022/lib/types/grid-actionable.type.mjs +0 -197
- package/esm2022/lib/types/grid-formly-cell.component.mjs +0 -42
- package/esm2022/lib/types/grid.type.mjs +0 -125
- package/esm2022/lib/types/input.type.mjs +0 -43
- package/esm2022/lib/types/mu-helper-text.type.mjs +0 -331
- package/esm2022/lib/types/multi-select-autocomplete.mjs +0 -139
- package/esm2022/lib/types/multi-select-checkbox.component.mjs +0 -247
- package/esm2022/lib/types/radio.type.mjs +0 -71
- package/esm2022/lib/types/scrollable-tabs.types.mjs +0 -220
- package/esm2022/lib/types/select-api-auto-complete.component.mjs +0 -111
- package/esm2022/lib/types/select-autocomplete-redefined.component.mjs +0 -142
- package/esm2022/lib/types/select-autocomplete.type.mjs +0 -254
- package/esm2022/lib/types/stepper.type.mjs +0 -268
- package/esm2022/lib/types/table.types.mjs +0 -79
- package/esm2022/lib/types/tabs.types.mjs +0 -293
- package/esm2022/lib/types/tabular-form-dialog.component.mjs +0 -331
- package/esm2022/lib/types/tabular-form.type.mjs +0 -641
- package/esm2022/lib/types/upload-file.mjs +0 -524
- package/esm2022/lib/types/view-file-dialog.component.mjs +0 -90
- package/esm2022/lib/utils/formly.utils.mjs +0 -105
- package/esm2022/lib/validators/custom-email-validator.mjs +0 -18
- package/esm2022/lib/validators/ein-validators.mjs +0 -11
- package/esm2022/lib/validators/gst-validator.mjs +0 -11
- package/esm2022/lib/validators/normal-email-validator.mjs +0 -17
- package/esm2022/lib/validators/npi-validator.mjs +0 -11
- package/esm2022/lib/validators/pan-validator.mjs +0 -11
- package/esm2022/lib/validators/phone-number-validator.mjs +0 -22
- package/esm2022/lib/validators/select-validator.mjs +0 -7
- package/esm2022/lib/validators/tinSsn-validator.mjs +0 -12
- package/esm2022/lib/workflow-status/ workflow-status.module.mjs +0 -52
- package/esm2022/lib/workflow-status/workflow-status.component.mjs +0 -70
- package/esm2022/lib/wrappers/form-field-description-wrapper.component.mjs +0 -44
- package/esm2022/lib/wrappers/form-field-wrapper.component.mjs +0 -34
- package/esm2022/lib/wrappers/formly-wrapper-with-old-value.component.mjs +0 -140
- package/esm2022/lib/wrappers/prefix-suffix-wrapper.component.mjs +0 -95
- package/esm2022/lib/wrappers/prefix-sufix-extension.component.mjs +0 -9
- package/esm2022/muraai-mnl-form.mjs +0 -5
- package/esm2022/public-api.mjs +0 -12
- /package/lib/{formly-lib/formly-standalone.module.d.ts → mnl-form/mnl-form-standalone.module.d.ts} +0 -0
|
@@ -1,331 +0,0 @@
|
|
|
1
|
-
import { Breakpoints } from '@angular/cdk/layout';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { Component, DestroyRef, EventEmitter, inject, Inject, Output } from '@angular/core';
|
|
4
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
5
|
-
import { FormGroup, ReactiveFormsModule } from '@angular/forms';
|
|
6
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
7
|
-
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
8
|
-
import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
|
|
9
|
-
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
10
|
-
import { MatInputModule } from '@angular/material/input';
|
|
11
|
-
import { MatRadioModule } from '@angular/material/radio';
|
|
12
|
-
import { MatSelectModule } from '@angular/material/select';
|
|
13
|
-
import { FormlyModule } from '@ngx-formly/core';
|
|
14
|
-
import { TranslateModule } from '@ngx-translate/core';
|
|
15
|
-
import { NgxSpinnerModule } from 'ngx-spinner';
|
|
16
|
-
import { forkJoin, of, take } from 'rxjs';
|
|
17
|
-
import { ConfirmationDialogComponent } from '../confirmation-dialog/confirmation-dialog.component';
|
|
18
|
-
import * as i0 from "@angular/core";
|
|
19
|
-
import * as i1 from "@angular/material/dialog";
|
|
20
|
-
import * as i2 from "@ngx-formly/core";
|
|
21
|
-
import * as i3 from "@ngx-translate/core";
|
|
22
|
-
import * as i4 from "@angular/cdk/layout";
|
|
23
|
-
import * as i5 from "@angular/common";
|
|
24
|
-
import * as i6 from "@angular/material/button";
|
|
25
|
-
import * as i7 from "ngx-spinner";
|
|
26
|
-
export class TabularFormDialogComponent {
|
|
27
|
-
constructor(dialogRef, data, formlyBuilder, translateService, matDialog, hostElement, breakpointObserver) {
|
|
28
|
-
this.dialogRef = dialogRef;
|
|
29
|
-
this.data = data;
|
|
30
|
-
this.formlyBuilder = formlyBuilder;
|
|
31
|
-
this.translateService = translateService;
|
|
32
|
-
this.matDialog = matDialog;
|
|
33
|
-
this.hostElement = hostElement;
|
|
34
|
-
this.breakpointObserver = breakpointObserver;
|
|
35
|
-
this.form = new FormGroup({});
|
|
36
|
-
this.dialogLabel = '';
|
|
37
|
-
this.saveData = new EventEmitter();
|
|
38
|
-
this.destroyRef = inject(DestroyRef);
|
|
39
|
-
this.isMobileDevice = false;
|
|
40
|
-
this.breakpointObserver?.observe([Breakpoints.Handset]).pipe(takeUntilDestroyed(this.destroyRef)).subscribe((result) => {
|
|
41
|
-
this.isMobileDevice = result?.matches;
|
|
42
|
-
});
|
|
43
|
-
this.fieldConfig = data.fieldConfig;
|
|
44
|
-
this.selectedRowData = data.selectedRowData;
|
|
45
|
-
if (data?.selectedRowData) {
|
|
46
|
-
this.model = data?.selectedRowData;
|
|
47
|
-
}
|
|
48
|
-
this.propsOfDialog = data.tabularProps;
|
|
49
|
-
this.dialogLabel = data.label;
|
|
50
|
-
this.fields = this.translateFormConfig(data.fieldConfig);
|
|
51
|
-
this.options = {
|
|
52
|
-
...this.options,
|
|
53
|
-
formState: data?.formState
|
|
54
|
-
};
|
|
55
|
-
this.parentModel = data?.parentModel;
|
|
56
|
-
this.formlyBuilder.buildForm(this.form, this.fields, this.model, this.options);
|
|
57
|
-
this.updateDependentFieldsFullName(this.fields);
|
|
58
|
-
}
|
|
59
|
-
resetForm() {
|
|
60
|
-
this.form.reset();
|
|
61
|
-
}
|
|
62
|
-
onSave() {
|
|
63
|
-
if (this.form.valid) {
|
|
64
|
-
if (this.fields[0]?.confirmationDialogProps?.length) {
|
|
65
|
-
const confirmationDialogs = this.fields[0].confirmationDialogProps
|
|
66
|
-
.filter((confirmationDialogProp) => confirmationDialogProp?.enableConfirmation)
|
|
67
|
-
.map((confirmationDialogProp) => {
|
|
68
|
-
if (!confirmationDialogProp?.enableConfirmationDialogForRoles?.length ||
|
|
69
|
-
confirmationDialogProp?.enableConfirmationDialogForRoles?.some((role) => this.options?.formState?.userRoles?.includes(role))) {
|
|
70
|
-
if (confirmationDialogProp?.showForChangeRequestOnly) {
|
|
71
|
-
if (this.options.formState.showOldValues) {
|
|
72
|
-
const dialogRef = this.matDialog.open(ConfirmationDialogComponent, {
|
|
73
|
-
minWidth: confirmationDialogProp?.['minWidth'] ?? '40%',
|
|
74
|
-
maxWidth: confirmationDialogProp?.['maxWidth'] ?? '100%',
|
|
75
|
-
minHeight: confirmationDialogProp?.['minHeight'] ?? '30%',
|
|
76
|
-
maxHeight: confirmationDialogProp?.['maxHeight'] ?? '40%',
|
|
77
|
-
data: {
|
|
78
|
-
title: this.translateService.instant(confirmationDialogProp?.data?.title),
|
|
79
|
-
showOk: true
|
|
80
|
-
},
|
|
81
|
-
disableClose: true
|
|
82
|
-
});
|
|
83
|
-
return dialogRef.afterClosed().pipe(take(1));
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
const dialogRef = this.matDialog.open(ConfirmationDialogComponent, {
|
|
88
|
-
width: confirmationDialogProp?.['width'] ?? '30%',
|
|
89
|
-
minHeight: confirmationDialogProp?.['minHeight'] ?? '30%',
|
|
90
|
-
maxHeight: confirmationDialogProp?.['maxHeight'] ?? '40%',
|
|
91
|
-
data: {
|
|
92
|
-
title: this.translateService.instant(confirmationDialogProp?.data?.title),
|
|
93
|
-
showOk: true
|
|
94
|
-
},
|
|
95
|
-
disableClose: true
|
|
96
|
-
});
|
|
97
|
-
return dialogRef.afterClosed().pipe(take(1));
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return of(true);
|
|
101
|
-
});
|
|
102
|
-
if (confirmationDialogs.length) {
|
|
103
|
-
forkJoin(confirmationDialogs)
|
|
104
|
-
.pipe(take(1))
|
|
105
|
-
.subscribe(() => {
|
|
106
|
-
this.dialogRef.close({
|
|
107
|
-
...this.model,
|
|
108
|
-
...this.form.value,
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
this.dialogRef.close({
|
|
114
|
-
...this.model,
|
|
115
|
-
...this.form.value,
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
this.dialogRef.close({
|
|
121
|
-
...this.model,
|
|
122
|
-
...this.form.value,
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
onCancel() {
|
|
128
|
-
this.dialogRef.close();
|
|
129
|
-
}
|
|
130
|
-
onSaveAddNew() {
|
|
131
|
-
if (this.form.valid) {
|
|
132
|
-
const dataToSave = {
|
|
133
|
-
...this.model,
|
|
134
|
-
...this.form.getRawValue(),
|
|
135
|
-
};
|
|
136
|
-
if (this.fields[0]?.confirmationDialogProps?.length) {
|
|
137
|
-
const confirmationDialogs = this.fields[0].confirmationDialogProps
|
|
138
|
-
.filter((confirmationDialogProp) => confirmationDialogProp?.enableConfirmation)
|
|
139
|
-
.map((confirmationDialogProp) => {
|
|
140
|
-
if (!confirmationDialogProp?.enableConfirmationDialogForRoles
|
|
141
|
-
?.length ||
|
|
142
|
-
confirmationDialogProp?.enableConfirmationDialogForRoles?.some((role) => this.options?.formState?.userRoles?.includes(role))) {
|
|
143
|
-
if (confirmationDialogProp?.showForChangeRequestOnly) {
|
|
144
|
-
if (this.options.formState.showOldValues) {
|
|
145
|
-
const dialogRef = this.matDialog.open(ConfirmationDialogComponent, {
|
|
146
|
-
width: confirmationDialogProp?.['width'] ?? '30%',
|
|
147
|
-
minHeight: confirmationDialogProp?.['minHeight'] ?? '30%',
|
|
148
|
-
maxHeight: confirmationDialogProp?.['maxHeight'] ?? '40%',
|
|
149
|
-
data: {
|
|
150
|
-
title: this.translateService.instant(confirmationDialogProp?.data?.title),
|
|
151
|
-
showOk: true,
|
|
152
|
-
},
|
|
153
|
-
disableClose: true,
|
|
154
|
-
});
|
|
155
|
-
return dialogRef.afterClosed().pipe(take(1));
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
const dialogRef = this.matDialog.open(ConfirmationDialogComponent, {
|
|
160
|
-
width: confirmationDialogProp?.['width'] ?? '30%',
|
|
161
|
-
minHeight: confirmationDialogProp?.['minHeight'] ?? '30%',
|
|
162
|
-
maxHeight: confirmationDialogProp?.['maxHeight'] ?? '40%',
|
|
163
|
-
data: {
|
|
164
|
-
title: this.translateService.instant(confirmationDialogProp?.data?.title),
|
|
165
|
-
showOk: true,
|
|
166
|
-
},
|
|
167
|
-
disableClose: true,
|
|
168
|
-
});
|
|
169
|
-
return dialogRef.afterClosed().pipe(take(1));
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
return of(true);
|
|
173
|
-
});
|
|
174
|
-
if (confirmationDialogs.length) {
|
|
175
|
-
forkJoin(confirmationDialogs)
|
|
176
|
-
.pipe(take(1))
|
|
177
|
-
.subscribe(() => {
|
|
178
|
-
if (this.propsOfDialog?.['isSequentialNumGenerationRequired']) {
|
|
179
|
-
dataToSave.sequentialNumberId = `000${this.generateSequentialIdNumber(this.parentModel)}`;
|
|
180
|
-
}
|
|
181
|
-
this.saveData.emit(dataToSave);
|
|
182
|
-
this.resetForm();
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
else {
|
|
186
|
-
if (this.propsOfDialog?.['isSequentialNumGenerationRequired']) {
|
|
187
|
-
dataToSave.sequentialNumberId = `000${this.generateSequentialIdNumber(this.parentModel)}`;
|
|
188
|
-
}
|
|
189
|
-
this.saveData.emit(dataToSave);
|
|
190
|
-
this.resetForm();
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
else {
|
|
194
|
-
if (this.propsOfDialog?.['isSequentialNumGenerationRequired']) {
|
|
195
|
-
dataToSave.sequentialNumberId = `000${this.generateSequentialIdNumber(this.parentModel)}`;
|
|
196
|
-
}
|
|
197
|
-
this.saveData.emit(dataToSave);
|
|
198
|
-
this.resetForm();
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
translateFormConfig(config) {
|
|
203
|
-
return config.map((field) => {
|
|
204
|
-
if (field.props?.label) {
|
|
205
|
-
field.expressions = {
|
|
206
|
-
...field.expressions,
|
|
207
|
-
'props.label': this.translateService.stream(field.props.label || ''),
|
|
208
|
-
'props.tooltip': this.translateService.stream(field.props.label || ''),
|
|
209
|
-
};
|
|
210
|
-
}
|
|
211
|
-
if (field.props?.placeholder) {
|
|
212
|
-
field.expressions = {
|
|
213
|
-
...field.expressions,
|
|
214
|
-
'props.placeholder': this.translateService.stream(field.props.placeholder || ''),
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
if (field.fieldGroup) {
|
|
218
|
-
this.translateFormConfig(field.fieldGroup);
|
|
219
|
-
}
|
|
220
|
-
return field;
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
onModelChange(event) {
|
|
224
|
-
this.model = event;
|
|
225
|
-
this.subscribeToDependencies(this.fields, this.form, this.model);
|
|
226
|
-
}
|
|
227
|
-
subscribeToDependencies(fields, form, vendorModel) {
|
|
228
|
-
fields.forEach((field) => {
|
|
229
|
-
if (field.fieldGroup) {
|
|
230
|
-
this.subscribeToDependencies(field.fieldGroup, form, vendorModel);
|
|
231
|
-
}
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
|
-
updateDependentFieldsFullName(fields) {
|
|
235
|
-
fields.forEach((field) => {
|
|
236
|
-
if (field.formControl && field.updateTabularField) {
|
|
237
|
-
field.formControl.valueChanges.subscribe((value) => {
|
|
238
|
-
this.updateLabelValueForField(field, value);
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
if (field.fieldGroup) {
|
|
242
|
-
this.updateDependentFieldsFullName(field.fieldGroup);
|
|
243
|
-
}
|
|
244
|
-
});
|
|
245
|
-
}
|
|
246
|
-
updateLabelValueForField(field, value) {
|
|
247
|
-
const options$ = field.props?.options;
|
|
248
|
-
if (options$ && typeof options$.subscribe === 'function') {
|
|
249
|
-
options$.subscribe((options) => {
|
|
250
|
-
const updateFieldKey = field.updateTabularField;
|
|
251
|
-
const selectedOption = options.find((option) => option.value === value);
|
|
252
|
-
if (selectedOption) {
|
|
253
|
-
this.model[updateFieldKey] = selectedOption.label;
|
|
254
|
-
}
|
|
255
|
-
});
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
isFilesUploaded() {
|
|
259
|
-
return true;
|
|
260
|
-
}
|
|
261
|
-
generateSequentialIdNumber(parentModel) {
|
|
262
|
-
if (parentModel?.[this.propsOfDialog?.['parenetModelKeyToGenerateSequentialNumber']]?.length) {
|
|
263
|
-
const latestRecordIdNumber = parentModel?.[this.propsOfDialog?.['parenetModelKeyToGenerateSequentialNumber']]?.sort((a, b) => +(b?.sequentialNumberId) - +(a?.sequentialNumberId))?.find((parenData) => +(parenData?.sequentialNumberId));
|
|
264
|
-
return +(latestRecordIdNumber?.sequentialNumberId) + 1;
|
|
265
|
-
}
|
|
266
|
-
return 1;
|
|
267
|
-
}
|
|
268
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TabularFormDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.FormlyFormBuilder }, { token: i3.TranslateService }, { token: i1.MatDialog }, { token: i0.ElementRef }, { token: i4.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
269
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: TabularFormDialogComponent, isStandalone: true, selector: "mu-app-add-data-dialog", outputs: { saveData: "saveData" }, ngImport: i0, template: `
|
|
270
|
-
<h1 mat-dialog-title>{{ dialogLabel | translate}}</h1>
|
|
271
|
-
<div mat-dialog-content class="min-h-max !pt-1 !flex">
|
|
272
|
-
<formly-form
|
|
273
|
-
[ngStyle]="{'width': (propsOfDialog && propsOfDialog?.viewDocSideBySide && !isMobileDevice) ? '50%' : ''}"
|
|
274
|
-
[form]="form"
|
|
275
|
-
[fields]="fields"
|
|
276
|
-
[model]="model"
|
|
277
|
-
[options]="options"
|
|
278
|
-
(modelChange)="onModelChange($event)"
|
|
279
|
-
></formly-form>
|
|
280
|
-
<iframe id="dialogIframe" *ngIf="propsOfDialog && propsOfDialog?.viewDocSideBySide && !isMobileDevice" [ngStyle]="{'width': (propsOfDialog && propsOfDialog?.viewDocSideBySide && !isMobileDevice) ? '50%' : ''}" frameborder="0"></iframe>
|
|
281
|
-
</div>
|
|
282
|
-
<div mat-dialog-actions>
|
|
283
|
-
<button mat-button (click)="onCancel()">{{'TABULAR_FORM_DIALOG.CANCEL' | translate}}</button>
|
|
284
|
-
<button mat-button *ngIf="!selectedRowData && !propsOfDialog.hideSaveAndAddNew" (click)="onSaveAddNew()" [disabled]="form.invalid || !isFilesUploaded()">{{'TABULAR_FORM_DIALOG.SAVE_AND_NEW' | translate}}</button>
|
|
285
|
-
<button mat-button *ngIf="!selectedRowData" (click)="onSave()" [disabled]="form.invalid || !isFilesUploaded()">{{'TABULAR_FORM_DIALOG.ADD' | translate}}</button>
|
|
286
|
-
<button mat-button *ngIf="selectedRowData && !data.hideUpdateBtn" (click)="onSave()" [disabled]="form.invalid || !isFilesUploaded()">{{'TABULAR_FORM_DIALOG.EDIT' | translate}}</button>
|
|
287
|
-
</div>
|
|
288
|
-
<ngx-spinner name="tabular-dialog" bdColor="rgba(0, 0, 0, 0.2)" size="medium" color="#fff" template="<img src='assets/images/lupin-icongif.gif' style='height: 70px !important;'/>"
|
|
289
|
-
[fullScreen]="true">
|
|
290
|
-
</ngx-spinner>
|
|
291
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatRadioModule }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i2.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: NgxSpinnerModule }, { kind: "component", type: i7.NgxSpinnerComponent, selector: "ngx-spinner", inputs: ["bdColor", "size", "color", "type", "fullScreen", "name", "zIndex", "template", "showSpinner", "disableAnimation"] }] }); }
|
|
292
|
-
}
|
|
293
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TabularFormDialogComponent, decorators: [{
|
|
294
|
-
type: Component,
|
|
295
|
-
args: [{
|
|
296
|
-
selector: 'mu-app-add-data-dialog',
|
|
297
|
-
standalone: true,
|
|
298
|
-
imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatSelectModule, MatRadioModule, MatCheckboxModule,
|
|
299
|
-
MatDialogModule, FormlyModule, TranslateModule, MatButtonModule, NgxSpinnerModule
|
|
300
|
-
],
|
|
301
|
-
template: `
|
|
302
|
-
<h1 mat-dialog-title>{{ dialogLabel | translate}}</h1>
|
|
303
|
-
<div mat-dialog-content class="min-h-max !pt-1 !flex">
|
|
304
|
-
<formly-form
|
|
305
|
-
[ngStyle]="{'width': (propsOfDialog && propsOfDialog?.viewDocSideBySide && !isMobileDevice) ? '50%' : ''}"
|
|
306
|
-
[form]="form"
|
|
307
|
-
[fields]="fields"
|
|
308
|
-
[model]="model"
|
|
309
|
-
[options]="options"
|
|
310
|
-
(modelChange)="onModelChange($event)"
|
|
311
|
-
></formly-form>
|
|
312
|
-
<iframe id="dialogIframe" *ngIf="propsOfDialog && propsOfDialog?.viewDocSideBySide && !isMobileDevice" [ngStyle]="{'width': (propsOfDialog && propsOfDialog?.viewDocSideBySide && !isMobileDevice) ? '50%' : ''}" frameborder="0"></iframe>
|
|
313
|
-
</div>
|
|
314
|
-
<div mat-dialog-actions>
|
|
315
|
-
<button mat-button (click)="onCancel()">{{'TABULAR_FORM_DIALOG.CANCEL' | translate}}</button>
|
|
316
|
-
<button mat-button *ngIf="!selectedRowData && !propsOfDialog.hideSaveAndAddNew" (click)="onSaveAddNew()" [disabled]="form.invalid || !isFilesUploaded()">{{'TABULAR_FORM_DIALOG.SAVE_AND_NEW' | translate}}</button>
|
|
317
|
-
<button mat-button *ngIf="!selectedRowData" (click)="onSave()" [disabled]="form.invalid || !isFilesUploaded()">{{'TABULAR_FORM_DIALOG.ADD' | translate}}</button>
|
|
318
|
-
<button mat-button *ngIf="selectedRowData && !data.hideUpdateBtn" (click)="onSave()" [disabled]="form.invalid || !isFilesUploaded()">{{'TABULAR_FORM_DIALOG.EDIT' | translate}}</button>
|
|
319
|
-
</div>
|
|
320
|
-
<ngx-spinner name="tabular-dialog" bdColor="rgba(0, 0, 0, 0.2)" size="medium" color="#fff" template="<img src='assets/images/lupin-icongif.gif' style='height: 70px !important;'/>"
|
|
321
|
-
[fullScreen]="true">
|
|
322
|
-
</ngx-spinner>
|
|
323
|
-
`
|
|
324
|
-
}]
|
|
325
|
-
}], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
326
|
-
type: Inject,
|
|
327
|
-
args: [MAT_DIALOG_DATA]
|
|
328
|
-
}] }, { type: i2.FormlyFormBuilder }, { type: i3.TranslateService }, { type: i1.MatDialog }, { type: i0.ElementRef }, { type: i4.BreakpointObserver }], propDecorators: { saveData: [{
|
|
329
|
-
type: Output
|
|
330
|
-
}] } });
|
|
331
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFidWxhci1mb3JtLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLWxpYi9zcmMvbGliL3R5cGVzL3RhYnVsYXItZm9ybS1kaWFsb2cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBc0IsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQWEsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBcUIsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBb0IsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUs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LENBQUMsQ0FBQyxTQUF1QyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztZQUMxVSxPQUFPLENBQUMsQ0FBQyxvQkFBb0IsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDOytHQXhTVSwwQkFBMEIsOENBZ0IzQixlQUFlO21HQWhCZCwwQkFBMEIscUhBeEIzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCVCwyREF6QlMsWUFBWSx1TkFBRSxtQkFBbUIsOEJBQUUsa0JBQWtCLDhCQUFFLGNBQWMsOEJBQUUsZUFBZSw4QkFBRSxjQUFjLDhCQUFFLGlCQUFpQiw4QkFDakksZUFBZSx5YkFBRSxZQUFZLDZLQUFFLGVBQWUsMkZBQUUsZUFBZSwyTkFBRSxnQkFBZ0I7OzRGQTBCeEUsMEJBQTBCO2tCQTlCdEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsd0JBQXdCO29CQUNsQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGlCQUFpQjt3QkFDakksZUFBZSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQjtxQkFDbEY7b0JBQ0QsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JUO2lCQUNGOzswQkFpQkksTUFBTTsyQkFBQyxlQUFlOzBMQVRmLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRzIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5qZWN0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nLCBNYXREaWFsb2dNb2R1bGUsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0UmFkaW9Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9yYWRpbyc7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgRm9ybWx5Rm9ybUJ1aWxkZXIsIEZvcm1seU1vZHVsZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBOZ3hTcGlubmVyTW9kdWxlIH0gZnJvbSAnbmd4LXNwaW5uZXInO1xuaW1wb3J0IHsgZm9ya0pvaW4sIG9mLCB0YWtlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9jb25maXJtYXRpb24tZGlhbG9nL2NvbmZpcm1hdGlvbi1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IEN1c3RvbUZvcm1seUZpZWxkQ29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzL2N1c3RvbS1mb3JtLWZpZWxkLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbXUtYXBwLWFkZC1kYXRhLWRpYWxvZycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIE1hdEZvcm1GaWVsZE1vZHVsZSwgTWF0SW5wdXRNb2R1bGUsIE1hdFNlbGVjdE1vZHVsZSwgTWF0UmFkaW9Nb2R1bGUsIE1hdENoZWNrYm94TW9kdWxlLFxuICAgIE1hdERpYWxvZ01vZHVsZSwgRm9ybWx5TW9kdWxlLCBUcmFuc2xhdGVNb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZSwgTmd4U3Bpbm5lck1vZHVsZVxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxoMSBtYXQtZGlhbG9nLXRpdGxlPnt7IGRpYWxvZ0xhYmVsIHwgdHJhbnNsYXRlfX08L2gxPlxuICAgIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50IGNsYXNzPVwibWluLWgtbWF4ICFwdC0xICFmbGV4XCI+XG4gICAgICA8Zm9ybWx5LWZvcm1cbiAgICAgICAgW25nU3R5bGVdPVwieyd3aWR0aCc6IChwcm9wc09mRGlhbG9nICYmIHByb3BzT2ZEaWFsb2c/LnZpZXdEb2NTaWRlQnlTaWRlICYmICFpc01vYmlsZURldmljZSkgPyAnNTAlJyA6ICcnfVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXG4gICAgICAgICAgICAgICAgW2ZpZWxkc109XCJmaWVsZHNcIlxuICAgICAgICAgICAgICAgIFttb2RlbF09XCJtb2RlbFwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNdPVwib3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cIm9uTW9kZWxDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID48L2Zvcm1seS1mb3JtPlxuICAgICAgICA8aWZyYW1lIGlkPVwiZGlhbG9nSWZyYW1lXCIgKm5nSWY9XCJwcm9wc09mRGlhbG9nICYmIHByb3BzT2ZEaWFsb2c/LnZpZXdEb2NTaWRlQnlTaWRlICYmICFpc01vYmlsZURldmljZVwiIFtuZ1N0eWxlXT1cInsnd2lkdGgnOiAocHJvcHNPZkRpYWxvZyAmJiBwcm9wc09mRGlhbG9nPy52aWV3RG9jU2lkZUJ5U2lkZSAmJiAhaXNNb2JpbGVEZXZpY2UpID8gJzUwJScgOiAnJ31cIiBmcmFtZWJvcmRlcj1cIjBcIj48L2lmcmFtZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwib25DYW5jZWwoKVwiPnt7J1RBQlVMQVJfRk9STV9ESUFMT0cuQ0FOQ0VMJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gKm5nSWY9XCIhc2VsZWN0ZWRSb3dEYXRhICYmICFwcm9wc09mRGlhbG9nLmhpZGVTYXZlQW5kQWRkTmV3XCIgKGNsaWNrKT1cIm9uU2F2ZUFkZE5ldygpXCIgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZCB8fCAhaXNGaWxlc1VwbG9hZGVkKClcIj57eydUQUJVTEFSX0ZPUk1fRElBTE9HLlNBVkVfQU5EX05FVycgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uICpuZ0lmPVwiIXNlbGVjdGVkUm93RGF0YVwiIChjbGljayk9XCJvblNhdmUoKVwiIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWQgfHwgIWlzRmlsZXNVcGxvYWRlZCgpXCI+e3snVEFCVUxBUl9GT1JNX0RJQUxPRy5BREQnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAqbmdJZj1cInNlbGVjdGVkUm93RGF0YSAmJiAhZGF0YS5oaWRlVXBkYXRlQnRuXCIgKGNsaWNrKT1cIm9uU2F2ZSgpXCIgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZCB8fCAhaXNGaWxlc1VwbG9hZGVkKClcIj57eydUQUJVTEFSX0ZPUk1fRElBTE9HLkVESVQnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8bmd4LXNwaW5uZXIgbmFtZT1cInRhYnVsYXItZGlhbG9nXCIgYmRDb2xvcj1cInJnYmEoMCwgMCwgMCwgMC4yKVwiIHNpemU9XCJtZWRpdW1cIiBjb2xvcj1cIiNmZmZcIiB0ZW1wbGF0ZT1cIjxpbWcgc3JjPSdhc3NldHMvaW1hZ2VzL2x1cGluLWljb25naWYuZ2lmJyBzdHlsZT0naGVpZ2h0OiA3MHB4ICFpbXBvcnRhbnQ7Jy8+XCJcbiAgICAgIFtmdWxsU2NyZWVuXT1cInRydWVcIj5cbiAgICA8L25neC1zcGlubmVyPlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIFRhYnVsYXJGb3JtRGlhbG9nQ29tcG9uZW50IHtcbiAgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICBmaWVsZENvbmZpZzogYW55W107XG4gIGZpZWxkcyE6IEN1c3RvbUZvcm1seUZpZWxkQ29uZmlnW107XG4gIG1vZGVsOiBhbnk7XG4gIG9wdGlvbnM6IGFueTtcbiAgZGlhbG9nTGFiZWw9ICcnO1xuICBAT3V0cHV0KCkgc2F2ZURhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgc2VsZWN0ZWRSb3dEYXRhOmFueTtcbiAgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgcHJvcHNPZkRpYWxvZzogYW55O1xuICBwYXJlbnRNb2RlbDogYW55O1xuICBpc01vYmlsZURldmljZSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxUYWJ1bGFyRm9ybURpYWxvZ0NvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXG4gICAgcHJpdmF0ZSBmb3JtbHlCdWlsZGVyOiBGb3JtbHlGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtYXREaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIGhvc3RFbGVtZW50OiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgYnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXIsXG4gICkge1xuICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyPy5vYnNlcnZlKFtCcmVha3BvaW50cy5IYW5kc2V0XSkucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIHRoaXMuaXNNb2JpbGVEZXZpY2UgPSByZXN1bHQ/Lm1hdGNoZXM7XG4gICAgfSk7XG4gICAgdGhpcy5maWVsZENvbmZpZyA9IGRhdGEuZmllbGRDb25maWc7XG4gICAgdGhpcy5zZWxlY3RlZFJvd0RhdGEgPSBkYXRhLnNlbGVjdGVkUm93RGF0YTtcbiAgICBpZiAoZGF0YT8uc2VsZWN0ZWRSb3dEYXRhKSB7XG4gICAgICB0aGlzLm1vZGVsID0gZGF0YT8uc2VsZWN0ZWRSb3dEYXRhO1xuICAgIH1cbiAgICB0aGlzLnByb3BzT2ZEaWFsb2cgPSBkYXRhLnRhYnVsYXJQcm9wcztcbiAgICB0aGlzLmRpYWxvZ0xhYmVsID0gZGF0YS5sYWJlbDtcbiAgICB0aGlzLmZpZWxkcyA9IHRoaXMudHJhbnNsYXRlRm9ybUNvbmZpZyhkYXRhLmZpZWxkQ29uZmlnKTtcbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgICBmb3JtU3RhdGU6IGRhdGE/LmZvcm1TdGF0ZVxuICAgIH1cbiAgICB0aGlzLnBhcmVudE1vZGVsID0gZGF0YT8ucGFyZW50TW9kZWw7XG5cbiAgICB0aGlzLmZvcm1seUJ1aWxkZXIuYnVpbGRGb3JtKHRoaXMuZm9ybSwgdGhpcy5maWVsZHMsIHRoaXMubW9kZWwsIHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy51cGRhdGVEZXBlbmRlbnRGaWVsZHNGdWxsTmFtZSh0aGlzLmZpZWxkcyk7XG4gIH1cblxuXG4gIHByaXZhdGUgcmVzZXRGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybS5yZXNldCgpO1xuICB9XG5cbiAgb25TYXZlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm0udmFsaWQpIHtcbiAgICAgIGlmICh0aGlzLmZpZWxkc1swXT8uY29uZmlybWF0aW9uRGlhbG9nUHJvcHM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjb25maXJtYXRpb25EaWFsb2dzID0gdGhpcy5maWVsZHNbMF0uY29uZmlybWF0aW9uRGlhbG9nUHJvcHNcbiAgICAgICAgICAuZmlsdGVyKChjb25maXJtYXRpb25EaWFsb2dQcm9wOiBhbnkpID0+IGNvbmZpcm1hdGlvbkRpYWxvZ1Byb3A/LmVuYWJsZUNvbmZpcm1hdGlvbilcbiAgICAgICAgICAubWFwKChjb25maXJtYXRpb25EaWFsb2dQcm9wOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgIWNvbmZpcm1hdGlvbkRpYWxvZ1Byb3A/LmVuYWJsZUNvbmZpcm1hdGlvbkRpYWxvZ0ZvclJvbGVzPy5sZW5ndGggfHxcbiAgICAgICAgICAgICAgY29uZmlybWF0aW9uRGlhbG9nUHJvcD8uZW5hYmxlQ29uZmlybWF0aW9uRGlhbG9nRm9yUm9sZXM/LnNvbWUoKHJvbGU6IHN0cmluZykgPT4gdGhpcy5vcHRpb25zPy5mb3JtU3RhdGU/LnVzZXJSb2xlcz8uaW5jbHVkZXMocm9sZSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYoY29uZmlybWF0aW9uRGlhbG9nUHJvcD8uc2hvd0ZvckNoYW5nZVJlcXVlc3RPbmx5KSB7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5vcHRpb25zLmZvcm1TdGF0ZS5zaG93T2xkVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLm1hdERpYWxvZy5vcGVuKENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDpjb25maXJtYXRpb25EaWFsb2dQcm9wPy5bJ21pbldpZHRoJ10gPz8gJzQwJScsXG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBjb25maXJtYXRpb25EaWFsb2dQcm9wPy5bJ21heFdpZHRoJ10gPz8gJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IGNvbmZpcm1hdGlvbkRpYWxvZ1Byb3A/LlsnbWluSGVpZ2h0J10gPz8gJzMwJScsXG4gICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogY29uZmlybWF0aW9uRGlhbG9nUHJvcD8uWydtYXhIZWlnaHQnXSA/PyAnNDAlJyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChjb25maXJtYXRpb25EaWFsb2dQcm9wPy5kYXRhPy50aXRsZSksXG4gICAgICAgICAgICAgICAgICAgICAgc2hvd09rOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5waXBlKHRha2UoMSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLm1hdERpYWxvZy5vcGVuKENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgICAgd2lkdGg6IGNvbmZpcm1hdGlvbkRpYWxvZ1Byb3A/Llsnd2lkdGgnXSA/PyAnMzAlJyxcbiAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogY29uZmlybWF0aW9uRGlhbG9nUHJvcD8uWydtaW5IZWlnaHQnXSA/PyAnMzAlJyxcbiAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogY29uZmlybWF0aW9uRGlhbG9nUHJvcD8uWydtYXhIZWlnaHQnXSA/PyAnNDAlJyxcbiAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGNvbmZpcm1hdGlvbkRpYWxvZ1Byb3A/LmRhdGE/LnRpdGxlKSxcbiAgICAgICAgICAgICAgICAgICAgc2hvd09rOiB0cnVlXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkucGlwZSh0YWtlKDEpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChjb25maXJtYXRpb25EaWFsb2dzLmxlbmd0aCkge1xuICAgICAgICAgIGZvcmtKb2luKGNvbmZpcm1hdGlvbkRpYWxvZ3MpXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLm1vZGVsLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZm9ybS52YWx1ZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh7XG4gICAgICAgICAgICAuLi50aGlzLm1vZGVsLFxuICAgICAgICAgICAgLi4udGhpcy5mb3JtLnZhbHVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh7XG4gICAgICAgICAgLi4udGhpcy5tb2RlbCxcbiAgICAgICAgICAuLi50aGlzLmZvcm0udmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICBvblNhdmVBZGROZXcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgY29uc3QgZGF0YVRvU2F2ZSA9IHtcbiAgICAgICAgLi4udGhpcy5tb2RlbCxcbiAgICAgICAgLi4udGhpcy5mb3JtLmdldFJhd1ZhbHVlKCksXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5maWVsZHNbMF0/LmNvbmZpcm1hdGlvbkRpYWxvZ1Byb3BzPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY29uZmlybWF0aW9uRGlhbG9ncyA9IHRoaXMuZmllbGRzWzBdLmNvbmZpcm1hdGlvbkRpYWxvZ1Byb3BzXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIChjb25maXJtYXRpb25EaWFsb2dQcm9wOiBhbnkpID0+XG4gICAgICAgICAgICAgIGNvbmZpcm1hdGlvbkRpYWxvZ1Byb3A/LmVuYWJsZUNvbmZpcm1hdGlvblxuICAgICAgICAgIClcbiAgICAgICAgICAubWFwKChjb25maXJtYXRpb25EaWFsb2dQcm9wOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgIWNvbmZpcm1hdGlvbkRpYWxvZ1Byb3A/LmVuYWJsZUNvbmZpcm1hdGlvbkRpYWxvZ0ZvclJvbGVzXG4gICAgICAgICAgICAgICAgPy5sZW5ndGggfHxcbiAgICAgICAgICAgICAgY29uZmlybWF0aW9uRGlhbG9nUHJvcD8uZW5hYmxlQ29uZmlybWF0aW9uRGlhbG9nRm9yUm9sZXM/LnNvbWUoXG4gICAgICAgICAgICAgICAgKHJvbGU6IHN0cmluZykgPT5cbiAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucz8uZm9ybVN0YXRlPy51c2VyUm9sZXM/LmluY2x1ZGVzKHJvbGUpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGlhbG9nUHJvcD8uc2hvd0ZvckNoYW5nZVJlcXVlc3RPbmx5KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5mb3JtU3RhdGUuc2hvd09sZFZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5tYXREaWFsb2cub3BlbihcbiAgICAgICAgICAgICAgICAgICAgQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGNvbmZpcm1hdGlvbkRpYWxvZ1Byb3A/Llsnd2lkdGgnXSA/PyAnMzAlJyxcbiAgICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IGNvbmZpcm1hdGlvbkRpYWxvZ1Byb3A/LlsnbWluSGVpZ2h0J10gPz8gJzMwJScsXG4gICAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBjb25maXJtYXRpb25EaWFsb2dQcm9wPy5bJ21heEhlaWdodCddID8/ICc0MCUnLFxuICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybWF0aW9uRGlhbG9nUHJvcD8uZGF0YT8udGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93T2s6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5waXBlKHRha2UoMSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLm1hdERpYWxvZy5vcGVuKFxuICAgICAgICAgICAgICAgICAgQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogY29uZmlybWF0aW9uRGlhbG9nUHJvcD8uWyd3aWR0aCddID8/ICczMCUnLFxuICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IGNvbmZpcm1hdGlvbkRpYWxvZ1Byb3A/LlsnbWluSGVpZ2h0J10gPz8gJzMwJScsXG4gICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogY29uZmlybWF0aW9uRGlhbG9nUHJvcD8uWydtYXhIZWlnaHQnXSA/PyAnNDAlJyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1hdGlvbkRpYWxvZ1Byb3A/LmRhdGE/LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICBzaG93T2s6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnBpcGUodGFrZSgxKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAoY29uZmlybWF0aW9uRGlhbG9ncy5sZW5ndGgpIHtcbiAgICAgICAgICBmb3JrSm9pbihjb25maXJtYXRpb25EaWFsb2dzKVxuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wc09mRGlhbG9nPy5bJ2lzU2VxdWVudGlhbE51bUdlbmVyYXRpb25SZXF1aXJlZCddKSB7XG4gICAgICAgICAgICAgICAgZGF0YVRvU2F2ZS5zZXF1ZW50aWFsTnVtYmVySWQgPSBgMDAwJHt0aGlzLmdlbmVyYXRlU2VxdWVudGlhbElkTnVtYmVyKFxuICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRNb2RlbFxuICAgICAgICAgICAgICAgICl9YDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnNhdmVEYXRhLmVtaXQoZGF0YVRvU2F2ZSk7XG4gICAgICAgICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5wcm9wc09mRGlhbG9nPy5bJ2lzU2VxdWVudGlhbE51bUdlbmVyYXRpb25SZXF1aXJlZCddKSB7XG4gICAgICAgICAgICBkYXRhVG9TYXZlLnNlcXVlbnRpYWxOdW1iZXJJZCA9IGAwMDAke3RoaXMuZ2VuZXJhdGVTZXF1ZW50aWFsSWROdW1iZXIoXG4gICAgICAgICAgICAgIHRoaXMucGFyZW50TW9kZWxcbiAgICAgICAgICAgICl9YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zYXZlRGF0YS5lbWl0KGRhdGFUb1NhdmUpO1xuICAgICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzT2ZEaWFsb2c/LlsnaXNTZXF1ZW50aWFsTnVtR2VuZXJhdGlvblJlcXVpcmVkJ10pIHtcbiAgICAgICAgICBkYXRhVG9TYXZlLnNlcXVlbnRpYWxOdW1iZXJJZCA9IGAwMDAke3RoaXMuZ2VuZXJhdGVTZXF1ZW50aWFsSWROdW1iZXIoXG4gICAgICAgICAgICB0aGlzLnBhcmVudE1vZGVsXG4gICAgICAgICAgKX1gO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2F2ZURhdGEuZW1pdChkYXRhVG9TYXZlKTtcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0cmFuc2xhdGVGb3JtQ29uZmlnKFxuICAgIGNvbmZpZzogQ3VzdG9tRm9ybWx5RmllbGRDb25maWdbXVxuICApOiBDdXN0b21Gb3JtbHlGaWVsZENvbmZpZ1tdIHtcbiAgICByZXR1cm4gY29uZmlnLm1hcCgoZmllbGQpID0+IHtcbiAgICAgIGlmIChmaWVsZC5wcm9wcz8ubGFiZWwpIHtcbiAgICAgICAgZmllbGQuZXhwcmVzc2lvbnMgPSB7XG4gICAgICAgICAgLi4uZmllbGQuZXhwcmVzc2lvbnMsXG4gICAgICAgICAgJ3Byb3BzLmxhYmVsJzogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbShmaWVsZC5wcm9wcy5sYWJlbCB8fCAnJyksXG4gICAgICAgICAgJ3Byb3BzLnRvb2x0aXAnOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKFxuICAgICAgICAgICAgZmllbGQucHJvcHMubGFiZWwgfHwgJydcbiAgICAgICAgICApLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLnByb3BzPy5wbGFjZWhvbGRlcikge1xuICAgICAgICBmaWVsZC5leHByZXNzaW9ucyA9IHtcbiAgICAgICAgICAuLi5maWVsZC5leHByZXNzaW9ucyxcbiAgICAgICAgICAncHJvcHMucGxhY2Vob2xkZXInOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKFxuICAgICAgICAgICAgZmllbGQucHJvcHMucGxhY2Vob2xkZXIgfHwgJydcbiAgICAgICAgICApLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLmZpZWxkR3JvdXApIHtcbiAgICAgICAgdGhpcy50cmFuc2xhdGVGb3JtQ29uZmlnKGZpZWxkLmZpZWxkR3JvdXApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH0pO1xuICB9XG5cbiAgb25Nb2RlbENoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5tb2RlbCA9IGV2ZW50O1xuICAgIHRoaXMuc3Vic2NyaWJlVG9EZXBlbmRlbmNpZXModGhpcy5maWVsZHMsIHRoaXMuZm9ybSwgdGhpcy5tb2RlbCk7XG4gIH1cblxuICBzdWJzY3JpYmVUb0RlcGVuZGVuY2llcyhmaWVsZHM6IEN1c3RvbUZvcm1seUZpZWxkQ29uZmlnW10sIGZvcm06IEZvcm1Hcm91cCwgdmVuZG9yTW9kZWw6IGFueSkge1xuICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICBpZiAoZmllbGQuZmllbGRHcm91cCkge1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRvRGVwZW5kZW5jaWVzKGZpZWxkLmZpZWxkR3JvdXAsIGZvcm0sIHZlbmRvck1vZGVsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZURlcGVuZGVudEZpZWxkc0Z1bGxOYW1lKGZpZWxkczogYW55KSB7XG4gICAgZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgIGlmKGZpZWxkLmZvcm1Db250cm9sICYmIGZpZWxkLnVwZGF0ZVRhYnVsYXJGaWVsZCkge1xuICAgICAgICBmaWVsZC5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy51cGRhdGVMYWJlbFZhbHVlRm9yRmllbGQoZmllbGQsIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoZmllbGQuZmllbGRHcm91cCkge1xuICAgICAgICB0aGlzLnVwZGF0ZURlcGVuZGVudEZpZWxkc0Z1bGxOYW1lKGZpZWxkLmZpZWxkR3JvdXApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlTGFiZWxWYWx1ZUZvckZpZWxkKGZpZWxkOiBhbnksIHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBvcHRpb25zJCA9IGZpZWxkLnByb3BzPy5vcHRpb25zO1xuICAgIGlmIChvcHRpb25zJCAmJiB0eXBlb2Ygb3B0aW9ucyQuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvcHRpb25zJC5zdWJzY3JpYmUoKG9wdGlvbnM6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVGaWVsZEtleSA9IGZpZWxkLnVwZGF0ZVRhYnVsYXJGaWVsZDtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSBvcHRpb25zLmZpbmQoKG9wdGlvbjogYW55KSA9PiBvcHRpb24udmFsdWUgPT09IHZhbHVlKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICAgICAgdGhpcy5tb2RlbFt1cGRhdGVGaWVsZEtleV0gPSBzZWxlY3RlZE9wdGlvbi5sYWJlbDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaXNGaWxlc1VwbG9hZGVkKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZ2VuZXJhdGVTZXF1ZW50aWFsSWROdW1iZXIocGFyZW50TW9kZWw6IGFueSkge1xuICAgIGlmIChwYXJlbnRNb2RlbD8uW3RoaXMucHJvcHNPZkRpYWxvZz8uWydwYXJlbmV0TW9kZWxLZXlUb0dlbmVyYXRlU2VxdWVudGlhbE51bWJlciddXT8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBsYXRlc3RSZWNvcmRJZE51bWJlciA9IHBhcmVudE1vZGVsPy5bdGhpcy5wcm9wc09mRGlhbG9nPy5bJ3BhcmVuZXRNb2RlbEtleVRvR2VuZXJhdGVTZXF1ZW50aWFsTnVtYmVyJ11dPy5zb3J0KChhOiB7IHNlcXVlbnRpYWxOdW1iZXJJZDogbnVtYmVyOyB9LCBiOiB7IHNlcXVlbnRpYWxOdW1iZXJJZDogbnVtYmVyOyB9KSA9PiArKGI/LnNlcXVlbnRpYWxOdW1iZXJJZCkgLSArKGE/LnNlcXVlbnRpYWxOdW1iZXJJZCkpPy5maW5kKChwYXJlbkRhdGE6IHsgc2VxdWVudGlhbE51bWJlcklkOiBhbnk7IH0pID0+ICsocGFyZW5EYXRhPy5zZXF1ZW50aWFsTnVtYmVySWQpKTtcbiAgICAgIHJldHVybiArKGxhdGVzdFJlY29yZElkTnVtYmVyPy5zZXF1ZW50aWFsTnVtYmVySWQpICsgMTtcbiAgICB9XG4gICAgcmV0dXJuIDE7XG4gIH1cbn0iXX0=
|