mat-daterangepicker
Version:
Angular material date picker extension to support range selection.
91 lines • 13.2 kB
JavaScript
/*
RANGE: Most of the code is redundant and hera as inheritance boilerplate.
The relevant code is marked with a comment.
*/
import { __decorate, __param } from "tslib";
import { Component, Input, Inject, Injector, ChangeDetectorRef, ChangeDetectionStrategy, EventEmitter, Output, Optional, ReflectiveInjector, ViewEncapsulation } from '@angular/core';
import { DateAdapter, MatDateFormats, MAT_DATE_FORMATS } from '@angular/material/core';
import { MatDatepickerIntl, MatCalendar } from '@angular/material/datepicker';
let MatDaterangeCalendar = class MatDaterangeCalendar extends MatCalendar {
// THIS SECTION IS JUST TO PROVIDE MatCalendar as SgCalendar to MatCalendarHeader
constructor(_intl, _dateAdapter, _dateFormats, changeDetectorRef, drInjector) {
super(_intl, _dateAdapter, _dateFormats, changeDetectorRef);
this.drInjector = drInjector;
this.selectedRangeEndChange = new EventEmitter();
}
ngAfterContentInit() {
super.ngAfterContentInit();
const injector = ReflectiveInjector.resolveAndCreate([{ provide: MatCalendar, useValue: this }], this.drInjector);
this._calendarHeaderPortal.injector = injector;
const activeDate = this.startAt || this['_dateAdapter'].today();
this.activeDate = this.view === 0 ? activeDate : this.getSecondViewActiveDate(activeDate);
// Assign to the private property since we don't want to move focus on init.
// this._currentView = this.startView;
}
get selectedRangeEnd() { return this._selectedRangeEnd; }
set selectedRangeEnd(value) {
this._selectedRangeEnd = this._getValidDateOrNull(this._dateAdapter.deserialize(value));
}
_dateSelectedRangeEnd(date) {
if (!this._dateAdapter.sameDate(date, this.selectedRangeEnd)) {
this.selectedRangeEndChange.emit(date);
}
}
getSecondViewActiveDate(activeDate) {
const date = this['_dateAdapter'].getDate(activeDate);
const month = this['_dateAdapter'].getMonth(activeDate);
const year = this['_dateAdapter'].getYear(activeDate);
let y, m;
if (month === 11) {
m = 0;
y = year + 1;
}
else {
m = month + 1,
y = year;
}
const D = this['_dateAdapter'].createDate(y, m, date);
return D;
}
};
MatDaterangeCalendar.ctorParameters = () => [
{ type: MatDatepickerIntl },
{ type: DateAdapter, decorators: [{ type: Optional }] },
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DATE_FORMATS,] }] },
{ type: ChangeDetectorRef },
{ type: Injector }
];
__decorate([
Input()
], MatDaterangeCalendar.prototype, "view", void 0);
__decorate([
Input()
], MatDaterangeCalendar.prototype, "setHoverCells", void 0);
__decorate([
Input()
], MatDaterangeCalendar.prototype, "clearBody", void 0);
__decorate([
Input()
], MatDaterangeCalendar.prototype, "range", void 0);
__decorate([
Input()
], MatDaterangeCalendar.prototype, "selectedRangeEnd", null);
__decorate([
Output()
], MatDaterangeCalendar.prototype, "selectedRangeEndChange", void 0);
MatDaterangeCalendar = __decorate([
Component({
selector: 'mat-daterange-calendar',
template: "<!-- \n\tRANGE: Most of the code is redundant and hera as inheritance boilerplate.\n\tThe relevant code is marked with a comment.\n\tADDED LOC ~3\n-->\n<ng-template [cdkPortalOutlet]=\"_calendarHeaderPortal\"></ng-template>\n\n<div class=\"mat-calendar-content\" [ngSwitch]=\"currentView\" cdkMonitorSubtreeFocus tabindex=\"-1\">\n\n\t<mat-daterange-month-view\n\t\t*ngSwitchCase=\"'month'\"\n\t\t[view]=\"view\"\n\t\t[activeDate]=\"activeDate\"\n\t\t[selected]=\"selected\"\n\t\t[dateFilter]=\"dateFilter\"\n\t\t[maxDate]=\"maxDate\"\n\t\t[minDate]=\"minDate\"\n\t\t(selectedChange)=\"_dateSelected($event)\"\n\t\t(_userSelection)=\"_userSelected()\"\n\n\t\t[range]=\"range\"\n\t\t[setHoverCells]=\"setHoverCells\"\n\t\t[clearBody]=\"clearBody\"\n\t\t[selectedRangeEnd]=\"selectedRangeEnd\"\n\t\t(selectedRangeEndChange)=\"_dateSelectedRangeEnd($event)\">\n\t\t<!-- THE 3 LINES ABOVE ARE THE ONLY ADDITION -->\n\t</mat-daterange-month-view>\n\n\t<mat-year-view\n\t\t*ngSwitchCase=\"'year'\"\n\t\t[activeDate]=\"activeDate\"\n\t\t[selected]=\"selected\"\n\t\t[dateFilter]=\"dateFilter\"\n\t\t[maxDate]=\"maxDate\"\n\t\t[minDate]=\"minDate\"\n\t\t(monthSelected)=\"_monthSelectedInYearView($event)\"\n\t\t(selectedChange)=\"_goToDateInView($event, 'month')\">\n\t</mat-year-view>\n\n\t<mat-multi-year-view\n\t\t*ngSwitchCase=\"'multi-year'\"\n\t\t[activeDate]=\"activeDate\"\n\t\t[selected]=\"selected\"\n\t\t[dateFilter]=\"dateFilter\"\n\t\t[maxDate]=\"maxDate\"\n\t\t[minDate]=\"minDate\"\n\t\t(yearSelected)=\"_yearSelectedInMultiYearView($event)\"\n\t\t(selectedChange)=\"_goToDateInView($event, 'year')\">\n\t</mat-multi-year-view>\n</div>\n\n",
host: {
'class': 'mat-calendar',
},
exportAs: 'matDaterangeCalendar',
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush
}),
__param(1, Optional()),
__param(2, Optional()), __param(2, Inject(MAT_DATE_FORMATS))
], MatDaterangeCalendar);
export { MatDaterangeCalendar };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbWF0LWRhdGVyYW5nZXBpY2tlci8iLCJzb3VyY2VzIjpbImxpYi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztFQUdFOztBQUVGLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdEwsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd2RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFhOUUsSUFBYSxvQkFBb0IsR0FBakMsTUFBYSxvQkFBd0IsU0FBUSxXQUFjO0lBSzFELGlGQUFpRjtJQUNqRixZQUFZLEtBQXdCLEVBQ3JCLFlBQTRCLEVBQ0YsWUFBNEIsRUFDbEUsaUJBQW9DLEVBQzVCLFVBQW9CO1FBQzlCLEtBQUssQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBRGxELGVBQVUsR0FBVixVQUFVLENBQVU7UUEwQlosMkJBQXNCLEdBQW9CLElBQUksWUFBWSxFQUFLLENBQUM7SUF4Qm5GLENBQUM7SUFDRCxrQkFBa0I7UUFDakIsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0IsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTFGLElBQUksQ0FBQyxxQkFBc0Is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dGVudCI6WyIvKlxuICAgIFJBTkdFOiBNb3N0IG9mIHRoZSBjb2RlIGlzIHJlZHVuZGFudCBhbmQgaGVyYSBhcyBpbmhlcml0YW5jZSBib2lsZXJwbGF0ZS5cbiAgICBUaGUgcmVsZXZhbnQgY29kZSBpcyBtYXJrZWQgd2l0aCBhIGNvbW1lbnQuXG4qL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBJbmplY3QsIEluamVjdG9yLCBDaGFuZ2VEZXRlY3RvclJlZiwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBPcHRpb25hbCwgUmVmbGVjdGl2ZUluamVjdG9yLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBEYXRlQWRhcHRlciwgTWF0RGF0ZUZvcm1hdHMsIE1BVF9EQVRFX0ZPUk1BVFMgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuXG5pbXBvcnQgeyBNYXREYXRlcGlja2VySW50bCwgTWF0Q2FsZW5kYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtZGF0ZXJhbmdlLWNhbGVuZGFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDoge1xuICAgICdjbGFzcyc6ICdtYXQtY2FsZW5kYXInLFxuICB9LFxuICBleHBvcnRBczogJ21hdERhdGVyYW5nZUNhbGVuZGFyJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTWF0RGF0ZXJhbmdlQ2FsZW5kYXI8RD4gZXh0ZW5kcyBNYXRDYWxlbmRhcjxEPiB7XG5cdEBJbnB1dCgpIHZpZXc6IG51bWJlclxuXHRASW5wdXQoKSBzZXRIb3ZlckNlbGxzOiBCZWhhdmlvclN1YmplY3Q8YW55PlxuXHRASW5wdXQoKSBjbGVhckJvZHk6IEJlaGF2aW9yU3ViamVjdDxhbnk+XG5cdFxuXHQvLyBUSElTIFNFQ1RJT04gSVMgSlVTVCBUTyBQUk9WSURFIE1hdENhbGVuZGFyIGFzIFNnQ2FsZW5kYXIgdG8gTWF0Q2FsZW5kYXJIZWFkZXJcblx0Y29uc3RydWN0b3IoX2ludGw6IE1hdERhdGVwaWNrZXJJbnRsLFxuXHRcdFx0XHRAT3B0aW9uYWwoKSBfZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPEQ+LFxuXHRcdFx0XHRAT3B0aW9uYWwoKSBASW5qZWN0KE1BVF9EQVRFX0ZPUk1BVFMpIF9kYXRlRm9ybWF0czogTWF0RGF0ZUZvcm1hdHMsXG5cdFx0XHRcdGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcblx0XHRcdFx0cHJpdmF0ZSBkckluamVjdG9yOiBJbmplY3Rvcikge1xuXHRcdHN1cGVyKF9pbnRsLCBfZGF0ZUFkYXB0ZXIsIF9kYXRlRm9ybWF0cywgY2hhbmdlRGV0ZWN0b3JSZWYpO1xuXHR9XG5cdG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcblx0XHRzdXBlci5uZ0FmdGVyQ29udGVudEluaXQoKTsgICAgXG5cdFx0Y29uc3QgaW5qZWN0b3IgPSBSZWZsZWN0aXZlSW5qZWN0b3IucmVzb2x2ZUFuZENyZWF0ZShbeyBwcm92aWRlOiBNYXRDYWxlbmRhciwgdXNlVmFsdWU6IHRoaXMgfV0sIHRoaXMuZHJJbmplY3Rvcik7XG5cblx0XHQoPENvbXBvbmVudFBvcnRhbDxhbnk+PiB0aGlzLl9jYWxlbmRhckhlYWRlclBvcnRhbCkuaW5qZWN0b3IgPSBpbmplY3RvcjtcblxuXHRcdGNvbnN0IGFjdGl2ZURhdGUgPSB0aGlzLnN0YXJ0QXQgfHwgdGhpc1snX2RhdGVBZGFwdGVyJ10udG9kYXkoKTtcblxuXHRcdHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMudmlldyA9PT0gMCA/IGFjdGl2ZURhdGUgOiB0aGlzLmdldFNlY29uZFZpZXdBY3RpdmVEYXRlKGFjdGl2ZURhdGUpXG5cdFxuXHRcdC8vIEFzc2lnbiB0byB0aGUgcHJpdmF0ZSBwcm9wZXJ0eSBzaW5jZSB3ZSBkb24ndCB3YW50IHRvIG1vdmUgZm9jdXMgb24gaW5pdC5cblx0XHQvLyB0aGlzLl9jdXJyZW50VmlldyA9IHRoaXMuc3RhcnRWaWV3O1xuXHR9XG5cblx0LyogUkVMRVZBTlQgQ09ERSBGT1IgTkFUSVZFIElNUExFTUVOVEFUSU9OIC0gfiAxMCBMT0MgKi9cblxuXHRASW5wdXQoKSByYW5nZTogYm9vbGVhbjtcblxuXHRASW5wdXQoKSBnZXQgc2VsZWN0ZWRSYW5nZUVuZCgpOiBEIHwgbnVsbCB7IHJldHVybiB0aGlzLl9zZWxlY3RlZFJhbmdlRW5kOyB9XG5cdHNldCBzZWxlY3RlZFJhbmdlRW5kKHZhbHVlOiBEIHwgbnVsbCkge1xuXHRcdHRoaXMuX3NlbGVjdGVkUmFuZ2VFbmQgPSAoPGFueT4gdGhpcykuX2dldFZhbGlkRGF0ZU9yTnVsbCggKCA8YW55PiB0aGlzKS5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpKTtcblx0fVxuXG5cdEBPdXRwdXQoKSByZWFkb25seSBzZWxlY3RlZFJhbmdlRW5kQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RD4gPSBuZXcgRXZlbnRFbWl0dGVyPEQ+KCk7XG5cblx0cHJpdmF0ZSBfc2VsZWN0ZWRSYW5nZUVuZDogRCB8IG51bGw7XG5cblx0X2RhdGVTZWxlY3RlZFJhbmdlRW5kKGRhdGU6IEQpOiB2b2lkIHtcblx0XHRpZiAoISg8YW55PiB0aGlzKS5fZGF0ZUFkYXB0ZXIuc2FtZURhdGUoZGF0ZSwgdGhpcy5zZWxlY3RlZFJhbmdlRW5kKSkge1xuXHRcdFx0dGhpcy5zZWxlY3RlZFJhbmdlRW5kQ2hhbmdlLmVtaXQoZGF0ZSk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0U2Vjb25kVmlld0FjdGl2ZURhdGUoYWN0aXZlRGF0ZSl7XG5cdFx0Y29uc3QgZGF0ZSA9ICg8RGF0ZUFkYXB0ZXI8RD4+dGhpc1snX2RhdGVBZGFwdGVyJ10pLmdldERhdGUoYWN0aXZlRGF0ZSlcblx0XHRjb25zdCBtb250aCA9ICg8RGF0ZUFkYXB0ZXI8RD4+dGhpc1snX2RhdGVBZGFwdGVyJ10pLmdldE1vbnRoKGFjdGl2ZURhdGUpXG5cdFx0Y29uc3QgeWVhciA9ICg8RGF0ZUFkYXB0ZXI8RD4+dGhpc1snX2RhdGVBZGFwdGVyJ10pLmdldFllYXIoYWN0aXZlRGF0ZSlcblx0XHRsZXQgeSwgbVxuXHRcdGlmKG1vbnRoID09PSAxMSl7XG5cdFx0XHRtID0gMFxuXHRcdFx0eSA9IHllYXIgKyAxXG5cdFx0fWVsc2V7XG5cdFx0XHRtID0gbW9udGggKyAxLFxuXHRcdFx0eSA9IHllYXJcblx0XHR9XG5cdFx0Y29uc3QgRCA9ICg8RGF0ZUFkYXB0ZXI8RD4+dGhpc1snX2RhdGVBZGFwdGVyJ10pLmNyZWF0ZURhdGUoeSwgbSwgZGF0ZSlcblx0XHRyZXR1cm4gRFxuXHR9XG4gIFxufVxuIl19