@angular-material-extensions/google-maps-autocomplete
Version:
Autocomplete input component and directive for google-maps built with angular and material design
156 lines • 22.2 kB
JavaScript
import { __decorate } from "tslib";
import { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';
import { ControlValueAccessor, FormBuilder, FormGroup, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';
import { parseGermanAddress } from '../../helpers/parser';
import { Appearance } from '../mat-google-maps-autocomplete.component';
import { InputAnimations } from '../../animations';
var MatSearchGoogleMapsAutocompleteComponent = /** @class */ (function () {
function MatSearchGoogleMapsAutocompleteComponent(formBuilder) {
this.formBuilder = formBuilder;
this.appearance = Appearance.STANDARD;
this.searchAddressLabel = 'Search Address';
this.streetNameLabel = 'Street';
this.streetNumberLabel = 'Nr.';
this.postalCodeLabel = 'PLZ';
this.localityLabel = 'Locality';
this.vicinityLabel = 'Vicinity';
this.onGermanAddressMapped = new EventEmitter();
this.firstInit = true;
this.propagateChange = function (_) {
};
}
MatSearchGoogleMapsAutocompleteComponent_1 = MatSearchGoogleMapsAutocompleteComponent;
MatSearchGoogleMapsAutocompleteComponent.prototype.ngOnInit = function () {
this.createAddressFormGroup();
};
MatSearchGoogleMapsAutocompleteComponent.prototype.createAddressFormGroup = function () {
this.addressFormGroup = this.formBuilder.group({
streetName: [this.value && this.value.streetName ? this.value.streetName : null, Validators.required],
streetNumber: [this.value && this.value.streetNumber ? this.value.streetNumber : null, Validators.required],
postalCode: [this.value && this.value.postalCode ? this.value.postalCode : null, Validators.required],
vicinity: [this.value && this.value.vicinity ? this.value.vicinity : null],
locality: this.formBuilder.group({
long: [this.value && this.value.locality && this.value.locality.long ? this.value.locality.long : null, Validators.required],
}),
});
};
MatSearchGoogleMapsAutocompleteComponent.prototype.syncAutoComplete = function ($event) {
if (this.germanAddress) {
this.addressFormGroup.reset();
}
var germanAddress = parseGermanAddress($event);
this.germanAddress = germanAddress;
if (germanAddress.vicinity) {
this.addressFormGroup.get('vicinity').patchValue(germanAddress.vicinity);
}
if (germanAddress.streetName) {
this.addressFormGroup.get('streetName').patchValue(germanAddress.streetName);
}
if (germanAddress.streetNumber) {
this.addressFormGroup.get('streetNumber').patchValue(germanAddress.streetNumber.toString());
}
if (germanAddress.postalCode) {
this.addressFormGroup.get('postalCode').patchValue(germanAddress.postalCode);
}
if (germanAddress.locality && germanAddress.locality.long) {
this.addressFormGroup.get('locality.long').patchValue(germanAddress.locality.long);
}
this.value = germanAddress;
this.propagateChange(this.value);
this.onGermanAddressMapped.emit(germanAddress);
};
MatSearchGoogleMapsAutocompleteComponent.prototype.writeValue = function (obj) {
var shouldRecreateFG = false;
if (obj) {
if (!this.value && this.firstInit) {
shouldRecreateFG = true;
}
this.value = obj;
this.propagateChange(this.value);
if (shouldRecreateFG) {
this.createAddressFormGroup();
this.firstInit = false;
}
}
};
MatSearchGoogleMapsAutocompleteComponent.prototype.registerOnChange = function (fn) {
this.propagateChange = fn;
};
MatSearchGoogleMapsAutocompleteComponent.prototype.registerOnTouched = function (fn) {
};
MatSearchGoogleMapsAutocompleteComponent.prototype.setDisabledState = function (isDisabled) {
};
var MatSearchGoogleMapsAutocompleteComponent_1;
MatSearchGoogleMapsAutocompleteComponent.ctorParameters = function () { return [
{ type: FormBuilder }
]; };
__decorate([
Input()
], MatSearchGoogleMapsAutocompleteComponent.prototype, "appearance", void 0);
__decorate([
Input()
], MatSearchGoogleMapsAutocompleteComponent.prototype, "searchAddressLabel", void 0);
__decorate([
Input()
], MatSearchGoogleMapsAutocompleteComponent.prototype, "streetNameLabel", void 0);
__decorate([
Input()
], MatSearchGoogleMapsAutocompleteComponent.prototype, "streetNumberLabel", void 0);
__decorate([
Input()
], MatSearchGoogleMapsAutocompleteComponent.prototype, "postalCodeLabel", void 0);
__decorate([
Input()
], MatSearchGoogleMapsAutocompleteComponent.prototype, "localityLabel", void 0);
__decorate([
Input()
], MatSearchGoogleMapsAutocompleteComponent.prototype, "vicinityLabel", void 0);
__decorate([
Input()
], MatSearchGoogleMapsAutocompleteComponent.prototype, "showVicinity", void 0);
__decorate([
Input()
], MatSearchGoogleMapsAutocompleteComponent.prototype, "country", void 0);
__decorate([
Input()
], MatSearchGoogleMapsAutocompleteComponent.prototype, "placeIdOnly", void 0);
__decorate([
Input()
], MatSearchGoogleMapsAutocompleteComponent.prototype, "strictBounds", void 0);
__decorate([
Input()
], MatSearchGoogleMapsAutocompleteComponent.prototype, "types", void 0);
__decorate([
Input()
], MatSearchGoogleMapsAutocompleteComponent.prototype, "type", void 0);
__decorate([
Input()
], MatSearchGoogleMapsAutocompleteComponent.prototype, "readonly", void 0);
__decorate([
Input()
], MatSearchGoogleMapsAutocompleteComponent.prototype, "disableSearch", void 0);
__decorate([
Input()
], MatSearchGoogleMapsAutocompleteComponent.prototype, "value", void 0);
__decorate([
Output()
], MatSearchGoogleMapsAutocompleteComponent.prototype, "onGermanAddressMapped", void 0);
MatSearchGoogleMapsAutocompleteComponent = MatSearchGoogleMapsAutocompleteComponent_1 = __decorate([
Component({
selector: 'mat-search-google-maps-autocomplete',
template: "<div fxLayout=\"column\">\n <div *ngIf=\"!disableSearch\" fxFlex=\"100\">\n <!--search address-->\n <mat-form-field fxFlex=\"auto\" [appearance]=\"appearance\" [@animate]=\"{ value: '*', params: { y: '100%' } }\">\n <mat-label>{{searchAddressLabel}}</mat-label>\n <input\n (onAutocompleteSelected)=\"syncAutoComplete($event)\"\n [country]=\"country\"\n [placeIdOnly]=\"placeIdOnly\"\n [strictBounds]=\"strictBounds\"\n [types]=\"types\"\n [type]=\"type\"\n matGoogleMapsAutocomplete\n matInput\n required\n />\n <mat-icon color=\"primary\" matSuffix>search</mat-icon>\n <!-- <mat-error>{{ 'msa.contactData.currentAddress.error' | translate }}</mat-error>-->\n </mat-form-field>\n </div>\n\n <form [formGroup]=\"addressFormGroup\" fxFlex fxLayoutGap=\"10px\">\n <div fxLayout=\"row\" fxLayoutGap=\"10px\">\n <mat-form-field fxFlex=\"80\"\n [appearance]=\"appearance\"\n [@animate]=\"{ value: '*', params: { y: '100%' } }\">\n <mat-label>{{streetNameLabel}}</mat-label>\n <input\n [readonly]=\"readonly\"\n formControlName=\"streetName\"\n matInput\n required\n />\n <!-- <mat-icon color=\"primary\" matSuffix>add_location</mat-icon>-->\n <!-- <mat-error>{{ 'msa.contactData.currentAddress.error' | translate }}</mat-error>-->\n </mat-form-field>\n <mat-form-field fxFlex=\"20\" [appearance]=\"appearance\" [@animate]=\"{ value: '*', params: { y: '100%' } }\">\n <mat-label>{{streetNumberLabel}}</mat-label>\n <input\n [readonly]=\"readonly\"\n formControlName=\"streetNumber\"\n matInput\n required\n />\n <!-- <mat-icon color=\"primary\" matSuffix>add_location</mat-icon>-->\n <!-- <mat-error>{{ 'msa.contactData.currentAddress.error' | translate }}</mat-error>-->\n </mat-form-field>\n </div>\n <div fxLayout=\"row\" fxLayoutGap=\"10px\">\n <mat-form-field fxFlex=\"20\" [appearance]=\"appearance\" [@animate]=\"{ value: '*', params: { y: '100%' } }\">\n <mat-label>{{postalCodeLabel}}</mat-label>\n <input\n [readonly]=\"readonly\"\n formControlName=\"postalCode\"\n matInput\n required\n />\n <!-- <mat-icon color=\"primary\" matSuffix>add_location</mat-icon>-->\n <!-- <mat-error>{{ 'msa.contactData.currentAddress.error' | translate }}</mat-error>-->\n </mat-form-field>\n <mat-form-field *ngIf=\"showVicinity\" fxFlex=\"auto\"\n [appearance]=\"appearance\"\n [@animate]=\"{ value: '*', params: { y: '100%' } }\">\n <mat-label>{{vicinityLabel}}</mat-label>\n <input\n [readonly]=\"readonly\"\n matInput\n formControlName=\"vicinity\"\n />\n </mat-form-field>\n <div formGroupName=\"locality\" fxFlex=\"auto\">\n <mat-form-field fxFlex=\"auto\" [appearance]=\"appearance\" [@animate]=\"{ value: '*', params: { y: '100%' } }\">\n <mat-label>{{localityLabel}}</mat-label>\n <input\n [readonly]=\"readonly\"\n formControlName=\"long\"\n matInput\n required\n />\n <mat-icon color=\"primary\" matSuffix>add_location</mat-icon>\n <!-- <mat-error>{{ 'msa.contactData.currentAddress.error' | translate }}</mat-error>-->\n </mat-form-field>\n </div>\n </div>\n </form>\n</div>\n",
animations: InputAnimations,
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(function () { return MatSearchGoogleMapsAutocompleteComponent_1; }),
multi: true
}
],
styles: [""]
})
], MatSearchGoogleMapsAutocompleteComponent);
return MatSearchGoogleMapsAutocompleteComponent;
}());
export { MatSearchGoogleMapsAutocompleteComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LXNlYXJjaC1nb29nbGUtbWFwcy1hdXRvY29tcGxldGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFuZ3VsYXItbWF0ZXJpYWwtZXh0ZW5zaW9ucy9nb29nbGUtbWFwcy1hdXRvY29tcGxldGUvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L21hdC1zZWFyY2gtZ29vZ2xlLW1hcHMtYXV0b2NvbXBsZXRlL21hdC1zZWFyY2gtZ29vZ2xlLW1hcHMtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFDLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0csT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFeEQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQWVqRDtJQThERSxrREFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUEzRDVDLGVBQVUsR0FBd0IsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUd0RCx1QkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUd0QyxvQkFBZSxHQUFHLFFBQVEsQ0FBQztRQUczQixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFHMUIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFHeEIsa0JBQWEsR0FBRyxVQUFVLENBQUM7UUFHM0Isa0JBQWEsR0FBRyxVQUFVLENBQUM7UUErQjNCLDBCQUFxQixHQUFnQyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUt2RixjQUFTLEdBQUcsSUFBSSxD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QztRQURDLEtBQUssRUFBRTtxRkFDbUI7SUFHM0I7UUFEQyxLQUFLLEVBQUU7dUZBQ2tCO0lBRzFCO1FBREMsS0FBSyxFQUFFO3FGQUNnQjtJQUd4QjtRQURDLEtBQUssRUFBRTttRkFDbUI7SUFHM0I7UUFEQyxLQUFLLEVBQUU7bUZBQ21CO0lBRzNCO1FBREMsS0FBSyxFQUFFO2tGQUNjO0lBR3RCO1FBREMsS0FBSyxFQUFFOzZFQUNtQjtJQUczQjtRQURDLEtBQUssRUFBRTtpRkFDYztJQUd0QjtRQURDLEtBQUssRUFBRTtrRkFDZTtJQUd2QjtRQURDLEtBQUssRUFBRTsyRUFDUztJQUlqQjtRQURDLEtBQUssRUFBRTswRUFDTTtJQUdkO1FBREMsS0FBSyxFQUFFOzhFQUNVO0lBR2xCO1FBREMsS0FBSyxFQUFFO21GQUNlO0lBR3ZCO1FBREMsS0FBSyxFQUFFOzJFQUNhO0lBR3JCO1FBREMsTUFBTSxFQUFFOzJGQUM4RTtJQXBENUUsd0NBQXdDO1FBYnBELFNBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSxxQ0FBcUM7WUFDL0MsaWpIQUFtRTtZQUVuRSxVQUFVLEVBQUUsZUFBZTtZQUMzQixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtvQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxjQUFNLE9BQUEsMENBQXdDLEVBQXhDLENBQXdDLENBQUM7b0JBQ3ZFLEtBQUssRUFBRSxJQUFJO2lCQUNaO2FBQ0Y7O1NBQ0YsQ0FBQztPQUNXLHdDQUF3QyxDQXFJcEQ7SUFBRCwrQ0FBQztDQUFBLEFBcklELElBcUlDO1NBcklZLHdDQUF3QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIElucHV0LCBPbkluaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdG9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge3BhcnNlR2VybWFuQWRkcmVzc30gZnJvbSAnLi4vLi4vaGVscGVycy9wYXJzZXInO1xuaW1wb3J0IHtHZXJtYW5BZGRyZXNzfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7QXBwZWFyYW5jZX0gZnJvbSAnLi4vbWF0LWdvb2dsZS1tYXBzLWF1dG9jb21wbGV0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHtJbnB1dEFuaW1hdGlvbnN9IGZyb20gJy4uLy4uL2FuaW1hdGlvbnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtc2VhcmNoLWdvb2dsZS1tYXBzLWF1dG9jb21wbGV0ZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXQtc2VhcmNoLWdvb2dsZS1tYXBzLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21hdC1zZWFyY2gtZ29vZ2xlLW1hcHMtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGFuaW1hdGlvbnM6IElucHV0QW5pbWF0aW9ucyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNYXRTZWFyY2hHb29nbGVNYXBzQXV0b2NvbXBsZXRlQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE1hdFNlYXJjaEdvb2dsZU1hcHNBdXRvY29tcGxldGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuICBASW5wdXQoKVxuICBhcHBlYXJhbmNlOiBzdHJpbmcgfCBBcHBlYXJhbmNlID0gQXBwZWFyYW5jZS5TVEFOREFSRDtcblxuICBASW5wdXQoKVxuICBzZWFyY2hBZGRyZXNzTGFiZWwgPSAnU2VhcmNoIEFkZHJlc3MnO1xuXG4gIEBJbnB1dCgpXG4gIHN0cmVldE5hbWVMYWJlbCA9ICdTdHJlZXQnO1xuXG4gIEBJbnB1dCgpXG4gIHN0cmVldE51bWJlckxhYmVsID0gJ05yLic7XG5cbiAgQElucHV0KClcbiAgcG9zdGFsQ29kZUxhYmVsID0gJ1BMWic7XG5cbiAgQElucHV0KClcbiAgbG9jYWxpdHlMYWJlbCA9ICdMb2NhbGl0eSc7XG5cbiAgQElucHV0KClcbiAgdmljaW5pdHlMYWJlbCA9ICdWaWNpbml0eSc7XG5cbiAgQElucHV0KClcbiAgc2hvd1ZpY2luaXR5OiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIGNvdW50cnk6IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gIEBJbnB1dCgpXG4gIHBsYWNlSWRPbmx5PzogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBzdHJpY3RCb3VuZHM/OiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIHR5cGVzPzogc3RyaW5nW107XG4gIC8vIHR5cGVzOiBzdHJpbmdbXSA9IFsnYWRkcmVzcyddO1xuXG4gIEBJbnB1dCgpXG4gIHR5cGU/OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcmVhZG9ubHk6IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgZGlzYWJsZVNlYXJjaDogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICB2YWx1ZTogR2VybWFuQWRkcmVzcztcblxuICBAT3V0cHV0KClcbiAgb25HZXJtYW5BZGRyZXNzTWFwcGVkOiBFdmVudEVtaXR0ZXI8R2VybWFuQWRkcmVzcz4gPSBuZXcgRXZlbnRFbWl0dGVyPEdlcm1hbkFkZHJlc3M+KCk7XG5cbiAgZ2VybWFuQWRkcmVzczogR2VybWFuQWRkcmVzcztcbiAgYWRkcmVzc0Zvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG4gIGZpcnN0SW5pdCA9IHRydWU7XG5cbiAgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4ge1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNyZWF0ZUFkZHJlc3NGb3JtR3JvdXAoKTtcbiAgfVxuXG4gIGNyZWF0ZUFkZHJlc3NGb3JtR3JvdXAoKTogdm9pZCB7XG4gICAgdGhpcy5hZGRyZXNzRm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBzdHJlZXROYW1lOiBbdGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLnN0cmVldE5hbWUgPyB0aGlzLnZhbHVlLnN0cmVldE5hbWUgOiBudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHN0cmVldE51bWJlcjogW3RoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5zdHJlZXROdW1iZXIgPyB0aGlzLnZhbHVlLnN0cmVldE51bWJlciA6IG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgcG9zdGFsQ29kZTogW3RoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5wb3N0YWxDb2RlID8gdGhpcy52YWx1ZS5wb3N0YWxDb2RlIDogbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICB2aWNpbml0eTogW3RoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS52aWNpbml0eSA/IHRoaXMudmFsdWUudmljaW5pdHkgOiBudWxsXSxcbiAgICAgIGxvY2FsaXR5OiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgbG9uZzogW3RoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sb2NhbGl0eSAmJiB0aGlzLnZhbHVlLmxvY2FsaXR5LmxvbmcgPyB0aGlzLnZhbHVlLmxvY2FsaXR5LmxvbmcgOiBudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgc3luY0F1dG9Db21wbGV0ZSgkZXZlbnQ6IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZVJlc3VsdCkge1xuICAgIGlmICh0aGlzLmdlcm1hbkFkZHJlc3MpIHtcbiAgICAgIHRoaXMuYWRkcmVzc0Zvcm1Hcm91cC5yZXNldCgpO1xuICAgIH1cbiAgICBjb25zdCBnZXJtYW5BZGRyZXNzOiBHZXJtYW5BZGRyZXNzID0gcGFyc2VHZXJtYW5BZGRyZXNzKCRldmVudCk7XG4gICAgdGhpcy5nZXJtYW5BZGRyZXNzID0gZ2VybWFuQWRkcmVzcztcbiAgICBpZiAoZ2VybWFuQWRkcmVzcy52aWNpbml0eSkge1xuICAgICAgdGhpcy5hZGRyZXNzRm9ybUdyb3VwLmdldCgndmljaW5pdHknKS5wYXRjaFZhbHVlKGdlcm1hbkFkZHJlc3MudmljaW5pdHkpO1xuICAgIH1cbiAgICBpZiAoZ2VybWFuQWRkcmVzcy5zdHJlZXROYW1lKSB7XG4gICAgICB0aGlzLmFkZHJlc3NGb3JtR3JvdXAuZ2V0KCdzdHJlZXROYW1lJykucGF0Y2hWYWx1ZShnZXJtYW5BZGRyZXNzLnN0cmVldE5hbWUpO1xuICAgIH1cbiAgICBpZiAoZ2VybWFuQWRkcmVzcy5zdHJlZXROdW1iZXIpIHtcbiAgICAgIHRoaXMuYWRkcmVzc0Zvcm1Hcm91cC5nZXQoJ3N0cmVldE51bWJlcicpLnBhdGNoVmFsdWUoZ2VybWFuQWRkcmVzcy5zdHJlZXROdW1iZXIudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChnZXJtYW5BZGRyZXNzLnBvc3RhbENvZGUpIHtcbiAgICAgIHRoaXMuYWRkcmVzc0Zvcm1Hcm91cC5nZXQoJ3Bvc3RhbENvZGUnKS5wYXRjaFZhbHVlKGdlcm1hbkFkZHJlc3MucG9zdGFsQ29kZSk7XG4gICAgfVxuICAgIGlmIChnZXJtYW5BZGRyZXNzLmxvY2FsaXR5ICYmIGdlcm1hbkFkZHJlc3MubG9jYWxpdHkubG9uZykge1xuICAgICAgdGhpcy5hZGRyZXNzRm9ybUdyb3VwLmdldCgnbG9jYWxpdHkubG9uZycpLnBhdGNoVmFsdWUoZ2VybWFuQWRkcmVzcy5sb2NhbGl0eS5sb25nKTtcbiAgICB9XG5cbiAgICB0aGlzLnZhbHVlID0gZ2VybWFuQWRkcmVzcztcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLm9uR2VybWFuQWRkcmVzc01hcHBlZC5lbWl0KGdlcm1hbkFkZHJlc3MpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xuICAgIGxldCBzaG91bGRSZWNyZWF0ZUZHID0gZmFsc2U7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKCF0aGlzLnZhbHVlICYmIHRoaXMuZmlyc3RJbml0KSB7XG4gICAgICAgIHNob3VsZFJlY3JlYXRlRkcgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy52YWx1ZSA9IG9iajtcbiAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgICAgaWYgKHNob3VsZFJlY3JlYXRlRkcpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVBZGRyZXNzRm9ybUdyb3VwKCk7XG4gICAgICAgIHRoaXMuZmlyc3RJbml0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICB9XG5cbn1cbiJdfQ==