UNPKG

@bimeister/pupakit.calendar

Version:
59 lines 9.77 kB
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==