UNPKG

@formql/core

Version:

FormQL - A framework for building dynamic forms

147 lines 23.7 kB
import { __assign, __decorate, __metadata } from "tslib"; import { Injectable } from '@angular/core'; import { FormBuilder } from '@angular/forms'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { InternalEventType } from '../models/internal-event.model'; import { ComponentResolverService } from '../services/component-resolver.service'; import { FormService } from './form.service'; import { HelperService } from './helper.service'; import * as i0 from "@angular/core"; import * as i1 from "./form.service"; import * as i2 from "./component-resolver.service"; import * as i3 from "@angular/forms"; var StoreService = /** @class */ (function () { function StoreService(formService, componentResolverService, formBuilder) { this.formService = formService; this.componentResolverService = componentResolverService; this.formBuilder = formBuilder; this.data$ = new Subject(); this.formState$ = new Subject(); this.serviceDestroyed = new Subject(); } // private formControls: FormControls; StoreService.prototype.ngOnDestroy = function () { this.data$.complete(); this.data$.unsubscribe(); }; StoreService.prototype.getData = function () { return this.data$.asObservable(); }; StoreService.prototype.getFormState = function () { return this.formState$.asObservable(); }; StoreService.prototype.updateComponent = function (component) { this.formState = this.formService.updateComponent(component, this.formState, false); this.data$.next(__assign({}, this.formState.data)); this.formState$.next(__assign({}, this.formState)); }; StoreService.prototype.setComponent = function (component) { this.formState = this.formService.updateComponent(component, this.formState, true); // this.formControls = HelperService.resetValidators(this.formState.components, this.formControls, this.componentResolverService); this.data$.next(__assign({}, this.formState.data)); this.formState$.next(__assign({}, this.formState)); }; StoreService.prototype.getAll = function (formName, ids, mode) { var _this = this; this.formService.getFormAndData(formName, ids).pipe(takeUntil(this.serviceDestroyed)).subscribe(function (response) { _this.formState = __assign({}, response); _this.formState.ids = ids; _this.formState.mode = mode; _this.data$.next(__assign({}, response.data)); _this.formState$.next(_this.formState); }, function (error) { _this.formState$.next({ form: { error: HelperService.formatError({ title: 'Error loading form or data', error: error }) } }); }); }; StoreService.prototype.saveForm = function () { this.formService.saveForm(this.formState.form.formName, this.formState.form); }; StoreService.prototype.saveData = function () { return this.formService.saveData(this.formState.form.dataSource, this.formState.ids, this.formState.data); }; StoreService.prototype.validateForm = function () { HelperService.validateForm(this.formState.reactiveForm); }; StoreService.prototype.isFormValid = function () { return this.formState.reactiveForm.valid; }; StoreService.prototype.unsubscribeAll = function () { this.serviceDestroyed.next(); this.serviceDestroyed.complete(); }; StoreService.prototype.reSetForm = function (eventType, event) { switch (eventType) { case InternalEventType.EditingForm: this.populateReactiveForm(); break; case InternalEventType.DndFormChanged: var pageId_1 = event.pageId; var indexDnd = this.formState.form.pages.findIndex(function (p) { return p.pageId === pageId_1; }); if (indexDnd >= 0) this.formState.form.pages[indexDnd] = event; this.populateReactiveForm(); break; case InternalEventType.RemoveComponent: var componentId_1 = event.componentId; var updateSectionId_1 = ''; this.formState.form.pages.forEach(function (page) { page.sections.forEach(function (section) { var indexComponent = section.components.findIndex(function (c) { return c.componentId === componentId_1; }); if (indexComponent >= 0) { section.components.splice(indexComponent, 1); updateSectionId_1 = section.sectionId; } }); }); this.populateReactiveForm(); break; case InternalEventType.RemoveSection: var sectionId_1 = event.sectionId; var updatePageId_1 = ''; this.formState.form.pages.forEach(function (page) { var indexSection = page.sections.findIndex(function (c) { return c.sectionId === sectionId_1; }); if (indexSection >= 0) { page.sections.splice(indexSection, 1); updatePageId_1 = page.pageId; } }); this.populateReactiveForm(); break; } this.formState$.next(__assign({}, this.formState)); }; StoreService.prototype.populateReactiveForm = function () { var _this = this; if (this.formState.form.pages != null && this.formState.form.pages.length > 0) { // get reactive structure -> formControls, pageGroup and components if it's an update var reactiveFormStructure_1 = HelperService.createReactiveFormStructure(this.formState.form, true, this.formState.data); this.formState.formControls = reactiveFormStructure_1.formControls; // if it's an update, refresh reactive form, set all form controls, validators this.formState.form.pages.forEach(function (page) { _this.formState.reactiveForm.setControl(page.pageId, reactiveFormStructure_1.pageGroup[page.pageId]); }); this.formState.form = HelperService.updateTemplates(this.formState.form); if (reactiveFormStructure_1.components != null && Object.keys(reactiveFormStructure_1.components).length > 0) this.formState.formControls = HelperService.resetValidators(reactiveFormStructure_1.components, this.formState.formControls, this.componentResolverService); this.formState = this.formService.resolveConditions(this.formState); } }; StoreService.ɵprov = i0.ɵɵdefineInjectable({ factory: function StoreService_Factory() { return new StoreService(i0.ɵɵinject(i1.FormService), i0.ɵɵinject(i2.ComponentResolverService), i0.ɵɵinject(i3.FormBuilder)); }, token: StoreService, providedIn: "root" }); StoreService = __decorate([ Injectable({ providedIn: 'root' }), __metadata("design:paramtypes", [FormService, ComponentResolverService, FormBuilder]) ], StoreService); return StoreService; }()); export { StoreService }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bmb3JtcWwvY29yZS8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL3N0b3JlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7O0FBSWpEO0lBQ0Usc0JBQ1UsV0FBd0IsRUFDeEIsd0JBQWtELEVBQ2xELFdBQXdCO1FBRnhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFHMUIsVUFBSyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFFM0IsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFhLENBQUM7UUFFN0IscUJBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQU45QyxDQUFDO0lBVUwsc0NBQXNDO0lBR3RDLGtDQUFXLEdBQVg7UUFDRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELDhCQUFPLEdBQVA7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFL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QUMsQ0FBQztTQUVyRTtJQUNILENBQUM7O0lBdkpVLFlBQVk7UUFEeEIsVUFBVSxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO3lDQUdWLFdBQVc7WUFDRSx3QkFBd0I7WUFDckMsV0FBVztPQUp2QixZQUFZLENBd0p4Qjt1QkF2S0Q7Q0F1S0MsQUF4SkQsSUF3SkM7U0F4SlksWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9tb2RlbHMvZm9ybS1jb21wb25lbnQubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtUGFnZSB9IGZyb20gJy4uL21vZGVscy9mb3JtLXBhZ2UubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtU2VjdGlvbiB9IGZyb20gJy4uL21vZGVscy9mb3JtLXNlY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtRXJyb3IsIEZvcm1TdGF0ZSB9IGZyb20gJy4uL21vZGVscy9mb3JtLXdpbmRvdy5tb2RlbCc7XHJcbmltcG9ydCB7IEludGVybmFsRXZlbnRUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL2ludGVybmFsLWV2ZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgQ29tcG9uZW50UmVzb2x2ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29tcG9uZW50LXJlc29sdmVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtU2VydmljZSB9IGZyb20gJy4vZm9ybS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJy4vaGVscGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtUUxNb2RlIH0gZnJvbSAnLi4vbW9kZWxzL3R5cGUubW9kZWwnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFN0b3JlU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSxcclxuICAgIHByaXZhdGUgY29tcG9uZW50UmVzb2x2ZXJTZXJ2aWNlOiBDb21wb25lbnRSZXNvbHZlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlclxyXG4gICkgeyB9XHJcblxyXG4gIHByaXZhdGUgZGF0YSQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcblxyXG4gIHByaXZhdGUgZm9ybVN0YXRlJCA9IG5ldyBTdWJqZWN0PEZvcm1TdGF0ZT4oKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBzZXJ2aWNlRGVzdHJveWVkID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHJpdmF0ZSBmb3JtU3RhdGU6IEZvcm1TdGF0ZTtcclxuXHJcbiAgLy8gcHJpdmF0ZSBmb3JtQ29udHJvbHM6IEZvcm1Db250cm9scztcclxuXHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhJC5jb21wbGV0ZSgpO1xyXG4gICAgdGhpcy5kYXRhJC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGF0YSgpOiBPYnNlcnZhYmxlPEZvcm1Db21wb25lbnQ8YW55PltdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhJC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIGdldEZvcm1TdGF0ZSgpOiBPYnNlcnZhYmxlPEZvcm1TdGF0ZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0YXRlJC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUNvbXBvbmVudChjb21wb25lbnQ6IEZvcm1Db21wb25lbnQ8YW55Pikge1xyXG4gICAgdGhpcy5mb3JtU3RhdGUgPSB0aGlzLmZvcm1TZXJ2aWNlLnVwZGF0ZUNvbXBvbmVudChjb21wb25lbnQsIHRoaXMuZm9ybVN0YXRlLCBmYWxzZSk7XHJcbiAgICB0aGlzLmRhdGEkLm5leHQoeyAuLi50aGlzLmZvcm1TdGF0ZS5kYXRhIH0pO1xyXG4gICAgdGhpcy5mb3JtU3RhdGUkLm5leHQoeyAuLi50aGlzLmZvcm1TdGF0ZSB9KTtcclxuICB9XHJcblxyXG4gIHNldENvbXBvbmVudChjb21wb25lbnQ6IEZvcm1Db21wb25lbnQ8YW55Pikge1xyXG4gICAgdGhpcy5mb3JtU3RhdGUgPSB0aGlzLmZvcm1TZXJ2aWNlLnVwZGF0ZUNvbXBvbmVudChjb21wb25lbnQsIHRoaXMuZm9ybVN0YXRlLCB0cnVlKTtcclxuICAgIC8vIHRoaXMuZm9ybUNvbnRyb2xzID0gSGVscGVyU2VydmljZS5yZXNldFZhbGlkYXRvcnModGhpcy5mb3JtU3RhdGUuY29tcG9uZW50cywgdGhpcy5mb3JtQ29udHJvbHMsIHRoaXMuY29tcG9uZW50UmVzb2x2ZXJTZXJ2aWNlKTtcclxuICAgIHRoaXMuZGF0YSQubmV4dCh7IC4uLnRoaXMuZm9ybVN0YXRlLmRhdGEgfSk7XHJcbiAgICB0aGlzLmZvcm1TdGF0ZSQubmV4dCh7IC4uLnRoaXMuZm9ybVN0YXRlIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsKGZvcm1OYW1lOiBzdHJpbmcsIGlkczogQXJyYXk8c3RyaW5nPiwgbW9kZTogRm9ybVFMTW9kZSkge1xyXG4gICAgdGhpcy5mb3JtU2VydmljZS5nZXRGb3JtQW5kRGF0YShmb3JtTmFtZSwgaWRzKS5waXBlKHRha2VVbnRpbCh0aGlzLnNlcnZpY2VEZXN0cm95ZWQpKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICB0aGlzLmZvcm1TdGF0ZSA9IHsgLi4ucmVzcG9uc2UgfTtcclxuICAgICAgdGhpcy5mb3JtU3RhdGUuaWRzID0gaWRzO1xyXG4gICAgICB0aGlzLmZvcm1TdGF0ZS5tb2RlID0gbW9kZTtcclxuICAgICAgdGhpcy5kYXRhJC5uZXh0KHsgLi4ucmVzcG9uc2UuZGF0YSB9KTtcclxuICAgICAgdGhpcy5mb3JtU3RhdGUkLm5leHQodGhpcy5mb3JtU3RhdGUpO1xyXG4gICAgfSxcclxuICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybVN0YXRlJC5uZXh0KDxGb3JtU3RhdGU+e1xyXG4gICAgICAgICAgZm9ybToge1xyXG4gICAgICAgICAgICBlcnJvcjogSGVscGVyU2VydmljZS5mb3JtYXRFcnJvcig8Rm9ybUVycm9yPntcclxuICAgICAgICAgICAgICB0aXRsZTogJ0Vycm9yIGxvYWRpbmcgZm9ybSBvciBkYXRhJyxcclxuICAgICAgICAgICAgICBlcnJvcjogZXJyb3JcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzYXZlRm9ybSgpIHtcclxuICAgIHRoaXMuZm9ybVNlcnZpY2Uuc2F2ZUZvcm0odGhpcy5mb3JtU3RhdGUuZm9ybS5mb3JtTmFtZSwgdGhpcy5mb3JtU3RhdGUuZm9ybSk7XHJcbiAgfVxyXG5cclxuICBzYXZlRGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1TZXJ2aWNlLnNhdmVEYXRhKHRoaXMuZm9ybVN0YXRlLmZvcm0uZGF0YVNvdXJjZSwgdGhpcy5mb3JtU3RhdGUuaWRzLCB0aGlzLmZvcm1TdGF0ZS5kYXRhKTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlRm9ybSgpIHtcclxuICAgIEhlbHBlclNlcnZpY2UudmFsaWRhdGVGb3JtKHRoaXMuZm9ybVN0YXRlLnJlYWN0aXZlRm9ybSk7XHJcbiAgfVxyXG5cclxuICBpc0Zvcm1WYWxpZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1TdGF0ZS5yZWFjdGl2ZUZvcm0udmFsaWQ7XHJcbiAgfVxyXG5cclxuICB1bnN1YnNjcmliZUFsbCgpIHtcclxuICAgIHRoaXMuc2VydmljZURlc3Ryb3llZC5uZXh0KCk7XHJcbiAgICB0aGlzLnNlcnZpY2VEZXN0cm95ZWQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIHJlU2V0Rm9ybShldmVudFR5cGU6IEludGVybmFsRXZlbnRUeXBlLCBldmVudDogYW55KSB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xyXG4gICAgICBjYXNlIEludGVybmFsRXZlbnRUeXBlLkVkaXRpbmdGb3JtOlxyXG4gICAgICAgIHRoaXMucG9wdWxhdGVSZWFjdGl2ZUZvcm0oKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxFdmVudFR5cGUuRG5kRm9ybUNoYW5nZWQ6XHJcbiAgICAgICAgY29uc3QgcGFnZUlkID0gKDxGb3JtUGFnZT5ldmVudCkucGFnZUlkO1xyXG4gICAgICAgIGNvbnN0IGluZGV4RG5kID0gdGhpcy5mb3JtU3RhdGUuZm9ybS5wYWdlcy5maW5kSW5kZXgocCA9PiBwLnBhZ2VJZCA9PT0gcGFnZUlkKTtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4RG5kID49IDApXHJcbiAgICAgICAgICB0aGlzLmZvcm1TdGF0ZS5mb3JtLnBhZ2VzW2luZGV4RG5kXSA9IGV2ZW50O1xyXG5cclxuICAgICAgICB0aGlzLnBvcHVsYXRlUmVhY3RpdmVGb3JtKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsRXZlbnRUeXBlLlJlbW92ZUNvbXBvbmVudDpcclxuICAgICAgICBjb25zdCBjb21wb25lbnRJZCA9ICg8Rm9ybUNvbXBvbmVudDxhbnk+PmV2ZW50KS5jb21wb25lbnRJZDtcclxuICAgICAgICBsZXQgdXBkYXRlU2VjdGlvbklkID0gJyc7XHJcbiAgICAgICAgdGhpcy5mb3JtU3RhdGUuZm9ybS5wYWdlcy5mb3JFYWNoKHBhZ2UgPT4ge1xyXG4gICAgICAgICAgcGFnZS5zZWN0aW9ucy5mb3JFYWNoKHNlY3Rpb24gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleENvbXBvbmVudCA9IHNlY3Rpb24uY29tcG9uZW50cy5maW5kSW5kZXgoYyA9PiBjLmNvbXBvbmVudElkID09PSBjb21wb25lbnRJZCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleENvbXBvbmVudCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgc2VjdGlvbi5jb21wb25lbnRzLnNwbGljZShpbmRleENvbXBvbmVudCwgMSk7XHJcbiAgICAgICAgICAgICAgdXBkYXRlU2VjdGlvbklkID0gc2VjdGlvbi5zZWN0aW9uSWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucG9wdWxhdGVSZWFjdGl2ZUZvcm0oKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxFdmVudFR5cGUuUmVtb3ZlU2VjdGlvbjpcclxuICAgICAgICBjb25zdCBzZWN0aW9uSWQgPSAoPEZvcm1TZWN0aW9uPmV2ZW50KS5zZWN0aW9uSWQ7XHJcbiAgICAgICAgbGV0IHVwZGF0ZVBhZ2VJZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybVN0YXRlLmZvcm0ucGFnZXMuZm9yRWFjaChwYWdlID0+IHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4U2VjdGlvbiA9IHBhZ2Uuc2VjdGlvbnMuZmluZEluZGV4KGMgPT4gYy5zZWN0aW9uSWQgPT09IHNlY3Rpb25JZCk7XHJcbiAgICAgICAgICBpZiAoaW5kZXhTZWN0aW9uID49IDApIHtcclxuICAgICAgICAgICAgcGFnZS5zZWN0aW9ucy5zcGxpY2UoaW5kZXhTZWN0aW9uLCAxKTtcclxuICAgICAgICAgICAgdXBkYXRlUGFnZUlkID0gcGFnZS5wYWdlSWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZVJlYWN0aXZlRm9ybSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtU3RhdGUkLm5leHQoeyAuLi50aGlzLmZvcm1TdGF0ZSB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcG9wdWxhdGVSZWFjdGl2ZUZvcm0oKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtU3RhdGUuZm9ybS5wYWdlcyAhPSBudWxsICYmIHRoaXMuZm9ybVN0YXRlLmZvcm0ucGFnZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyBnZXQgcmVhY3RpdmUgc3RydWN0dXJlIC0+IGZvcm1Db250cm9scywgcGFnZUdyb3VwIGFuZCBjb21wb25lbnRzIGlmIGl0J3MgYW4gdXBkYXRlXHJcbiAgICAgIGNvbnN0IHJlYWN0aXZlRm9ybVN0cnVjdHVyZSA9IEhlbHBlclNlcnZpY2UuY3JlYXRlUmVhY3RpdmVGb3JtU3RydWN0dXJlKHRoaXMuZm9ybVN0YXRlLmZvcm0sIHRydWUsIHRoaXMuZm9ybVN0YXRlLmRhdGEpO1xyXG4gICAgICB0aGlzLmZvcm1TdGF0ZS5mb3JtQ29udHJvbHMgPSByZWFjdGl2ZUZvcm1TdHJ1Y3R1cmUuZm9ybUNvbnRyb2xzO1xyXG5cclxuXHJcbiAgICAgIC8vIGlmIGl0J3MgYW4gdXBkYXRlLCByZWZyZXNoIHJlYWN0aXZlIGZvcm0sIHNldCBhbGwgZm9ybSBjb250cm9scywgdmFsaWRhdG9yc1xyXG4gICAgICB0aGlzLmZvcm1TdGF0ZS5mb3JtLnBhZ2VzLmZvckVhY2gocGFnZSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtU3RhdGUucmVhY3RpdmVGb3JtLnNldENvbnRyb2wocGFnZS5wYWdlSWQsIHJlYWN0aXZlRm9ybVN0cnVjdHVyZS5wYWdlR3JvdXBbcGFnZS5wYWdlSWRdKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZm9ybVN0YXRlLmZvcm0gPSBIZWxwZXJTZXJ2aWNlLnVwZGF0ZVRlbXBsYXRlcyh0aGlzLmZvcm1TdGF0ZS5mb3JtKTtcclxuICAgICAgaWYgKHJlYWN0aXZlRm9ybVN0cnVjdHVyZS5jb21wb25lbnRzICE9IG51bGwgJiYgT2JqZWN0LmtleXMocmVhY3RpdmVGb3JtU3RydWN0dXJlLmNvbXBvbmVudHMpLmxlbmd0aCA+IDApXHJcbiAgICAgICAgdGhpcy5mb3JtU3RhdGUuZm9ybUNvbnRyb2xzID0gSGVscGVyU2VydmljZS5yZXNldFZhbGlkYXRvcnMocmVhY3RpdmVGb3JtU3RydWN0dXJlLmNvbXBvbmVudHMsXHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtU3RhdGUuZm9ybUNvbnRyb2xzLCB0aGlzLmNvbXBvbmVudFJlc29sdmVyU2VydmljZSk7XHJcblxyXG4gICAgICB0aGlzLmZvcm1TdGF0ZSA9IHRoaXMuZm9ybVNlcnZpY2UucmVzb2x2ZUNvbmRpdGlvbnModGhpcy5mb3JtU3RhdGUpO1xyXG5cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19