ng-devui
Version:
DevUI components based on Angular
150 lines • 19.8 kB
JavaScript
import { Directive, ElementRef, EventEmitter, forwardRef, HostListener, Output, Renderer2 } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { addClassToOrigin, removeClassFromOrigin } from 'ng-devui/utils';
import { fromEvent } from 'rxjs';
import { debounceTime, map } from 'rxjs/operators';
import { TwoDatePickerComponent } from './two-datepicker.component';
import * as i0 from "@angular/core";
import * as i1 from "./two-datepicker.component";
export class TwoDatePickerEndDirective {
constructor(twoDatePicker, renderer, el) {
this.twoDatePicker = twoDatePicker;
this.renderer = renderer;
this.el = el;
this.selectEnd = new EventEmitter();
this.onChange = (_) => null;
this.clear = () => {
this.twoDatePicker.clear('end');
};
this.twoDateSub = this.twoDatePicker.selectDateSubject.subscribe(data => {
if (data.side === 'end') {
if (this.el.nativeElement.tagName === 'INPUT') {
this.writeValue(data.date);
}
else {
this.el.nativeElement.innerHTML = data.date ? this.twoDatePicker.formatDate(data.date) : this.userHtml;
}
if (!data.onlyWrite) {
this.selectEnd.emit(data.date);
this.onChange(data.date);
}
}
});
this.switchOriginSub = this.twoDatePicker.switchOriginPositionSub.subscribe(side => {
if (side === 'end') {
addClassToOrigin(this.el);
}
else {
removeClassFromOrigin(this.el);
}
});
}
toggle(event) {
this.twoDatePicker.toggle('end');
}
onBlur($event) {
if (!this.validDate(this.el.nativeElement.value)) {
this.resetValue();
}
}
ngOnInit() {
this.userHtml = this.el.nativeElement.innerHTML;
this.initInputChanges();
}
initInputChanges() {
this.valueChangeSubscrip = fromEvent(this.el.nativeElement, 'keyup').pipe(map((e) => {
console.log(e);
return e.target.value;
}), debounceTime(300)).subscribe(value => {
this.transUserInputToDatePicker(value);
});
}
registerOnChange(fn) {
this.onChange = fn;
}
registerOnTouched(fn) {
return;
}
writeValue(selectedEnd) {
selectedEnd = selectedEnd || null;
const formatEnd = selectedEnd ?
this.twoDatePicker.dateConverter.format(selectedEnd, this.twoDatePicker.dateFormat, this.twoDatePicker.locale) :
'';
this.renderer.setProperty(this.el.nativeElement, 'value', formatEnd);
this.twoDatePicker.selectEnd(selectedEnd, true);
}
transUserInputToDatePicker(value) {
if (!this.twoDatePicker.showTime) {
const _value = value || this.el.nativeElement.value;
if (!_value && !this.twoDatePicker.rangeEnd || !_value) {
this.clear();
return;
}
const valueDate = new Date(_value);
if (_value && this.validDate(_value)) {
this.twoDatePicker.selectEnd(valueDate);
[this.twoDatePicker.rangeStart, this.twoDatePicker.rangeEnd] = this.twoDatePicker.selectedRange;
}
}
else {
this.resetValue();
}
}
validDate(value) {
if (!value) {
return true;
}
const valueDate = new Date(value);
const valueFormat = valueDate && !isNaN(valueDate.getTime()) &&
this.twoDatePicker.dateConverter.format(valueDate, this.twoDatePicker.dateFormat, this.twoDatePicker.locale);
if (!valueDate || value !== valueFormat ||
(value === valueFormat &&
(valueDate.getTime() < this.twoDatePicker.minDate.getTime() || valueDate.getTime() > this.twoDatePicker.maxDate.getTime()))) {
return false;
}
else {
return true;
}
}
resetValue() {
if (this.twoDatePicker.rangeEnd) {
this.el.nativeElement.value =
this.twoDatePicker.dateConverter.format(this.twoDatePicker.rangeEnd, this.twoDatePicker.dateFormat, this.twoDatePicker.locale);
}
}
ngOnDestroy() {
if (this.twoDateSub) {
this.twoDateSub.unsubscribe();
}
if (this.switchOriginSub) {
this.switchOriginSub.unsubscribe();
}
if (this.valueChangeSubscrip) {
this.valueChangeSubscrip.unsubscribe();
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TwoDatePickerEndDirective, deps: [{ token: i1.TwoDatePickerComponent }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TwoDatePickerEndDirective, selector: "[dTwoDatePickerEnd]", outputs: { selectEnd: "selectEnd" }, host: { listeners: { "blur": "onBlur($event)" } }, providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => TwoDatePickerEndDirective),
multi: true
}], exportAs: ["twoDatePickerEnd"], ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TwoDatePickerEndDirective, decorators: [{
type: Directive,
args: [{
selector: '[dTwoDatePickerEnd]',
exportAs: 'twoDatePickerEnd',
providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => TwoDatePickerEndDirective),
multi: true
}]
}]
}], ctorParameters: () => [{ type: i1.TwoDatePickerComponent }, { type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { selectEnd: [{
type: Output
}], onBlur: [{
type: HostListener,
args: ['blur', ['$event']]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdvLWRhdGVwaWNrZXItZW5kLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2RldnVpL2RhdGVwaWNrZXIvdHdvLWRhdGVwaWNrZXIvdHdvLWRhdGVwaWNrZXItZW5kLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSSxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBV3BFLE1BQU0sT0FBTyx5QkFBeUI7SUFXcEMsWUFBb0IsYUFBcUMsRUFBVSxRQUFtQixFQUNsRSxFQUFjO1FBRGQsa0JBQWEsR0FBYixhQUFhLENBQXdCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNsRSxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBVnhCLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBT3RDLGFBQVEsR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDO1FBdUVwQyxVQUFLLEdBQUcsR0FBRyxFQUFFO1lBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDO1FBckVBLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFB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bkksQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7K0dBeklVLHlCQUF5QjttR0FBekIseUJBQXlCLHNJQU56QixDQUFDO2dCQUNWLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMseUJBQXlCLENBQUM7Z0JBQ3hELEtBQUssRUFBRSxJQUFJO2FBQ1osQ0FBQzs7NEZBRVMseUJBQXlCO2tCQVRyQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFNBQVMsRUFBRSxDQUFDOzRCQUNWLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDBCQUEwQixDQUFDOzRCQUN4RCxLQUFLLEVBQUUsSUFBSTt5QkFDWixDQUFDO2lCQUNIOzRJQUdXLFNBQVM7c0JBQWxCLE1BQU07Z0JBc0NQLE1BQU07c0JBREwsWUFBWTt1QkFBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGFkZENsYXNzVG9PcmlnaW4sIHJlbW92ZUNsYXNzRnJvbU9yaWdpbiB9IGZyb20gJ25nLWRldnVpL3V0aWxzJztcbmltcG9ydCB7IGZyb21FdmVudCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFR3b0RhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL3R3by1kYXRlcGlja2VyLmNvbXBvbmVudCc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tkVHdvRGF0ZVBpY2tlckVuZF0nLFxuICBleHBvcnRBczogJ3R3b0RhdGVQaWNrZXJFbmQnLFxuICBwcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVHdvRGF0ZVBpY2tlckVuZERpcmVjdGl2ZSksXG4gICAgbXVsdGk6IHRydWVcbiAgfV1cbn0pXG5leHBvcnQgY2xhc3MgVHdvRGF0ZVBpY2tlckVuZERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cbiAgQE91dHB1dCgpIHNlbGVjdEVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHVzZXJIdG1sO1xuICBwcml2YXRlIHN3aXRjaE9yaWdpblN1YjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHR3b0RhdGVTdWI6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSB2YWx1ZUNoYW5nZVN1YnNjcmlwOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZSA9IChfOiBhbnkpID0+IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0d29EYXRlUGlja2VyOiBUd29EYXRlUGlja2VyQ29tcG9uZW50LCBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgICAgICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYpIHtcbiAgICB0aGlzLnR3b0RhdGVTdWIgPSB0aGlzLnR3b0RhdGVQaWNrZXIuc2VsZWN0RGF0ZVN1YmplY3Quc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgaWYgKGRhdGEuc2lkZSA9PT0gJ2VuZCcpIHtcbiAgICAgICAgaWYgKHRoaXMuZWwubmF0aXZlRWxlbWVudC50YWdOYW1lID09PSAnSU5QVVQnKSB7XG4gICAgICAgICAgdGhpcy53cml0ZVZhbHVlKGRhdGEuZGF0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGRhdGEuZGF0ZSA/IHRoaXMudHdvRGF0ZVBpY2tlci5mb3JtYXREYXRlKGRhdGEuZGF0ZSkgOiB0aGlzLnVzZXJIdG1sO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGF0YS5vbmx5V3JpdGUpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdEVuZC5lbWl0KGRhdGEuZGF0ZSk7XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZShkYXRhLmRhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5zd2l0Y2hPcmlnaW5TdWIgPSB0aGlzLnR3b0RhdGVQaWNrZXIuc3dpdGNoT3JpZ2luUG9zaXRpb25TdWIuc3Vic2NyaWJlKHNpZGUgPT4ge1xuICAgICAgaWYgKHNpZGUgPT09ICdlbmQnKSB7XG4gICAgICAgIGFkZENsYXNzVG9PcmlnaW4odGhpcy5lbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdmVDbGFzc0Zyb21PcmlnaW4odGhpcy5lbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlKGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgIHRoaXMudHdvRGF0ZVBpY2tlci50b2dnbGUoJ2VuZCcpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicsIFsnJGV2ZW50J10pXG4gIG9uQmx1cigkZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMudmFsaWREYXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSkpIHtcbiAgICAgIHRoaXMucmVzZXRWYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudXNlckh0bWwgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgIHRoaXMuaW5pdElucHV0Q2hhbmdlcygpO1xuICB9XG5cbiAgaW5pdElucHV0Q2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlU3Vic2NyaXAgPSBmcm9tRXZlbnQodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAna2V5dXAnKS5waXBlKFxuICAgICAgbWFwKChlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIHJldHVybiBlLnRhcmdldC52YWx1ZTtcbiAgICAgIH0pLFxuICAgICAgZGVib3VuY2VUaW1lKDMwMClcbiAgICApLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnRyYW5zVXNlcklucHV0VG9EYXRlUGlja2VyKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB3cml0ZVZhbHVlKHNlbGVjdGVkRW5kKTogdm9pZCB7XG4gICAgc2VsZWN0ZWRFbmQgPSBzZWxlY3RlZEVuZCB8fCBudWxsO1xuICAgIGNvbnN0IGZvcm1hdEVuZCA9IHNlbGVjdGVkRW5kID9cbiAgICAgIHRoaXMudHdvRGF0ZVBpY2tlci5kYXRlQ29udmVydGVyLmZvcm1hdChzZWxlY3RlZEVuZCwgdGhpcy50d29EYXRlUGlja2VyLmRhdGVGb3JtYXQsIHRoaXMudHdvRGF0ZVBpY2tlci5sb2NhbGUpIDpcbiAgICAgICcnO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCBmb3JtYXRFbmQpO1xuICAgIHRoaXMudHdvRGF0ZVBpY2tlci5zZWxlY3RFbmQoc2VsZWN0ZWRFbmQsIHRydWUpO1xuICB9XG5cbiAgY2xlYXIgPSAoKSA9PiB7XG4gICAgdGhpcy50d29EYXRlUGlja2VyLmNsZWFyKCdlbmQnKTtcbiAgfTtcblxuICB0cmFuc1VzZXJJbnB1dFRvRGF0ZVBpY2tlcih2YWx1ZT86IHN0cmluZykge1xuICAgIGlmICghdGhpcy50d29EYXRlUGlja2VyLnNob3dUaW1lKSB7XG4gICAgICBjb25zdCBfdmFsdWUgPSB2YWx1ZSB8fCB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgICBpZiAoIV92YWx1ZSAmJiAhdGhpcy50d29EYXRlUGlja2VyLnJhbmdlRW5kIHx8ICFfdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB2YWx1ZURhdGUgPSBuZXcgRGF0ZShfdmFsdWUpO1xuICAgICAgaWYgKF92YWx1ZSAmJiB0aGlzLnZhbGlkRGF0ZShfdmFsdWUpKSB7XG4gICAgICAgIHRoaXMudHdvRGF0ZVBpY2tlci5zZWxlY3RFbmQodmFsdWVEYXRlKTtcbiAgICAgICAgW3RoaXMudHdvRGF0ZVBpY2tlci5yYW5nZVN0YXJ0LCB0aGlzLnR3b0RhdGVQaWNrZXIucmFuZ2VFbmRdID0gdGhpcy50d29EYXRlUGlja2VyLnNlbGVjdGVkUmFuZ2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzZXRWYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkRGF0ZSh2YWx1ZSkge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZURhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgY29uc3QgdmFsdWVGb3JtYXQgPSB2YWx1ZURhdGUgJiYgIWlzTmFOKHZhbHVlRGF0ZS5nZXRUaW1lKCkpICYmXG4gICAgICB0aGlzLnR3b0RhdGVQaWNrZXIuZGF0ZUNvbnZlcnRlci5mb3JtYXQodmFsdWVEYXRlLCB0aGlzLnR3b0RhdGVQaWNrZXIuZGF0ZUZvcm1hdCwgdGhpcy50d29EYXRlUGlja2VyLmxvY2FsZSk7XG4gICAgaWYgKFxuICAgICAgIXZhbHVlRGF0ZSB8fCB2YWx1ZSAhPT0gdmFsdWVGb3JtYXQgfHxcbiAgICAgICh2YWx1ZSA9PT0gdmFsdWVGb3JtYXQgJiZcbiAgICAgICh2YWx1ZURhdGUuZ2V0VGltZSgpIDwgdGhpcy50d29EYXRlUGlja2VyLm1pbkRhdGUuZ2V0VGltZSgpIHx8IHZhbHVlRGF0ZS5nZXRUaW1lKCkgPiB0aGlzLnR3b0RhdGVQaWNrZXIubWF4RGF0ZS5nZXRUaW1lKCkpKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXNldFZhbHVlKCkge1xuICAgIGlmICh0aGlzLnR3b0RhdGVQaWNrZXIucmFuZ2VFbmQpIHtcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSA9XG4gICAgICAgIHRoaXMudHdvRGF0ZVBpY2tlci5kYXRlQ29udmVydGVyLmZvcm1hdCh0aGlzLnR3b0RhdGVQaWNrZXIucmFuZ2VFbmQsIHRoaXMudHdvRGF0ZVBpY2tlci5kYXRlRm9ybWF0LCB0aGlzLnR3b0RhdGVQaWNrZXIubG9jYWxlKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy50d29EYXRlU3ViKSB7XG4gICAgICB0aGlzLnR3b0RhdGVTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3dpdGNoT3JpZ2luU3ViKSB7XG4gICAgICB0aGlzLnN3aXRjaE9yaWdpblN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZhbHVlQ2hhbmdlU3Vic2NyaXApIHtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VTdWJzY3JpcC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxufVxuIl19