UNPKG

ngx-pluto

Version:
214 lines 19 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ViewEncapsulation, forwardRef, ContentChildren, QueryList, ChangeDetectorRef, Input, } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { NpRadioButton } from './radio-button.component'; /** * 单选按钮组 - 此标签作为一个单选按钮分组使用,内部可包含多个单选按钮组件{\@link NpRadioButton|RadioButton}。 * * <example-url>https://stackblitz.com/edit/np-radio-button-sample?embed=1&file=src/app/app.component.html</example-url> */ export class NpRadioGroup { /** * @param {?} _changeDetector */ constructor(_changeDetector) { this._changeDetector = _changeDetector; this._selected = null; /** * 单选框分组标签 */ this.label = ''; /** * 单选框分组是否必填,如为true,则标签前有红色星号,false则没有。注:此属性不作为校验属性,仅展示星号与否。 */ this.isRequired = false; this._controlValueAccessorChangeFn = (/** * @return {?} */ () => { }); this.onTouched = (/** * @return {?} */ () => { }); } /** * Value for the radio-group. Should equal the value of the selected radio button if there is * a corresponding radio button with a matching value. If there is not such a corresponding * radio button, this value persists to be applied in case a new radio button is added with a * matching value. * @return {?} */ get value() { return this._value; } /** * @param {?} newValue * @return {?} */ set value(newValue) { if (this._value !== newValue) { // Set this before proceeding to ensure no circular loop occurs with selection. this._value = newValue; this._updateSelectedRadioFromValue(); this._checkSelectedRadioButton(); } } /** * @return {?} */ ngAfterContentInit() { this._radios.toArray().forEach((/** * @param {?} cp * @param {?} index * @return {?} */ (cp, index) => { cp.onSelectChanged.subscribe((/** * @param {?} result * @return {?} */ result => { this.value = result; console.log('<<<>>>', result); this._controlValueAccessorChangeFn(result); this._updateSelectedRadioFromValue(); // this._changeDetector.detectChanges(); })); })); //TODO: 第一次reactive form 赋值问题 setTimeout((/** * @return {?} */ () => { this._updateSelectedRadioFromValue(); this._checkSelectedRadioButton(); }), 0); // this._selected = this._radios.find((cp, index) => cp.value === this.value); // this._selected.checked=true // this._selected.onChange(); } /** * Sets the model value. Implemented as part of ControlValueAccessor. * @param {?} value * @return {?} */ writeValue(value) { this.value = value; this._changeDetector.markForCheck(); } /** * Registers a callback to be triggered when the model value changes. * Implemented as part of ControlValueAccessor. * @param {?} fn Callback to be registered. * @return {?} */ registerOnChange(fn) { this._controlValueAccessorChangeFn = fn; } /** * Registers a callback to be triggered when the control is touched. * Implemented as part of ControlValueAccessor. * @param {?} fn Callback to be registered. * @return {?} */ registerOnTouched(fn) { this.onTouched = fn; } /** * @return {?} */ _checkSelectedRadioButton() { if (this._selected && !this._selected.checked) { this._selected.checked = true; } } /** * Updates the `selected` radio button from the internal _value state. * @private * @return {?} */ _updateSelectedRadioFromValue() { // If the value already matches the selected radio, do nothing. /** @type {?} */ const isAlreadySelected = this._selected !== null && this._selected.value === this._value; if (this._radios && !isAlreadySelected) { this._selected = null; this._radios.forEach((/** * @param {?} radio * @return {?} */ radio => { radio.checked = this.value === radio.value; if (radio.checked) { this._selected = radio; } })); } } } NpRadioGroup.decorators = [ { type: Component, args: [{ selector: `np-radio-group`, template: "<div class=\"np-radio-group-wrapper flex-wrap row-flex\">\r\n <div class=\"flex-wrap col-flex\" *ngIf=\"label\">\r\n <label for=\"np-input\" class=\"np-lbl\">\r\n <span class=\"form-required\" *ngIf=\"isRequired\">*</span>\r\n {{ label }}\r\n </label>\r\n </div>\r\n <div class=\"flex-wrap row-flex\" style=\"width: auto\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n", encapsulation: ViewEncapsulation.None, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ () => NpRadioGroup)), multi: true, } ], styles: [".backdrop-transparent{opacity:0}.flex-wrap{display:flex}.wrap{flex-wrap:wrap}.col-flex{flex-direction:column}.row-flex{flex-direction:row}.middle-flex{justify-content:center;align-items:center}.space-between{justify-content:space-between;align-items:center}.align-center{align-items:center}.np-row{display:flex;flex-direction:row;flex-wrap:wrap;width:100%}.np-column{display:flex;flex-direction:column;flex-basis:100%;flex:1}.np-radio-group-wrapper{align-items:baseline;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.np-radio-group-wrapper .np-lbl{width:80px;margin-right:20px;text-align:right;font-size:13px;font-weight:700}.np-radio-button-wrapper{margin:.5em 1.428571em 0 0;padding-left:1.785714em;position:relative;font-weight:400;font-size:14px;line-height:1.5em;cursor:pointer;display:inline-block}.np-radio-button-wrapper.rectangle{padding-left:0}.np-radio-button-wrapper .radio{opacity:0;z-index:1;left:.214286em;top:0;position:absolute;width:1em;height:1em;margin:0;display:block}.np-radio-button-wrapper .radio.radio-checked+span::after{position:absolute;content:'';width:.857142em;height:.857142em;top:.071429em;left:.071429em;border-radius:1em}.np-radio-button-wrapper .rectangle-radio{text-align:center;padding:6px 10px}.np-radio-button-wrapper span.input-helper{position:absolute;left:.142857em;top:.142857em;width:1.142857em;height:1.142857em;box-sizing:border-box}.np-radio-button-wrapper .radio+span.input-helper{border-radius:1em}.np-radio-button-wrapper input[type=radio]::before,.np-radio-button-wrapper input[type=radio]:checked::before{content:none}"] }] } ]; /** @nocollapse */ NpRadioGroup.ctorParameters = () => [ { type: ChangeDetectorRef } ]; NpRadioGroup.propDecorators = { value: [{ type: Input }], label: [{ type: Input }], isRequired: [{ type: Input }], _radios: [{ type: ContentChildren, args: [forwardRef((/** * @return {?} */ () => NpRadioButton)), { descendants: true },] }] }; if (false) { /** * @type {?} * @private */ NpRadioGroup.prototype._selected; /** * @type {?} * @private */ NpRadioGroup.prototype._value; /** * 单选框分组标签 * @type {?} */ NpRadioGroup.prototype.label; /** * 单选框分组是否必填,如为true,则标签前有红色星号,false则没有。注:此属性不作为校验属性,仅展示星号与否。 * @type {?} */ NpRadioGroup.prototype.isRequired; /** @type {?} */ NpRadioGroup.prototype._radios; /** @type {?} */ NpRadioGroup.prototype._controlValueAccessorChangeFn; /** @type {?} */ NpRadioGroup.prototype.onTouched; /** * @type {?} * @private */ NpRadioGroup.prototype._changeDetector; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXBsdXRvLyIsInNvdXJjZXMiOlsibGliL3JhZGlvLWdyb3VwL3JhZGlvLWdyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEdBQW1DLE1BQU0sZUFBZSxDQUFDO0FBQ2hLLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7OztBQW9CekQsTUFBTSxPQUFPLFlBQVk7Ozs7SUFtQnZCLFlBQ1UsZUFBa0M7UUFBbEMsb0JBQWUsR0FBZixlQUFlLENBQW1CO1FBSXBDLGNBQVMsR0FBeUIsSUFBSSxDQUFDOzs7O1FBSy9DLFVBQUssR0FBRyxFQUFFLENBQUM7Ozs7UUFHWCxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBR25CLGtDQUE2Qjs7O1FBQXlCLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBQztRQUNoRSxjQUFTOzs7UUFBYyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUM7SUFkakMsQ0FBQzs7Ozs7Ozs7SUFmRCxJQUNJLEtBQUssS0FBVSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOzs7OztJQUN4QyxJQUFJLEtBQUssQ0FBQyxRQUFhO1FBQ3JCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUU7WUFDNUIsK0VBQStFO1lBQy9FLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO1lBRXZCLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQzs7OztJQW9CRCxrQkFBa0I7UUFFaEIs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SUFFWCxrQ0FDbUI7O0lBQ25CLCtCQUNrQzs7SUFDbEMscURBQWdFOztJQUNoRSxpQ0FBaUM7Ozs7O0lBaEIvQix1Q0FBMEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBmb3J3YXJkUmVmLCBDb250ZW50Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIElucHV0LCBIb3N0TGlzdGVuZXIsIEFmdGVyQ29udGVudEluaXQsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTnBSYWRpb0J1dHRvbiB9IGZyb20gJy4vcmFkaW8tYnV0dG9uLmNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICog5Y2V6YCJ5oyJ6ZKu57uEIC0g5q2k5qCH562+5L2c5Li65LiA5Liq5Y2V6YCJ5oyJ6ZKu5YiG57uE5L2/55So77yM5YaF6YOo5Y+v5YyF5ZCr5aSa5Liq5Y2V6YCJ5oyJ6ZKu57uE5Lu2e0BsaW5rIE5wUmFkaW9CdXR0b258UmFkaW9CdXR0b25944CCXHJcbiAqIFxyXG4gKiA8ZXhhbXBsZS11cmw+aHR0cHM6Ly9zdGFja2JsaXR6LmNvbS9lZGl0L25wLXJhZGlvLWJ1dHRvbi1zYW1wbGU/ZW1iZWQ9MSZmaWxlPXNyYy9hcHAvYXBwLmNvbXBvbmVudC5odG1sPC9leGFtcGxlLXVybD5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBgbnAtcmFkaW8tZ3JvdXBgLFxyXG4gIHRlbXBsYXRlVXJsOiAncmFkaW8tZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWydyYWRpby1ncm91cC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOcFJhZGlvR3JvdXApLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH1dXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgTnBSYWRpb0dyb3VwIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIC8qKlxyXG4gICAqIFZhbHVlIGZvciB0aGUgcmFkaW8tZ3JvdXAuIFNob3VsZCBlcXVhbCB0aGUgdmFsdWUgb2YgdGhlIHNlbGVjdGVkIHJhZGlvIGJ1dHRvbiBpZiB0aGVyZSBpc1xyXG4gICAqIGEgY29ycmVzcG9uZGluZyByYWRpbyBidXR0b24gd2l0aCBhIG1hdGNoaW5nIHZhbHVlLiBJZiB0aGVyZSBpcyBub3Qgc3VjaCBhIGNvcnJlc3BvbmRpbmdcclxuICAgKiByYWRpbyBidXR0b24sIHRoaXMgdmFsdWUgcGVyc2lzdHMgdG8gYmUgYXBwbGllZCBpbiBjYXNlIGEgbmV3IHJhZGlvIGJ1dHRvbiBpcyBhZGRlZCB3aXRoIGFcclxuICAgKiBtYXRjaGluZyB2YWx1ZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIGdldCB2YWx1ZSgpOiBhbnkgeyByZXR1cm4gdGhpcy5fdmFsdWU7IH1cclxuICBzZXQgdmFsdWUobmV3VmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuX3ZhbHVlICE9PSBuZXdWYWx1ZSkge1xyXG4gICAgICAvLyBTZXQgdGhpcyBiZWZvcmUgcHJvY2VlZGluZyB0byBlbnN1cmUgbm8gY2lyY3VsYXIgbG9vcCBvY2N1cnMgd2l0aCBzZWxlY3Rpb24uXHJcbiAgICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XHJcblxyXG4gICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZFJhZGlvRnJvbVZhbHVlKCk7XHJcbiAgICAgIHRoaXMuX2NoZWNrU2VsZWN0ZWRSYWRpb0J1dHRvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NlbGVjdGVkOiBOcFJhZGlvQnV0dG9uIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfdmFsdWU7XHJcblxyXG4gIC8qKuWNlemAieahhuWIhue7hOagh+etviAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgbGFiZWwgPSAnJztcclxuICAvKirljZXpgInmoYbliIbnu4TmmK/lkKblv4XloavvvIzlpoLkuLp0cnVl77yM5YiZ5qCH562+5YmN5pyJ57qi6Imy5pif5Y+377yMZmFsc2XliJnmsqHmnInjgILms6jvvJrmraTlsZ7mgKfkuI3kvZzkuLrmoKHpqozlsZ7mgKfvvIzku4XlsZXnpLrmmJ/lj7fkuI7lkKbjgIIgKi9cclxuICBASW5wdXQoKVxyXG4gIGlzUmVxdWlyZWQgPSBmYWxzZTtcclxuICBAQ29udGVudENoaWxkcmVuKGZvcndhcmRSZWYoKCkgPT4gTnBSYWRpb0J1dHRvbiksIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcclxuICBfcmFkaW9zOiBRdWVyeUxpc3Q8TnBSYWRpb0J1dHRvbj47XHJcbiAgX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm46ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4geyB9O1xyXG4gIG9uVG91Y2hlZDogKCkgPT4gYW55ID0gKCkgPT4geyB9O1xyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLl9yYWRpb3MudG9BcnJheSgpLmZvckVhY2goKGNwLCBpbmRleCkgPT4ge1xyXG4gICAgICBjcC5vblNlbGVjdENoYW5nZWQuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHJlc3VsdDtcclxuICAgICAgICBjb25zb2xlLmxvZygnPDw8Pj4+JywgcmVzdWx0KTtcclxuICAgICAgICB0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKHJlc3VsdCk7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRSYWRpb0Zyb21WYWx1ZSgpO1xyXG4gICAgICAgIC8vIHRoaXMuX2NoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgICAvL1RPRE86IOesrOS4gOasoXJlYWN0aXZlIGZvcm0g6LWL5YC86Zeu6aKYXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRSYWRpb0Zyb21WYWx1ZSgpO1xyXG4gICAgICB0aGlzLl9jaGVja1NlbGVjdGVkUmFkaW9CdXR0b24oKTtcclxuICAgIH0sIDApO1xyXG5cclxuICAgIC8vIHRoaXMuX3NlbGVjdGVkID0gdGhpcy5fcmFkaW9zLmZpbmQoKGNwLCBpbmRleCkgPT4gY3AudmFsdWUgPT09IHRoaXMudmFsdWUpO1xyXG4gICAgLy8gdGhpcy5fc2VsZWN0ZWQuY2hlY2tlZD10cnVlXHJcbiAgICAvLyB0aGlzLl9zZWxlY3RlZC5vbkNoYW5nZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gKiBTZXRzIHRoZSBtb2RlbCB2YWx1ZS4gSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cclxuICogQHBhcmFtIHZhbHVlXHJcbiAqL1xyXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayB0byBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgbW9kZWwgdmFsdWUgY2hhbmdlcy5cclxuICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxyXG4gICAqIEBwYXJhbSBmbiBDYWxsYmFjayB0byBiZSByZWdpc3RlcmVkLlxyXG4gICAqL1xyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKSB7XHJcbiAgICB0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuID0gZm47XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayB0byBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgY29udHJvbCBpcyB0b3VjaGVkLlxyXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXHJcbiAgICogQHBhcmFtIGZuIENhbGxiYWNrIHRvIGJlIHJlZ2lzdGVyZWQuXHJcbiAgICovXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIF9jaGVja1NlbGVjdGVkUmFkaW9CdXR0b24oKSB7XHJcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWQgJiYgIXRoaXMuX3NlbGVjdGVkLmNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWQuY2hlY2tlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogVXBkYXRlcyB0aGUgYHNlbGVjdGVkYCByYWRpbyBidXR0b24gZnJvbSB0aGUgaW50ZXJuYWwgX3ZhbHVlIHN0YXRlLiAqL1xyXG4gIHByaXZhdGUgX3VwZGF0ZVNlbGVjdGVkUmFkaW9Gcm9tVmFsdWUoKTogdm9pZCB7XHJcbiAgICAvLyBJZiB0aGUgdmFsdWUgYWxyZWFkeSBtYXRjaGVzIHRoZSBzZWxlY3RlZCByYWRpbywgZG8gbm90aGluZy5cclxuICAgIGNvbnN0IGlzQWxyZWFkeVNlbGVjdGVkID0gdGhpcy5fc2VsZWN0ZWQgIT09IG51bGwgJiYgdGhpcy5fc2VsZWN0ZWQudmFsdWUgPT09IHRoaXMuX3ZhbHVlO1xyXG5cclxuICAgIGlmICh0aGlzLl9yYWRpb3MgJiYgIWlzQWxyZWFkeVNlbGVjdGVkKSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkID0gbnVsbDtcclxuICAgICAgdGhpcy5fcmFkaW9zLmZvckVhY2gocmFkaW8gPT4ge1xyXG4gICAgICAgIHJhZGlvLmNoZWNrZWQgPSB0aGlzLnZhbHVlID09PSByYWRpby52YWx1ZTtcclxuICAgICAgICBpZiAocmFkaW8uY2hlY2tlZCkge1xyXG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSByYWRpbztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=