mat-daterangepicker
Version:
Angular material date picker extension to support range selection.
135 lines • 17.2 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
*/
var MatDaterangepickerInputEnd_1;
import { __decorate, __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 const SG_DATEPICKER_VALUE_ACCESSOR = {
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => MatDaterangepickerInputEnd),
multi: true
};
export const SG_DATEPICKER_VALIDATORS = {
provide: NG_VALIDATORS,
useExisting: forwardRef(() => MatDaterangepickerInputEnd),
multi: true
};
let MatDaterangepickerInputEnd = MatDaterangepickerInputEnd_1 = class MatDaterangepickerInputEnd extends MatDatepickerInput {
constructor(_drElementRef, _drDateAdapter, _drDateFormats, _drFormField) {
super(_drElementRef, _drDateAdapter, _drDateFormats, _drFormField);
this._drElementRef = _drElementRef;
this._drDateAdapter = _drDateAdapter;
this._drDateFormats = _drDateFormats;
this._drFormField = _drFormField;
this._matDatepickerSubscription = Subscription.EMPTY;
this._drCvaOnChange = () => { };
this._drDatepickerClearSubscription = Subscription.EMPTY;
}
set matDaterangepickerEnd(value) {
if (this._datepicker !== value) {
this.unregister();
this._datepicker = value;
value._registerInputRangeEnd(this);
}
}
get _matDaterangepickerEnd() {
return this._datepicker;
}
ngAfterViewInit() {
// 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);
// }
// }
// })
}
ngAfterContentInit() {
if (this._datepicker) {
this._matDatepickerSubscription = this._matDaterangepickerEnd._selectedChangedRangeEnd.subscribe((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(() => {
this.value = null;
this._drCvaOnChange(null);
});
}
}
ngOnDestroy() {
super.ngOnDestroy();
this.unregister();
this._matDatepickerSubscription.unsubscribe();
this._drDatepickerClearSubscription.unsubscribe();
}
// Implemented as part of ControlValueAccessor.
registerOnChange(fn) {
this._drCvaOnChange = fn;
super.registerOnChange(fn);
}
unregister() {
if (this._matDaterangepickerEnd) {
this._matDaterangepickerEnd._unregisterInputRangeEnd(this);
}
}
};
MatDaterangepickerInputEnd.ctorParameters = () => [
{ 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);
export { MatDaterangepickerInputEnd };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9tYXQtZGF0ZXJhbmdlcGlja2VyLyIsInNvdXJjZXMiOlsibGliL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1pbnB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztFQU1FOzs7QUFFRixPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHM0YsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBUTtJQUMvQyxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsMEJBQTBCLENBQUM7SUFDekQsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBR0YsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQVE7SUFDM0MsT0FBTyxFQUFFLGFBQWE7SUFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztJQUN6RCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUF1QkYsSUFBYSwwQkFB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IHJlZHVuZGFudCBhbmQgaGVyYSBhcyBpbmhlcml0YW5jZSBib2lsZXJwbGF0ZS5cbiAgICBUaGUgcmVsZXZhbnQgY29kZSBhZGRzIHNpbXBsZSBsb2dpYyBmb3IgYSAybmQgaW5wdXQsIGNvbWJpbmVkIHdpdGggbWluaW1hbCBjaGFuZ2VzIGluIHRoZVxuICAgIGRhdGVwaWNrZXIgY29tcG9uZW50LCB0aGUgd29yayBpcyBkb25lIHRoZXJlIHNvIGluIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiB0aGlzIHNob3VsZCBoYXZlXG4gICAgbWluaW1hbCBjaGFuZ2VzLCBwZXJoYXBzIHVzaW5nIGRlZGljYXRlZCBpbnB1dCB3aXRob3V0IG1pbi9tYXgvZmlsdGVyIGV0Yy4uLiB3aGljaCBhcmUgb25seVxuICAgIHNldCBvbiB0aGUgMXN0IGlucHV0XG4qL1xuXG5pbXBvcnQgeyBEaXJlY3RpdmUsIGZvcndhcmRSZWYsIE9wdGlvbmFsLCBJbnB1dCwgSW5qZWN0LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBEYXRlQWRhcHRlciwgTWF0RGF0ZUZvcm1hdHMsIE1BVF9EQVRFX0ZPUk1BVFMgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTUFUX0lOUFVUX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlcklucHV0LCBNYXREYXRlcGlja2VySW5wdXRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuXG5pbXBvcnQgeyBNYXREYXRlcmFuZ2VwaWNrZXIgfSBmcm9tICcuL2RhdGVwaWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgY29uc3QgU0dfREFURVBJQ0tFUl9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWF0RGF0ZXJhbmdlcGlja2VySW5wdXRFbmQpLFxuICBtdWx0aTogdHJ1ZVxufTtcblxuXG5leHBvcnQgY29uc3QgU0dfREFURVBJQ0tFUl9WQUxJREFUT1JTOiBhbnkgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1hdERhdGVyYW5nZXBpY2tlcklucHV0RW5kKSxcbiAgbXVsdGk6IHRydWVcbn07XG5cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW21hdERhdGVyYW5nZXBpY2tlckVuZF0nLFxuICBwcm92aWRlcnM6IFtcbiAgICBTR19EQVRFUElDS0VSX1ZBTFVFX0FDQ0VTU09SLFxuICAgIFNHX0RBVEVQSUNLRVJfVkFMSURBVE9SUyxcbiAgICB7cHJvdmlkZTogTUFUX0lOUFVUX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogTWF0RGF0ZXJhbmdlcGlja2VySW5wdXRFbmR9LFxuICBdLFxuICBob3N0OiB7XG4gICAgJ1thdHRyLmFyaWEtaGFzcG9wdXBdJzogJ3RydWUnLFxuICAgICdbYXR0ci5hcmlhLW93bnNdJzogJyhfZGF0ZXBpY2tlcj8ub3BlbmVkICYmIF9kYXRlcGlja2VyLmlkKSB8fCBudWxsJyxcbiAgICAnW2F0dHIubWluXSc6ICdtaW4gPyBfZGF0ZUFkYXB0ZXIudG9Jc284NjAxKG1pbikgOiBudWxsJyxcbiAgICAnW2F0dHIubWF4XSc6ICdtYXggPyBfZGF0ZUFkYXB0ZXIudG9Jc284NjAxKG1heCkgOiBudWxsJyxcbiAgICAnW2Rpc2FibGVkXSc6ICdkaXNhYmxlZCcsXG4gICAgJyhpbnB1dCknOiAnX29uSW5wdXQoJGV2ZW50LnRhcmdldC52YWx1ZSknLFxuICAgICcoY2hhbmdlKSc6ICdfb25DaGFuZ2UoKScsXG4gICAgJyhibHVyKSc6ICdfb25CbHVyKCknLFxuICAgICcoa2V5ZG93biknOiAnX29uS2V5ZG93bigkZXZlbnQpJyxcbiAgfSxcbiAgZXhwb3J0QXM6ICdNYXREYXRlcmFuZ2VwaWNrZXJJbnB1dEVuZCcsXG59KVxuZXhwb3J0IGNsYXNzIE1hdERhdGVyYW5nZXBpY2tlcklucHV0RW5kPEQ+IGV4dGVuZHMgTWF0RGF0ZXBpY2tlcklucHV0PEQ+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblx0QElucHV0KClcblx0c2V0IG1hdERhdGVyYW5nZXBpY2tlckVuZCh2YWx1ZTogTWF0RGF0ZXJhbmdlcGlja2VyPEQ+KSB7XG5cdFx0aWYgKHRoaXMuX2RhdGVwaWNrZXIgIT09IHZhbHVlKSB7XG5cdFx0XHR0aGlzLnVucmVnaXN0ZXIoKTtcblx0XHRcdHRoaXMuX2RhdGVwaWNrZXIgPSB2YWx1ZTtcblx0XHRcdHZhbHVlLl9yZWdpc3RlcklucHV0UmFuZ2VFbmQodGhpcyk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXQgX21hdERhdGVyYW5nZXBpY2tlckVuZCgpIDogTWF0RGF0ZXJhbmdlcGlja2VyPEQ+IHtcblx0XHRyZXR1cm4gPGFueT4gdGhpcy5fZGF0ZXBpY2tlcjtcblx0fVxuXG5cdHByaXZhdGUgX21hdERhdGVwaWNrZXJTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cdHByaXZhdGUgX2RyQ3ZhT25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XG5cblx0cHJpdmF0ZSBfZHJEYXRlcGlja2VyQ2xlYXJTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cblx0Y29uc3RydWN0b3IocHJpdmF0ZSBfZHJFbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuXHRcdFx0XHRAT3B0aW9uYWwoKSBwdWJsaWMgX2RyRGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPEQ+LFxuXHRcdFx0XHRAT3B0aW9uYWwoKSBASW5qZWN0KE1BVF9EQVRFX0ZPUk1BVFMpIHByaXZhdGUgX2RyRGF0ZUZvcm1hdHM6IE1hdERhdGVGb3JtYXRzLFxuXHRcdFx0XHRAT3B0aW9uYWwoKSBwcml2YXRlIF9kckZvcm1GaWVsZDogTWF0Rm9ybUZpZWxkKSB7XG5cdFx0c3VwZXIoX2RyRWxlbWVudFJlZiwgX2RyRGF0ZUFkYXB0ZXIsIF9kckRhdGVGb3JtYXRzLCBfZHJGb3JtRmllbGQpOyBcblx0fVxuXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpe1xuXHRcdC8vIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndmFsdWUnLCB7XG5cdFx0Ly8gICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZTogRCB8IG51bGwpIHtcblx0XHQvLyAgICAgaWYoIXRoaXMuX21hdERhdGVyYW5nZXBpY2tlckVuZC5hcHBseUJ1dHRvbil7XG5cdFx0Ly8gICAgICAgY29uc29sZS5sb2coJ2VuZCAnK3ZhbHVlKVxuXHRcdC8vICAgICAgIHJldHVybjtcblx0XHQvLyAgICAgfVxuXHRcdC8vICAgICB2YWx1ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKTtcblx0XHQvLyAgICAgdGhpcy5fbGFzdFZhbHVlVmFsaWQgPSAhdmFsdWUgfHwgdGhpcy5fZGF0ZUFkYXB0ZXIuaXNWYWxpZCh2YWx1ZSk7XG5cdFx0Ly8gICAgIHZhbHVlID0gdGhpcy5fZ2V0VmFsaWREYXRlT3JOdWxsKHZhbHVlKTtcblx0XHQvLyAgICAgY29uc3Qgb2xkRGF0ZSA9IHRoaXMudmFsdWU7XG5cdFx0Ly8gICAgIHRoaXNbJ19hc3NpZ25WYWx1ZSddKHZhbHVlKTtcblx0XHQvLyAgICAgdGhpc1snX2Zvcm1hdFZhbHVlJ10odmFsdWUpO1xuXG5cdFx0Ly8gICAgIGlmICghdGhpcy5fZGF0ZUFkYXB0ZXIuc2FtZURhdGUob2xkRGF0ZSwgdmFsdWUpKSB7XG5cdFx0Ly8gICAgICAgdGhpcy5fdmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG5cdFx0Ly8gICAgIH1cblx0XHQvLyAgIH1cblx0XHQvLyB9KVxuXHR9XG5cblx0bmdBZnRlckNvbnRlbnRJbml0KCkge1xuXHRcdGlmICh0aGlzLl9kYXRlcGlja2VyKSB7XG5cdFx0XHR0aGlzLl9tYXREYXRlcGlja2VyU3Vic2NyaXB0aW9uID0gdGhpcy5fbWF0RGF0ZXJhbmdlcGlja2VyRW5kLl9zZWxlY3RlZENoYW5nZWRSYW5nZUVuZC5zdWJzY3JpYmUoKHNlbGVjdGVkOiBEKSA9PiB7XG5cdFx0XHRcdHRoaXMudmFsdWUgPSBzZWxlY3RlZDtcblx0XHRcdFx0dGhpcy5fZHJDdmFPbkNoYW5nZShzZWxlY3RlZCk7XG5cdFx0XHRcdHRoaXMuX29uVG91Y2hlZCgpO1xuXHRcdFx0XHR0aGlzLmRhdGVJbnB1dC5lbWl0KG5ldyBNYXREYXRlcGlja2VySW5wdXRFdmVudCh0aGlzLCB0aGlzLl9kckVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpO1xuXHRcdFx0XHR0aGlzLmRhdGVDaGFuZ2UuZW1pdChuZXcgTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQodGhpcywgdGhpcy5fZHJFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpKTtcblx0XHRcdH0pXG5cblx0XHRcdC8vcnVucyBldmVyeSBjbGVhciByYW5nZSBlbmRcblx0XHRcdHRoaXMuX2RyRGF0ZXBpY2tlckNsZWFyU3Vic2NyaXB0aW9uID0gdGhpcy5fbWF0RGF0ZXJhbmdlcGlja2VyRW5kLl9jbGVhclJhbmdlRW5kLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMudmFsdWUgPSBudWxsXG5cdFx0XHRcdHRoaXMuX2RyQ3ZhT25DaGFuZ2UobnVsbCk7XG5cdFx0XHR9KVxuXHRcdH1cblx0fVxuXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdHN1cGVyLm5nT25EZXN0cm95KCk7XG5cdFx0dGhpcy51bnJlZ2lzdGVyKCk7XG5cdFx0dGhpcy5fbWF0RGF0ZXBpY2tlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXHRcdHRoaXMuX2RyRGF0ZXBpY2tlckNsZWFyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cdH1cblxuXHQvLyBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuXHRyZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdHRoaXMuX2RyQ3ZhT25DaGFuZ2UgPSBmbjtcblx0XHRzdXBlci5yZWdpc3Rlck9uQ2hhbmdlKGZuKTtcblx0fVxuXG5cdHByaXZhdGUgdW5yZWdpc3RlcigpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5fbWF0RGF0ZXJhbmdlcGlja2VyRW5kKSB7XG5cdFx0XHR0aGlzLl9tYXREYXRlcmFuZ2VwaWNrZXJFbmQuX3VucmVnaXN0ZXJJbnB1dFJhbmdlRW5kKHRoaXMpO1xuXHRcdH1cblx0fVxufVxuIl19