UNPKG

ng-ptplibraries

Version:

192 lines (188 loc) 14.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Component, Input, forwardRef } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { CountriesService } from '../../services/countries.service'; import { find } from 'lodash'; export class PTPPhoneNumberComponent { /** * @param {?} countriesService */ constructor(countriesService) { this.countriesService = countriesService; this.countryCode = null; this.countries = null; this.selectedCountry = null; this.propagateChange = (_) => { }; this.onTouched = () => { }; } /** * @return {?} */ ngOnInit() { this.initializeCountries(); } /** * @return {?} */ get phoneNumber() { return this._phoneNumber; } /** * @param {?} val * @return {?} */ set phoneNumber(val) { this._phoneNumber = val; this.propagateChange(this._phoneNumber); } /** * Resets Phone number component * @return {?} */ reset() { this.initializeCountries(); this._phoneNumber = null; this.propagateChange(this._phoneNumber); } /** * @param {?} value * @return {?} */ writeValue(value) { if (value !== undefined) { this.phoneNumber = value; } } /** * @param {?} fn * @return {?} */ registerOnChange(fn) { this.propagateChange = fn; } /** * @param {?} fn * @return {?} */ registerOnTouched(fn) { this.onTouched = fn; } /** * @param {?} country * @return {?} */ getCountry(country) { this.selectedCountry = country; this.countryCode = this.selectedCountry.callingCodes[0]; this.propagateChange(this._phoneNumber); } /** * @return {?} */ getPhoneNumber() { return '+(' + this.countryCode + ')' + this._phoneNumber; } /** * @return {?} */ initializeCountries() { this.countriesService.GetCountries() .subscribe(res => { this.countries = res; this.selectedCountry = find(res, { alpha2Code: 'US' }); this.countryCode = this.selectedCountry.callingCodes[0]; }, err => { console.log(err); }); } } PTPPhoneNumberComponent.decorators = [ { type: Component, args: [{ selector: 'ptp-phonenumber-field', template: `<label>{{ label }}</label> <div class="input-group"> <div class="input-group-prepend"> <button class="btn btn-light btn-sm dropdown-toggle border" type="button" data-toggle="dropdown"> <img src="{{ selectedCountry?.flag }}" style="width: 2em">&nbsp;+{{ selectedCountry?.callingCodes }} </button> <div class="dropdown-menu pb-0" style="width: 115%;"> <li class="p-2 border-right-1"> <input type="text" class="form-control form-control-sm" placeholder="Search" [(ngModel)]="searchCountry"> </li> <div style="height: 200px; overflow-y: scroll;"> <div *ngFor="let country of countries | searchfilter: searchCountry as result"> <li style="cursor: pointer;" class="dropdown-item p-2" (click)="getCountry(country)"> <img src="{{ country.flag }}" style="width: 2em">&nbsp; {{ country.name }}&nbsp;&nbsp; <span class="text-dark">(+{{ country.callingCodes }})</span> </li> </div> </div> </div> </div> <input type="text" class="form-control form-control-sm" maxlength="15" [numberOnly]="true" [(ngModel)]="phoneNumber" [ngClass]="{'is-invalid': validators?.required && isTouched }" (blur)="onTouched($event)" data-toggle="popover" data-trigger="focus" [attr.data-content]="helpMessage" placeholder="{{placeholder}}" > <div *ngIf="validators?.required && isTouched" class="invalid-feedback"> {{ validators?.required }} </div> </div> `, // tslint:disable-next-line:use-host-property-decorator host: { '(blur)': 'onTouched($event)' }, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => PTPPhoneNumberComponent), multi: true } ] },] }, ]; /** @nocollapse */ PTPPhoneNumberComponent.ctorParameters = () => [ { type: CountriesService } ]; PTPPhoneNumberComponent.propDecorators = { _phoneNumber: [{ type: Input, args: ['phoneNumber',] }], searchCountry: [{ type: Input, args: ['searchCountry',] }], validators: [{ type: Input }], isTouched: [{ type: Input }], helpMessage: [{ type: Input, args: ['helpMessage',] }], placeholder: [{ type: Input, args: ['placeholder',] }], label: [{ type: Input, args: ['label',] }] }; if (false) { /** @type {?} */ PTPPhoneNumberComponent.prototype.countryCode; /** @type {?} */ PTPPhoneNumberComponent.prototype.countries; /** @type {?} */ PTPPhoneNumberComponent.prototype.selectedCountry; /** @type {?} */ PTPPhoneNumberComponent.prototype._phoneNumber; /** @type {?} */ PTPPhoneNumberComponent.prototype.searchCountry; /** @type {?} */ PTPPhoneNumberComponent.prototype.validators; /** @type {?} */ PTPPhoneNumberComponent.prototype.isTouched; /** @type {?} */ PTPPhoneNumberComponent.prototype.helpMessage; /** @type {?} */ PTPPhoneNumberComponent.prototype.placeholder; /** @type {?} */ PTPPhoneNumberComponent.prototype.label; /** @type {?} */ PTPPhoneNumberComponent.prototype.propagateChange; /** @type {?} */ PTPPhoneNumberComponent.prototype.onTouched; /** @type {?} */ PTPPhoneNumberComponent.prototype.countriesService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtbnVtYmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXB0cGxpYnJhcmllcy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3Bob25lbnVtYmVyLWZpZWxkL3Bob25lLW51bWJlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQWtEOUIsTUFBTSxPQUFPLHVCQUF1Qjs7OztJQW1CaEMsWUFDWTtRQUFBLHFCQUFnQixHQUFoQixnQkFBZ0I7UUFsQjVCLG1CQUFjLElBQUksQ0FBQztRQUNuQixpQkFBWSxJQUFJLENBQUM7UUFDakIsdUJBQWtCLElBQUksQ0FBQztRQVl2Qix1QkFBa0IsQ0FBQyxDQUFNLEVBQUUsRUFBRSxJQUFJLENBQUM7UUFDbEMsaUJBQWlCLEdBQUcsRUFBRSxJQUFJLENBQUM7S0FJdkI7Ozs7SUFFSixRQUFRO1FBQ0osSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7S0FDOUI7Ozs7SUFFRCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7S0FDNUI7Ozs7O0lBRUQsSUFBSSxXQUFXLENBQUMsR0FBRztRQUNmLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0tBQzNDOzs7OztJQUdELEtBQUs7UUFDRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUMzQzs7Ozs7SUFFRCxVQUFVLENBQUMsS0FBVTtRQUNqQixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDNUI7S0FDSjs7Ozs7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7S0FDN0I7Ozs7O0lBRUQsaUJBQWlCLENBQUMsRUFBRTtRQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztLQUN2Qjs7Ozs7SUFFRCxVQUFVLENBQUMsT0FBZTtRQUN0QixJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0tBQzNDOzs7O0lBRUQsY0FBYztRQUNWLE9BQU8sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7S0FDNUQ7Ozs7SUFFRCxtQkFBbUI7UUFDZixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFO2FBQy9CLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNiLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0QsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDcEIsQ0FBQyxDQUFDO0tBQ1Y7OztZQTNISixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLHVCQUF1QjtnQkFDakMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBcUNiOztnQkFFRyxJQUFJLEVBQUUsRUFBQyxRQUFRLEVBQUUsbUJBQW1CLEVBQUM7Z0JBQ3JDLFNBQVMsRUFBRTtvQkFDUCxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtpQkFDdEc7YUFDSjs7OztZQWpEUSxnQkFBZ0I7OzsyQkEwRHBCLEtBQUssU0FBQyxhQUFhOzRCQUNuQixLQUFLLFNBQUMsZUFBZTt5QkFFckIsS0FBSzt3QkFDTCxLQUFLOzBCQUNMLEtBQUssU0FBQyxhQUFhOzBCQUNuQixLQUFLLFNBQUMsYUFBYTtvQkFDbkIsS0FBSyxTQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvdW50cmllc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb3VudHJpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBmaW5kIH0gZnJvbSAnbG9kYXNoJztcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B0cC1waG9uZW51bWJlci1maWVsZCcsXG4gICAgdGVtcGxhdGU6IGA8bGFiZWw+e3sgbGFiZWwgfX08L2xhYmVsPlxuPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLXByZXBlbmRcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIGRyb3Bkb3duLXRvZ2dsZSBib3JkZXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiPlxuICAgICAgICAgICAgPGltZyBzcmM9XCJ7eyBzZWxlY3RlZENvdW50cnk/LmZsYWcgfX1cIiBzdHlsZT1cIndpZHRoOiAyZW1cIj4mbmJzcDsre3sgc2VsZWN0ZWRDb3VudHJ5Py5jYWxsaW5nQ29kZXMgfX0gPC9idXR0b24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IHBiLTBcIiBzdHlsZT1cIndpZHRoOiAxMTUlO1wiPlxuICAgICAgICAgICAgPGxpIGNsYXNzPVwicC0yIGJvcmRlci1yaWdodC0xXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIiBbKG5nTW9kZWwpXT1cInNlYXJjaENvdW50cnlcIj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAyMDBweDsgb3ZlcmZsb3cteTogc2Nyb2xsO1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvdW50cnkgb2YgY291bnRyaWVzIHwgc2VhcmNoZmlsdGVyOiBzZWFyY2hDb3VudHJ5IGFzIHJlc3VsdFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGkgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7XCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtIHAtMlwiIChjbGljayk9XCJnZXRDb3VudHJ5KGNvdW50cnkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cInt7IGNvdW50cnkuZmxhZyB9fVwiIHN0eWxlPVwid2lkdGg6IDJlbVwiPiZuYnNwOyB7eyBjb3VudHJ5Lm5hbWUgfX0mbmJzcDsmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYXJrXCI+KCt7eyBjb3VudHJ5LmNhbGxpbmdDb2RlcyB9fSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj4gIFxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiBcbiAgICBtYXhsZW5ndGg9XCIxNVwiXG4gICAgW251bWJlck9ubHldPVwidHJ1ZVwiXG4gICAgWyhuZ01vZGVsKV09XCJwaG9uZU51bWJlclwiIFxuICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCc6IHZhbGlkYXRvcnM/LnJlcXVpcmVkICYmIGlzVG91Y2hlZCB9XCIgXG4gICAgKGJsdXIpPVwib25Ub3VjaGVkKCRldmVudClcIlxuICAgIGRhdGEtdG9nZ2xlPVwicG9wb3ZlclwiIFxuICAgIGRhdGEtdHJpZ2dlcj1cImZvY3VzXCIgXG4gICAgW2F0dHIuZGF0YS1jb250ZW50XT1cImhlbHBNZXNzYWdlXCIgXG4gICAgcGxhY2Vob2xkZXI9XCJ7e3BsYWNlaG9sZGVyfX1cIlxuICAgID5cbiAgICA8ZGl2ICpuZ0lmPVwidmFsaWRhdG9ycz8ucmVxdWlyZWQgJiYgaXNUb3VjaGVkXCIgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+XG4gICAgICAgIHt7IHZhbGlkYXRvcnM/LnJlcXVpcmVkIH19XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG5cblxuYCxcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dXNlLWhvc3QtcHJvcGVydHktZGVjb3JhdG9yXG4gICAgaG9zdDogeycoYmx1ciknOiAnb25Ub3VjaGVkKCRldmVudCknfSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUFRQUGhvbmVOdW1iZXJDb21wb25lbnQpLCBtdWx0aTogdHJ1ZSB9XG4gICAgXVxufSlcblxuZXhwb3J0IGNsYXNzIFBUUFBob25lTnVtYmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciAge1xuXG4gICAgY291bnRyeUNvZGUgPSBudWxsO1xuICAgIGNvdW50cmllcyA9IG51bGw7XG4gICAgc2VsZWN0ZWRDb3VudHJ5ID0gbnVsbDtcblxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcbiAgICBASW5wdXQoJ3Bob25lTnVtYmVyJykgX3Bob25lTnVtYmVyO1xuICAgIEBJbnB1dCgnc2VhcmNoQ291bnRyeScpIHNlYXJjaENvdW50cnk7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgdmFsaWRhdG9yczogYW55O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpc1RvdWNoZWQ6IGJvb2xlYW47XG4gICAgQElucHV0KCdoZWxwTWVzc2FnZScpIHB1YmxpYyBoZWxwTWVzc2FnZTogc3RyaW5nO1xuICAgIEBJbnB1dCgncGxhY2Vob2xkZXInKSBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgICBASW5wdXQoJ2xhYmVsJykgcHVibGljIGxhYmVsOiBzdHJpbmc7XG5cbiAgICBwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XG4gICAgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7IH07XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjb3VudHJpZXNTZXJ2aWNlOiBDb3VudHJpZXNTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUNvdW50cmllcygpO1xuICAgIH1cblxuICAgIGdldCBwaG9uZU51bWJlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bob25lTnVtYmVyO1xuICAgIH1cblxuICAgIHNldCBwaG9uZU51bWJlcih2YWwpIHtcbiAgICAgICAgdGhpcy5fcGhvbmVOdW1iZXIgPSB2YWw7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMuX3Bob25lTnVtYmVyKTtcbiAgICB9XG5cbiAgICAvKiogUmVzZXRzIFBob25lIG51bWJlciBjb21wb25lbnQgKi9cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplQ291bnRyaWVzKCk7XG4gICAgICAgIHRoaXMuX3Bob25lTnVtYmVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5fcGhvbmVOdW1iZXIpO1xuICAgIH1cblxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5waG9uZU51bWJlciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbikge1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuKSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgZ2V0Q291bnRyeShjb3VudHJ5OiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSBjb3VudHJ5O1xuICAgICAgICB0aGlzLmNvdW50cnlDb2RlID0gdGhpcy5zZWxlY3RlZENvdW50cnkuY2FsbGluZ0NvZGVzWzBdO1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLl9waG9uZU51bWJlcik7XG4gICAgfVxuXG4gICAgZ2V0UGhvbmVOdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiAnKygnICsgdGhpcy5jb3VudHJ5Q29kZSArICcpJyArIHRoaXMuX3Bob25lTnVtYmVyO1xuICAgIH1cblxuICAgIGluaXRpYWxpemVDb3VudHJpZXMoKSB7XG4gICAgICAgIHRoaXMuY291bnRyaWVzU2VydmljZS5HZXRDb3VudHJpZXMoKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY291bnRyaWVzID0gcmVzO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gZmluZChyZXMsIHsgYWxwaGEyQ29kZTogJ1VTJyB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50cnlDb2RlID0gdGhpcy5zZWxlY3RlZENvdW50cnkuY2FsbGluZ0NvZGVzWzBdO1xuICAgICAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG59XG4iXX0=