@asi-ngtools/lib
Version:
This project is a little components library, simple to use, which will help you to simplify your project.
235 lines (234 loc) • 18.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, Input, forwardRef, ContentChild, Renderer2, ElementRef, ViewChild } from '@angular/core';
import { DefaultControlValueAccessor } from './../../common/default-control-value-accessor';
import { NG_VALUE_ACCESSOR, FormControl } from '@angular/forms';
import { AsiComponentTemplateOptionDef, AsiComponentTemplateSelectedDef } from './../../common/asi-component-template';
import { debounceTime, switchMap, tap } from 'rxjs/operators';
import * as nh from '../../../native-helper';
import { AsiDropDown } from '../../asi-dropdown/asi-dropdown.component';
/**
* asi-autocomplete component
*/
var AsiAutoCompleteComponent = /** @class */ (function (_super) {
tslib_1.__extends(AsiAutoCompleteComponent, _super);
function AsiAutoCompleteComponent(renderer, elementRef) {
var _this = _super.call(this) || this;
_this.renderer = renderer;
_this.elementRef = elementRef;
/**
* Label position
*/
_this.labelPosition = 'top';
/**
* Delay between the moment you stop typing and onRequestData is called
*/
_this.delay = 500;
/**
* A placeholder if needed
*/
_this.placeholder = '';
_this.autoCompleteControl = new FormControl();
_this.open = false;
// Var used to manage component initialization
_this.firstRequestDone = null;
_this.init = false;
_this.currentValue = null;
return _this;
}
/**
* @return {?}
*/
AsiAutoCompleteComponent.prototype.checkInput = /**
* @return {?}
*/
function () {
if (null == this.onRequestData) {
throw new Error('AsiAutoCompleteComponent : \'onRequestData\' is required');
}
};
/**
* @return {?}
*/
AsiAutoCompleteComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
this.checkInput();
this.renderer.addClass(this.elementRef.nativeElement, 'label-' + this.labelPosition);
this.autoCompleteControl.valueChanges.pipe(debounceTime(this.delay), tap(function (value) { return _this.currentValue = value; }), switchMap(function (value) { return nh.observe(_this.onRequestData(value, !_this.firstRequestDone)); }))
.subscribe(function (data) {
_this.data = data;
if (_this.firstRequestDone && data && data.length > 0) {
_this.open = true;
}
_this.firstRequestDone = true;
});
};
/**
* @return {?}
*/
AsiAutoCompleteComponent.prototype.onDropdownClose = /**
* @return {?}
*/
function () {
this.open = false;
};
/**
* @return {?}
*/
AsiAutoCompleteComponent.prototype.ngOnChanges = /**
* @return {?}
*/
function () {
if (this.init) {
this.open = true;
}
else {
if (this.firstRequestDone) {
this.init = true;
}
}
};
/**
* @param {?} data
* @return {?}
*/
AsiAutoCompleteComponent.prototype.selectValue = /**
* @param {?} data
* @return {?}
*/
function (data) {
this.value = data;
this.open = false;
};
/**
* @return {?}
*/
AsiAutoCompleteComponent.prototype.clearValue = /**
* @return {?}
*/
function () {
var _this = this;
this.value = null;
this.autoCompleteControl.setValue(this.currentValue, { emitEvent: false });
setTimeout(function () { _this.open = true; });
};
/**
* @param {?} value
* @return {?}
*/
AsiAutoCompleteComponent.prototype.writeValue = /**
* @param {?} value
* @return {?}
*/
function (value) {
this._value = value;
if (this.init === false) {
this.autoCompleteControl.setValue(this.currentValue);
}
else {
this.currentValue = value;
if (this.value == null) {
this.autoCompleteControl.setValue(this.currentValue, { emitEvent: false });
}
}
};
AsiAutoCompleteComponent.decorators = [
{ type: Component, args: [{
selector: 'asi-autocomplete',
template: "<label class=\"input-label\" *ngIf=\"label != null\">{{label | translate}}</label>\n\n<div class=\"autocomplete\">\n\n <!-- typehead input -->\n <input [attr.id]=\"id\" [attr.name]=\"name\" [attr.disabled]=\"disabled ? '' : null\" class=\"asi-focus-error\"\n [placeholder]=\"placeholder\" *ngIf=\"value == null\" [formControl]=\"autoCompleteControl\" />\n\n <!-- data to display -->\n <div class=\" autocomplete-header\" *ngIf=\"value != null\">\n <button [disabled]=\"disabled\" type=\"button\" class=\"clean-a\">\n <div class=\"select-value\">\n <ng-template [ngTemplateOutlet]=\"selectedDef.template\" [ngTemplateOutletContext]=\"{$implicit : value}\">\n </ng-template>\n </div>\n </button>\n <button [disabled]=\"disabled\" class=\"remove-icon-container\" (click)=\"clearValue()\">\n <span class=\"remove-icon\" [innerHTML]=\"'✕'\"></span>\n </button>\n </div>\n\n <asi-dropdown [open]=\"open\" (onClose)=\"onDropdownClose()\" dropDownClass=\"asi-autocomplete-dropdown\" #dropDown>\n <div class=\"drop-down-autocomplete\">\n <div class=\"drop-down-panel\">\n <button [id]=\"'asi-acddi-'+ id\" type=\"button\" class=\"drop-down-item\" (click)=\"selectValue(aData)\"\n *ngFor=\"let aData of data, let id = index\">\n <div class=\"option\">\n <span class=\"item\">\n <ng-template *ngIf=\"aData != null\" [ngTemplateOutlet]=\"optionDef.template\"\n [ngTemplateOutletContext]=\"{$implicit : aData}\"></ng-template>\n </span>\n </div>\n </button>\n </div>\n </div>\n </asi-dropdown>\n</div>\n",
host: { 'class': 'asi-component asi-autocomplete' },
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(function () { return AsiAutoCompleteComponent; }),
multi: true
}
]
}] }
];
/** @nocollapse */
AsiAutoCompleteComponent.ctorParameters = function () { return [
{ type: Renderer2 },
{ type: ElementRef }
]; };
AsiAutoCompleteComponent.propDecorators = {
id: [{ type: Input }],
name: [{ type: Input }],
label: [{ type: Input }],
labelPosition: [{ type: Input }],
delay: [{ type: Input }],
placeholder: [{ type: Input }],
onRequestData: [{ type: Input }],
optionDef: [{ type: ContentChild, args: [AsiComponentTemplateOptionDef,] }],
selectedDef: [{ type: ContentChild, args: [AsiComponentTemplateSelectedDef,] }],
asiDropDown: [{ type: ViewChild, args: ['dropDown',] }]
};
return AsiAutoCompleteComponent;
}(DefaultControlValueAccessor));
export { AsiAutoCompleteComponent };
if (false) {
/**
* html id
* @type {?}
*/
AsiAutoCompleteComponent.prototype.id;
/**
* html name
* @type {?}
*/
AsiAutoCompleteComponent.prototype.name;
/**
* Label to display (is translated)
* @type {?}
*/
AsiAutoCompleteComponent.prototype.label;
/**
* Label position
* @type {?}
*/
AsiAutoCompleteComponent.prototype.labelPosition;
/**
* Delay between the moment you stop typing and onRequestData is called
* @type {?}
*/
AsiAutoCompleteComponent.prototype.delay;
/**
* A placeholder if needed
* @type {?}
*/
AsiAutoCompleteComponent.prototype.placeholder;
/**
* Function called to request new data (can return Observable/Promise/Object): Throw error if null
* @type {?}
*/
AsiAutoCompleteComponent.prototype.onRequestData;
/** @type {?} */
AsiAutoCompleteComponent.prototype.optionDef;
/** @type {?} */
AsiAutoCompleteComponent.prototype.selectedDef;
/** @type {?} */
AsiAutoCompleteComponent.prototype.asiDropDown;
/** @type {?} */
AsiAutoCompleteComponent.prototype.autoCompleteControl;
/** @type {?} */
AsiAutoCompleteComponent.prototype.open;
/** @type {?} */
AsiAutoCompleteComponent.prototype.data;
/** @type {?} */
AsiAutoCompleteComponent.prototype.firstRequestDone;
/** @type {?} */
AsiAutoCompleteComponent.prototype.init;
/** @type {?} */
AsiAutoCompleteComponent.prototype.currentValue;
/** @type {?} */
AsiAutoCompleteComponent.prototype.renderer;
/** @type {?} */
AsiAutoCompleteComponent.prototype.elementRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYXNpLW5ndG9vbHMvbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvYXNpLWF1dG9jb21wbGV0ZS9zaW1wbGUvYXNpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFxQixTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFDaEcsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDNUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDNUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJDQUEyQyxDQUFDOzs7OztJQWlCMUIsb0RBQTJCO0lBdUN2RSxrQ0FBb0IsUUFBbUIsRUFBVSxVQUFzQjtRQUF2RSxZQUNFLGlCQUFPLFNBQ1I7UUFGbUIsY0FBUSxHQUFSLFFBQVEsQ0FBVztRQUFVLGdCQUFVLEdBQVYsVUFBVSxDQUFZOzs7OzhCQTVCd0IsS0FBSzs7OztzQkFHbkYsR0FBRzs7Ozs0QkFHRyxFQUFFO29DQVVILElBQUksV0FBVyxFQUFFO3FCQUVoQyxLQUFLOztpQ0FLZ0IsSUFBSTtxQkFDekIsS0FBSzs2QkFFZ0IsSUFBSTs7S0FJL0I7Ozs7SUFFTyw2Q0FBVTs7OztRQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksSUFB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QVksRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQzVFO1NBQ0Y7S0FDRjs7Z0JBaEhGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1Qixtb0RBQThDO29CQUM5QyxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUU7b0JBQ25ELFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLGNBQU0sT0FBQSx3QkFBd0IsRUFBeEIsQ0FBd0IsQ0FBQzs0QkFDdkQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0Y7Ozs7Z0JBekJnRSxTQUFTO2dCQUFFLFVBQVU7OztxQkE2Qm5GLEtBQUs7dUJBRUwsS0FBSzt3QkFHTCxLQUFLO2dDQUdMLEtBQUs7d0JBR0wsS0FBSzs4QkFHTCxLQUFLO2dDQUdMLEtBQUs7NEJBRUwsWUFBWSxTQUFDLDZCQUE2Qjs4QkFDMUMsWUFBWSxTQUFDLCtCQUErQjs4QkFFNUMsU0FBUyxTQUFDLFVBQVU7O21DQXBEdkI7RUEyQjhDLDJCQUEyQjtTQUE1RCx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsIElucHV0LCBmb3J3YXJkUmVmLCBDb250ZW50Q2hpbGQsIE9uSW5pdCwgT25DaGFuZ2VzLCBSZW5kZXJlcjIsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRGVmYXVsdENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnLi8uLi8uLi9jb21tb24vZGVmYXVsdC1jb250cm9sLXZhbHVlLWFjY2Vzc29yJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgQXNpQ29tcG9uZW50VGVtcGxhdGVPcHRpb25EZWYsIEFzaUNvbXBvbmVudFRlbXBsYXRlU2VsZWN0ZWREZWYgfSBmcm9tICcuLy4uLy4uL2NvbW1vbi9hc2ktY29tcG9uZW50LXRlbXBsYXRlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgKiBhcyBuaCBmcm9tICcuLi8uLi8uLi9uYXRpdmUtaGVscGVyJ1xuaW1wb3J0IHsgQXNpRHJvcERvd24gfSBmcm9tICcuLi8uLi9hc2ktZHJvcGRvd24vYXNpLWRyb3Bkb3duLmNvbXBvbmVudCc7XG5cbi8qKlxuICogYXNpLWF1dG9jb21wbGV0ZSBjb21wb25lbnRcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXNpLWF1dG9jb21wbGV0ZScsXG4gIHRlbXBsYXRlVXJsOiAnYXNpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCcsXG4gIGhvc3Q6IHsgJ2NsYXNzJzogJ2FzaS1jb21wb25lbnQgYXNpLWF1dG9jb21wbGV0ZScgfSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBc2lBdXRvQ29tcGxldGVDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQXNpQXV0b0NvbXBsZXRlQ29tcG9uZW50IGV4dGVuZHMgRGVmYXVsdENvbnRyb2xWYWx1ZUFjY2Vzc29yIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuXG4gIC8qKiBodG1sIGlkICovXG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG4gIC8qKiBodG1sIG5hbWUgKi9cbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKiBMYWJlbCB0byBkaXNwbGF5IChpcyB0cmFuc2xhdGVkKSAqL1xuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xuXG4gIC8qKiBMYWJlbCBwb3NpdGlvbiAqL1xuICBASW5wdXQoKSBsYWJlbFBvc2l0aW9uOiAndG9wJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAnYm90dG9tJyB8ICdib3R0b20tY2VudGVyJyB8ICd0b3AtY2VudGVyJyA9ICd0b3AnO1xuXG4gIC8qKiBEZWxheSBiZXR3ZWVuIHRoZSBtb21lbnQgeW91IHN0b3AgdHlwaW5nIGFuZCBvblJlcXVlc3REYXRhIGlzIGNhbGxlZCAqL1xuICBASW5wdXQoKSBkZWxheSA9IDUwMDtcblxuICAvKiogQSBwbGFjZWhvbGRlciBpZiBuZWVkZWQgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcblxuICAvKiogRnVuY3Rpb24gY2FsbGVkIHRvIHJlcXVlc3QgbmV3IGRhdGEgKGNhbiByZXR1cm4gT2JzZXJ2YWJsZS9Qcm9taXNlL09iamVjdCk6IFRocm93IGVycm9yIGlmIG51bGwgKi9cbiAgQElucHV0KCkgb25SZXF1ZXN0RGF0YTogRnVuY3Rpb247XG5cbiAgQENvbnRlbnRDaGlsZChBc2lDb21wb25lbnRUZW1wbGF0ZU9wdGlvbkRlZikgb3B0aW9uRGVmOiBBc2lDb21wb25lbnRUZW1wbGF0ZU9wdGlvbkRlZjtcbiAgQENvbnRlbnRDaGlsZChBc2lDb21wb25lbnRUZW1wbGF0ZVNlbGVjdGVkRGVmKSBzZWxlY3RlZERlZjogQXNpQ29tcG9uZW50VGVtcGxhdGVTZWxlY3RlZERlZjtcblxuICBAVmlld0NoaWxkKCdkcm9wRG93bicpIGFzaURyb3BEb3duOiBBc2lEcm9wRG93bjtcblxuICBhdXRvQ29tcGxldGVDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG5cbiAgb3BlbiA9IGZhbHNlO1xuXG4gIGRhdGE6IEFycmF5PGFueT47XG5cbiAgLy8gVmFyIHVzZWQgdG8gbWFuYWdlIGNvbXBvbmVudCBpbml0aWFsaXphdGlvblxuICBmaXJzdFJlcXVlc3REb25lOiBCb29sZWFuID0gbnVsbDtcbiAgaW5pdCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgY3VycmVudFZhbHVlOiBhbnkgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJbnB1dCgpIHtcbiAgICBpZiAobnVsbCA9PSB0aGlzLm9uUmVxdWVzdERhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXNpQXV0b0NvbXBsZXRlQ29tcG9uZW50IDogQElucHV0IFxcJ29uUmVxdWVzdERhdGFcXCcgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNoZWNrSW5wdXQoKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnbGFiZWwtJyArIHRoaXMubGFiZWxQb3NpdGlvbik7XG5cbiAgICB0aGlzLmF1dG9Db21wbGV0ZUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuZGVsYXkpLFxuICAgICAgdGFwKHZhbHVlID0+IHRoaXMuY3VycmVudFZhbHVlID0gdmFsdWUpLFxuICAgICAgc3dpdGNoTWFwKCh2YWx1ZSkgPT4gbmgub2JzZXJ2ZSh0aGlzLm9uUmVxdWVzdERhdGEodmFsdWUsICF0aGlzLmZpcnN0UmVxdWVzdERvbmUpKSkpXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgaWYgKHRoaXMuZmlyc3RSZXF1ZXN0RG9uZSAmJiBkYXRhICYmIGRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMub3BlbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maXJzdFJlcXVlc3REb25lID0gdHJ1ZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgb25Ecm9wZG93bkNsb3NlKCkge1xuICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgaWYgKHRoaXMuaW5pdCkge1xuICAgICAgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuZmlyc3RSZXF1ZXN0RG9uZSkge1xuICAgICAgICB0aGlzLmluaXQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNlbGVjdFZhbHVlKGRhdGE6IGFueSkge1xuICAgIHRoaXMudmFsdWUgPSBkYXRhO1xuICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgY2xlYXJWYWx1ZSgpIHtcbiAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLmF1dG9Db21wbGV0ZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5jdXJyZW50VmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5vcGVuID0gdHJ1ZSB9KTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgaWYgKHRoaXMuaW5pdCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYXV0b0NvbXBsZXRlQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmN1cnJlbnRWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdmFsdWU7XG4gICAgICBpZiAodGhpcy52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmN1cnJlbnRWYWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19