UNPKG

@firestitch/address

Version:
184 lines 24.7 kB
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL2FkZHJlc3MtcGlja2VyL2FkZHJlc3MtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hZGRyZXNzLXBpY2tlci9hZGRyZXNzLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXdCLFFBQVEsRUFBRSxNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckwsT0FBTyxFQUFFLGdCQUFnQixFQUF3QixpQkFBaUIsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRyxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBRW5FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTNELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFHeEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7O0FBd0J0RixNQUFNLE9BQU8sd0JBQXdCO0lBQzNCLE9BQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBSXBDLGFBQWEsQ0FBMkI7SUFFL0MsSUFBNEIsU0FBUyxDQUFDLE1BQTZCO1FBQ2pFLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQixNQUFNLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUM7UUFDeEMsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUIsTUFBTSxDQUFDLEdBQUcsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBRUQsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUN2QyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBRXZDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUE0QixTQUFTLENBQUMsS0FBSztRQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQThCLFdBQVcsQ0FBQyxLQUFLO1FBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBOEIsV0FBVyxDQUFDLEtBQUs7UUFDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFFZSxPQUFPLENBQVk7SUFFbEIsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFFcEMsUUFBUSxHQUFZLElBQUksQ0FBQztJQUdsQyxNQUFNLENBQTJCO0lBRWpDLElBQUksR0FBRyxRQUFRLENBQUM7SUFDaEIsTUFBTSxHQUEwQixFQUFFLENBQUM7SUFDbkMsUUFBUSxDQUFrQjtJQUV6QixTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUUzQixVQUFVLENBQUMsR0FBUTtRQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUNyQixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsRUFBTztRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU0saUJBQWlCO1FBQ3RCLEVBQUU7SUFDSixDQUFDO0lBRU0sZ0JBQWdCLENBQUUsUUFBaUI7UUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVNLFdBQVcsQ0FBQyxPQUFzQjtRQUN2QyxJQUNFLE9BQU8sQ0FBQyxPQUFPO1lBQ2YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEtBQUssT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQzlELENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLGtCQUFrQixFQUFFLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU0sYUFBYTtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ1IsYUFBYSxFQUFFLEtBQUs7WUFDcEIsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sY0FBYyxDQUFDLE9BQU87UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakMsSUFBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTSxlQUFlLENBQUMsT0FBTztRQUM1QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUM7aUJBQy9DLFdBQVcsRUFBRTtpQkFDYixJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUI7aUJBQ0EsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDWixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM3QixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFTSxJQUFJLENBQUMsS0FBNkI7UUFDdkMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU87YUFDM0IsSUFBSSxDQUFDLHdCQUF3QixFQUFFO1lBQzlCLEtBQUssRUFBRSxPQUFPO1lBQ2QsSUFBSSxFQUFFO2dCQUNKLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPO2dCQUNwQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ25CLE9BQU8sRUFBRSxLQUFLLENBQUMsYUFBYTthQUM3QjtTQUNGLENBQUMsQ0FBQztRQUVMLFNBQVMsQ0FBQyxXQUFXLEVBQUU7YUFDcEIsSUFBSSxDQUNILE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUM1QixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQjthQUNBLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1lBRXRCLDhCQUE4QjtZQUM5QixnREFBZ0Q7WUFDaEQsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNoRCxDQUFDO1lBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVMLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTSxZQUFZLENBQUMsS0FBNkI7UUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO3VHQWhLVSx3QkFBd0I7MkZBQXhCLHdCQUF3QiwrVEFmdEIsQ0FBQztnQkFDSixPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsd0JBQXdCO2dCQUNyQyxLQUFLLEVBQUUsSUFBSTthQUNkLENBQUMseUVBZ0JHLHdCQUF3Qix1RkFzQ3hCLHdCQUF3QixxRUNwRnJDLG1pQkFnQk0sMGVEdUJRLHdCQUF3Qix3TkFSbkI7WUFDWDtnQkFDSSxPQUFPLEVBQUUsZ0JBQWdCO2dCQUN6QixVQUFVLEVBQUUsdUJBQXVCO2dCQUNuQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDbkM7U0FDSjs7MkZBSVEsd0JBQXdCO2tCQXBCcEMsU0FBUzsrQkFDSSxtQkFBbUIsbUJBR1osdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDOzRCQUNKLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsMEJBQTBCOzRCQUNyQyxLQUFLLEVBQUUsSUFBSTt5QkFDZCxDQUFDLGlCQUNTO3dCQUNYOzRCQUNJLE9BQU8sRUFBRSxnQkFBZ0I7NEJBQ3pCLFVBQVUsRUFBRSx1QkFBdUI7NEJBQ25DLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxRQUFRLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQzt5QkFDbkM7cUJBQ0osY0FDVyxJQUFJLFdBQ1AsQ0FBQyx3QkFBd0IsQ0FBQzs4QkFROUIsYUFBYTtzQkFEbkIsU0FBUzt1QkFBQyx3QkFBd0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR3pCLFNBQVM7c0JBQXBDLEtBQUs7dUJBQUMsUUFBUTtnQkFpQmEsU0FBUztzQkFBcEMsS0FBSzt1QkFBQyxRQUFRO2dCQUllLFdBQVc7c0JBQXhDLEtBQUs7dUJBQUMsVUFBVTtnQkFJYSxXQUFXO3NCQUF4QyxLQUFLO3VCQUFDLFVBQVU7Z0JBSUQsT0FBTztzQkFBdEIsS0FBSztnQkFFVyxhQUFhO3NCQUE3QixNQUFNO2dCQUVTLFFBQVE7c0JBQXZCLEtBQUs7Z0JBR0MsTUFBTTtzQkFEWixTQUFTO3VCQUFDLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT3B0aW9uYWwsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IGNvbnRyb2xDb250YWluZXJGYWN0b3J5IH0gZnJvbSAnQGZpcmVzdGl0Y2gvY29yZSc7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBjbG9uZURlZXAsIGlzT2JqZWN0IH0gZnJvbSAnbG9kYXNoLWVzJztcblxuaW1wb3J0IHsgQWRkcmVzc0Zvcm1hdCB9IGZyb20gJy4uLy4uL2VudW1zL2FkZHJlc3MtZm9ybWF0LmVudW0nO1xuaW1wb3J0IHsgY3JlYXRlRW1wdHlBZGRyZXNzIH0gZnJvbSAnLi4vLi4vaGVscGVycy9jcmVhdGUtZW1wdHktYWRkcmVzcyc7XG5pbXBvcnQgeyBGc0FkZHJlc3NQaWNrZXJDb25maWcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2FkZHJlc3MtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBGc0FkZHJlc3MgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2FkZHJlc3MuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZzQWRkcmVzc0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2FkZHJlc3MtZGlhbG9nL2FkZHJlc3MtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGc0FkZHJlc3NTZWFyY2hDb21wb25lbnQgfSBmcm9tICcuLi9hZGRyZXNzLXNlYXJjaC9hZGRyZXNzLXNlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWRkcmVzc1NlYXJjaEVkaXRFdmVudCB9IGZyb20gJy4uL2FkZHJlc3Mtc2VhcmNoL2FkZHJlc3Mtc2VhcmNoLmludGVyZmFjZSc7XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmcy1hZGRyZXNzLXBpY2tlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FkZHJlc3MtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hZGRyZXNzLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW3tcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IEZzQWRkcmVzc1BpY2tlckNvbXBvbmVudCxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9XSxcbiAgICB2aWV3UHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiBjb250cm9sQ29udGFpbmVyRmFjdG9yeSxcbiAgICAgICAgICAgIGRlcHM6IFtbbmV3IE9wdGlvbmFsKCksIE5nRm9ybV1dLFxuICAgICAgICB9LFxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbRnNBZGRyZXNzU2VhcmNoQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgRnNBZGRyZXNzUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHJpdmF0ZSBfZGlhbG9nID0gaW5qZWN0KE1hdERpYWxvZyk7XG4gIHByaXZhdGUgX2NkUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuXG4gIEBWaWV3Q2hpbGQoRnNBZGRyZXNzU2VhcmNoQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwdWJsaWMgYWRkcmVzc1NlYXJjaDogRnNBZGRyZXNzU2VhcmNoQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgnY29uZmlnJykgcHVibGljIHNldCBzZXRDb25maWcoY29uZmlnOiBGc0FkZHJlc3NQaWNrZXJDb25maWcpIHtcbiAgICBjb25maWcgPSBjbG9uZURlZXAoY29uZmlnKTtcblxuICAgIGlmICghY29uZmlnLmZvcm1hdCkge1xuICAgICAgY29uZmlnLmZvcm1hdCA9IEFkZHJlc3NGb3JtYXQuVHdvTGluZTtcbiAgICB9XG5cbiAgICBpZiAoIWlzT2JqZWN0KGNvbmZpZy5tYXApKSB7XG4gICAgICBjb25maWcubWFwID0geyBzaG93TWFwOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGNvbmZpZy5kaXNhYmxlZCA9IHRoaXMuY29uZmlnLmRpc2FibGVkO1xuICAgIGNvbmZpZy5yZWFkb25seSA9IHRoaXMuY29uZmlnLnJlYWRvbmx5O1xuXG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gIH1cblxuICBASW5wdXQoJ2Zvcm1hdCcpIHB1YmxpYyBzZXQgc2V0Rm9ybWF0KHZhbHVlKSB7XG4gICAgdGhpcy5jb25maWcuZm9ybWF0ID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoJ2Rpc2FibGVkJykgcHVibGljIHNldCBzZXREaXNhYmxlZCh2YWx1ZSkge1xuICAgIHRoaXMuY29uZmlnLmRpc2FibGVkID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoJ3JlYWRvbmx5JykgcHVibGljIHNldCBzZXRSZWFkb25seSh2YWx1ZSkge1xuICAgIHRoaXMuY29uZmlnLnJlYWRvbmx5ID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKSBwdWJsaWMgYWRkcmVzczogRnNBZGRyZXNzO1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgYWRkcmVzc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASW5wdXQoKSBwdWJsaWMgc2hvd05hbWU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBWaWV3Q2hpbGQoRnNBZGRyZXNzU2VhcmNoQ29tcG9uZW50KVxuICBwdWJsaWMgc2VhcmNoOiBGc0FkZHJlc3NTZWFyY2hDb21wb25lbnQ7XG5cbiAgcHVibGljIHZpZXcgPSAnc2VhcmNoJztcbiAgcHVibGljIGNvbmZpZzogRnNBZGRyZXNzUGlja2VyQ29uZmlnID0ge307XG4gIHB1YmxpYyBvbkNoYW5nZTogKHZhbHVlKSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcblxuICBwdWJsaWMgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuYWRkcmVzcyA9IG9iajtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoKTogdm9pZCB7XG4gICAgLy9cbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlPyhkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChcbiAgICAgIGNoYW5nZXMuYWRkcmVzcyAmJlxuICAgICAgY2hhbmdlcy5hZGRyZXNzLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5hZGRyZXNzLnByZXZpb3VzVmFsdWVcbiAgICApIHtcbiAgICAgIGlmICghdGhpcy5hZGRyZXNzKSB7XG4gICAgICAgIHRoaXMuYWRkcmVzcyA9IGNyZWF0ZUVtcHR5QWRkcmVzcygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRyZXNzTWFudWFsKCkge1xuICAgIHRoaXMub3Blbih7XG4gICAgICBpbml0aWFsQ2hhbmdlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiB7fSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRyZXNzQ2hhbmdlZChhZGRyZXNzKSB7XG4gICAgdGhpcy5hZGRyZXNzID0gYWRkcmVzcztcbiAgICB0aGlzLmFkZHJlc3NDaGFuZ2UuZW1pdChhZGRyZXNzKTtcbiAgICBpZih0aGlzLm9uQ2hhbmdlKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlKGFkZHJlc3MpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRyZXNzRWRpdCgpIHtcbiAgICB0aGlzLm9wZW4oeyB2YWx1ZTogdGhpcy5hZGRyZXNzLCBpbml0aWFsQ2hhbmdlOiBmYWxzZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRyZXNzU2VsZWN0ZWQoYWRkcmVzcykge1xuICAgIGlmICh0aGlzLmNvbmZpZy5jb25maXJtYXRpb24gfHwgYWRkcmVzcy5tYW51YWwpIHtcbiAgICAgIHRoaXMub3Blbih7IHZhbHVlOiBhZGRyZXNzLCBpbml0aWFsQ2hhbmdlOiB0cnVlIH0pXG4gICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkcmVzc1NlYXJjaC5jbGVhcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkcmVzc0NoYW5nZWQoYWRkcmVzcyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9wZW4oZXZlbnQ6IEFkZHJlc3NTZWFyY2hFZGl0RXZlbnQpOiBNYXREaWFsb2dSZWY8RnNBZGRyZXNzRGlhbG9nQ29tcG9uZW50PiB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nXG4gICAgICAub3BlbihGc0FkZHJlc3NEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgd2lkdGg6ICc3MDBweCcsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhZGRyZXNzOiBldmVudC52YWx1ZSB8fCB0aGlzLmFkZHJlc3MsXG4gICAgICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgICAgICBpbml0aWFsOiBldmVudC5pbml0aWFsQ2hhbmdlLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigocmVzdWx0KSA9PiAhIXJlc3VsdCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgdGhpcy5hZGRyZXNzID0gcmVzdWx0O1xuXG4gICAgICAgIC8vIGhhcmQgZGlydHkgZml4IGZvciBEVC1UODY3LlxuICAgICAgICAvLyBJbiBmdXR1cmUgaXQgbXVzdCBiZSBDb250cm9sVmFsdWUgQWNjZXNzb3IuLi5cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHRoaXMuc2VhcmNoLmF1dG9jb21wbGV0ZS52YWx1ZSA9IHRoaXMuYWRkcmVzcztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWRkcmVzc0NoYW5nZWQodGhpcy5hZGRyZXNzKTtcbiAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiBkaWFsb2dSZWY7XG4gIH1cblxuICBwdWJsaWMgc2VhcmNoRWRpdGVkKGV2ZW50OiBBZGRyZXNzU2VhcmNoRWRpdEV2ZW50KSB7XG4gICAgdGhpcy5vcGVuKGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICB0aGlzLmFkZHJlc3MgPSB7fTtcbiAgICB0aGlzLmFkZHJlc3NTZWFyY2guY2xlYXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJhZGRyZXNzLXBpY2tlci1jb250YWluZXJcIj5cbiAgPGRpdiBjbGFzcz1cInNlYXJjaFwiPlxuICAgIDxmcy1hZGRyZXNzLXNlYXJjaFxuICAgICAgW2FkZHJlc3NdPVwiYWRkcmVzc1wiXG4gICAgICBbY29uZmlnXT1cImNvbmZpZ1wiXG4gICAgICBbZm9ybWF0XT1cImNvbmZpZy5mb3JtYXRcIlxuICAgICAgW2Rpc2FibGVkXT1cImNvbmZpZy5kaXNhYmxlZFwiXG4gICAgICBbcmVhZG9ubHldPVwiY29uZmlnLnJlYWRvbmx5XCJcbiAgICAgIFtzaG93TmFtZV09XCJzaG93TmFtZVwiXG4gICAgICAoZWRpdCk9XCJhZGRyZXNzRWRpdCgpXCJcbiAgICAgIChjbGVhcmVkKT1cImFkZHJlc3NDaGFuZ2VkKG51bGwpXCJcbiAgICAgIChhZGRyZXNzQ2hhbmdlKT1cImFkZHJlc3NDaGFuZ2VkKCRldmVudClcIlxuICAgICAgKGFkZHJlc3NNYW51YWwpPVwiYWRkcmVzc01hbnVhbCgpXCJcbiAgICAgIChzZWxlY3RlZCk9XCJhZGRyZXNzU2VsZWN0ZWQoJGV2ZW50KVwiPlxuICAgIDwvZnMtYWRkcmVzcy1zZWFyY2g+XG4gIDwvZGl2PlxuPC9kaXY+Il19