UNPKG

mat-daterangepicker

Version:

Angular material date picker extension to support range selection.

148 lines 18.4 kB
/* RANGE: Most of the code is redundant and hera as inheritance boilerplate. The relevant code adds simple logic for a 2nd input, combined with minimal changes in the datepicker component, the work is done there so in native implementation this should have minimal changes, perhaps using dedicated input without min/max/filter etc... which are only set on the 1st input */ import { __decorate, __extends, __param } from "tslib"; import { Directive, forwardRef, Optional, Input, Inject, ElementRef, OnDestroy, AfterViewInit } from '@angular/core'; import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms'; import { DateAdapter, MatDateFormats, MAT_DATE_FORMATS } from '@angular/material/core'; import { MatFormField } from '@angular/material/form-field'; import { MAT_INPUT_VALUE_ACCESSOR } from '@angular/material/input'; import { MatDatepickerInput, MatDatepickerInputEvent } from '@angular/material/datepicker'; import { Subscription } from 'rxjs'; export var SG_DATEPICKER_VALUE_ACCESSOR = { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(function () { return MatDaterangepickerInputEnd; }), multi: true }; export var SG_DATEPICKER_VALIDATORS = { provide: NG_VALIDATORS, useExisting: forwardRef(function () { return MatDaterangepickerInputEnd; }), multi: true }; var MatDaterangepickerInputEnd = /** @class */ (function (_super) { __extends(MatDaterangepickerInputEnd, _super); function MatDaterangepickerInputEnd(_drElementRef, _drDateAdapter, _drDateFormats, _drFormField) { var _this = _super.call(this, _drElementRef, _drDateAdapter, _drDateFormats, _drFormField) || this; _this._drElementRef = _drElementRef; _this._drDateAdapter = _drDateAdapter; _this._drDateFormats = _drDateFormats; _this._drFormField = _drFormField; _this._matDatepickerSubscription = Subscription.EMPTY; _this._drCvaOnChange = function () { }; _this._drDatepickerClearSubscription = Subscription.EMPTY; return _this; } MatDaterangepickerInputEnd_1 = MatDaterangepickerInputEnd; Object.defineProperty(MatDaterangepickerInputEnd.prototype, "matDaterangepickerEnd", { set: function (value) { if (this._datepicker !== value) { this.unregister(); this._datepicker = value; value._registerInputRangeEnd(this); } }, enumerable: true, configurable: true }); Object.defineProperty(MatDaterangepickerInputEnd.prototype, "_matDaterangepickerEnd", { get: function () { return this._datepicker; }, enumerable: true, configurable: true }); MatDaterangepickerInputEnd.prototype.ngAfterViewInit = function () { // Object.defineProperty(this, 'value', { // set: function (value: D | null) { // if(!this._matDaterangepickerEnd.applyButton){ // console.log('end '+value) // return; // } // value = this._dateAdapter.deserialize(value); // this._lastValueValid = !value || this._dateAdapter.isValid(value); // value = this._getValidDateOrNull(value); // const oldDate = this.value; // this['_assignValue'](value); // this['_formatValue'](value); // if (!this._dateAdapter.sameDate(oldDate, value)) { // this._valueChange.emit(value); // } // } // }) }; MatDaterangepickerInputEnd.prototype.ngAfterContentInit = function () { var _this = this; if (this._datepicker) { this._matDatepickerSubscription = this._matDaterangepickerEnd._selectedChangedRangeEnd.subscribe(function (selected) { _this.value = selected; _this._drCvaOnChange(selected); _this._onTouched(); _this.dateInput.emit(new MatDatepickerInputEvent(_this, _this._drElementRef.nativeElement)); _this.dateChange.emit(new MatDatepickerInputEvent(_this, _this._drElementRef.nativeElement)); }); //runs every clear range end this._drDatepickerClearSubscription = this._matDaterangepickerEnd._clearRangeEnd.subscribe(function () { _this.value = null; _this._drCvaOnChange(null); }); } }; MatDaterangepickerInputEnd.prototype.ngOnDestroy = function () { _super.prototype.ngOnDestroy.call(this); this.unregister(); this._matDatepickerSubscription.unsubscribe(); this._drDatepickerClearSubscription.unsubscribe(); }; // Implemented as part of ControlValueAccessor. MatDaterangepickerInputEnd.prototype.registerOnChange = function (fn) { this._drCvaOnChange = fn; _super.prototype.registerOnChange.call(this, fn); }; MatDaterangepickerInputEnd.prototype.unregister = function () { if (this._matDaterangepickerEnd) { this._matDaterangepickerEnd._unregisterInputRangeEnd(this); } }; var MatDaterangepickerInputEnd_1; MatDaterangepickerInputEnd.ctorParameters = function () { return [ { type: ElementRef }, { type: DateAdapter, decorators: [{ type: Optional }] }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DATE_FORMATS,] }] }, { type: MatFormField, decorators: [{ type: Optional }] } ]; }; __decorate([ Input() ], MatDaterangepickerInputEnd.prototype, "matDaterangepickerEnd", null); MatDaterangepickerInputEnd = MatDaterangepickerInputEnd_1 = __decorate([ Directive({ selector: '[matDaterangepickerEnd]', providers: [ SG_DATEPICKER_VALUE_ACCESSOR, SG_DATEPICKER_VALIDATORS, { provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: MatDaterangepickerInputEnd_1 }, ], host: { '[attr.aria-haspopup]': 'true', '[attr.aria-owns]': '(_datepicker?.opened && _datepicker.id) || null', '[attr.min]': 'min ? _dateAdapter.toIso8601(min) : null', '[attr.max]': 'max ? _dateAdapter.toIso8601(max) : null', '[disabled]': 'disabled', '(input)': '_onInput($event.target.value)', '(change)': '_onChange()', '(blur)': '_onBlur()', '(keydown)': '_onKeydown($event)', }, exportAs: 'MatDaterangepickerInputEnd', }), __param(1, Optional()), __param(2, Optional()), __param(2, Inject(MAT_DATE_FORMATS)), __param(3, Optional()) ], MatDaterangepickerInputEnd); return MatDaterangepickerInputEnd; }(MatDatepickerInput)); export { MatDaterangepickerInputEnd }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9tYXQtZGF0ZXJhbmdlcGlja2VyLyIsInNvdXJjZXMiOlsibGliL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1pbnB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztFQU1FOztBQUVGLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JILE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUczRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE1BQU0sQ0FBQyxJQUFNLDRCQUE0QixHQUFRO0lBQy9DLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxjQUFNLE9BQUEsMEJBQTBCLEVBQTFCLENBQTBCLENBQUM7SUFDekQsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBR0YsTUFBTSxDQUFDLElBQU0sd0JBQXdCLEdBQVE7SUFDM0MsT0FBTyxFQUFFLGFBQWE7SUFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxjQUFNLE9BQUEsMEJBQTBCLEVBQTFCLENBQTBCLENBQUM7SUFDekQsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FB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bUQsa0JBQWtCLEdBbUZwRTtTQW5GWSwwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICAgIFJBTkdFOiBNb3N0IG9mIHRoZSBjb2RlIGlzIHJlZHVuZGFudCBhbmQgaGVyYSBhcyBpbmhlcml0YW5jZSBib2lsZXJwbGF0ZS5cbiAgICBUaGUgcmVsZXZhbnQgY29kZSBhZGRzIHNpbXBsZSBsb2dpYyBmb3IgYSAybmQgaW5wdXQsIGNvbWJpbmVkIHdpdGggbWluaW1hbCBjaGFuZ2VzIGluIHRoZVxuICAgIGRhdGVwaWNrZXIgY29tcG9uZW50LCB0aGUgd29yayBpcyBkb25lIHRoZXJlIHNvIGluIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiB0aGlzIHNob3VsZCBoYXZlXG4gICAgbWluaW1hbCBjaGFuZ2VzLCBwZXJoYXBzIHVzaW5nIGRlZGljYXRlZCBpbnB1dCB3aXRob3V0IG1pbi9tYXgvZmlsdGVyIGV0Yy4uLiB3aGljaCBhcmUgb25seVxuICAgIHNldCBvbiB0aGUgMXN0IGlucHV0XG4qL1xuXG5pbXBvcnQgeyBEaXJlY3RpdmUsIGZvcndhcmRSZWYsIE9wdGlvbmFsLCBJbnB1dCwgSW5qZWN0LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBEYXRlQWRhcHRlciwgTWF0RGF0ZUZvcm1hdHMsIE1BVF9EQVRFX0ZPUk1BVFMgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTUFUX0lOUFVUX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlcklucHV0LCBNYXREYXRlcGlja2VySW5wdXRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuXG5pbXBvcnQgeyBNYXREYXRlcmFuZ2VwaWNrZXIgfSBmcm9tICcuL2RhdGVwaWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgY29uc3QgU0dfREFURVBJQ0tFUl9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWF0RGF0ZXJhbmdlcGlja2VySW5wdXRFbmQpLFxuICBtdWx0aTogdHJ1ZVxufTtcblxuXG5leHBvcnQgY29uc3QgU0dfREFURVBJQ0tFUl9WQUxJREFUT1JTOiBhbnkgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1hdERhdGVyYW5nZXBpY2tlcklucHV0RW5kKSxcbiAgbXVsdGk6IHRydWVcbn07XG5cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW21hdERhdGVyYW5nZXBpY2tlckVuZF0nLFxuICBwcm92aWRlcnM6IFtcbiAgICBTR19EQVRFUElDS0VSX1ZBTFVFX0FDQ0VTU09SLFxuICAgIFNHX0RBVEVQSUNLRVJfVkFMSURBVE9SUyxcbiAgICB7cHJvdmlkZTogTUFUX0lOUFVUX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogTWF0RGF0ZXJhbmdlcGlja2VySW5wdXRFbmR9LFxuICBdLFxuICBob3N0OiB7XG4gICAgJ1thdHRyLmFyaWEtaGFzcG9wdXBdJzogJ3RydWUnLFxuICAgICdbYXR0ci5hcmlhLW93bnNdJzogJyhfZGF0ZXBpY2tlcj8ub3BlbmVkICYmIF9kYXRlcGlja2VyLmlkKSB8fCBudWxsJyxcbiAgICAnW2F0dHIubWluXSc6ICdtaW4gPyBfZGF0ZUFkYXB0ZXIudG9Jc284NjAxKG1pbikgOiBudWxsJyxcbiAgICAnW2F0dHIubWF4XSc6ICdtYXggPyBfZGF0ZUFkYXB0ZXIudG9Jc284NjAxKG1heCkgOiBudWxsJyxcbiAgICAnW2Rpc2FibGVkXSc6ICdkaXNhYmxlZCcsXG4gICAgJyhpbnB1dCknOiAnX29uSW5wdXQoJGV2ZW50LnRhcmdldC52YWx1ZSknLFxuICAgICcoY2hhbmdlKSc6ICdfb25DaGFuZ2UoKScsXG4gICAgJyhibHVyKSc6ICdfb25CbHVyKCknLFxuICAgICcoa2V5ZG93biknOiAnX29uS2V5ZG93bigkZXZlbnQpJyxcbiAgfSxcbiAgZXhwb3J0QXM6ICdNYXREYXRlcmFuZ2VwaWNrZXJJbnB1dEVuZCcsXG59KVxuZXhwb3J0IGNsYXNzIE1hdERhdGVyYW5nZXBpY2tlcklucHV0RW5kPEQ+IGV4dGVuZHMgTWF0RGF0ZXBpY2tlcklucHV0PEQ+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblx0QElucHV0KClcblx0c2V0IG1hdERhdGVyYW5nZXBpY2tlckVuZCh2YWx1ZTogTWF0RGF0ZXJhbmdlcGlja2VyPEQ+KSB7XG5cdFx0aWYgKHRoaXMuX2RhdGVwaWNrZXIgIT09IHZhbHVlKSB7XG5cdFx0XHR0aGlzLnVucmVnaXN0ZXIoKTtcblx0XHRcdHRoaXMuX2RhdGVwaWNrZXIgPSB2YWx1ZTtcblx0XHRcdHZhbHVlLl9yZWdpc3RlcklucHV0UmFuZ2VFbmQodGhpcyk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXQgX21hdERhdGVyYW5nZXBpY2tlckVuZCgpIDogTWF0RGF0ZXJhbmdlcGlja2VyPEQ+IHtcblx0XHRyZXR1cm4gPGFueT4gdGhpcy5fZGF0ZXBpY2tlcjtcblx0fVxuXG5cdHByaXZhdGUgX21hdERhdGVwaWNrZXJTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cdHByaXZhdGUgX2RyQ3ZhT25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XG5cblx0cHJpdmF0ZSBfZHJEYXRlcGlja2VyQ2xlYXJTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cblx0Y29uc3RydWN0b3IocHJpdmF0ZSBfZHJFbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuXHRcdFx0XHRAT3B0aW9uYWwoKSBwdWJsaWMgX2RyRGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPEQ+LFxuXHRcdFx0XHRAT3B0aW9uYWwoKSBASW5qZWN0KE1BVF9EQVRFX0ZPUk1BVFMpIHByaXZhdGUgX2RyRGF0ZUZvcm1hdHM6IE1hdERhdGVGb3JtYXRzLFxuXHRcdFx0XHRAT3B0aW9uYWwoKSBwcml2YXRlIF9kckZvcm1GaWVsZDogTWF0Rm9ybUZpZWxkKSB7XG5cdFx0c3VwZXIoX2RyRWxlbWVudFJlZiwgX2RyRGF0ZUFkYXB0ZXIsIF9kckRhdGVGb3JtYXRzLCBfZHJGb3JtRmllbGQpOyBcblx0fVxuXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpe1xuXHRcdC8vIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndmFsdWUnLCB7XG5cdFx0Ly8gICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZTogRCB8IG51bGwpIHtcblx0XHQvLyAgICAgaWYoIXRoaXMuX21hdERhdGVyYW5nZXBpY2tlckVuZC5hcHBseUJ1dHRvbil7XG5cdFx0Ly8gICAgICAgY29uc29sZS5sb2coJ2VuZCAnK3ZhbHVlKVxuXHRcdC8vICAgICAgIHJldHVybjtcblx0XHQvLyAgICAgfVxuXHRcdC8vICAgICB2YWx1ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKTtcblx0XHQvLyAgICAgdGhpcy5fbGFzdFZhbHVlVmFsaWQgPSAhdmFsdWUgfHwgdGhpcy5fZGF0ZUFkYXB0ZXIuaXNWYWxpZCh2YWx1ZSk7XG5cdFx0Ly8gICAgIHZhbHVlID0gdGhpcy5fZ2V0VmFsaWREYXRlT3JOdWxsKHZhbHVlKTtcblx0XHQvLyAgICAgY29uc3Qgb2xkRGF0ZSA9IHRoaXMudmFsdWU7XG5cdFx0Ly8gICAgIHRoaXNbJ19hc3NpZ25WYWx1ZSddKHZhbHVlKTtcblx0XHQvLyAgICAgdGhpc1snX2Zvcm1hdFZhbHVlJ10odmFsdWUpO1xuXG5cdFx0Ly8gICAgIGlmICghdGhpcy5fZGF0ZUFkYXB0ZXIuc2FtZURhdGUob2xkRGF0ZSwgdmFsdWUpKSB7XG5cdFx0Ly8gICAgICAgdGhpcy5fdmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG5cdFx0Ly8gICAgIH1cblx0XHQvLyAgIH1cblx0XHQvLyB9KVxuXHR9XG5cblx0bmdBZnRlckNvbnRlbnRJbml0KCkge1xuXHRcdGlmICh0aGlzLl9kYXRlcGlja2VyKSB7XG5cdFx0XHR0aGlzLl9tYXREYXRlcGlja2VyU3Vic2NyaXB0aW9uID0gdGhpcy5fbWF0RGF0ZXJhbmdlcGlja2VyRW5kLl9zZWxlY3RlZENoYW5nZWRSYW5nZUVuZC5zdWJzY3JpYmUoKHNlbGVjdGVkOiBEKSA9PiB7XG5cdFx0XHRcdHRoaXMudmFsdWUgPSBzZWxlY3RlZDtcblx0XHRcdFx0dGhpcy5fZHJDdmFPbkNoYW5nZShzZWxlY3RlZCk7XG5cdFx0XHRcdHRoaXMuX29uVG91Y2hlZCgpO1xuXHRcdFx0XHR0aGlzLmRhdGVJbnB1dC5lbWl0KG5ldyBNYXREYXRlcGlja2VySW5wdXRFdmVudCh0aGlzLCB0aGlzLl9kckVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpO1xuXHRcdFx0XHR0aGlzLmRhdGVDaGFuZ2UuZW1pdChuZXcgTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQodGhpcywgdGhpcy5fZHJFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpKTtcblx0XHRcdH0pXG5cblx0XHRcdC8vcnVucyBldmVyeSBjbGVhciByYW5nZSBlbmRcblx0XHRcdHRoaXMuX2RyRGF0ZXBpY2tlckNsZWFyU3Vic2NyaXB0aW9uID0gdGhpcy5fbWF0RGF0ZXJhbmdlcGlja2VyRW5kLl9jbGVhclJhbmdlRW5kLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMudmFsdWUgPSBudWxsXG5cdFx0XHRcdHRoaXMuX2RyQ3ZhT25DaGFuZ2UobnVsbCk7XG5cdFx0XHR9KVxuXHRcdH1cblx0fVxuXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdHN1cGVyLm5nT25EZXN0cm95KCk7XG5cdFx0dGhpcy51bnJlZ2lzdGVyKCk7XG5cdFx0dGhpcy5fbWF0RGF0ZXBpY2tlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXHRcdHRoaXMuX2RyRGF0ZXBpY2tlckNsZWFyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cdH1cblxuXHQvLyBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuXHRyZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdHRoaXMuX2RyQ3ZhT25DaGFuZ2UgPSBmbjtcblx0XHRzdXBlci5yZWdpc3Rlck9uQ2hhbmdlKGZuKTtcblx0fVxuXG5cdHByaXZhdGUgdW5yZWdpc3RlcigpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5fbWF0RGF0ZXJhbmdlcGlja2VyRW5kKSB7XG5cdFx0XHR0aGlzLl9tYXREYXRlcmFuZ2VwaWNrZXJFbmQuX3VucmVnaXN0ZXJJbnB1dFJhbmdlRW5kKHRoaXMpO1xuXHRcdH1cblx0fVxufVxuIl19