@bimeister/pupakit.calendar
Version:
PupaKit Calendar
66 lines • 10.9 kB
JavaScript
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