UNPKG

@bimeister/pupakit.calendar

Version:
66 lines 10.9 kB
import { Pipe } from '@angular/core'; import { isEmpty } from '@bimeister/utilities'; import { DAYS_IN_WEEK } from '../declarations/constants/days-in-week.const'; import { DayOfWeek } from '../declarations/enums/day-of-week.enum'; import { getCurrentCalendarDay } from '../declarations/functions/get-current-calendar-day.function'; import { getDaysCountInMonth } from '../declarations/functions/get-days-count-in-month.function'; import { getWeekdayIndex } from '../declarations/functions/get-weekday-index.function'; import { getWeekdayRelativeToNewWeekStart } from '../declarations/functions/get-weekday-relative-to-new-week-start.function'; import { isCalendarDaysEqual } from '../declarations/functions/is-calendar-days-equal.function'; import { isLeapYear } from '../declarations/functions/is-leap-year.function'; import '../declarations/interfaces/calendar-day.interface'; import '../declarations/interfaces/calendar-month.interface'; import '../declarations/interfaces/month-day-cell.interface'; import { CalendarConfigService } from '../services/calendar-config.service'; import * as i0 from "@angular/core"; import * as i1 from "../services/calendar-config.service"; const currentCalendarDay = getCurrentCalendarDay(); function getMonthCells(daysCount, startDay, calendarMonth) { const weeksCount = Math.ceil((daysCount + Number(startDay)) / DAYS_IN_WEEK); return Array.from({ length: weeksCount }, (_, weekIndex) => Array.from({ length: DAYS_IN_WEEK }, (__, weekdayIndex) => { const dayIndex = weekIndex * DAYS_IN_WEEK + weekdayIndex; const dayNumber = dayIndex + 1; const day = dayNumber - startDay; const isValidDay = day > 0 && dayNumber <= startDay + daysCount; if (!isValidDay) { return { isEmpty: true, index: dayIndex, isCurrent: false, }; } const calendarDay = { ...calendarMonth, day }; const isCurrent = isCalendarDaysEqual(calendarDay, currentCalendarDay); return { isEmpty: false, index: dayIndex, isCurrent, calendarDay, }; })); } export class MonthDayCellsPipe { constructor(calendarConfigService) { this.startWeekday = calendarConfigService.startWeekday; } transform(calendarMonth) { if (isEmpty(calendarMonth)) { return []; } const { year, month } = calendarMonth; const defaultMonthStart = getWeekdayIndex(year, month, 1); const relativeMonthStart = getWeekdayRelativeToNewWeekStart(defaultMonthStart, DayOfWeek.Sunday, this.startWeekday); const daysCount = getDaysCountInMonth(month, isLeapYear(year)); return getMonthCells(daysCount, relativeMonthStart, calendarMonth); } } MonthDayCellsPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: MonthDayCellsPipe, deps: [{ token: i1.CalendarConfigService }], target: i0.ɵɵFactoryTarget.Pipe }); MonthDayCellsPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: MonthDayCellsPipe, name: "monthDayCells" }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: MonthDayCellsPipe, decorators: [{ type: Pipe, args: [{ name: 'monthDayCells', pure: true, }] }], ctorParameters: function () { return [{ type: i1.CalendarConfigService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udGgtZGF5LWNlbGxzLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGlwZXMvbW9udGgtZGF5LWNlbGxzLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDcEcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDakcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBQzdILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUM3RSxPQUE0QixtREFBbUQsQ0FBQztBQUNoRixPQUE4QixxREFBcUQsQ0FBQztBQUNwRixPQUE2QixxREFBcUQsQ0FBQztBQUNuRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7O0FBRTVFLE1BQU0sa0JBQWtCLEdBQWdCLHFCQUFxQixFQUFFLENBQUM7QUFFaEUsU0FBUyxhQUFhLENBQUMsU0FBaUIsRUFBRSxRQUFtQixFQUFFLGFBQTRCO0lBQ3pGLE1BQU0sVUFBVSxHQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7SUFFcEYsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBVSxFQUFFLFNBQWlCLEVBQUUsRUFBRSxDQUMxRSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsRUFBVyxFQUFFLFlBQW9CLEVBQUUsRUFBRTtRQUN6RSxNQUFNLFFBQVEsR0FBVyxTQUFTLEdBQUcsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqRSxNQUFNLFNBQVMsR0FBVyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sR0FBRyxHQUFXLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFFekMsTUFBTSxVQUFVLEdBQVksR0FBRyxHQUFHLENBQUMsSUFBSSxTQUFTLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQztRQUV6RSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2YsT0FBTztnQkFDTCxPQUFPLEVBQUUsSUFBSTtnQkFDYixLQUFLLEVBQUUsUUFBUTtnQkFDZixTQUFTLEVBQUUsS0FBSzthQUNqQixDQUFDO1NBQ0g7UUFFRCxNQUFNLFdBQVcsR0FBZ0IsRUFBRSxHQUFHLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUMzRCxNQUFNLFNBQVMsR0FBWSxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUVoRixPQUFPO1lBQ0wsT0FBTyxFQUFFLEtBQUs7WUFDZCxLQUFLLEVBQUUsUUFBUTtZQUNmLFNBQVM7WUFDVCxXQUFXO1NBQ1osQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDO0FBTUQsTUFBTSxPQUFPLGlCQUFpQjtJQUc1QixZQUFZLHFCQUE0QztRQUN0RCxJQUFJLENBQUMsWUFBWSxHQUFHLHFCQUFxQixDQUFDLFlBQVksQ0FBQztJQUN6RCxDQUFDO0lBRU0sU0FBUyxDQUFDLGFBQTRCO1FBQzNDLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQzFCLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFFRCxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFrQixhQUFhLENBQUM7UUFFckQsTUFBTSxpQkFBaUIsR0FBYyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVyRSxNQUFNLGtCQUFrQixHQUFjLGdDQUFnQyxDQUNwRSxpQkFBaUIsRUFDakIsU0FBUyxDQUFDLE1BQU0sRUFDaEIsSUFBSSxDQUFDLFlBQVksQ0FDbEIsQ0FBQztRQUVGLE1BQU0sU0FBUyxHQUFXLG1CQUFtQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUV2RSxPQUFPLGFBQWEsQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDckUsQ0FBQzs7K0dBekJVLGlCQUFpQjs2R0FBakIsaUJBQWlCOzRGQUFqQixpQkFBaUI7a0JBSjdCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGVBQWU7b0JBQ3JCLElBQUksRUFBRSxJQUFJO2lCQUNYIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ0BiaW1laXN0ZXIvdXRpbGl0aWVzJztcbmltcG9ydCB7IERBWVNfSU5fV0VFSyB9IGZyb20gJy4uL2RlY2xhcmF0aW9ucy9jb25zdGFudHMvZGF5cy1pbi13ZWVrLmNvbnN0JztcbmltcG9ydCB7IERheU9mV2VlayB9IGZyb20gJy4uL2RlY2xhcmF0aW9ucy9lbnVtcy9kYXktb2Ytd2Vlay5lbnVtJztcbmltcG9ydCB7IGdldEN1cnJlbnRDYWxlbmRhckRheSB9IGZyb20gJy4uL2RlY2xhcmF0aW9ucy9mdW5jdGlvbnMvZ2V0LWN1cnJlbnQtY2FsZW5kYXItZGF5LmZ1bmN0aW9uJztcbmltcG9ydCB7IGdldERheXNDb3VudEluTW9udGggfSBmcm9tICcuLi9kZWNsYXJhdGlvbnMvZnVuY3Rpb25zL2dldC1kYXlzLWNvdW50LWluLW1vbnRoLmZ1bmN0aW9uJztcbmltcG9ydCB7IGdldFdlZWtkYXlJbmRleCB9IGZyb20gJy4uL2RlY2xhcmF0aW9ucy9mdW5jdGlvbnMvZ2V0LXdlZWtkYXktaW5kZXguZnVuY3Rpb24nO1xuaW1wb3J0IHsgZ2V0V2Vla2RheVJlbGF0aXZlVG9OZXdXZWVrU3RhcnQgfSBmcm9tICcuLi9kZWNsYXJhdGlvbnMvZnVuY3Rpb25zL2dldC13ZWVrZGF5LXJlbGF0aXZlLXRvLW5ldy13ZWVrLXN0YXJ0LmZ1bmN0aW9uJztcbmltcG9ydCB7IGlzQ2FsZW5kYXJEYXlzRXF1YWwgfSBmcm9tICcuLi9kZWNsYXJhdGlvbnMvZnVuY3Rpb25zL2lzLWNhbGVuZGFyLWRheXMtZXF1YWwuZnVuY3Rpb24nO1xuaW1wb3J0IHsgaXNMZWFwWWVhciB9IGZyb20gJy4uL2RlY2xhcmF0aW9ucy9mdW5jdGlvbnMvaXMtbGVhcC15ZWFyLmZ1bmN0aW9uJztcbmltcG9ydCB7IENhbGVuZGFyRGF5IH0gZnJvbSAnLi4vZGVjbGFyYXRpb25zL2ludGVyZmFjZXMvY2FsZW5kYXItZGF5LmludGVyZmFjZSc7XG5pbXBvcnQgeyBDYWxlbmRhck1vbnRoIH0gZnJvbSAnLi4vZGVjbGFyYXRpb25zL2ludGVyZmFjZXMvY2FsZW5kYXItbW9udGguaW50ZXJmYWNlJztcbmltcG9ydCB7IE1vbnRoRGF5Q2VsbCB9IGZyb20gJy4uL2RlY2xhcmF0aW9ucy9pbnRlcmZhY2VzL21vbnRoLWRheS1jZWxsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDYWxlbmRhckNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jYWxlbmRhci1jb25maWcuc2VydmljZSc7XG5cbmNvbnN0IGN1cnJlbnRDYWxlbmRhckRheTogQ2FsZW5kYXJEYXkgPSBnZXRDdXJyZW50Q2FsZW5kYXJEYXkoKTtcblxuZnVuY3Rpb24gZ2V0TW9udGhDZWxscyhkYXlzQ291bnQ6IG51bWJlciwgc3RhcnREYXk6IERheU9mV2VlaywgY2FsZW5kYXJNb250aDogQ2FsZW5kYXJNb250aCk6IE1vbnRoRGF5Q2VsbFtdW10ge1xuICBjb25zdCB3ZWVrc0NvdW50OiBudW1iZXIgPSBNYXRoLmNlaWwoKGRheXNDb3VudCArIE51bWJlcihzdGFydERheSkpIC8gREFZU19JTl9XRUVLKTtcblxuICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogd2Vla3NDb3VudCB9LCAoXzogdW5rbm93biwgd2Vla0luZGV4OiBudW1iZXIpID0+XG4gICAgQXJyYXkuZnJvbSh7IGxlbmd0aDogREFZU19JTl9XRUVLIH0sIChfXzogdW5rbm93biwgd2Vla2RheUluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGRheUluZGV4OiBudW1iZXIgPSB3ZWVrSW5kZXggKiBEQVlTX0lOX1dFRUsgKyB3ZWVrZGF5SW5kZXg7XG4gICAgICBjb25zdCBkYXlOdW1iZXI6IG51bWJlciA9IGRheUluZGV4ICsgMTtcbiAgICAgIGNvbnN0IGRheTogbnVtYmVyID0gZGF5TnVtYmVyIC0gc3RhcnREYXk7XG5cbiAgICAgIGNvbnN0IGlzVmFsaWREYXk6IGJvb2xlYW4gPSBkYXkgPiAwICYmIGRheU51bWJlciA8PSBzdGFydERheSArIGRheXNDb3VudDtcblxuICAgICAgaWYgKCFpc1ZhbGlkRGF5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNFbXB0eTogdHJ1ZSxcbiAgICAgICAgICBpbmRleDogZGF5SW5kZXgsXG4gICAgICAgICAgaXNDdXJyZW50OiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2FsZW5kYXJEYXk6IENhbGVuZGFyRGF5ID0geyAuLi5jYWxlbmRhck1vbnRoLCBkYXkgfTtcbiAgICAgIGNvbnN0IGlzQ3VycmVudDogYm9vbGVhbiA9IGlzQ2FsZW5kYXJEYXlzRXF1YWwoY2FsZW5kYXJEYXksIGN1cnJlbnRDYWxlbmRhckRheSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzRW1wdHk6IGZhbHNlLFxuICAgICAgICBpbmRleDogZGF5SW5kZXgsXG4gICAgICAgIGlzQ3VycmVudCxcbiAgICAgICAgY2FsZW5kYXJEYXksXG4gICAgICB9O1xuICAgIH0pXG4gICk7XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ21vbnRoRGF5Q2VsbHMnLFxuICBwdXJlOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBNb250aERheUNlbGxzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXJ0V2Vla2RheTogRGF5T2ZXZWVrO1xuXG4gIGNvbnN0cnVjdG9yKGNhbGVuZGFyQ29uZmlnU2VydmljZTogQ2FsZW5kYXJDb25maWdTZXJ2aWNlKSB7XG4gICAgdGhpcy5zdGFydFdlZWtkYXkgPSBjYWxlbmRhckNvbmZpZ1NlcnZpY2Uuc3RhcnRXZWVrZGF5O1xuICB9XG5cbiAgcHVibGljIHRyYW5zZm9ybShjYWxlbmRhck1vbnRoOiBDYWxlbmRhck1vbnRoKTogTW9udGhEYXlDZWxsW11bXSB7XG4gICAgaWYgKGlzRW1wdHkoY2FsZW5kYXJNb250aCkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHllYXIsIG1vbnRoIH06IENhbGVuZGFyTW9udGggPSBjYWxlbmRhck1vbnRoO1xuXG4gICAgY29uc3QgZGVmYXVsdE1vbnRoU3RhcnQ6IERheU9mV2VlayA9IGdldFdlZWtkYXlJbmRleCh5ZWFyLCBtb250aCwgMSk7XG5cbiAgICBjb25zdCByZWxhdGl2ZU1vbnRoU3RhcnQ6IERheU9mV2VlayA9IGdldFdlZWtkYXlSZWxhdGl2ZVRvTmV3V2Vla1N0YXJ0KFxuICAgICAgZGVmYXVsdE1vbnRoU3RhcnQsXG4gICAgICBEYXlPZldlZWsuU3VuZGF5LFxuICAgICAgdGhpcy5zdGFydFdlZWtkYXlcbiAgICApO1xuXG4gICAgY29uc3QgZGF5c0NvdW50OiBudW1iZXIgPSBnZXREYXlzQ291bnRJbk1vbnRoKG1vbnRoLCBpc0xlYXBZZWFyKHllYXIpKTtcblxuICAgIHJldHVybiBnZXRNb250aENlbGxzKGRheXNDb3VudCwgcmVsYXRpdmVNb250aFN0YXJ0LCBjYWxlbmRhck1vbnRoKTtcbiAgfVxufVxuIl19