UNPKG

ngx-surveys

Version:
140 lines 29.4 kB
import { Component, Inject, ViewChild } from '@angular/core'; import { MAT_DIALOG_DATA } from '@angular/material/dialog'; import { buildField, buildOption, FormItemTypes } from '../../form-item/form-item.component'; import * as _ from 'lodash'; import * as i0 from "@angular/core"; import * as i1 from "@angular/material/dialog"; import * as i2 from "@angular/material/button"; import * as i3 from "../../ngx-survey.component"; export class DialogItemEdit { constructor(dialogRef, data) { this.dialogRef = dialogRef; this.data = data; this.extraFields = []; this.multiChoiseFieldTypes = ["radio", "select", "segments"]; console.log(data, this.commonFields); const item = data.item; if (item.fieldValidations && item.fieldValidations.rules && item.fieldValidations.rules.find(r => r.minLength && r.minLength > 0)) { item.required = true; } this.item = item; this.multiChoiseFieldsOnly = data.params.multiChoiseFieldsOnly; this.customFieldNamesAllowed = data.params.customFieldNamesAllowed; this.readOnly = data.params.readOnly; this.setFormFields(); } setFormFields() { console.log(Object.keys(FormItemTypes).filter(key => this.multiChoiseFieldsOnly ? this.multiChoiseFieldTypes.indexOf(key) >= 0 : true)); this.commonFields = [ buildField('select', { name: "type", label: "Type", items: Object.keys(FormItemTypes).filter(key => this.multiChoiseFieldsOnly ? this.multiChoiseFieldTypes.indexOf(key) >= 0 : true).map(key => { const item = FormItemTypes[key]; return item.label ? buildOption(key, item.label) : null; }).filter(t => t), actionUpdatesSectionValue: true }, true), buildField('select', { name: "style", label: "Text Field Style", items: [ buildOption('text', 'Standard Text Field'), buildOption('number', 'Number'), buildOption('email', 'E-mail'), buildOption('password', 'Password'), buildOption('url', 'URL'), ], visibilityValuesInSection: ["string"], value: 'text' }, true), buildField('select', { name: "fileType", label: "Uploader Type", items: [ buildOption('image', 'Image'), buildOption('video', 'Video'), buildOption('file', 'Any File'), ], visibilityValuesInSection: ["file"], value: 'image' }, true), buildField('select', { name: "style", label: "Style", items: [ buildOption('list', 'List with selection'), buildOption('buttons', 'Radio Buttons'), buildOption('select', 'Select'), ], visibilityValuesInSection: ["radio"], value: 'list' }, true), buildField('checkbox', { name: "multiple", label: "Allow multiple files upload", visibilityValuesInSection: ["file"] }), /* buildField('string', {name: "areaLabel", label: "Area Label", visibilityValuesInSection: ["file"], defaultValue:'Drag and drop files here or use "Browse Files" button'}), buildField('string', {name: "buttonLabel", label: "Button Label", visibilityValuesInSection: ["file"], defaultValue:'Browse Files'}), */ buildField('string', { name: "name", label: "Name", visibilityValuesInSection: !this.customFieldNamesAllowed ? ['none'] : undefined }, false), buildField('text', { name: "label", label: "Label" }), buildField('text', { name: "hint", label: "Hint" }), buildField('text', { name: "htmlContent", label: "Content", visibilityValuesInSection: ["label"] }), buildField('checkbox', { name: "required", label: "Required" }), buildField('checkbox', { name: "actionUpdatesSectionValue", label: "Action Updates Section Value", visibilityValuesInSection: [this.multiChoiseFieldTypes] }), buildField('checkbox', { name: "multiple", label: "Multiple Answers", visibilityValuesInSection: ["radio"] }), buildField('optionsEditor', { name: "items", label: "Options", visibilityValuesInSection: [["radio", "select"]], allowCustomAnswers: !this.multiChoiseFieldsOnly, allowCustomOptionValues: this.customFieldNamesAllowed, defaultValue: this.item.value, multiple: this.item.multiple }), buildField('optionsEditor', { name: "segments", label: "Segments", visibilityValuesInSection: ["segments"], allowCustomAnswers: false, allowCustomOptionValues: this.customFieldNamesAllowed, defaultValue: this.item.value }), ]; this.itemEditForm = [ { items: [...this.commonFields] } ]; } onFormChange(values) { console.log(values, this.itemEditForm); const optionsEditField = this.itemEditForm[0].items.find(f => f.name === 'items'); if (optionsEditField && optionsEditField.multiple !== values.multiple) { optionsEditField.multiple = values.multiple; if (values.multiple) { optionsEditField.defaultValue = []; } } console.log(optionsEditField); } onNoClick() { this.dialogRef.close(); } onFormSubmit(item) { if (!item.fieldValidations) { item.fieldValidations = {}; } if (!item.fieldValidations.rules) { item.fieldValidations.rules = []; } if (!item.name || !this.customFieldNamesAllowed) { item.name = _.camelCase(item.label); } console.log(item); const minLengthRule = item.fieldValidations.rules.find(r => r.minLength > 0); console.log(item, minLengthRule); if (item.required && !minLengthRule) { item.fieldValidations.rules.push({ minLength: 1 }); } else if (!item.required && minLengthRule) { minLengthRule.minLength = 0; } ['segments', 'items'].forEach(key => { if (item[key] && item[key].length) { let defaultValArr = []; let defaultValStr = ''; item[key].forEach(option => { if (option.selected) { defaultValArr.push(option.optionValue); defaultValStr = option.optionValue; } delete option.selected; }); item.value = item.multiple ? defaultValArr : defaultValStr; } }); this.item = item; this.dialogRef.close(this.item); } onOkClick() { //console.log(this.data); this.survey.submitForm(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: DialogItemEdit, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: DialogItemEdit, selector: "dialog-item-edit", viewQueries: [{ propertyName: "survey", first: true, predicate: ["survey"], descendants: true }], ngImport: i0, template: "<h1 mat-dialog-title>Edit Field</h1>\n<div mat-dialog-content>\n <ngx-survey #survey\n [form]=\"itemEditForm\"\n [value]=\"item\"\n (valueChange)=\"onFormChange($event)\"\n (submit)=\"onFormSubmit($event)\"\n [editable]=\"!readOnly\"\n ></ngx-survey>\n</div>\n<div mat-dialog-actions>\n <button mat-button (click)=\"onNoClick()\">Cancel</button>\n <button mat-button (click)=\"onOkClick()\" [disabled]=\"readOnly\" cdkFocusInitial>Ok</button>\n</div>\n", styles: [".full-width{width:100%}\n"], dependencies: [{ kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { 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: "component", type: i3.NgxSurveyComponent, selector: "ngx-survey", inputs: ["form", "value", "splitBySteps", "validateByStepChange", "submitInProgress", "submitErrorText", "editable"], outputs: ["valueChange", "stepChanged", "submit"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: DialogItemEdit, decorators: [{ type: Component, args: [{ selector: 'dialog-item-edit', template: "<h1 mat-dialog-title>Edit Field</h1>\n<div mat-dialog-content>\n <ngx-survey #survey\n [form]=\"itemEditForm\"\n [value]=\"item\"\n (valueChange)=\"onFormChange($event)\"\n (submit)=\"onFormSubmit($event)\"\n [editable]=\"!readOnly\"\n ></ngx-survey>\n</div>\n<div mat-dialog-actions>\n <button mat-button (click)=\"onNoClick()\">Cancel</button>\n <button mat-button (click)=\"onOkClick()\" [disabled]=\"readOnly\" cdkFocusInitial>Ok</button>\n</div>\n", styles: [".full-width{width:100%}\n"] }] }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA] }] }], propDecorators: { survey: [{ type: ViewChild, args: ['survey', { static: false }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLWl0ZW0tZWRpdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdXJ2ZXlzL3NyYy9saWIvZGlhbG9ncy9kaWFsb2ctaXRlbS1lZGl0L2RpYWxvZy1pdGVtLWVkaXQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3VydmV5cy9zcmMvbGliL2RpYWxvZ3MvZGlhbG9nLWl0ZW0tZWRpdC9kaWFsb2ctaXRlbS1lZGl0Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBZ0IsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDN0YsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7Ozs7O0FBWTVCLE1BQU0sT0FBTyxjQUFjO0lBa0J2QixZQUNXLFNBQXVDLEVBQ2QsSUFBb0I7UUFEN0MsY0FBUyxHQUFULFNBQVMsQ0FBOEI7UUFDZCxTQUFJLEdBQUosSUFBSSxDQUFnQjtRQVpqRCxnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQVEzQiwwQkFBcUIsR0FBVSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFNbEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxHQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDckIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUEsRUFB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LGFBQWEsQ0FBQztZQUM3RCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsSUFBSSxHQUFDLElBQUksQ0FBQztRQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsU0FBUztRQUNMLHlCQUF5QjtRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzdCLENBQUM7K0dBM0lRLGNBQWMsOENBb0JYLGVBQWU7bUdBcEJsQixjQUFjLDBKQ2xCM0IsaWZBY0E7OzRGRElhLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0Usa0JBQWtCOzswQkF3QnJCLE1BQU07MkJBQUMsZUFBZTt5Q0FsQm9CLE1BQU07c0JBQXBELFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTmd4U3VydmV5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbmd4LXN1cnZleS5jb21wb25lbnQnXG5pbXBvcnQgeyBGb3JtSXRlbSwgRm9ybUl0ZW1PcHRpb25JdGVtIH0gZnJvbSAnLi4vLi4vZm9ybS1pdGVtL2Zvcm0taXRlbSc7XG5pbXBvcnQgeyBidWlsZEZpZWxkLCBidWlsZE9wdGlvbiwgRm9ybUl0ZW1UeXBlcyB9IGZyb20gJy4uLy4uL2Zvcm0taXRlbS9mb3JtLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGludGVyZmFjZSBEaWFsb2dJdGVtRGF0YSB7XG4gICAgaXRlbTogRm9ybUl0ZW0sXG4gICAgcGFyYW1zOiBhbnlcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGlhbG9nLWl0ZW0tZWRpdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kaWFsb2ctaXRlbS1lZGl0Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kaWFsb2ctaXRlbS1lZGl0LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBEaWFsb2dJdGVtRWRpdCB7XG5cbiAgICBAVmlld0NoaWxkKCdzdXJ2ZXknLCB7IHN0YXRpYzogZmFsc2UgfSkgcHVibGljIHN1cnZleTpOZ3hTdXJ2ZXlDb21wb25lbnQ7XG5cbiAgICBwdWJsaWMgaXRlbTpGb3JtSXRlbTtcblxuICAgIHB1YmxpYyBjb21tb25GaWVsZHM6IEZvcm1JdGVtW107XG5cbiAgICBwdWJsaWMgZXh0cmFGaWVsZHM6IEZvcm1JdGVtW109W107XG5cbiAgICBwdWJsaWMgaXRlbUVkaXRGb3JtOmFueVtdO1xuXG4gICAgcHVibGljIG11bHRpQ2hvaXNlRmllbGRzT25seTpib29sZWFuO1xuICAgIHB1YmxpYyBjdXN0b21GaWVsZE5hbWVzQWxsb3dlZDpib29sZWFuO1xuICAgIHB1YmxpYyByZWFkT25seTogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBtdWx0aUNob2lzZUZpZWxkVHlwZXM6c3RyaW5nW109W1wicmFkaW9cIiwgXCJzZWxlY3RcIiwgXCJzZWdtZW50c1wiXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RGlhbG9nSXRlbUVkaXQ+LFxuICAgICAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IERpYWxvZ0l0ZW1EYXRhXG4gICAgKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEsIHRoaXMuY29tbW9uRmllbGRzKTtcbiAgICAgICAgY29uc3QgaXRlbT1kYXRhLml0ZW07XG4gICAgICAgIGlmIChpdGVtLmZpZWxkVmFsaWRhdGlvbnMgJiYgaXRlbS5maWVsZFZhbGlkYXRpb25zLnJ1bGVzICYmIGl0ZW0uZmllbGRWYWxpZGF0aW9ucy5ydWxlcy5maW5kKHI9PnIubWluTGVuZ3RoICYmIHIubWluTGVuZ3RoID4gMCkpe1xuICAgICAgICAgICAgaXRlbS5yZXF1aXJlZD10cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXRlbT1pdGVtO1xuICAgICAgICB0aGlzLm11bHRpQ2hvaXNlRmllbGRzT25seT1kYXRhLnBhcmFtcy5tdWx0aUNob2lzZUZpZWxkc09ubHk7XG4gICAgICAgIHRoaXMuY3VzdG9tRmllbGROYW1lc0FsbG93ZWQ9ZGF0YS5wYXJhbXMuY3VzdG9tRmllbGROYW1lc0FsbG93ZWQ7XG4gICAgICAgIHRoaXMucmVhZE9ubHk9ZGF0YS5wYXJhbXMucmVhZE9ubHk7XG4gICAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkcygpO1xuICAgIH1cblxuICAgIHNldEZvcm1GaWVsZHMoKXtcbiAgICAgICAgY29uc29sZS5sb2coT2JqZWN0LmtleXMoRm9ybUl0ZW1UeXBlcykuZmlsdGVyKGtleT0+dGhpcy5tdWx0aUNob2lzZUZpZWxkc09ubHkgPyB0aGlzLm11bHRpQ2hvaXNlRmllbGRUeXBlcy5pbmRleE9mKGtleSk+PTAgOiB0cnVlKSk7XG4gICAgICAgIHRoaXMuY29tbW9uRmllbGRzPVtcbiAgICAgICAgICAgIGJ1aWxkRmllbGQoJ3NlbGVjdCcsIHtuYW1lOiBcInR5cGVcIiwgbGFiZWw6IFwiVHlwZVwiLCBpdGVtczogT2JqZWN0LmtleXMoRm9ybUl0ZW1UeXBlcykuZmlsdGVyKGtleT0+dGhpcy5tdWx0aUNob2lzZUZpZWxkc09ubHkgPyB0aGlzLm11bHRpQ2hvaXNlRmllbGRUeXBlcy5pbmRleE9mKGtleSk+PTAgOiB0cnVlKS5tYXAoa2V5PT57XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbT08Rm9ybUl0ZW1PcHRpb25JdGVtPkZvcm1JdGVtVHlwZXNba2V5XTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5sYWJlbCA/IGJ1aWxkT3B0aW9uKGtleSwgaXRlbS5sYWJlbCkgOiBudWxsO1xuICAgICAgICAgICAgfSkuZmlsdGVyKHQ9PnQpLCBhY3Rpb25VcGRhdGVzU2VjdGlvblZhbHVlOiB0cnVlfSwgdHJ1ZSksXG4gICAgICAgICAgICBidWlsZEZpZWxkKCdzZWxlY3QnLCB7bmFtZTogXCJzdHlsZVwiLCBsYWJlbDogXCJUZXh0IEZpZWxkIFN0eWxlXCIsIGl0ZW1zOiBbXG4gICAgICAgICAgICAgICAgYnVpbGRPcHRpb24oJ3RleHQnLCAnU3RhbmRhcmQgVGV4dCBGaWVsZCcpLFxuICAgICAgICAgICAgICAgIGJ1aWxkT3B0aW9uKCdudW1iZXInLCAnTnVtYmVyJyksXG4gICAgICAgICAgICAgICAgYnVpbGRPcHRpb24oJ2VtYWlsJywgJ0UtbWFpbCcpLFxuICAgICAgICAgICAgICAgIGJ1aWxkT3B0aW9uKCdwYXNzd29yZCcsICdQYXNzd29yZCcpLFxuICAgICAgICAgICAgICAgIGJ1aWxkT3B0aW9uKCd1cmwnLCAnVVJMJyksXG4gICAgICAgICAgICBdLCB2aXNpYmlsaXR5VmFsdWVzSW5TZWN0aW9uOiBbXCJzdHJpbmdcIl0sIHZhbHVlOid0ZXh0J30sIHRydWUpLFxuICAgICAgICAgICAgYnVpbGRGaWVsZCgnc2VsZWN0Jywge25hbWU6IFwiZmlsZVR5cGVcIiwgbGFiZWw6IFwiVXBsb2FkZXIgVHlwZVwiLCBpdGVtczogW1xuICAgICAgICAgICAgICAgIGJ1aWxkT3B0aW9uKCdpbWFnZScsICdJbWFnZScpLFxuICAgICAgICAgICAgICAgIGJ1aWxkT3B0aW9uKCd2aWRlbycsICdWaWRlbycpLFxuICAgICAgICAgICAgICAgIGJ1aWxkT3B0aW9uKCdmaWxlJywgJ0FueSBGaWxlJyksXG4gICAgICAgICAgICBdLCB2aXNpYmlsaXR5VmFsdWVzSW5TZWN0aW9uOiBbXCJmaWxlXCJdLCB2YWx1ZTonaW1hZ2UnfSwgdHJ1ZSksXG4gICAgICAgICAgICBidWlsZEZpZWxkKCdzZWxlY3QnLCB7bmFtZTogXCJzdHlsZVwiLCBsYWJlbDogXCJTdHlsZVwiLCBpdGVtczogW1xuICAgICAgICAgICAgICAgIGJ1aWxkT3B0aW9uKCdsaXN0JywgJ0xpc3Qgd2l0aCBzZWxlY3Rpb24nKSxcbiAgICAgICAgICAgICAgICBidWlsZE9wdGlvbignYnV0dG9ucycsICdSYWRpbyBCdXR0b25zJyksXG4gICAgICAgICAgICAgICAgYnVpbGRPcHRpb24oJ3NlbGVjdCcsICdTZWxlY3QnKSxcbiAgICAgICAgICAgIF0sIHZpc2liaWxpdHlWYWx1ZXNJblNlY3Rpb246IFtcInJhZGlvXCJdLCB2YWx1ZTonbGlzdCd9LCB0cnVlKSxcbiAgICAgICAgICAgIGJ1aWxkRmllbGQoJ2NoZWNrYm94Jywge25hbWU6IFwibXVsdGlwbGVcIiwgbGFiZWw6IFwiQWxsb3cgbXVsdGlwbGUgZmlsZXMgdXBsb2FkXCIsIHZpc2liaWxpdHlWYWx1ZXNJblNlY3Rpb246IFtcImZpbGVcIl19KSxcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICBidWlsZEZpZWxkKCdzdHJpbmcnLCB7bmFtZTogXCJhcmVhTGFiZWxcIiwgbGFiZWw6IFwiQXJlYSBMYWJlbFwiLCB2aXNpYmlsaXR5VmFsdWVzSW5TZWN0aW9uOiBbXCJmaWxlXCJdLCBkZWZhdWx0VmFsdWU6J0RyYWcgYW5kIGRyb3AgZmlsZXMgaGVyZSBvciB1c2UgXCJCcm93c2UgRmlsZXNcIiBidXR0b24nfSksXG4gICAgICAgICAgICBidWlsZEZpZWxkKCdzdHJpbmcnLCB7bmFtZTogXCJidXR0b25MYWJlbFwiLCBsYWJlbDogXCJCdXR0b24gTGFiZWxcIiwgdmlzaWJpbGl0eVZhbHVlc0luU2VjdGlvbjogW1wiZmlsZVwiXSwgZGVmYXVsdFZhbHVlOidCcm93c2UgRmlsZXMnfSksXG4gICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnVpbGRGaWVsZCgnc3RyaW5nJywge25hbWU6IFwibmFtZVwiLCBsYWJlbDogXCJOYW1lXCIsIHZpc2liaWxpdHlWYWx1ZXNJblNlY3Rpb246ICF0aGlzLmN1c3RvbUZpZWxkTmFtZXNBbGxvd2VkID8gWydub25lJ10gOiB1bmRlZmluZWR9LCBmYWxzZSksXG4gICAgICAgICAgICBidWlsZEZpZWxkKCd0ZXh0Jywge25hbWU6IFwibGFiZWxcIiwgbGFiZWw6IFwiTGFiZWxcIn0pLFxuICAgICAgICAgICAgYnVpbGRGaWVsZCgndGV4dCcsIHtuYW1lOiBcImhpbnRcIiwgbGFiZWw6IFwiSGludFwifSksXG4gICAgICAgICAgICBidWlsZEZpZWxkKCd0ZXh0Jywge25hbWU6IFwiaHRtbENvbnRlbnRcIiwgbGFiZWw6IFwiQ29udGVudFwiLCB2aXNpYmlsaXR5VmFsdWVzSW5TZWN0aW9uOiBbXCJsYWJlbFwiXX0pLFxuICAgICAgICAgICAgYnVpbGRGaWVsZCgnY2hlY2tib3gnLCB7bmFtZTogXCJyZXF1aXJlZFwiLCBsYWJlbDogXCJSZXF1aXJlZFwifSksXG4gICAgICAgICAgICBidWlsZEZpZWxkKCdjaGVja2JveCcsIHtuYW1lOiBcImFjdGlvblVwZGF0ZXNTZWN0aW9uVmFsdWVcIiwgbGFiZWw6IFwiQWN0aW9uIFVwZGF0ZXMgU2VjdGlvbiBWYWx1ZVwiLCB2aXNpYmlsaXR5VmFsdWVzSW5TZWN0aW9uOiBbdGhpcy5tdWx0aUNob2lzZUZpZWxkVHlwZXNdfSksXG4gICAgICAgICAgICBidWlsZEZpZWxkKCdjaGVja2JveCcsIHtuYW1lOiBcIm11bHRpcGxlXCIsIGxhYmVsOiBcIk11bHRpcGxlIEFuc3dlcnNcIiwgdmlzaWJpbGl0eVZhbHVlc0luU2VjdGlvbjogW1wicmFkaW9cIl19KSxcbiAgICAgICAgICAgIGJ1aWxkRmllbGQoJ29wdGlvbnNFZGl0b3InLCB7bmFtZTogXCJpdGVtc1wiLCBsYWJlbDogXCJPcHRpb25zXCIsIHZpc2liaWxpdHlWYWx1ZXNJblNlY3Rpb246IFtbXCJyYWRpb1wiLCBcInNlbGVjdFwiXV0sIGFsbG93Q3VzdG9tQW5zd2VyczogIXRoaXMubXVsdGlDaG9pc2VGaWVsZHNPbmx5LCBhbGxvd0N1c3RvbU9wdGlvblZhbHVlczogdGhpcy5jdXN0b21GaWVsZE5hbWVzQWxsb3dlZCwgZGVmYXVsdFZhbHVlOiB0aGlzLml0ZW0udmFsdWUsIG11bHRpcGxlOiB0aGlzLml0ZW0ubXVsdGlwbGV9KSxcbiAgICAgICAgICAgIGJ1aWxkRmllbGQoJ29wdGlvbnNFZGl0b3InLCB7bmFtZTogXCJzZWdtZW50c1wiLCBsYWJlbDogXCJTZWdtZW50c1wiLCB2aXNpYmlsaXR5VmFsdWVzSW5TZWN0aW9uOiBbXCJzZWdtZW50c1wiXSwgYWxsb3dDdXN0b21BbnN3ZXJzOiBmYWxzZSwgYWxsb3dDdXN0b21PcHRpb25WYWx1ZXM6IHRoaXMuY3VzdG9tRmllbGROYW1lc0FsbG93ZWQsIGRlZmF1bHRWYWx1ZTogdGhpcy5pdGVtLnZhbHVlfSksXG5cbiAgICAgICAgXTtcbiAgICAgICAgdGhpcy5pdGVtRWRpdEZvcm09W1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGl0ZW1zOiBbLi4udGhpcy5jb21tb25GaWVsZHNdXG4gICAgICAgICAgICB9XG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgb25Gb3JtQ2hhbmdlKHZhbHVlczpGb3JtSXRlbSl7XG4gICAgICAgIGNvbnNvbGUubG9nKHZhbHVlcywgdGhpcy5pdGVtRWRpdEZvcm0pO1xuICAgICAgICBjb25zdCBvcHRpb25zRWRpdEZpZWxkPXRoaXMuaXRlbUVkaXRGb3JtWzBdLml0ZW1zLmZpbmQoZj0+Zi5uYW1lPT09J2l0ZW1zJyk7XG4gICAgICAgIGlmIChvcHRpb25zRWRpdEZpZWxkICYmIG9wdGlvbnNFZGl0RmllbGQubXVsdGlwbGUhPT12YWx1ZXMubXVsdGlwbGUpe1xuICAgICAgICAgICAgb3B0aW9uc0VkaXRGaWVsZC5tdWx0aXBsZT12YWx1ZXMubXVsdGlwbGU7XG4gICAgICAgICAgICBpZiAodmFsdWVzLm11bHRpcGxlKXtcbiAgICAgICAgICAgICAgICBvcHRpb25zRWRpdEZpZWxkLmRlZmF1bHRWYWx1ZT1bXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhvcHRpb25zRWRpdEZpZWxkKTtcbiAgICB9XG5cbiAgICBvbk5vQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgb25Gb3JtU3VibWl0KGl0ZW0pe1xuICAgICAgICBpZiAoIWl0ZW0uZmllbGRWYWxpZGF0aW9ucyl7XG4gICAgICAgICAgICBpdGVtLmZpZWxkVmFsaWRhdGlvbnM9e307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpdGVtLmZpZWxkVmFsaWRhdGlvbnMucnVsZXMpe1xuICAgICAgICAgICAgaXRlbS5maWVsZFZhbGlkYXRpb25zLnJ1bGVzPVtdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXRlbS5uYW1lIHx8ICF0aGlzLmN1c3RvbUZpZWxkTmFtZXNBbGxvd2VkKXtcbiAgICAgICAgICAgIGl0ZW0ubmFtZT1fLmNhbWVsQ2FzZShpdGVtLmxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhpdGVtKTtcbiAgICAgICAgY29uc3QgbWluTGVuZ3RoUnVsZT1pdGVtLmZpZWxkVmFsaWRhdGlvbnMucnVsZXMuZmluZChyPT5yLm1pbkxlbmd0aCA+IDApO1xuICAgICAgICBjb25zb2xlLmxvZyhpdGVtLCBtaW5MZW5ndGhSdWxlKTtcbiAgICAgICAgaWYgKGl0ZW0ucmVxdWlyZWQgJiYgIW1pbkxlbmd0aFJ1bGUpe1xuICAgICAgICAgICAgaXRlbS5maWVsZFZhbGlkYXRpb25zLnJ1bGVzLnB1c2goe1xuICAgICAgICAgICAgICAgIG1pbkxlbmd0aDoxXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghaXRlbS5yZXF1aXJlZCAmJiBtaW5MZW5ndGhSdWxlKSB7XG4gICAgICAgICAgICBtaW5MZW5ndGhSdWxlLm1pbkxlbmd0aD0wO1xuICAgICAgICB9XG4gICAgICAgIFsnc2VnbWVudHMnLCAnaXRlbXMnXS5mb3JFYWNoKGtleT0+e1xuICAgICAgICAgICAgaWYgKGl0ZW1ba2V5XSAmJiBpdGVtW2tleV0ubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICBsZXQgZGVmYXVsdFZhbEFycjpzdHJpbmdbXT1bXTtcbiAgICAgICAgICAgICAgICBsZXQgZGVmYXVsdFZhbFN0cj0nJztcbiAgICAgICAgICAgICAgICBpdGVtW2tleV0uZm9yRWFjaChvcHRpb249PntcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsQXJyLnB1c2gob3B0aW9uLm9wdGlvblZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWxTdHI9b3B0aW9uLm9wdGlvblZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBvcHRpb24uc2VsZWN0ZWQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaXRlbS52YWx1ZT1pdGVtLm11bHRpcGxlID8gZGVmYXVsdFZhbEFyciA6IGRlZmF1bHRWYWxTdHI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuaXRlbT1pdGVtO1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0aGlzLml0ZW0pO1xuICAgIH1cblxuICAgIG9uT2tDbGljaygpOiB2b2lkIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRhdGEpO1xuICAgICAgICB0aGlzLnN1cnZleS5zdWJtaXRGb3JtKCk7XG4gICAgfVxuXG59XG4iLCI8aDEgbWF0LWRpYWxvZy10aXRsZT5FZGl0IEZpZWxkPC9oMT5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxuZ3gtc3VydmV5ICNzdXJ2ZXlcbiAgICAgICAgW2Zvcm1dPVwiaXRlbUVkaXRGb3JtXCJcbiAgICAgICAgW3ZhbHVlXT1cIml0ZW1cIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25Gb3JtQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoc3VibWl0KT1cIm9uRm9ybVN1Ym1pdCgkZXZlbnQpXCJcbiAgICAgICAgW2VkaXRhYmxlXT1cIiFyZWFkT25seVwiXG4gICAgPjwvbmd4LXN1cnZleT5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnM+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwib25Ob0NsaWNrKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJvbk9rQ2xpY2soKVwiIFtkaXNhYmxlZF09XCJyZWFkT25seVwiIGNka0ZvY3VzSW5pdGlhbD5PazwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=