UNPKG

mat-daterangepicker

Version:

Angular material date picker extension to support range selection.

135 lines 17.2 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 */ 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