UNPKG

angular-calendar-timeline

Version:

A timeline for angular that shows events on a timeline board in different modes: days, weeks, and months.

65 lines 10.9 kB
import { BaseScaleGenerator } from './base-scale-generator'; import { DateHelpers } from "../helpers/date-helpers"; import { WeekScaleFormatter } from "../formatters/week-scale-formatter"; import { inject, Injectable, InjectionToken } from "@angular/core"; import * as i0 from "@angular/core"; export const WEEK_SCALE_GENERATOR_CONFIG = new InjectionToken('Week scale config'); const DefaultConfig = { formatter: new WeekScaleFormatter(), }; export class DefaultWeekScaleGenerator extends BaseScaleGenerator { _getConfig() { return { ...DefaultConfig, ...inject(WEEK_SCALE_GENERATOR_CONFIG, {}) }; } _validateStartDate(startDate) { const countOfEmptyMonthsBefore = 1; const newDate = new Date(startDate); newDate.setMonth(newDate.getMonth() - countOfEmptyMonthsBefore); return DateHelpers.firstMondayOfMonth(newDate); } _validateEndDate(endDate) { const countOfEmptyMonthsAfter = 1; const newDate = new Date(endDate); newDate.setMonth(newDate.getMonth() + countOfEmptyMonthsAfter); return DateHelpers.lastDayOfWeek(newDate); } _generateGroups(date) { const weekStart = DateHelpers.firstDayOfWeek(date); const weekEnd = DateHelpers.lastDayOfWeek(date); const weekRelatedToTwoMonths = weekStart.getMonth() !== weekEnd.getMonth(); const weekStartGroupDate = new Date(weekStart.getFullYear(), weekStart.getMonth(), 1, 0, 0, 0, 0); const groups = [ { date: weekStartGroupDate, id: DateHelpers.generateDateId(weekStartGroupDate), coverageInPercents: 100 } ]; if (weekRelatedToTwoMonths) { groups[0].coverageInPercents = (DateHelpers.getDaysInMonth(weekStart) - (weekStart.getDate() - 1)) / 7 * 100; const weekEndGroupDate = new Date(weekEnd.getFullYear(), weekEnd.getMonth(), 1, 0, 0, 0, 0); groups.push({ date: weekEndGroupDate, id: DateHelpers.generateDateId(weekEndGroupDate), coverageInPercents: 100 - groups[0].coverageInPercents }); } return groups; } _getColumnIndex(date) { const weekMonday = DateHelpers.firstDayOfWeek(date); return Math.ceil(weekMonday.getDate() / 7); } _getNextColumnDate(date) { return new Date(date.setDate(date.getDate() + 7)); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DefaultWeekScaleGenerator, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DefaultWeekScaleGenerator }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DefaultWeekScaleGenerator, decorators: [{ type: Injectable }] }); export class WeekScaleGenerator extends DefaultWeekScaleGenerator { static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WeekScaleGenerator, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WeekScaleGenerator }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WeekScaleGenerator, decorators: [{ type: Injectable }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vlay1zY2FsZS1nZW5lcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNhbGVuZGFyLXRpbWVsaW5lL3NyYy9saWIvc2NhbGUtZ2VuZXJhdG9yL3dlZWstc2NhbGUtZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRW5FLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLElBQUksY0FBYyxDQUF3QixtQkFBbUIsQ0FBQyxDQUFDO0FBRTFHLE1BQU0sYUFBYSxHQUEwQjtJQUMzQyxTQUFTLEVBQUUsSUFBSSxrQkFBa0IsRUFBRTtDQUNwQyxDQUFBO0FBR0QsTUFBTSxPQUFPLHlCQUEwQixTQUFRLGtCQUFrQjtJQUNyRCxVQUFVO1FBQ2xCLE9BQU8sRUFBQyxHQUFHLGFBQWEsRUFBRSxHQUFHLE1BQU0sQ0FBQywyQkFBMkIsRUFBRSxFQUFFLENBQUMsRUFBQyxDQUFDO0lBQ3hFLENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxTQUFvQjtRQUMvQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsQ0FBQztRQUNuQyxNQUFNLE9BQU8sR0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyx3QkFBd0IsQ0FBQyxDQUFDO1FBRWhFLE9BQU8sV0FBVyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFUyxnQkFBZ0IsQ0FBQyxPQUFrQjtRQUMzQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLE9BQU8sR0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDO1FBRS9ELE9BQU8sV0FBVyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRVMsZUFBZSxDQUFDLElBQVU7UUFDbEMsTUFBTSxTQUFTLEdBQVMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6RCxNQUFNLE9BQU8sR0FBUyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELE1BQU0sc0JBQXNCLEdBQVksU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVwRixNQUFNLGtCQUFrQixHQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXhHLE1BQU0sTUFBTSxHQUFrQjtZQUM1QixFQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLGtCQUFrQixFQUFFLEdBQUcsRUFBQztTQUN4RyxDQUFDO1FBRUYsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBRTdHLE1BQU0sZ0JBQWdCLEdBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFbEcsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDVixJQUFJLEVBQUUsZ0JBQWdCO2dCQUN0QixFQUFFLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDaEQsa0JBQWtCLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0I7YUFDdkQsQ0FBQyxDQUFBO1FBQ0osQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFUyxlQUFlLENBQUMsSUFBVTtRQUNsQyxNQUFNLFVBQVUsR0FBUyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTFELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVTLGtCQUFrQixDQUFDLElBQVU7UUFDckMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7K0dBdkRVLHlCQUF5QjttSEFBekIseUJBQXlCOzs0RkFBekIseUJBQXlCO2tCQURyQyxVQUFVOztBQTREWCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEseUJBQXlCOytHQUFwRCxrQkFBa0I7bUhBQWxCLGtCQUFrQjs7NEZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VTY2FsZUdlbmVyYXRvciB9IGZyb20gJy4vYmFzZS1zY2FsZS1nZW5lcmF0b3InO1xyXG5pbXBvcnQgeyBEYXRlSW5wdXQsIElTY2FsZUdlbmVyYXRvciwgSVNjYWxlR2VuZXJhdG9yQ29uZmlnLCBJU2NhbGVHcm91cCB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IERhdGVIZWxwZXJzIH0gZnJvbSBcIi4uL2hlbHBlcnMvZGF0ZS1oZWxwZXJzXCI7XHJcbmltcG9ydCB7IFdlZWtTY2FsZUZvcm1hdHRlciB9IGZyb20gXCIuLi9mb3JtYXR0ZXJzL3dlZWstc2NhbGUtZm9ybWF0dGVyXCI7XHJcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IFdFRUtfU0NBTEVfR0VORVJBVE9SX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxJU2NhbGVHZW5lcmF0b3JDb25maWc+KCdXZWVrIHNjYWxlIGNvbmZpZycpO1xyXG5cclxuY29uc3QgRGVmYXVsdENvbmZpZzogSVNjYWxlR2VuZXJhdG9yQ29uZmlnID0ge1xyXG4gIGZvcm1hdHRlcjogbmV3IFdlZWtTY2FsZUZvcm1hdHRlcigpLFxyXG59XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBEZWZhdWx0V2Vla1NjYWxlR2VuZXJhdG9yIGV4dGVuZHMgQmFzZVNjYWxlR2VuZXJhdG9yIGltcGxlbWVudHMgSVNjYWxlR2VuZXJhdG9yIHtcclxuICBwcm90ZWN0ZWQgX2dldENvbmZpZygpOiBJU2NhbGVHZW5lcmF0b3JDb25maWcge1xyXG4gICAgcmV0dXJuIHsuLi5EZWZhdWx0Q29uZmlnLCAuLi5pbmplY3QoV0VFS19TQ0FMRV9HRU5FUkFUT1JfQ09ORklHLCB7fSl9O1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF92YWxpZGF0ZVN0YXJ0RGF0ZShzdGFydERhdGU6IERhdGVJbnB1dCk6IERhdGUge1xyXG4gICAgY29uc3QgY291bnRPZkVtcHR5TW9udGhzQmVmb3JlID0gMTtcclxuICAgIGNvbnN0IG5ld0RhdGU6IERhdGUgPSBuZXcgRGF0ZShzdGFydERhdGUpO1xyXG4gICAgbmV3RGF0ZS5zZXRNb250aChuZXdEYXRlLmdldE1vbnRoKCkgLSBjb3VudE9mRW1wdHlNb250aHNCZWZvcmUpO1xyXG5cclxuICAgIHJldHVybiBEYXRlSGVscGVycy5maXJzdE1vbmRheU9mTW9udGgobmV3RGF0ZSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgX3ZhbGlkYXRlRW5kRGF0ZShlbmREYXRlOiBEYXRlSW5wdXQpOiBEYXRlIHtcclxuICAgIGNvbnN0IGNvdW50T2ZFbXB0eU1vbnRoc0FmdGVyID0gMTtcclxuICAgIGNvbnN0IG5ld0RhdGU6IERhdGUgPSBuZXcgRGF0ZShlbmREYXRlKTtcclxuICAgIG5ld0RhdGUuc2V0TW9udGgobmV3RGF0ZS5nZXRNb250aCgpICsgY291bnRPZkVtcHR5TW9udGhzQWZ0ZXIpO1xyXG5cclxuICAgIHJldHVybiBEYXRlSGVscGVycy5sYXN0RGF5T2ZXZWVrKG5ld0RhdGUpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9nZW5lcmF0ZUdyb3VwcyhkYXRlOiBEYXRlKTogSVNjYWxlR3JvdXBbXSB7XHJcbiAgICBjb25zdCB3ZWVrU3RhcnQ6IERhdGUgPSBEYXRlSGVscGVycy5maXJzdERheU9mV2VlayhkYXRlKTtcclxuICAgIGNvbnN0IHdlZWtFbmQ6IERhdGUgPSBEYXRlSGVscGVycy5sYXN0RGF5T2ZXZWVrKGRhdGUpO1xyXG4gICAgY29uc3Qgd2Vla1JlbGF0ZWRUb1R3b01vbnRoczogYm9vbGVhbiA9IHdlZWtTdGFydC5nZXRNb250aCgpICE9PSB3ZWVrRW5kLmdldE1vbnRoKCk7XHJcblxyXG4gICAgY29uc3Qgd2Vla1N0YXJ0R3JvdXBEYXRlOiBEYXRlID0gbmV3IERhdGUod2Vla1N0YXJ0LmdldEZ1bGxZZWFyKCksIHdlZWtTdGFydC5nZXRNb250aCgpLCAxLCAwLCAwLCAwLCAwKTtcclxuXHJcbiAgICBjb25zdCBncm91cHM6IElTY2FsZUdyb3VwW10gPSBbXHJcbiAgICAgIHtkYXRlOiB3ZWVrU3RhcnRHcm91cERhdGUsIGlkOiBEYXRlSGVscGVycy5nZW5lcmF0ZURhdGVJZCh3ZWVrU3RhcnRHcm91cERhdGUpLCBjb3ZlcmFnZUluUGVyY2VudHM6IDEwMH1cclxuICAgIF07XHJcblxyXG4gICAgaWYgKHdlZWtSZWxhdGVkVG9Ud29Nb250aHMpIHtcclxuICAgICAgZ3JvdXBzWzBdLmNvdmVyYWdlSW5QZXJjZW50cyA9IChEYXRlSGVscGVycy5nZXREYXlzSW5Nb250aCh3ZWVrU3RhcnQpIC0gKHdlZWtTdGFydC5nZXREYXRlKCkgLSAxKSkgLyA3ICogMTAwO1xyXG5cclxuICAgICAgY29uc3Qgd2Vla0VuZEdyb3VwRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKHdlZWtFbmQuZ2V0RnVsbFllYXIoKSwgd2Vla0VuZC5nZXRNb250aCgpLCAxLCAwLCAwLCAwLCAwKTtcclxuXHJcbiAgICAgIGdyb3Vwcy5wdXNoKHtcclxuICAgICAgICBkYXRlOiB3ZWVrRW5kR3JvdXBEYXRlLFxyXG4gICAgICAgIGlkOiBEYXRlSGVscGVycy5nZW5lcmF0ZURhdGVJZCh3ZWVrRW5kR3JvdXBEYXRlKSxcclxuICAgICAgICBjb3ZlcmFnZUluUGVyY2VudHM6IDEwMCAtIGdyb3Vwc1swXS5jb3ZlcmFnZUluUGVyY2VudHNcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZ3JvdXBzO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9nZXRDb2x1bW5JbmRleChkYXRlOiBEYXRlKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHdlZWtNb25kYXk6IERhdGUgPSBEYXRlSGVscGVycy5maXJzdERheU9mV2VlayhkYXRlKTtcclxuXHJcbiAgICByZXR1cm4gTWF0aC5jZWlsKHdlZWtNb25kYXkuZ2V0RGF0ZSgpIC8gNyk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgX2dldE5leHRDb2x1bW5EYXRlKGRhdGU6IERhdGUpOiBEYXRlIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyA3KSk7XHJcbiAgfVxyXG59XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBXZWVrU2NhbGVHZW5lcmF0b3IgZXh0ZW5kcyBEZWZhdWx0V2Vla1NjYWxlR2VuZXJhdG9yIHtcclxufVxyXG4iXX0=