UNPKG

@infordata-web/portal-common-component-lib

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.14.

130 lines 26.8 kB
import { Component, ViewChild, Input, Output, EventEmitter } from '@angular/core'; import { FormGroupDirective, FormGroup, FormControl } from '@angular/forms'; import { MatTableDataSource } from '@angular/material/table'; import { Subject } from 'rxjs'; import { ComponentOutputStatus } from '../../normalizzazione/component-output-status'; import { DomicilioDTO } from '../../models/domicilio-dto'; import { ContattoDTO } from '../../models/contatto-dto'; import { SelectionModel } from '@angular/cdk/collections'; import { ComponentReducer } from '../../utils/component-reducer'; import { map, shareReplay, startWith, tap } from 'rxjs/operators'; import { MessageService } from '../../services/message.service'; export class DatiDomicilioComponent { constructor(msg) { this.msg = msg; this.done = new EventEmitter(); this.displayedColumns = ['tipo', 'presso', 'indirizzo', 'preferito', 'seleziona']; this.changesRecapito$ = new Subject(); this.validazioneDomicilio = false; this.tipoToltip = "tipo"; this.pressoToltip = "presso"; this.indirizzoToltip = "indirizzo"; this.selezionaToltip = "seleziona"; this.preferitoToltip = "preferito"; } ngOnInit() { // console.log('[domicilio]', this.domicilio); console.log('[domicili]', this.domicili); this.form = new FormGroup({}); let valid = true; if (!this.domicilio) { this.initDomicilio(); valid = false; } this.dataSource = new MatTableDataSource(this.domicili); this.selection = new SelectionModel(false, []); this.initialSelection(); const domicilio = new FormControl({ value: this.domicilio.hasSelezionatoDomicilio, disabled: false }); this.form.addControl('domicilio', domicilio); const selected = new FormControl({ value: '', disabled: false }); this.form.addControl('selected', selected); this.checkDomicilio$ = domicilio.valueChanges.pipe(shareReplay()) .pipe(tap(checkDomicilio => { if (checkDomicilio == false) { this.selection.clear(); } }), startWith(this.domicilio.idDomicilioSelezionato != null)); const changesCheckDomicilio$ = this.checkDomicilio$.pipe(map(checkDomicilio => ComponentOutputStatus.of(true, (domicilio) => { domicilio.hasSelezionatoDomicilio = checkDomicilio; if (checkDomicilio == false) { domicilio.contatto.email = null; domicilio.contatto.pec = null; domicilio.contatto.telefono = null; this.form.get('selected').setValue(''); } }))); const changesDomicilio$ = this.selection.changed.pipe(tap((value) => { // console.log("changesDomicilio$", value); this.validazioneDomicilio = value.added.length > 0 ? false : true; }), map(change => ComponentOutputStatus.of(true, domicilio => { domicilio.idDomicilioSelezionato = change.added.length > 0 ? change.added[0].id : null; }))); this.subscription = ComponentReducer.reducer3(changesCheckDomicilio$, changesDomicilio$, this.changesRecapito$, domicilio => { return domicilio.hasSelezionatoDomicilio ? domicilio.idDomicilioSelezionato != null : true; }, ComponentOutputStatus.of(true, this.domicilio)) .subscribe(domicilio => { // console.log('[DatiDomicilioComponent] status', status); this.done.emit(domicilio); }); this.form.setValidators(form => { if (form.get('domicilio').value && !form.get('selected').value) { this.validazioneDomicilio = true; return { requiredDomicilio: true }; } else { return null; } //TODO // return form.get('domicilio').value && // !form.get('selected').value ? // // this.selection.isEmpty() ? // // this.selection.selected.length === 1 ? // { requiredDomicilio: true } : null; }); } initialSelection() { if (this.domicilio.idDomicilioSelezionato) { setTimeout(() => { this.dataSource.data .forEach(row => { if (row.id == this.domicilio.idDomicilioSelezionato) { this.selection.select(row); this.validazioneDomicilio = false; } }); }, 0); } } initDomicilio() { this.domicilio = new DomicilioDTO(); this.domicilio.contatto = new ContattoDTO(); } recapitiReady(recapitiStatus) { // console.log('[recapitiReady]', recapitiStatus); this.changesRecapito$.next(recapitiStatus.mapValue((contatto) => (dich) => (dich.contatto = contatto))); } ngOnDestroy() { if (this.subscription != null) { this.subscription.unsubscribe(); } } } DatiDomicilioComponent.decorators = [ { type: Component, args: [{ selector: 'lib-dati-domicilio', template: "<mat-expansion-panel class=\"panel\" [expanded]=\"domicilio.hasSelezionatoDomicilio\">\r\n\t<mat-expansion-panel-header [collapsedHeight]=\"'48px'\" [expandedHeight]=\"'48px'\" class=\"custom-header\">\r\n\t\t<mat-panel-title>\r\n\t\t\t<!-- <h3>{{'domicilio' | traduzione}}</h3> -->\r\n\t\t\t<h3 class=\"mb-0 h5\"><info-tip-label label=\"domicilio\"></info-tip-label></h3>\r\n\t\t</mat-panel-title>\r\n\t</mat-expansion-panel-header>\r\n\t<form [formGroup]=\"form\">\r\n\t\t<div class=\"collapse-body mt-2\">\r\n\t\t\t<div class=\"row\">\r\n\t\t\t\t<section class=\"example-section col-md-2\">\r\n\t\t\t\t\t<mat-checkbox\r\n\t\t\t\t\t\tformControlName=\"domicilio\"\r\n\t\t\t\t\t\tclass=\"example-margin\">\r\n\t\t\t\t\t\t<!-- {{'seleziona-domicilio' | traduzione}} -->\r\n\t\t\t\t\t\t<info-tip-label label=\"seleziona-domicilio\"></info-tip-label>\r\n\t\t\t\t\t</mat-checkbox>\r\n\t\t\t\t</section>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<ng-container *ngIf=\"checkDomicilio$ | async\">\r\n\r\n\t\t<h4 class=\"border-bottom font-weight-bold mt-4 h5\"><info-tip-label label=\"domicili-inseriti\"></info-tip-label></h4>\r\n <ng-container *ngIf=\"domicili?.length > 0; else noDomicili\">\r\n\t\t\t<mat-table [dataSource]=\"dataSource\" class=\"mat-elevation-z8 mt-3 border\">\r\n\r\n\t\t\t\t<!-- Tipo Column -->\r\n\t\t\t\t<ng-container matColumnDef=\"tipo\">\r\n\t\t\t\t\t<mat-header-cell *matHeaderCellDef> {{'tipo' | traduzione}} </mat-header-cell>\r\n\t\t\t\t\t<mat-cell *matCellDef=\"let element\"> {{element.tipoDomicilio.descrizione}} </mat-cell>\r\n\t\t\t\t\t<!-- <mat-hint *infoTip=\"tipoToltip\"></mat-hint> -->\r\n\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t<!-- Presso Column -->\r\n\t\t\t\t<ng-container matColumnDef=\"presso\">\r\n\t\t\t\t\t<mat-header-cell *matHeaderCellDef> {{'presso' | traduzione}} </mat-header-cell>\r\n\t\t\t\t\t<mat-cell *matCellDef=\"let element\"> {{element.indirizzo.presso}} </mat-cell>\r\n\t\t\t\t\t<!-- <mat-hint *infoTip=\"pressoToltip\"></mat-hint> -->\r\n\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t<!-- Indirizzo Column -->\r\n\t\t\t\t<ng-container matColumnDef=\"indirizzo\">\r\n\t\t\t\t\t<mat-header-cell *matHeaderCellDef> {{'indirizzo' | traduzione}} </mat-header-cell>\r\n\t\t\t\t\t<mat-cell *matCellDef=\"let element\">\r\n\t\t\t\t\t\t<span *ngIf=\"!element.indirizzo.estero\"> {{element.indirizzo.indirizzo}}\r\n\t\t\t\t\t\t\t{{element.indirizzo.civico}} {{element.indirizzo.cap}} -\r\n\t\t\t\t\t\t\t{{element.indirizzo.comune.denominazione}} {{element.indirizzo.provinciaLabel}}</span>\r\n\t\t\t\t\t\t<span *ngIf=\"element.indirizzo.estero\"> {{element.indirizzo.nazione.denominazione}} -\r\n\t\t\t\t\t\t\t{{element.indirizzo.indirizzo}} </span>\r\n\t\t\t\t\t</mat-cell>\r\n\t\t\t\t\t<!-- <mat-hint *infoTip=\"indirizzoToltip\"></mat-hint> -->\r\n\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t<!-- Preferito Column -->\r\n\t\t\t\t<ng-container matColumnDef=\"preferito\">\r\n\t\t\t\t\t<mat-header-cell *matHeaderCellDef> {{'preferito' | traduzione}} </mat-header-cell>\r\n\t\t\t\t\t<mat-cell *matCellDef=\"let element\">\r\n\t\t\t\t\t\t<!-- <mat-checkbox class=\"example-margin\" [disabled]=\"true\">\r\n\t\t\t\t\t\t</mat-checkbox> -->\r\n\t\t\t\t\t\t<!-- <mat-checkbox *ngIf=\"!element.preferito\" class=\"example-margin\" [disabled]=\"true\">\r\n\t\t\t\t\t\t</mat-checkbox> -->\r\n\t\t\t\t\t\t<mat-checkbox *ngIf=\"element.preferito\" class=\"example-margin\" [checked]=\"true\"\r\n\t\t\t\t\t\t\t[disabled]=\"true\"></mat-checkbox>\r\n\t\t\t\t\t</mat-cell>\r\n\t\t\t\t\t<!-- <mat-hint *infoTip=\"preferitoToltip\"></mat-hint> -->\r\n\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t<!-- Selezione Column -->\r\n\t\t\t\t<ng-container matColumnDef=\"seleziona\">\r\n\t\t\t\t\t<mat-header-cell *matHeaderCellDef> {{'seleziona' | traduzione}}\r\n\t\t\t\t\t \t<!-- <mat-checkbox (change)=\"$event ? masterToggle() : null\"\r\n\t\t\t\t\t\t\t\t\t[checked]=\"selection.hasValue() && isAllSelected()\"\r\n\t\t\t\t\t\t\t\t\t[indeterminate]=\"selection.hasValue() && !isAllSelected()\"\r\n\t\t\t\t\t\t\t\t\tformControlName=\"selected2\">\r\n\t\t\t\t\t\t</mat-checkbox> -->\r\n\t\t\t\t\t\t<!-- <mat-hint *infoTip=\"selezionaToltip\"></mat-hint> -->\r\n\t\t\t\t\t</mat-header-cell>\r\n\r\n\t\t\t\t\t<mat-cell *matCellDef=\"let row\">\r\n\t\t\t\t\t\t<mat-checkbox\r\n\t\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\r\n\t\t\t\t\t\t\t(change)=\"$event ? selection.toggle(row) : null\"\r\n\t\t\t\t\t\t\t[checked]=\"selection.isSelected(row)\"\r\n\t\t\t\t\t\t\tformControlName=\"selected\">\r\n\t\t\t\t\t\t</mat-checkbox>\r\n\t\t\t\t\t</mat-cell>\r\n\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t<mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\r\n\t\t\t\t<mat-row *matRowDef=\"let row; columns: displayedColumns;\"></mat-row>\r\n\r\n\t\t\t</mat-table>\r\n\t\t\t<div class=\"collapse-body mt-2\">\r\n\t\t\t\t<div class=\"col-md-12\">\r\n\t\t\t\t\t<mat-error *ngIf=\"validazioneDomicilio\">\r\n\t\t\t\t\t\t{{'validation-requiredDomicilio' | traduzione }}\r\n\t\t\t\t\t</mat-error>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</ng-container>\r\n\t\t<ng-template #noDomicili>\r\n\t\t\t<div class=\"collapse-body mt-2\">\r\n\t\t\t\t<div class=\"col-md-12\">\r\n\t\t\t\t\t<mat-error >\r\n\t\t\t\t\t\t{{'no-domicili' | traduzione }}\r\n\t\t\t\t\t</mat-error>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\r\n\t\t\t<div class=\"collapse-body mt-2\" *ngIf=\"(recapiti$ | async)\">\r\n\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t<div class=\"col-12\">\r\n\t\t\t\t\t\t<mat-card>\r\n\t\t\t\t\t\t\t<lib-contatti\r\n\t\t\t\t\t\t\t\t[contatti]=\"domicilio.contatto\"\r\n\t\t\t\t\t\t\t\t[recapiti$]=\"recapiti$\"\r\n\t\t\t\t\t\t\t\t(done)=\"recapitiReady($event)\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t</lib-contatti>\r\n\t\t\t\t\t\t</mat-card>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\r\n\t\t</ng-container>\r\n\t</form>\r\n</mat-expansion-panel>\r\n", styles: [""] },] } ]; DatiDomicilioComponent.ctorParameters = () => [ { type: MessageService } ]; DatiDomicilioComponent.propDecorators = { domicili: [{ type: Input }], recapiti$: [{ type: Input }], domicilio: [{ type: Input }], done: [{ type: Output }], formGroupDirective: [{ type: ViewChild, args: [FormGroupDirective,] }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0aS1kb21pY2lsaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2dldHRpL0RBRy9zb3JnZW50aS9naXRsYWItc29mdHdhcmVmYWN0b3J5L2NvbW1vbi1jb21wb25lbnQtbGliL3Byb2plY3RzL3BvcnRhbC1jb21tb24tY29tcG9uZW50LWxpYi9zcmMvIiwic291cmNlcyI6WyJsaWIvZGVwb3NpdGkvY29tbW9uLWNvbXBvbmVudC9kYXRpLWRvbWljaWxpby9kYXRpLWRvbWljaWxpby5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQWMsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBU2hFLE1BQU0sT0FBTyxzQkFBc0I7SUFzQ2xDLFlBQW9CLEdBQW1CO1FBQW5C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SUFFTSxhQUFhLENBQUMsY0FBa0Q7UUFDdEUsa0RBQWtEO1FBQ2xELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQ3pCLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBa0IsRUFBRSxFQUFFLENBQzVELENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FDMUIsQ0FDRCxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVixJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxFQUFFO1lBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUE7U0FDL0I7SUFDRixDQUFDOzs7WUExS0QsU0FBUyxTQUFDO2dCQUNWLFFBQVEsRUFBRSxvQkFBb0I7Z0JBQzlCLCt3TEFBOEM7O2FBRTlDOzs7WUFSUSxjQUFjOzs7dUJBYXJCLEtBQUs7d0JBRUwsS0FBSzt3QkFFTCxLQUFLO21CQUdMLE1BQU07aUNBV04sU0FBUyxTQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cERpcmVjdGl2ZSwgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50T3V0cHV0U3RhdHVzIH0gZnJvbSAnLi4vLi4vbm9ybWFsaXp6YXppb25lL2NvbXBvbmVudC1vdXRwdXQtc3RhdHVzJztcclxuaW1wb3J0IHsgRG9taWNpbGlvRFRPIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2RvbWljaWxpby1kdG8nO1xyXG5pbXBvcnQgeyBDb250YXR0b0RUTyB9IGZyb20gJy4uLy4uL21vZGVscy9jb250YXR0by1kdG8nO1xyXG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IENvbXBvbmVudFJlZHVjZXIgfSBmcm9tICcuLi8uLi91dGlscy9jb21wb25lbnQtcmVkdWNlcic7XHJcbmltcG9ydCB7IG1hcCwgc2hhcmVSZXBsYXksIHN0YXJ0V2l0aCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IERvbWljaWxpbyB9IGZyb20gJy4uLy4uL21vZGVscy9wb3J0YWxlL2RvbWljaWxpbyc7XHJcbmltcG9ydCB7IFJlY2FwaXRvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3BvcnRhbGUvcmVjYXBpdG8nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdsaWItZGF0aS1kb21pY2lsaW8nLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9kYXRpLWRvbWljaWxpby5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmxzOiBbJy4vZGF0aS1kb21pY2lsaW8uY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRpRG9taWNpbGlvQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuXHRmb3JtOiBGb3JtR3JvdXA7XHJcblxyXG5cdEBJbnB1dCgpIGRvbWljaWxpOiBBcnJheTxEb21pY2lsaW8+O1xyXG5cclxuXHRASW5wdXQoKSByZWNhcGl0aSQ6IE9ic2VydmFibGU8QXJyYXk8UmVjYXBpdG8+PjtcclxuXHJcblx0QElucHV0KClcclxuXHRkb21pY2lsaW86IERvbWljaWxpb0RUTztcclxuXHJcblx0QE91dHB1dCgpXHJcblx0ZG9uZTogRXZlbnRFbWl0dGVyPENvbXBvbmVudE91dHB1dFN0YXR1czxEb21pY2lsaW9EVE8+PiA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tcG9uZW50T3V0cHV0U3RhdHVzPERvbWljaWxpb0RUTz4+KCk7XHJcblxyXG5cdHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuXHRkaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXSA9IFsndGlwbycsICdwcmVzc28nLCAnaW5kaXJpenpvJywgJ3ByZWZlcml0bycsICdzZWxlemlvbmEnXTtcclxuXHJcblx0ZGF0YVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPGFueT47XHJcblxyXG5cdHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8RG9taWNpbGlvPjtcclxuXHJcblx0QFZpZXdDaGlsZChGb3JtR3JvdXBEaXJlY3RpdmUpIGZvcm1Hcm91cERpcmVjdGl2ZTogRm9ybUdyb3VwRGlyZWN0aXZlO1xyXG5cclxuXHRjaGVja0RvbWljaWxpbyQ6IE9ic2VydmFibGU8Qm9vbGVhbj47XHJcblxyXG5cdGNoYW5nZXNSZWNhcGl0byQgPSBuZXcgU3ViamVjdDxcclxuXHRcdENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IERvbWljaWxpb0RUTykgPT4gdm9pZD5cclxuXHQ+KCk7XHJcblxyXG5cdHZhbGlkYXppb25lRG9taWNpbGlvOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdHRpcG9Ub2x0aXAgPSBcInRpcG9cIjtcclxuXHRwcmVzc29Ub2x0aXAgPSBcInByZXNzb1wiO1xyXG5cdGluZGlyaXp6b1RvbHRpcCA9IFwiaW5kaXJpenpvXCI7XHJcblx0c2VsZXppb25hVG9sdGlwID0gXCJzZWxlemlvbmFcIjtcclxuXHRwcmVmZXJpdG9Ub2x0aXAgPSBcInByZWZlcml0b1wiO1xyXG5cclxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIG1zZzogTWVzc2FnZVNlcnZpY2UpIHsgfVxyXG5cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcblx0XHQvLyBjb25zb2xlLmxvZygnW2RvbWljaWxpb10nLCB0aGlzLmRvbWljaWxpbyk7XHJcblx0XHRjb25zb2xlLmxvZygnW2RvbWljaWxpXScsIHRoaXMuZG9taWNpbGkpO1xyXG5cclxuXHRcdHRoaXMuZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cdFx0bGV0IHZhbGlkID0gdHJ1ZTtcclxuXHJcblx0XHRpZiAoIXRoaXMuZG9taWNpbGlvKSB7XHJcblx0XHRcdHRoaXMuaW5pdERvbWljaWxpbygpO1xyXG5cdFx0XHR2YWxpZCA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UodGhpcy5kb21pY2lsaSk7XHJcblx0XHR0aGlzLnNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxEb21pY2lsaW8+KGZhbHNlLCBbXSk7XHJcblxyXG5cdFx0dGhpcy5pbml0aWFsU2VsZWN0aW9uKCk7XHJcblxyXG5cdFx0Y29uc3QgZG9taWNpbGlvID0gbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IHRoaXMuZG9taWNpbGlvLmhhc1NlbGV6aW9uYXRvRG9taWNpbGlvLCBkaXNhYmxlZDogZmFsc2UgfSk7XHJcblx0XHR0aGlzLmZvcm0uYWRkQ29udHJvbCgnZG9taWNpbGlvJywgZG9taWNpbGlvKTtcclxuXHJcblx0XHRjb25zdCBzZWxlY3RlZCA9IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IGZhbHNlIH0pO1xyXG5cdFx0dGhpcy5mb3JtLmFkZENvbnRyb2woJ3NlbGVjdGVkJywgc2VsZWN0ZWQpO1xyXG5cclxuXHRcdHRoaXMuY2hlY2tEb21pY2lsaW8kID0gZG9taWNpbGlvLnZhbHVlQ2hhbmdlcy5waXBlKHNoYXJlUmVwbGF5KCkpXHJcblx0XHRcdC5waXBlKFxyXG5cdFx0XHRcdHRhcChjaGVja0RvbWljaWxpbyA9PiB7XHJcblx0XHRcdFx0XHRpZiAoY2hlY2tEb21pY2lsaW8gPT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KSxcclxuXHRcdFx0XHRzdGFydFdpdGgodGhpcy5kb21pY2lsaW8uaWREb21pY2lsaW9TZWxlemlvbmF0byAhPSBudWxsKVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGNvbnN0IGNoYW5nZXNDaGVja0RvbWljaWxpbyQgPSB0aGlzLmNoZWNrRG9taWNpbGlvJC5waXBlKFxyXG5cdFx0XHRtYXAoY2hlY2tEb21pY2lsaW8gPT5cclxuXHRcdFx0XHRDb21wb25lbnRPdXRwdXRTdGF0dXMub2YodHJ1ZSwgKGRvbWljaWxpbzogRG9taWNpbGlvRFRPKSA9PiB7XHJcblx0XHRcdFx0XHRkb21pY2lsaW8uaGFzU2VsZXppb25hdG9Eb21pY2lsaW8gPSBjaGVja0RvbWljaWxpbztcclxuXHRcdFx0XHRcdGlmIChjaGVja0RvbWljaWxpbyA9PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0XHRkb21pY2lsaW8uY29udGF0dG8uZW1haWwgPSBudWxsO1xyXG5cdFx0XHRcdFx0XHRkb21pY2lsaW8uY29udGF0dG8ucGVjID0gbnVsbDtcclxuXHRcdFx0XHRcdFx0ZG9taWNpbGlvLmNvbnRhdHRvLnRlbGVmb25vID0gbnVsbDtcclxuXHRcdFx0XHRcdFx0dGhpcy5mb3JtLmdldCgnc2VsZWN0ZWQnKS5zZXRWYWx1ZSgnJyk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdCkpXHJcblx0XHQpO1xyXG5cclxuXHRcdGNvbnN0IGNoYW5nZXNEb21pY2lsaW8kID0gdGhpcy5zZWxlY3Rpb24uY2hhbmdlZC5waXBlKFxyXG5cdFx0XHR0YXAoKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJjaGFuZ2VzRG9taWNpbGlvJFwiLCB2YWx1ZSk7XHJcblx0XHRcdFx0dGhpcy52YWxpZGF6aW9uZURvbWljaWxpbyA9IHZhbHVlLmFkZGVkLmxlbmd0aCA+IDAgPyBmYWxzZSA6IHRydWU7XHJcblx0XHRcdH0pLFxyXG5cdFx0XHRtYXAoY2hhbmdlID0+XHJcblx0XHRcdFx0Q29tcG9uZW50T3V0cHV0U3RhdHVzLm9mKHRydWUsIGRvbWljaWxpbyA9PiB7XHJcblx0XHRcdFx0XHRkb21pY2lsaW8uaWREb21pY2lsaW9TZWxlemlvbmF0byA9IGNoYW5nZS5hZGRlZC5sZW5ndGggPiAwID8gY2hhbmdlLmFkZGVkWzBdLmlkIDogbnVsbDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0KSlcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb24gPSBDb21wb25lbnRSZWR1Y2VyLnJlZHVjZXIzKFxyXG5cdFx0XHRjaGFuZ2VzQ2hlY2tEb21pY2lsaW8kLFxyXG5cdFx0XHRjaGFuZ2VzRG9taWNpbGlvJCxcclxuXHRcdFx0dGhpcy5jaGFuZ2VzUmVjYXBpdG8kLFxyXG5cdFx0XHRkb21pY2lsaW8gPT4ge1xyXG5cdFx0XHRcdHJldHVybiBkb21pY2lsaW8uaGFzU2VsZXppb25hdG9Eb21pY2lsaW8gP1xyXG5cdFx0XHRcdFx0ZG9taWNpbGlvLmlkRG9taWNpbGlvU2VsZXppb25hdG8gIT0gbnVsbCA6IHRydWVcclxuXHRcdFx0fSxcclxuXHRcdFx0Q29tcG9uZW50T3V0cHV0U3RhdHVzLm9mKHRydWUsIHRoaXMuZG9taWNpbGlvKVxyXG5cdFx0KVxyXG5cdFx0XHQuc3Vic2NyaWJlKGRvbWljaWxpbyA9PiB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ1tEYXRpRG9taWNpbGlvQ29tcG9uZW50XSBzdGF0dXMnLCBzdGF0dXMpO1xyXG5cdFx0XHRcdHRoaXMuZG9uZS5lbWl0KGRvbWljaWxpbylcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5mb3JtLnNldFZhbGlkYXRvcnMoZm9ybSA9PiB7XHJcblxyXG5cdFx0XHRpZiAoZm9ybS5nZXQoJ2RvbWljaWxpbycpLnZhbHVlICYmICFmb3JtLmdldCgnc2VsZWN0ZWQnKS52YWx1ZSkge1xyXG5cdFx0XHRcdHRoaXMudmFsaWRhemlvbmVEb21pY2lsaW8gPSB0cnVlO1xyXG5cdFx0XHRcdHJldHVybiB7IHJlcXVpcmVkRG9taWNpbGlvOiB0cnVlIH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXR1cm4gbnVsbFxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvL1RPRE9cclxuXHRcdFx0Ly8gcmV0dXJuIGZvcm0uZ2V0KCdkb21pY2lsaW8nKS52YWx1ZSAmJlxyXG5cdFx0XHQvLyBcdCFmb3JtLmdldCgnc2VsZWN0ZWQnKS52YWx1ZSA/XHJcblx0XHRcdC8vIFx0Ly8gdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpID9cclxuXHRcdFx0Ly8gXHQvLyB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggPT09IDEgP1xyXG5cdFx0XHQvLyBcdHsgcmVxdWlyZWREb21pY2lsaW86IHRydWUgfSA6IG51bGw7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGluaXRpYWxTZWxlY3Rpb24oKSB7XHJcblx0XHRpZiAodGhpcy5kb21pY2lsaW8uaWREb21pY2lsaW9TZWxlemlvbmF0bykge1xyXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHR0aGlzLmRhdGFTb3VyY2UuZGF0YVxyXG5cdFx0XHRcdFx0LmZvckVhY2gocm93ID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKHJvdy5pZCA9PSB0aGlzLmRvbWljaWxpby5pZERvbWljaWxpb1NlbGV6aW9uYXRvKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5zZWxlY3Rpb24uc2VsZWN0KHJvdyk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy52YWxpZGF6aW9uZURvbWljaWxpbyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0fSwgMCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpbml0RG9taWNpbGlvKCkge1xyXG5cdFx0dGhpcy5kb21pY2lsaW8gPSBuZXcgRG9taWNpbGlvRFRPKCk7XHJcblx0XHR0aGlzLmRvbWljaWxpby5jb250YXR0byA9IG5ldyBDb250YXR0b0RUTygpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHJlY2FwaXRpUmVhZHkocmVjYXBpdGlTdGF0dXM6IENvbXBvbmVudE91dHB1dFN0YXR1czxDb250YXR0b0RUTz4pIHtcclxuXHRcdC8vIGNvbnNvbGUubG9nKCdbcmVjYXBpdGlSZWFkeV0nLCByZWNhcGl0aVN0YXR1cyk7XHJcblx0XHR0aGlzLmNoYW5nZXNSZWNhcGl0byQubmV4dChcclxuXHRcdFx0cmVjYXBpdGlTdGF0dXMubWFwVmFsdWUoKGNvbnRhdHRvKSA9PiAoZGljaDogRG9taWNpbGlvRFRPKSA9PlxyXG5cdFx0XHRcdChkaWNoLmNvbnRhdHRvID0gY29udGF0dG8pXHJcblx0XHRcdClcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLnN1YnNjcmlwdGlvbiAhPSBudWxsKSB7XHJcblx0XHRcdHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIl19