UNPKG

@taiga-ui/kit

Version:
139 lines • 18.2 kB
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 */ var TuiPrimitiveCalendarRangeComponent = /** @class */ (function () { function TuiPrimitiveCalendarRangeComponent(valueChanges, changeDetectorRef, destroy$) { var _this = this; 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 = function (value, offset) { return value.append({ month: offset }); }; this.userViewedMonthFirst = this.defaultViewedMonthFirst; this.userViewedMonthSecond = this.defaultViewedMonthSecond; if (!valueChanges) { return; } valueChanges .pipe(watch(changeDetectorRef), takeUntil(destroy$)) .subscribe(function (value) { _this.value = value; _this.updateViewedMonths(); }); } Object.defineProperty(TuiPrimitiveCalendarRangeComponent.prototype, "cappedUserViewedMonthSecond", { get: function () { return this.userViewedMonthSecond.monthBefore(this.max) ? this.userViewedMonthSecond : this.max; }, enumerable: true, configurable: true }); Object.defineProperty(TuiPrimitiveCalendarRangeComponent.prototype, "cappedUserViewedMonthFirst", { get: function () { return this.userViewedMonthFirst.monthSameOrBefore(this.userViewedMonthSecond) ? this.userViewedMonthFirst : this.userViewedMonthSecond; }, enumerable: true, configurable: true }); TuiPrimitiveCalendarRangeComponent.prototype.ngOnInit = function () { this.updateViewedMonths(); }; TuiPrimitiveCalendarRangeComponent.prototype.onSectionFirstViewedMonth = function (month) { this.userViewedMonthFirst = month; if (this.userViewedMonthSecond.year < this.userViewedMonthFirst.year) { this.userViewedMonthSecond = this.userViewedMonthSecond.append({ year: month.year - this.userViewedMonthSecond.year, }); } }; TuiPrimitiveCalendarRangeComponent.prototype.onSectionSecondViewedMonth = function (month) { this.userViewedMonthSecond = month; if (this.userViewedMonthFirst.year > this.userViewedMonthSecond.year) { this.userViewedMonthFirst = this.userViewedMonthFirst.append({ year: month.year - this.userViewedMonthFirst.year, }); } }; TuiPrimitiveCalendarRangeComponent.prototype.onDayClick = function (day) { this.dayClick.emit(day); }; TuiPrimitiveCalendarRangeComponent.prototype.updateViewedMonths = function () { 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 = function () { return [ { 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); return TuiPrimitiveCalendarRangeComponent; }()); export { TuiPrimitiveCalendarRangeComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbWl0aXZlLWNhbGVuZGFyLXJhbmdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B0YWlnYS11aS9raXQvaW50ZXJuYWwvcHJpbWl0aXZlLWNhbGVuZGFyLXJhbmdlLyIsInNvdXJjZXMiOlsicHJpbWl0aXZlLWNhbGVuZGFyLXJhbmdlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixRQUFRLEVBQ1IsTUFBTSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDSCxvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLFlBQVksRUFDWixpQkFBaUIsRUFDakIsTUFBTSxFQUNOLFdBQVcsRUFDWCxjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsS0FBSyxHQUNSLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQywwQkFBMEIsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6Qzs7R0FFRztBQVFIO0lBd0NJLDRDQUdJLFlBQW1ELEVBQ3hCLGlCQUFvQyxFQUNwQyxRQUEyQjtRQUwxRCxpQkFpQkM7UUF0REQsd0JBQW1CLEdBQThCLG9CQUFvQixDQUFDO1FBSXRFLGtCQUFhLEdBQXFCLDBCQUEwQixDQUFDO1FBSTdELDRCQUF1QixHQUFHLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUlsRCw2QkFBd0IsR0FBRyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUMsS0FBSyxFQUFF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QixDQUFDLE1BQU07WUFDL0MsU0FBUyxFQUFFLENBQUMsaUJBQWlCLENBQUM7O1NBQ2pDLENBQUM7UUEwQ08sV0FBQSxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtRQUNoQyxXQUFBLFFBQVEsRUFBRSxDQUFBO1FBRVYsV0FBQSxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtRQUN6QixXQUFBLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO09BN0NyQixrQ0FBa0MsQ0E2RzlDO0lBQUQseUNBQUM7Q0FBQSxBQTdHRCxJQTZHQztTQTdHWSxrQ0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBTFdBWVNfRkFMU0VfSEFORExFUixcbiAgICBUVUlfRklSU1RfREFZLFxuICAgIFRVSV9MQVNUX0RBWSxcbiAgICBUdWlCb29sZWFuSGFuZGxlcixcbiAgICBUdWlEYXksXG4gICAgVHVpRGF5UmFuZ2UsXG4gICAgdHVpRGVmYXVsdFByb3AsXG4gICAgVHVpRGVzdHJveVNlcnZpY2UsXG4gICAgVHVpTWFwcGVyLFxuICAgIFR1aU1vbnRoLFxuICAgIHdhdGNoLFxufSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7VFVJX0RFRkFVTFRfTUFSS0VSX0hBTkRMRVIsIFR1aU1hcmtlckhhbmRsZXJ9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7VFVJX0NBTEVOREFSX0RBVEFfU1RSRUFNfSBmcm9tICdAdGFpZ2EtdWkva2l0L3Rva2Vucyc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHt0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0dWktcHJpbWl0aXZlLWNhbGVuZGFyLXJhbmdlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcHJpbWl0aXZlLWNhbGVuZGFyLXJhbmdlLnRlbXBsYXRlLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3ByaW1pdGl2ZS1jYWxlbmRhci1yYW5nZS5zdHlsZS5sZXNzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbVHVpRGVzdHJveVNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBUdWlQcmltaXRpdmVDYWxlbmRhclJhbmdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgZGlzYWJsZWRJdGVtSGFuZGxlcjogVHVpQm9vbGVhbkhhbmRsZXI8VHVpRGF5PiA9IEFMV0FZU19GQUxTRV9IQU5ETEVSO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIG1hcmtlckhhbmRsZXI6IFR1aU1hcmtlckhhbmRsZXIgPSBUVUlfREVGQVVMVF9NQVJLRVJfSEFORExFUjtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBkZWZhdWx0Vmlld2VkTW9udGhGaXJzdCA9IFR1aU1vbnRoLmN1cnJlbnRMb2NhbCgpO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIGRlZmF1bHRWaWV3ZWRNb250aFNlY29uZCA9IFR1aU1vbnRoLmN1cnJlbnRMb2NhbCgpLmFwcGVuZCh7bW9udGg6IDF9KTtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBtaW4gPSBUVUlfRklSU1RfREFZO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIG1heCA9IFRVSV9MQVNUX0RBWTtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICB2YWx1ZTogVHVpRGF5UmFuZ2UgfCBudWxsID0gbnVsbDtcblxuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGRheUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxUdWlEYXk+KCk7XG5cbiAgICBob3ZlcmVkSXRlbTogVHVpRGF5IHwgbnVsbCA9IG51bGw7XG5cbiAgICBtb250aE9mZnNldDogVHVpTWFwcGVyPFR1aU1vbnRoLCBUdWlNb250aD4gPSAodmFsdWUsIG9mZnNldDogbnVtYmVyKSA9PlxuICAgICAgICB2YWx1ZS5hcHBlbmQoe21vbnRoOiBvZmZzZXR9KTtcblxuICAgIHVzZXJWaWV3ZWRNb250aEZpcnN0OiBUdWlNb250aCA9IHRoaXMuZGVmYXVsdFZpZXdlZE1vbnRoRmlyc3Q7XG4gICAgdXNlclZpZXdlZE1vbnRoU2Vjb25kOiBUdWlNb250aCA9IHRoaXMuZGVmYXVsdFZpZXdlZE1vbnRoU2Vjb25kO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoVFVJX0NBTEVOREFSX0RBVEFfU1RSRUFNKVxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICB2YWx1ZUNoYW5nZXM6IE9ic2VydmFibGU8VHVpRGF5UmFuZ2UgfCBudWxsPiB8IG51bGwsXG4gICAgICAgIEBJbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQEluamVjdChUdWlEZXN0cm95U2VydmljZSkgZGVzdHJveSQ6IFR1aURlc3Ryb3lTZXJ2aWNlLFxuICAgICkge1xuICAgICAgICBpZiAoIXZhbHVlQ2hhbmdlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZSh3YXRjaChjaGFuZ2VEZXRlY3RvclJlZiksIHRha2VVbnRpbChkZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVWaWV3ZWRNb250aHMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldCBjYXBwZWRVc2VyVmlld2VkTW9udGhTZWNvbmQoKTogVHVpTW9udGgge1xuICAgICAgICByZXR1cm4gdGhpcy51c2VyVmlld2VkTW9udGhTZWNvbmQubW9udGhCZWZvcmUodGhpcy5tYXgpXG4gICAgICAgICAgICA/IHRoaXMudXNlclZpZXdlZE1vbnRoU2Vjb25kXG4gICAgICAgICAgICA6IHRoaXMubWF4O1xuICAgIH1cblxuICAgIGdldCBjYXBwZWRVc2VyVmlld2VkTW9udGhGaXJzdCgpOiBUdWlNb250aCB7XG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJWaWV3ZWRNb250aEZpcnN0Lm1vbnRoU2FtZU9yQmVmb3JlKHRoaXMudXNlclZpZXdlZE1vbnRoU2Vjb25kKVxuICAgICAgICAgICAgPyB0aGlzLnVzZXJWaWV3ZWRNb250aEZpcnN0XG4gICAgICAgICAgICA6IHRoaXMudXNlclZpZXdlZE1vbnRoU2Vjb25kO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVZpZXdlZE1vbnRocygpO1xuICAgIH1cblxuICAgIG9uU2VjdGlvbkZpcnN0Vmlld2VkTW9udGgobW9udGg6IFR1aU1vbnRoKSB7XG4gICAgICAgIHRoaXMudXNlclZpZXdlZE1vbnRoRmlyc3QgPSBtb250aDtcblxuICAgICAgICBpZiAodGhpcy51c2VyVmlld2VkTW9udGhTZWNvbmQueWVhciA8IHRoaXMudXNlclZpZXdlZE1vbnRoRmlyc3QueWVhcikge1xuICAgICAgICAgICAgdGhpcy51c2VyVmlld2VkTW9udGhTZWNvbmQgPSB0aGlzLnVzZXJWaWV3ZWRNb250aFNlY29uZC5hcHBlbmQoe1xuICAgICAgICAgICAgICAgIHllYXI6IG1vbnRoLnllYXIgLSB0aGlzLnVzZXJWaWV3ZWRNb250aFNlY29uZC55ZWFyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNlY3Rpb25TZWNvbmRWaWV3ZWRNb250aChtb250aDogVHVpTW9udGgpIHtcbiAgICAgICAgdGhpcy51c2VyVmlld2VkTW9udGhTZWNvbmQgPSBtb250aDtcblxuICAgICAgICBpZiAodGhpcy51c2VyVmlld2VkTW9udGhGaXJzdC55ZWFyID4gdGhpcy51c2VyVmlld2VkTW9udGhTZWNvbmQueWVhcikge1xuICAgICAgICAgICAgdGhpcy51c2VyVmlld2VkTW9udGhGaXJzdCA9IHRoaXMudXNlclZpZXdlZE1vbnRoRmlyc3QuYXBwZW5kKHtcbiAgICAgICAgICAgICAgICB5ZWFyOiBtb250aC55ZWFyIC0gdGhpcy51c2VyVmlld2VkTW9udGhGaXJzdC55ZWFyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRheUNsaWNrKGRheTogVHVpRGF5KSB7XG4gICAgICAgIHRoaXMuZGF5Q2xpY2suZW1pdChkYXkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVmlld2VkTW9udGhzKCkge1xuICAgICAgICB0aGlzLnVzZXJWaWV3ZWRNb250aEZpcnN0ID1cbiAgICAgICAgICAgIHRoaXMudmFsdWUgPT09IG51bGwgPyB0aGlzLmRlZmF1bHRWaWV3ZWRNb250aEZpcnN0IDogdGhpcy52YWx1ZS5mcm9tO1xuICAgICAgICB0aGlzLnVzZXJWaWV3ZWRNb250aFNlY29uZCA9XG4gICAgICAgICAgICB0aGlzLnZhbHVlID09PSBudWxsID8gdGhpcy5kZWZhdWx0Vmlld2VkTW9udGhTZWNvbmQgOiB0aGlzLnZhbHVlLnRvO1xuXG4gICAgICAgIGlmICh0aGlzLnVzZXJWaWV3ZWRNb250aEZpcnN0Lm1vbnRoU2FtZSh0aGlzLnVzZXJWaWV3ZWRNb250aFNlY29uZCkpIHtcbiAgICAgICAgICAgIHRoaXMudXNlclZpZXdlZE1vbnRoU2Vjb25kID0gdGhpcy51c2VyVmlld2VkTW9udGhTZWNvbmQuYXBwZW5kKHttb250aDogMX0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19