@bimeister/pupakit.calendar
Version:
PupaKit Calendar
59 lines • 9.77 kB
JavaScript
import { Inject, Injectable, Optional } from '@angular/core';
import { isEmpty, isNil } from '@bimeister/utilities';
import { DEFAULT_CALENDAR_CONFIG } from '../declarations/constants/default-calendar-config.const';
import { SMALL_CALENDAR_CYCLE_SIZE_IN_YEARS } from '../declarations/constants/small-calendar-cycle-size-in-years.const';
import { CALENDAR_CONFIG_TOKEN } from '../declarations/constants/tokens/calendar-config.token';
import '../declarations/enums/day-of-week.enum';
import '../declarations/interfaces/calendar-config.interface';
import '../declarations/interfaces/calendar-translation.interface';
import '../declarations/interfaces/calendar-virtual-scroll-config.interface';
import * as i0 from "@angular/core";
const LABEL_HEIGHT_PX = 16;
const DIVIDER_HEIGHT_PX = 12;
const WEEK_HEIGHT_PX = 36;
const BUFFER_PX = 500;
export class CalendarConfigService {
constructor(config) {
this.startWeekday = config?.startWeekday ?? DEFAULT_CALENDAR_CONFIG.startWeekday;
this.startYear = config?.startYear ?? CalendarConfigService.getDefaultStartYear();
CalendarConfigService.validateYearsRange(config?.yearsRange);
this.yearsRange = config?.yearsRange ?? CalendarConfigService.getDefaultEndYear() - this.startYear;
this.endYear = this.startYear + this.yearsRange;
this.translations = !isEmpty(config?.translations) ? config.translations : DEFAULT_CALENDAR_CONFIG.translations;
}
get virtualScrollConfig() {
return {
bufferPx: BUFFER_PX,
yearsRange: this.yearsRange,
labelHeightPx: LABEL_HEIGHT_PX,
dividerHeightPx: DIVIDER_HEIGHT_PX,
weekHeightPx: WEEK_HEIGHT_PX,
startWeekday: this.startWeekday,
startYear: this.startYear,
};
}
static getDefaultStartYear() {
return new Date().getFullYear() - Math.floor(DEFAULT_CALENDAR_CONFIG.yearsRange / 2);
}
static getDefaultEndYear() {
return new Date().getFullYear() + Math.floor(DEFAULT_CALENDAR_CONFIG.yearsRange / 2);
}
static validateYearsRange(yearsRange) {
const isValid = isNil(yearsRange) || yearsRange % SMALL_CALENDAR_CYCLE_SIZE_IN_YEARS === 0;
if (isValid) {
return;
}
throw new Error(`[CalendarConfigService] 'yearsRange' must be a multiple of ${SMALL_CALENDAR_CYCLE_SIZE_IN_YEARS}`);
}
}
CalendarConfigService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CalendarConfigService, deps: [{ token: CALENDAR_CONFIG_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
CalendarConfigService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CalendarConfigService });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CalendarConfigService, decorators: [{
type: Injectable
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [CALENDAR_CONFIG_TOKEN]
}] }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItY29uZmlnLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvY2FsZW5kYXItY29uZmlnLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDbEcsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDeEgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDL0YsT0FBMEIsd0NBQXdDLENBQUM7QUFDbkUsT0FBK0Isc0RBQXNELENBQUM7QUFDdEYsT0FBb0MsMkRBQTJELENBQUM7QUFDaEcsT0FBNEMscUVBQXFFLENBQUM7O0FBRWxILE1BQU0sZUFBZSxHQUFXLEVBQUUsQ0FBQztBQUNuQyxNQUFNLGlCQUFpQixHQUFXLEVBQUUsQ0FBQztBQUNyQyxNQUFNLGNBQWMsR0FBVyxFQUFFLENBQUM7QUFDbEMsTUFBTSxTQUFTLEdBQVcsR0FBRyxDQUFDO0FBRzlCLE1BQU0sT0FBTyxxQkFBcUI7SUF1QmhDLFlBQXVELE1BQStCO1FBQ3BGLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxFQUFFLFlBQVksSUFBSSx1QkFBdUIsQ0FBQyxZQUFZLENBQUM7UUFFakYsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsU0FBUyxJQUFJLHFCQUFxQixDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFbEYscUJBQXFCLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRTdELElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxFQUFFLFVBQVUsSUFBSSxxQkFBcUIsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFFbkcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFaEQsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQztJQUNsSCxDQUFDO0lBeEJELElBQVcsbUJBQW1CO1FBQzVCLE9BQU87WUFDTCxRQUFRLEVBQUUsU0FBUztZQUNuQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsYUFBYSxFQUFFLGVBQWU7WUFDOUIsZUFBZSxFQUFFLGlCQUFpQjtZQUNsQyxZQUFZLEVBQUUsY0FBYztZQUM1QixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDL0IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQzFCLENBQUM7SUFDSixDQUFDO0lBZ0JPLE1BQU0sQ0FBQyxtQkFBbUI7UUFDaEMsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFTyxNQUFNLENBQUMsaUJBQWlCO1FBQzlCLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRU8sTUFBTSxDQUFDLGtCQUFrQixDQUFDLFVBQThCO1FBQzlELE1BQU0sT0FBTyxHQUFZLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLEdBQUcsa0NBQWtDLEtBQUssQ0FBQyxDQUFDO1FBRXBHLElBQUksT0FBTyxFQUFFO1lBQ1gsT0FBTztTQUNSO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyw4REFBOEQsa0NBQWtDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RILENBQUM7O21IQXJEVSxxQkFBcUIsa0JBdUJBLHFCQUFxQjt1SEF2QjFDLHFCQUFxQjs0RkFBckIscUJBQXFCO2tCQURqQyxVQUFVOzswQkF3QkksUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc0VtcHR5LCBpc05pbCB9IGZyb20gJ0BiaW1laXN0ZXIvdXRpbGl0aWVzJztcbmltcG9ydCB7IERFRkFVTFRfQ0FMRU5EQVJfQ09ORklHIH0gZnJvbSAnLi4vZGVjbGFyYXRpb25zL2NvbnN0YW50cy9kZWZhdWx0LWNhbGVuZGFyLWNvbmZpZy5jb25zdCc7XG5pbXBvcnQgeyBTTUFMTF9DQUxFTkRBUl9DWUNMRV9TSVpFX0lOX1lFQVJTIH0gZnJvbSAnLi4vZGVjbGFyYXRpb25zL2NvbnN0YW50cy9zbWFsbC1jYWxlbmRhci1jeWNsZS1zaXplLWluLXllYXJzLmNvbnN0JztcbmltcG9ydCB7IENBTEVOREFSX0NPTkZJR19UT0tFTiB9IGZyb20gJy4uL2RlY2xhcmF0aW9ucy9jb25zdGFudHMvdG9rZW5zL2NhbGVuZGFyLWNvbmZpZy50b2tlbic7XG5pbXBvcnQgeyBEYXlPZldlZWsgfSBmcm9tICcuLi9kZWNsYXJhdGlvbnMvZW51bXMvZGF5LW9mLXdlZWsuZW51bSc7XG5pbXBvcnQgeyBDYWxlbmRhckNvbmZpZyB9IGZyb20gJy4uL2RlY2xhcmF0aW9ucy9pbnRlcmZhY2VzL2NhbGVuZGFyLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2FsZW5kYXJUcmFuc2xhdGlvbiB9IGZyb20gJy4uL2RlY2xhcmF0aW9ucy9pbnRlcmZhY2VzL2NhbGVuZGFyLXRyYW5zbGF0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDYWxlbmRhclZpcnR1YWxTY3JvbGxDb25maWcgfSBmcm9tICcuLi9kZWNsYXJhdGlvbnMvaW50ZXJmYWNlcy9jYWxlbmRhci12aXJ0dWFsLXNjcm9sbC1jb25maWcuaW50ZXJmYWNlJztcblxuY29uc3QgTEFCRUxfSEVJR0hUX1BYOiBudW1iZXIgPSAxNjtcbmNvbnN0IERJVklERVJfSEVJR0hUX1BYOiBudW1iZXIgPSAxMjtcbmNvbnN0IFdFRUtfSEVJR0hUX1BYOiBudW1iZXIgPSAzNjtcbmNvbnN0IEJVRkZFUl9QWDogbnVtYmVyID0gNTAwO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJDb25maWdTZXJ2aWNlIHtcbiAgcHVibGljIHJlYWRvbmx5IHN0YXJ0V2Vla2RheTogRGF5T2ZXZWVrO1xuXG4gIHB1YmxpYyByZWFkb25seSBzdGFydFllYXI6IG51bWJlcjtcblxuICBwdWJsaWMgcmVhZG9ubHkgZW5kWWVhcjogbnVtYmVyO1xuXG4gIHB1YmxpYyByZWFkb25seSB0cmFuc2xhdGlvbnM6IFJlY29yZDxzdHJpbmcsIENhbGVuZGFyVHJhbnNsYXRpb24+O1xuXG4gIHB1YmxpYyByZWFkb25seSB5ZWFyc1JhbmdlOiBudW1iZXI7XG5cbiAgcHVibGljIGdldCB2aXJ0dWFsU2Nyb2xsQ29uZmlnKCk6IENhbGVuZGFyVmlydHVhbFNjcm9sbENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJ1ZmZlclB4OiBCVUZGRVJfUFgsXG4gICAgICB5ZWFyc1JhbmdlOiB0aGlzLnllYXJzUmFuZ2UsXG4gICAgICBsYWJlbEhlaWdodFB4OiBMQUJFTF9IRUlHSFRfUFgsXG4gICAgICBkaXZpZGVySGVpZ2h0UHg6IERJVklERVJfSEVJR0hUX1BYLFxuICAgICAgd2Vla0hlaWdodFB4OiBXRUVLX0hFSUdIVF9QWCxcbiAgICAgIHN0YXJ0V2Vla2RheTogdGhpcy5zdGFydFdlZWtkYXksXG4gICAgICBzdGFydFllYXI6IHRoaXMuc3RhcnRZZWFyLFxuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KENBTEVOREFSX0NPTkZJR19UT0tFTikgY29uZmlnOiBQYXJ0aWFsPENhbGVuZGFyQ29uZmlnPikge1xuICAgIHRoaXMuc3RhcnRXZWVrZGF5ID0gY29uZmlnPy5zdGFydFdlZWtkYXkgPz8gREVGQVVMVF9DQUxFTkRBUl9DT05GSUcuc3RhcnRXZWVrZGF5O1xuXG4gICAgdGhpcy5zdGFydFllYXIgPSBjb25maWc/LnN0YXJ0WWVhciA/PyBDYWxlbmRhckNvbmZpZ1NlcnZpY2UuZ2V0RGVmYXVsdFN0YXJ0WWVhcigpO1xuXG4gICAgQ2FsZW5kYXJDb25maWdTZXJ2aWNlLnZhbGlkYXRlWWVhcnNSYW5nZShjb25maWc/LnllYXJzUmFuZ2UpO1xuXG4gICAgdGhpcy55ZWFyc1JhbmdlID0gY29uZmlnPy55ZWFyc1JhbmdlID8/IENhbGVuZGFyQ29uZmlnU2VydmljZS5nZXREZWZhdWx0RW5kWWVhcigpIC0gdGhpcy5zdGFydFllYXI7XG5cbiAgICB0aGlzLmVuZFllYXIgPSB0aGlzLnN0YXJ0WWVhciArIHRoaXMueWVhcnNSYW5nZTtcblxuICAgIHRoaXMudHJhbnNsYXRpb25zID0gIWlzRW1wdHkoY29uZmlnPy50cmFuc2xhdGlvbnMpID8gY29uZmlnLnRyYW5zbGF0aW9ucyA6IERFRkFVTFRfQ0FMRU5EQVJfQ09ORklHLnRyYW5zbGF0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldERlZmF1bHRTdGFydFllYXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpIC0gTWF0aC5mbG9vcihERUZBVUxUX0NBTEVOREFSX0NPTkZJRy55ZWFyc1JhbmdlIC8gMik7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXREZWZhdWx0RW5kWWVhcigpOiBudW1iZXIge1xuICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkgKyBNYXRoLmZsb29yKERFRkFVTFRfQ0FMRU5EQVJfQ09ORklHLnllYXJzUmFuZ2UgLyAyKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlWWVhcnNSYW5nZSh5ZWFyc1JhbmdlOiBudW1iZXIgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBjb25zdCBpc1ZhbGlkOiBib29sZWFuID0gaXNOaWwoeWVhcnNSYW5nZSkgfHwgeWVhcnNSYW5nZSAlIFNNQUxMX0NBTEVOREFSX0NZQ0xFX1NJWkVfSU5fWUVBUlMgPT09IDA7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgW0NhbGVuZGFyQ29uZmlnU2VydmljZV0gJ3llYXJzUmFuZ2UnIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAke1NNQUxMX0NBTEVOREFSX0NZQ0xFX1NJWkVfSU5fWUVBUlN9YCk7XG4gIH1cbn1cbiJdfQ==