@taiga-ui/kit
Version:
Taiga UI Angular main components kit
127 lines • 17.1 kB
JavaScript
import { __decorate, __param } from "tslib";
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, OnInit, Optional, Output, } from '@angular/core';
import { ALWAYS_FALSE_HANDLER, TUI_FIRST_DAY, TUI_LAST_DAY, TuiBooleanHandler, TuiDay, TuiDayRange, tuiDefaultProp, TuiDestroyService, TuiMapper, TuiMonth, watch, } from '@taiga-ui/cdk';
import { TUI_DEFAULT_MARKER_HANDLER } from '@taiga-ui/core';
import { TUI_CALENDAR_DATA_STREAM } from '@taiga-ui/kit/tokens';
import { Observable } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
/**
* @internal
*/
let TuiPrimitiveCalendarRangeComponent = class TuiPrimitiveCalendarRangeComponent {
constructor(valueChanges, changeDetectorRef, destroy$) {
this.disabledItemHandler = ALWAYS_FALSE_HANDLER;
this.markerHandler = TUI_DEFAULT_MARKER_HANDLER;
this.defaultViewedMonthFirst = TuiMonth.currentLocal();
this.defaultViewedMonthSecond = TuiMonth.currentLocal().append({ month: 1 });
this.min = TUI_FIRST_DAY;
this.max = TUI_LAST_DAY;
this.value = null;
this.dayClick = new EventEmitter();
this.hoveredItem = null;
this.monthOffset = (value, offset) => value.append({ month: offset });
this.userViewedMonthFirst = this.defaultViewedMonthFirst;
this.userViewedMonthSecond = this.defaultViewedMonthSecond;
if (!valueChanges) {
return;
}
valueChanges
.pipe(watch(changeDetectorRef), takeUntil(destroy$))
.subscribe(value => {
this.value = value;
this.updateViewedMonths();
});
}
get cappedUserViewedMonthSecond() {
return this.userViewedMonthSecond.monthBefore(this.max)
? this.userViewedMonthSecond
: this.max;
}
get cappedUserViewedMonthFirst() {
return this.userViewedMonthFirst.monthSameOrBefore(this.userViewedMonthSecond)
? this.userViewedMonthFirst
: this.userViewedMonthSecond;
}
ngOnInit() {
this.updateViewedMonths();
}
onSectionFirstViewedMonth(month) {
this.userViewedMonthFirst = month;
if (this.userViewedMonthSecond.year < this.userViewedMonthFirst.year) {
this.userViewedMonthSecond = this.userViewedMonthSecond.append({
year: month.year - this.userViewedMonthSecond.year,
});
}
}
onSectionSecondViewedMonth(month) {
this.userViewedMonthSecond = month;
if (this.userViewedMonthFirst.year > this.userViewedMonthSecond.year) {
this.userViewedMonthFirst = this.userViewedMonthFirst.append({
year: month.year - this.userViewedMonthFirst.year,
});
}
}
onDayClick(day) {
this.dayClick.emit(day);
}
updateViewedMonths() {
this.userViewedMonthFirst =
this.value === null ? this.defaultViewedMonthFirst : this.value.from;
this.userViewedMonthSecond =
this.value === null ? this.defaultViewedMonthSecond : this.value.to;
if (this.userViewedMonthFirst.monthSame(this.userViewedMonthSecond)) {
this.userViewedMonthSecond = this.userViewedMonthSecond.append({ month: 1 });
}
}
};
TuiPrimitiveCalendarRangeComponent.ctorParameters = () => [
{ type: Observable, decorators: [{ type: Inject, args: [TUI_CALENDAR_DATA_STREAM,] }, { type: Optional }] },
{ type: ChangeDetectorRef, decorators: [{ type: Inject, args: [ChangeDetectorRef,] }] },
{ type: TuiDestroyService, decorators: [{ type: Inject, args: [TuiDestroyService,] }] }
];
__decorate([
Input(),
tuiDefaultProp()
], TuiPrimitiveCalendarRangeComponent.prototype, "disabledItemHandler", void 0);
__decorate([
Input(),
tuiDefaultProp()
], TuiPrimitiveCalendarRangeComponent.prototype, "markerHandler", void 0);
__decorate([
Input(),
tuiDefaultProp()
], TuiPrimitiveCalendarRangeComponent.prototype, "defaultViewedMonthFirst", void 0);
__decorate([
Input(),
tuiDefaultProp()
], TuiPrimitiveCalendarRangeComponent.prototype, "defaultViewedMonthSecond", void 0);
__decorate([
Input(),
tuiDefaultProp()
], TuiPrimitiveCalendarRangeComponent.prototype, "min", void 0);
__decorate([
Input(),
tuiDefaultProp()
], TuiPrimitiveCalendarRangeComponent.prototype, "max", void 0);
__decorate([
Input(),
tuiDefaultProp()
], TuiPrimitiveCalendarRangeComponent.prototype, "value", void 0);
__decorate([
Output()
], TuiPrimitiveCalendarRangeComponent.prototype, "dayClick", void 0);
TuiPrimitiveCalendarRangeComponent = __decorate([
Component({
selector: 'tui-primitive-calendar-range',
template: "<tui-calendar\n [min]=\"min\"\n [max]=\"max\"\n [month]=\"userViewedMonthFirst\"\n [markerHandler]=\"markerHandler\"\n [maxViewedMonth]=\"cappedUserViewedMonthSecond | tuiMapper: monthOffset: -1\"\n [value]=\"value\"\n [disabledItemHandler]=\"disabledItemHandler\"\n [showAdjacent]=\"false\"\n [(hoveredItem)]=\"hoveredItem\"\n (dayClick)=\"onDayClick($event)\"\n (monthChange)=\"onSectionFirstViewedMonth($event)\"\n></tui-calendar>\n<tui-calendar\n class=\"border\"\n [min]=\"min\"\n [max]=\"max\"\n [month]=\"userViewedMonthSecond\"\n [markerHandler]=\"markerHandler\"\n [minViewedMonth]=\"cappedUserViewedMonthFirst | tuiMapper: monthOffset: 1\"\n [value]=\"value\"\n [disabledItemHandler]=\"disabledItemHandler\"\n [showAdjacent]=\"false\"\n [(hoveredItem)]=\"hoveredItem\"\n (dayClick)=\"onDayClick($event)\"\n (monthChange)=\"onSectionSecondViewedMonth($event)\"\n></tui-calendar>\n",
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [TuiDestroyService],
styles: [":host{display:flex}.border{border-left:1px solid var(--tui-base-03)}"]
}),
__param(0, Inject(TUI_CALENDAR_DATA_STREAM)),
__param(0, Optional()),
__param(1, Inject(ChangeDetectorRef)),
__param(2, Inject(TuiDestroyService))
], TuiPrimitiveCalendarRangeComponent);
export { TuiPrimitiveCalendarRangeComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbWl0aXZlLWNhbGVuZGFyLXJhbmdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B0YWlnYS11aS9raXQvaW50ZXJuYWwvcHJpbWl0aXZlLWNhbGVuZGFyLXJhbmdlLyIsInNvdXJjZXMiOlsicHJpbWl0aXZlLWNhbGVuZGFyLXJhbmdlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixRQUFRLEVBQ1IsTUFBTSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDSCxvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLFlBQVksRUFDWixpQkFBaUIsRUFDakIsTUFBTSxFQUNOLFdBQVcsRUFDWCxjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsS0FBSyxHQUNSLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQywwQkFBMEIsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6Qzs7R0FFRztBQVFILElBQWEsa0NBQWtDLEdBQS9DLE1BQWEsa0NBQWtDO0lBd0MzQyxZQUdJLFlBQW1ELEVBQ3hCLGlCQUFvQyxFQUNwQyxRQUEyQjtRQTFDMUQsd0JBQW1CLEdBQThCLG9CQUFvQixDQUFDO1FBSXRFLGtCQUFhLEdBQXFCLDBCQUEwQixDQUFDO1FBSTdELDRCQUF1QixHQUFHLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUlsRCw2QkFBd0IsR0FBRyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUMsTUFBTSxD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QixDQUFDOztLQUNqQyxDQUFDO0lBMENPLFdBQUEsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUE7SUFDaEMsV0FBQSxRQUFRLEVBQUUsQ0FBQTtJQUVWLFdBQUEsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUE7SUFDekIsV0FBQSxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtHQTdDckIsa0NBQWtDLENBNkc5QztTQTdHWSxrQ0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBTFdBWVNfRkFMU0VfSEFORExFUixcbiAgICBUVUlfRklSU1RfREFZLFxuICAgIFRVSV9MQVNUX0RBWSxcbiAgICBUdWlCb29sZWFuSGFuZGxlcixcbiAgICBUdWlEYXksXG4gICAgVHVpRGF5UmFuZ2UsXG4gICAgdHVpRGVmYXVsdFByb3AsXG4gICAgVHVpRGVzdHJveVNlcnZpY2UsXG4gICAgVHVpTWFwcGVyLFxuICAgIFR1aU1vbnRoLFxuICAgIHdhdGNoLFxufSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7VFVJX0RFRkFVTFRfTUFSS0VSX0hBTkRMRVIsIFR1aU1hcmtlckhhbmRsZXJ9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7VFVJX0NBTEVOREFSX0RBVEFfU1RSRUFNfSBmcm9tICdAdGFpZ2EtdWkva2l0L3Rva2Vucyc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHt0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0dWktcHJpbWl0aXZlLWNhbGVuZGFyLXJhbmdlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcHJpbWl0aXZlLWNhbGVuZGFyLXJhbmdlLnRlbXBsYXRlLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3ByaW1pdGl2ZS1jYWxlbmRhci1yYW5nZS5zdHlsZS5sZXNzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbVHVpRGVzdHJveVNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBUdWlQcmltaXRpdmVDYWxlbmRhclJhbmdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgZGlzYWJsZWRJdGVtSGFuZGxlcjogVHVpQm9vbGVhbkhhbmRsZXI8VHVpRGF5PiA9IEFMV0FZU19GQUxTRV9IQU5ETEVSO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIG1hcmtlckhhbmRsZXI6IFR1aU1hcmtlckhhbmRsZXIgPSBUVUlfREVGQVVMVF9NQVJLRVJfSEFORExFUjtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBkZWZhdWx0Vmlld2VkTW9udGhGaXJzdCA9IFR1aU1vbnRoLmN1cnJlbnRMb2NhbCgpO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIGRlZmF1bHRWaWV3ZWRNb250aFNlY29uZCA9IFR1aU1vbnRoLmN1cnJlbnRMb2NhbCgpLmFwcGVuZCh7bW9udGg6IDF9KTtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBtaW4gPSBUVUlfRklSU1RfREFZO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIG1heCA9IFRVSV9MQVNUX0RBWTtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICB2YWx1ZTogVHVpRGF5UmFuZ2UgfCBudWxsID0gbnVsbDtcblxuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGRheUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxUdWlEYXk+KCk7XG5cbiAgICBob3ZlcmVkSXRlbTogVHVpRGF5IHwgbnVsbCA9IG51bGw7XG5cbiAgICBtb250aE9mZnNldDogVHVpTWFwcGVyPFR1aU1vbnRoLCBUdWlNb250aD4gPSAodmFsdWUsIG9mZnNldDogbnVtYmVyKSA9PlxuICAgICAgICB2YWx1ZS5hcHBlbmQoe21vbnRoOiBvZmZzZXR9KTtcblxuICAgIHVzZXJWaWV3ZWRNb250aEZpcnN0OiBUdWlNb250aCA9IHRoaXMuZGVmYXVsdFZpZXdlZE1vbnRoRmlyc3Q7XG4gICAgdXNlclZpZXdlZE1vbnRoU2Vjb25kOiBUdWlNb250aCA9IHRoaXMuZGVmYXVsdFZpZXdlZE1vbnRoU2Vjb25kO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoVFVJX0NBTEVOREFSX0RBVEFfU1RSRUFNKVxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICB2YWx1ZUNoYW5nZXM6IE9ic2VydmFibGU8VHVpRGF5UmFuZ2UgfCBudWxsPiB8IG51bGwsXG4gICAgICAgIEBJbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQEluamVjdChUdWlEZXN0cm95U2VydmljZSkgZGVzdHJveSQ6IFR1aURlc3Ryb3lTZXJ2aWNlLFxuICAgICkge1xuICAgICAgICBpZiAoIXZhbHVlQ2hhbmdlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZSh3YXRjaChjaGFuZ2VEZXRlY3RvclJlZiksIHRha2VVbnRpbChkZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVWaWV3ZWRNb250aHMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldCBjYXBwZWRVc2VyVmlld2VkTW9udGhTZWNvbmQoKTogVHVpTW9udGgge1xuICAgICAgICByZXR1cm4gdGhpcy51c2VyVmlld2VkTW9udGhTZWNvbmQubW9udGhCZWZvcmUodGhpcy5tYXgpXG4gICAgICAgICAgICA/IHRoaXMudXNlclZpZXdlZE1vbnRoU2Vjb25kXG4gICAgICAgICAgICA6IHRoaXMubWF4O1xuICAgIH1cblxuICAgIGdldCBjYXBwZWRVc2VyVmlld2VkTW9udGhGaXJzdCgpOiBUdWlNb250aCB7XG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJWaWV3ZWRNb250aEZpcnN0Lm1vbnRoU2FtZU9yQmVmb3JlKHRoaXMudXNlclZpZXdlZE1vbnRoU2Vjb25kKVxuICAgICAgICAgICAgPyB0aGlzLnVzZXJWaWV3ZWRNb250aEZpcnN0XG4gICAgICAgICAgICA6IHRoaXMudXNlclZpZXdlZE1vbnRoU2Vjb25kO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVZpZXdlZE1vbnRocygpO1xuICAgIH1cblxuICAgIG9uU2VjdGlvbkZpcnN0Vmlld2VkTW9udGgobW9udGg6IFR1aU1vbnRoKSB7XG4gICAgICAgIHRoaXMudXNlclZpZXdlZE1vbnRoRmlyc3QgPSBtb250aDtcblxuICAgICAgICBpZiAodGhpcy51c2VyVmlld2VkTW9udGhTZWNvbmQueWVhciA8IHRoaXMudXNlclZpZXdlZE1vbnRoRmlyc3QueWVhcikge1xuICAgICAgICAgICAgdGhpcy51c2VyVmlld2VkTW9udGhTZWNvbmQgPSB0aGlzLnVzZXJWaWV3ZWRNb250aFNlY29uZC5hcHBlbmQoe1xuICAgICAgICAgICAgICAgIHllYXI6IG1vbnRoLnllYXIgLSB0aGlzLnVzZXJWaWV3ZWRNb250aFNlY29uZC55ZWFyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNlY3Rpb25TZWNvbmRWaWV3ZWRNb250aChtb250aDogVHVpTW9udGgpIHtcbiAgICAgICAgdGhpcy51c2VyVmlld2VkTW9udGhTZWNvbmQgPSBtb250aDtcblxuICAgICAgICBpZiAodGhpcy51c2VyVmlld2VkTW9udGhGaXJzdC55ZWFyID4gdGhpcy51c2VyVmlld2VkTW9udGhTZWNvbmQueWVhcikge1xuICAgICAgICAgICAgdGhpcy51c2VyVmlld2VkTW9udGhGaXJzdCA9IHRoaXMudXNlclZpZXdlZE1vbnRoRmlyc3QuYXBwZW5kKHtcbiAgICAgICAgICAgICAgICB5ZWFyOiBtb250aC55ZWFyIC0gdGhpcy51c2VyVmlld2VkTW9udGhGaXJzdC55ZWFyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRheUNsaWNrKGRheTogVHVpRGF5KSB7XG4gICAgICAgIHRoaXMuZGF5Q2xpY2suZW1pdChkYXkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVmlld2VkTW9udGhzKCkge1xuICAgICAgICB0aGlzLnVzZXJWaWV3ZWRNb250aEZpcnN0ID1cbiAgICAgICAgICAgIHRoaXMudmFsdWUgPT09IG51bGwgPyB0aGlzLmRlZmF1bHRWaWV3ZWRNb250aEZpcnN0IDogdGhpcy52YWx1ZS5mcm9tO1xuICAgICAgICB0aGlzLnVzZXJWaWV3ZWRNb250aFNlY29uZCA9XG4gICAgICAgICAgICB0aGlzLnZhbHVlID09PSBudWxsID8gdGhpcy5kZWZhdWx0Vmlld2VkTW9udGhTZWNvbmQgOiB0aGlzLnZhbHVlLnRvO1xuXG4gICAgICAgIGlmICh0aGlzLnVzZXJWaWV3ZWRNb250aEZpcnN0Lm1vbnRoU2FtZSh0aGlzLnVzZXJWaWV3ZWRNb250aFNlY29uZCkpIHtcbiAgICAgICAgICAgIHRoaXMudXNlclZpZXdlZE1vbnRoU2Vjb25kID0gdGhpcy51c2VyVmlld2VkTW9udGhTZWNvbmQuYXBwZW5kKHttb250aDogMX0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19