mat-daterangepicker
Version:
Angular material date picker extension to support range selection.
148 lines • 18.4 kB
JavaScript
/*
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