@firestitch/address
Version:
184 lines • 24.7 kB
JavaScript
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Optional, Output, ViewChild, inject } from '@angular/core';
import { ControlContainer, NG_VALUE_ACCESSOR, NgForm } from '@angular/forms';
import { MatDialog } from '@angular/material/dialog';
import { controlContainerFactory } from '@firestitch/core';
import { Subject } from 'rxjs';
import { filter, takeUntil } from 'rxjs/operators';
import { cloneDeep, isObject } from 'lodash-es';
import { AddressFormat } from '../../enums/address-format.enum';
import { createEmptyAddress } from '../../helpers/create-empty-address';
import { FsAddressDialogComponent } from '../address-dialog/address-dialog.component';
import { FsAddressSearchComponent } from '../address-search/address-search.component';
import * as i0 from "@angular/core";
export class FsAddressPickerComponent {
_dialog = inject(MatDialog);
_cdRef = inject(ChangeDetectorRef);
addressSearch;
set setConfig(config) {
config = cloneDeep(config);
if (!config.format) {
config.format = AddressFormat.TwoLine;
}
if (!isObject(config.map)) {
config.map = { showMap: false };
}
config.disabled = this.config.disabled;
config.readonly = this.config.readonly;
this.config = config;
}
set setFormat(value) {
this.config.format = value;
}
set setDisabled(value) {
this.config.disabled = value;
}
set setReadonly(value) {
this.config.readonly = value;
}
address;
addressChange = new EventEmitter();
showName = true;
search;
view = 'search';
config = {};
onChange;
_destroy$ = new Subject();
writeValue(obj) {
this.address = obj;
}
registerOnChange(fn) {
this.onChange = fn;
}
registerOnTouched() {
//
}
setDisabledState(disabled) {
this.config.disabled = disabled;
this._cdRef.markForCheck();
}
ngOnChanges(changes) {
if (changes.address &&
changes.address.currentValue !== changes.address.previousValue) {
if (!this.address) {
this.address = createEmptyAddress();
}
}
}
addressManual() {
this.open({
initialChange: false,
value: {},
});
}
addressChanged(address) {
this.address = address;
this.addressChange.emit(address);
if (this.onChange) {
this.onChange(address);
}
}
addressEdit() {
this.open({ value: this.address, initialChange: false });
}
addressSelected(address) {
if (this.config.confirmation || address.manual) {
this.open({ value: address, initialChange: true })
.afterClosed()
.pipe(takeUntil(this._destroy$))
.subscribe((result) => {
if (!result) {
this.addressSearch.clear();
}
});
}
else {
this.addressChanged(address);
}
}
open(event) {
const dialogRef = this._dialog
.open(FsAddressDialogComponent, {
width: '700px',
data: {
address: event.value || this.address,
config: this.config,
initial: event.initialChange,
},
});
dialogRef.afterClosed()
.pipe(filter((result) => !!result), takeUntil(this._destroy$))
.subscribe((result) => {
this.address = result;
// hard dirty fix for DT-T867.
// In future it must be ControlValue Accessor...
if (result) {
this.search.autocomplete.value = this.address;
}
this.addressChanged(this.address);
this._cdRef.markForCheck();
});
return dialogRef;
}
searchEdited(event) {
this.open(event);
}
clear() {
this.address = {};
this.addressSearch.clear();
}
ngOnDestroy() {
this._destroy$.next(null);
this._destroy$.complete();
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAddressPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: FsAddressPickerComponent, isStandalone: true, selector: "fs-address-picker", inputs: { setConfig: ["config", "setConfig"], setFormat: ["format", "setFormat"], setDisabled: ["disabled", "setDisabled"], setReadonly: ["readonly", "setReadonly"], address: "address", showName: "showName" }, outputs: { addressChange: "addressChange" }, providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: FsAddressPickerComponent,
multi: true,
}], viewQueries: [{ propertyName: "addressSearch", first: true, predicate: FsAddressSearchComponent, descendants: true, static: true }, { propertyName: "search", first: true, predicate: FsAddressSearchComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"address-picker-container\">\n <div class=\"search\">\n <fs-address-search\n [address]=\"address\"\n [config]=\"config\"\n [format]=\"config.format\"\n [disabled]=\"config.disabled\"\n [readonly]=\"config.readonly\"\n [showName]=\"showName\"\n (edit)=\"addressEdit()\"\n (cleared)=\"addressChanged(null)\"\n (addressChange)=\"addressChanged($event)\"\n (addressManual)=\"addressManual()\"\n (selected)=\"addressSelected($event)\">\n </fs-address-search>\n </div>\n</div>", styles: [".address-picker-container{position:relative}.input-controls{position:absolute;top:0;right:0}:host ::ng-deep .search .mat-form-field-flex{flex-direction:row}:host ::ng-deep .search .mat-form-field-suffix{align-self:center}:host ::ng-deep .hide-underline .mat-form-field-underline{display:none}:host ::ng-deep .hide-underline .mat-form-field-subscript-wrapper{margin-top:0}.map-buttons{margin-top:5px}.map-buttons button{width:100%}\n"], dependencies: [{ kind: "component", type: FsAddressSearchComponent, selector: "fs-address-search", inputs: ["config", "showName", "address", "format", "disabled", "readonly", "required"], outputs: ["cleared", "addressChange", "edit", "selected", "addressManual"] }], viewProviders: [
{
provide: ControlContainer,
useFactory: controlContainerFactory,
deps: [[new Optional(), NgForm]],
},
], changeDetection: i0.ChangeDetectionStrategy.OnPush });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAddressPickerComponent, decorators: [{
type: Component,
args: [{ selector: 'fs-address-picker', changeDetection: ChangeDetectionStrategy.OnPush, providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: FsAddressPickerComponent,
multi: true,
}], viewProviders: [
{
provide: ControlContainer,
useFactory: controlContainerFactory,
deps: [[new Optional(), NgForm]],
},
], standalone: true, imports: [FsAddressSearchComponent], template: "<div class=\"address-picker-container\">\n <div class=\"search\">\n <fs-address-search\n [address]=\"address\"\n [config]=\"config\"\n [format]=\"config.format\"\n [disabled]=\"config.disabled\"\n [readonly]=\"config.readonly\"\n [showName]=\"showName\"\n (edit)=\"addressEdit()\"\n (cleared)=\"addressChanged(null)\"\n (addressChange)=\"addressChanged($event)\"\n (addressManual)=\"addressManual()\"\n (selected)=\"addressSelected($event)\">\n </fs-address-search>\n </div>\n</div>", styles: [".address-picker-container{position:relative}.input-controls{position:absolute;top:0;right:0}:host ::ng-deep .search .mat-form-field-flex{flex-direction:row}:host ::ng-deep .search .mat-form-field-suffix{align-self:center}:host ::ng-deep .hide-underline .mat-form-field-underline{display:none}:host ::ng-deep .hide-underline .mat-form-field-subscript-wrapper{margin-top:0}.map-buttons{margin-top:5px}.map-buttons button{width:100%}\n"] }]
}], propDecorators: { addressSearch: [{
type: ViewChild,
args: [FsAddressSearchComponent, { static: true }]
}], setConfig: [{
type: Input,
args: ['config']
}], setFormat: [{
type: Input,
args: ['format']
}], setDisabled: [{
type: Input,
args: ['disabled']
}], setReadonly: [{
type: Input,
args: ['readonly']
}], address: [{
type: Input
}], addressChange: [{
type: Output
}], showName: [{
type: Input
}], search: [{
type: ViewChild,
args: [FsAddressSearchComponent]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL2FkZHJlc3MtcGlja2VyL2FkZHJlc3MtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hZGRyZXNzLXBpY2tlci9hZGRyZXNzLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXdCLFFBQVEsRUFBRSxNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckwsT0FBTyxFQUFFLGdCQUFnQixFQUF3QixpQkFBaUIsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRyxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBRW5FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTNELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFHeEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7O0FBd0J0RixNQUFNLE9BQU8sd0JBQXdCO0lBQzNCLE9B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SSxPQUFPLEVBQUUsZ0JBQWdCO2dCQUN6QixVQUFVLEVBQUUsdUJBQXVCO2dCQUNuQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDbkM7U0FDSjs7MkZBSVEsd0JBQXdCO2tCQXBCcEMsU0FBUzsrQkFDSSxtQkFBbUIsbUJBR1osdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDOzRCQUNKLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsMEJBQTBCOzRCQUNyQyxLQUFLLEVBQUUsSUFBSTt5QkFDZCxDQUFDLGlCQUNTO3dCQUNYOzRCQUNJLE9BQU8sRUFBRSxnQkFBZ0I7NEJBQ3pCLFVBQVUsRUFBRSx1QkFBdUI7NEJBQ25DLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxRQUFRLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQzt5QkFDbkM7cUJBQ0osY0FDVyxJQUFJLFdBQ1AsQ0FBQyx3QkFBd0IsQ0FBQzs4QkFROUIsYUFBYTtzQkFEbkIsU0FBUzt1QkFBQyx3QkFBd0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR3pCLFNBQVM7c0JBQXBDLEtBQUs7dUJBQUMsUUFBUTtnQkFpQmEsU0FBUztzQkFBcEMsS0FBSzt1QkFBQyxRQUFRO2dCQUllLFdBQVc7c0JBQXhDLEtBQUs7dUJBQUMsVUFBVTtnQkFJYSxXQUFXO3NCQUF4QyxLQUFLO3VCQUFDLFVBQVU7Z0JBSUQsT0FBTztzQkFBdEIsS0FBSztnQkFFVyxhQUFhO3NCQUE3QixNQUFNO2dCQUVTLFFBQVE7c0JBQXZCLEtBQUs7Z0JBR0MsTUFBTTtzQkFEWixTQUFTO3VCQUFDLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT3B0aW9uYWwsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IGNvbnRyb2xDb250YWluZXJGYWN0b3J5IH0gZnJvbSAnQGZpcmVzdGl0Y2gvY29yZSc7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBjbG9uZURlZXAsIGlzT2JqZWN0IH0gZnJvbSAnbG9kYXNoLWVzJztcblxuaW1wb3J0IHsgQWRkcmVzc0Zvcm1hdCB9IGZyb20gJy4uLy4uL2VudW1zL2FkZHJlc3MtZm9ybWF0LmVudW0nO1xuaW1wb3J0IHsgY3JlYXRlRW1wdHlBZGRyZXNzIH0gZnJvbSAnLi4vLi4vaGVscGVycy9jcmVhdGUtZW1wdHktYWRkcmVzcyc7XG5pbXBvcnQgeyBGc0FkZHJlc3NQaWNrZXJDb25maWcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2FkZHJlc3MtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBGc0FkZHJlc3MgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2FkZHJlc3MuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZzQWRkcmVzc0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2FkZHJlc3MtZGlhbG9nL2FkZHJlc3MtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGc0FkZHJlc3NTZWFyY2hDb21wb25lbnQgfSBmcm9tICcuLi9hZGRyZXNzLXNlYXJjaC9hZGRyZXNzLXNlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWRkcmVzc1NlYXJjaEVkaXRFdmVudCB9IGZyb20gJy4uL2FkZHJlc3Mtc2VhcmNoL2FkZHJlc3Mtc2VhcmNoLmludGVyZmFjZSc7XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmcy1hZGRyZXNzLXBpY2tlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FkZHJlc3MtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hZGRyZXNzLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW3tcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IEZzQWRkcmVzc1BpY2tlckNvbXBvbmVudCxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9XSxcbiAgICB2aWV3UHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiBjb250cm9sQ29udGFpbmVyRmFjdG9yeSxcbiAgICAgICAgICAgIGRlcHM6IFtbbmV3IE9wdGlvbmFsKCksIE5nRm9ybV1dLFxuICAgICAgICB9LFxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbRnNBZGRyZXNzU2VhcmNoQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgRnNBZGRyZXNzUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHJpdmF0ZSBfZGlhbG9nID0gaW5qZWN0KE1hdERpYWxvZyk7XG4gIHByaXZhdGUgX2NkUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuXG4gIEBWaWV3Q2hpbGQoRnNBZGRyZXNzU2VhcmNoQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwdWJsaWMgYWRkcmVzc1NlYXJjaDogRnNBZGRyZXNzU2VhcmNoQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgnY29uZmlnJykgcHVibGljIHNldCBzZXRDb25maWcoY29uZmlnOiBGc0FkZHJlc3NQaWNrZXJDb25maWcpIHtcbiAgICBjb25maWcgPSBjbG9uZURlZXAoY29uZmlnKTtcblxuICAgIGlmICghY29uZmlnLmZvcm1hdCkge1xuICAgICAgY29uZmlnLmZvcm1hdCA9IEFkZHJlc3NGb3JtYXQuVHdvTGluZTtcbiAgICB9XG5cbiAgICBpZiAoIWlzT2JqZWN0KGNvbmZpZy5tYXApKSB7XG4gICAgICBjb25maWcubWFwID0geyBzaG93TWFwOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGNvbmZpZy5kaXNhYmxlZCA9IHRoaXMuY29uZmlnLmRpc2FibGVkO1xuICAgIGNvbmZpZy5yZWFkb25seSA9IHRoaXMuY29uZmlnLnJlYWRvbmx5O1xuXG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gIH1cblxuICBASW5wdXQoJ2Zvcm1hdCcpIHB1YmxpYyBzZXQgc2V0Rm9ybWF0KHZhbHVlKSB7XG4gICAgdGhpcy5jb25maWcuZm9ybWF0ID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoJ2Rpc2FibGVkJykgcHVibGljIHNldCBzZXREaXNhYmxlZCh2YWx1ZSkge1xuICAgIHRoaXMuY29uZmlnLmRpc2FibGVkID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoJ3JlYWRvbmx5JykgcHVibGljIHNldCBzZXRSZWFkb25seSh2YWx1ZSkge1xuICAgIHRoaXMuY29uZmlnLnJlYWRvbmx5ID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKSBwdWJsaWMgYWRkcmVzczogRnNBZGRyZXNzO1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgYWRkcmVzc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASW5wdXQoKSBwdWJsaWMgc2hvd05hbWU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBWaWV3Q2hpbGQoRnNBZGRyZXNzU2VhcmNoQ29tcG9uZW50KVxuICBwdWJsaWMgc2VhcmNoOiBGc0FkZHJlc3NTZWFyY2hDb21wb25lbnQ7XG5cbiAgcHVibGljIHZpZXcgPSAnc2VhcmNoJztcbiAgcHVibGljIGNvbmZpZzogRnNBZGRyZXNzUGlja2VyQ29uZmlnID0ge307XG4gIHB1YmxpYyBvbkNoYW5nZTogKHZhbHVlKSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcblxuICBwdWJsaWMgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuYWRkcmVzcyA9IG9iajtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoKTogdm9pZCB7XG4gICAgLy9cbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlPyhkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChcbiAgICAgIGNoYW5nZXMuYWRkcmVzcyAmJlxuICAgICAgY2hhbmdlcy5hZGRyZXNzLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5hZGRyZXNzLnByZXZpb3VzVmFsdWVcbiAgICApIHtcbiAgICAgIGlmICghdGhpcy5hZGRyZXNzKSB7XG4gICAgICAgIHRoaXMuYWRkcmVzcyA9IGNyZWF0ZUVtcHR5QWRkcmVzcygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRyZXNzTWFudWFsKCkge1xuICAgIHRoaXMub3Blbih7XG4gICAgICBpbml0aWFsQ2hhbmdlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiB7fSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRyZXNzQ2hhbmdlZChhZGRyZXNzKSB7XG4gICAgdGhpcy5hZGRyZXNzID0gYWRkcmVzcztcbiAgICB0aGlzLmFkZHJlc3NDaGFuZ2UuZW1pdChhZGRyZXNzKTtcbiAgICBpZih0aGlzLm9uQ2hhbmdlKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlKGFkZHJlc3MpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRyZXNzRWRpdCgpIHtcbiAgICB0aGlzLm9wZW4oeyB2YWx1ZTogdGhpcy5hZGRyZXNzLCBpbml0aWFsQ2hhbmdlOiBmYWxzZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRyZXNzU2VsZWN0ZWQoYWRkcmVzcykge1xuICAgIGlmICh0aGlzLmNvbmZpZy5jb25maXJtYXRpb24gfHwgYWRkcmVzcy5tYW51YWwpIHtcbiAgICAgIHRoaXMub3Blbih7IHZhbHVlOiBhZGRyZXNzLCBpbml0aWFsQ2hhbmdlOiB0cnVlIH0pXG4gICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkcmVzc1NlYXJjaC5jbGVhcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkcmVzc0NoYW5nZWQoYWRkcmVzcyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9wZW4oZXZlbnQ6IEFkZHJlc3NTZWFyY2hFZGl0RXZlbnQpOiBNYXREaWFsb2dSZWY8RnNBZGRyZXNzRGlhbG9nQ29tcG9uZW50PiB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nXG4gICAgICAub3BlbihGc0FkZHJlc3NEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgd2lkdGg6ICc3MDBweCcsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhZGRyZXNzOiBldmVudC52YWx1ZSB8fCB0aGlzLmFkZHJlc3MsXG4gICAgICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgICAgICBpbml0aWFsOiBldmVudC5pbml0aWFsQ2hhbmdlLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigocmVzdWx0KSA9PiAhIXJlc3VsdCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgdGhpcy5hZGRyZXNzID0gcmVzdWx0O1xuXG4gICAgICAgIC8vIGhhcmQgZGlydHkgZml4IGZvciBEVC1UODY3LlxuICAgICAgICAvLyBJbiBmdXR1cmUgaXQgbXVzdCBiZSBDb250cm9sVmFsdWUgQWNjZXNzb3IuLi5cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHRoaXMuc2VhcmNoLmF1dG9jb21wbGV0ZS52YWx1ZSA9IHRoaXMuYWRkcmVzcztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWRkcmVzc0NoYW5nZWQodGhpcy5hZGRyZXNzKTtcbiAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiBkaWFsb2dSZWY7XG4gIH1cblxuICBwdWJsaWMgc2VhcmNoRWRpdGVkKGV2ZW50OiBBZGRyZXNzU2VhcmNoRWRpdEV2ZW50KSB7XG4gICAgdGhpcy5vcGVuKGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICB0aGlzLmFkZHJlc3MgPSB7fTtcbiAgICB0aGlzLmFkZHJlc3NTZWFyY2guY2xlYXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJhZGRyZXNzLXBpY2tlci1jb250YWluZXJcIj5cbiAgPGRpdiBjbGFzcz1cInNlYXJjaFwiPlxuICAgIDxmcy1hZGRyZXNzLXNlYXJjaFxuICAgICAgW2FkZHJlc3NdPVwiYWRkcmVzc1wiXG4gICAgICBbY29uZmlnXT1cImNvbmZpZ1wiXG4gICAgICBbZm9ybWF0XT1cImNvbmZpZy5mb3JtYXRcIlxuICAgICAgW2Rpc2FibGVkXT1cImNvbmZpZy5kaXNhYmxlZFwiXG4gICAgICBbcmVhZG9ubHldPVwiY29uZmlnLnJlYWRvbmx5XCJcbiAgICAgIFtzaG93TmFtZV09XCJzaG93TmFtZVwiXG4gICAgICAoZWRpdCk9XCJhZGRyZXNzRWRpdCgpXCJcbiAgICAgIChjbGVhcmVkKT1cImFkZHJlc3NDaGFuZ2VkKG51bGwpXCJcbiAgICAgIChhZGRyZXNzQ2hhbmdlKT1cImFkZHJlc3NDaGFuZ2VkKCRldmVudClcIlxuICAgICAgKGFkZHJlc3NNYW51YWwpPVwiYWRkcmVzc01hbnVhbCgpXCJcbiAgICAgIChzZWxlY3RlZCk9XCJhZGRyZXNzU2VsZWN0ZWQoJGV2ZW50KVwiPlxuICAgIDwvZnMtYWRkcmVzcy1zZWFyY2g+XG4gIDwvZGl2PlxuPC9kaXY+Il19