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
JavaScript
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=