Batch update, WIP

This commit is contained in:
Janus C. H. Knudsen 2025-11-03 22:04:37 +01:00
parent 8ec5f52872
commit 989c9bd69d
25 changed files with 68 additions and 123 deletions

View file

@ -29,13 +29,13 @@ import {
fromZonedTime,
formatInTimeZone
} from 'date-fns-tz';
import { Configuration } from '../configuration/CalendarConfig';
import { Configuration } from '../configurations/CalendarConfig';
export class DateService {
private timezone: string;
constructor(config: Configuration) {
this.timezone = config.getTimezone();
this.timezone = config.timeFormatConfig.timezone;
}
// ============================================

View file

@ -1,4 +1,4 @@
import { Configuration } from '../configuration/CalendarConfig';
import { Configuration } from '../configurations/CalendarConfig';
import { IColumnBounds } from './ColumnDetectionUtils';
import { DateService } from './DateService';
import { TimeFormatter } from './TimeFormatter';
@ -22,7 +22,7 @@ export class PositionUtils {
* Convert minutes to pixels
*/
public minutesToPixels(minutes: number): number {
const gridSettings = this.config.getGridSettings();
const gridSettings = this.config.gridSettings;
const pixelsPerHour = gridSettings.hourHeight;
return (minutes / 60) * pixelsPerHour;
}
@ -31,7 +31,7 @@ export class PositionUtils {
* Convert pixels to minutes
*/
public pixelsToMinutes(pixels: number): number {
const gridSettings = this.config.getGridSettings();
const gridSettings = this.config.gridSettings;
const pixelsPerHour = gridSettings.hourHeight;
return (pixels / pixelsPerHour) * 60;
}
@ -41,7 +41,7 @@ export class PositionUtils {
*/
public timeToPixels(timeString: string): number {
const totalMinutes = this.dateService.timeToMinutes(timeString);
const gridSettings = this.config.getGridSettings();
const gridSettings = this.config.gridSettings;
const dayStartMinutes = gridSettings.dayStartHour * 60;
const minutesFromDayStart = totalMinutes - dayStartMinutes;
@ -53,7 +53,7 @@ export class PositionUtils {
*/
public dateToPixels(date: Date): number {
const totalMinutes = this.dateService.getMinutesSinceMidnight(date);
const gridSettings = this.config.getGridSettings();
const gridSettings = this.config.gridSettings;
const dayStartMinutes = gridSettings.dayStartHour * 60;
const minutesFromDayStart = totalMinutes - dayStartMinutes;
@ -65,7 +65,7 @@ export class PositionUtils {
*/
public pixelsToTime(pixels: number): string {
const minutes = this.pixelsToMinutes(pixels);
const gridSettings = this.config.getGridSettings();
const gridSettings = this.config.gridSettings;
const dayStartMinutes = gridSettings.dayStartHour * 60;
const totalMinutes = dayStartMinutes + minutes;
@ -109,7 +109,7 @@ export class PositionUtils {
* Snap position til grid interval
*/
public snapToGrid(pixels: number): number {
const gridSettings = this.config.getGridSettings();
const gridSettings = this.config.gridSettings;
const snapInterval = gridSettings.snapInterval;
const snapPixels = this.minutesToPixels(snapInterval);
@ -121,7 +121,7 @@ export class PositionUtils {
*/
public snapTimeToInterval(timeString: string): string {
const totalMinutes = this.dateService.timeToMinutes(timeString);
const gridSettings = this.config.getGridSettings();
const gridSettings = this.config.gridSettings;
const snapInterval = gridSettings.snapInterval;
const snappedMinutes = Math.round(totalMinutes / snapInterval) * snapInterval;
@ -182,7 +182,7 @@ export class PositionUtils {
*/
public isWithinWorkHours(timeString: string): boolean {
const [hours] = timeString.split(':').map(Number);
const gridSettings = this.config.getGridSettings();
const gridSettings = this.config.gridSettings;
return hours >= gridSettings.workStartHour && hours < gridSettings.workEndHour;
}
@ -191,7 +191,7 @@ export class PositionUtils {
*/
public isWithinDayBounds(timeString: string): boolean {
const [hours] = timeString.split(':').map(Number);
const gridSettings = this.config.getGridSettings();
const gridSettings = this.config.gridSettings;
return hours >= gridSettings.dayStartHour && hours < gridSettings.dayEndHour;
}
@ -207,7 +207,7 @@ export class PositionUtils {
* Hent maksimum event højde i pixels (hele dagen)
*/
public getMaximumEventHeight(): number {
const gridSettings = this.config.getGridSettings();
const gridSettings = this.config.gridSettings;
const dayDurationHours = gridSettings.dayEndHour - gridSettings.dayStartHour;
return dayDurationHours * gridSettings.hourHeight;
}

View file

@ -9,32 +9,24 @@
*/
import { DateService } from './DateService';
export interface ITimeFormatSettings {
timezone: string;
use24HourFormat: boolean;
locale: string;
dateFormat: 'locale' | 'technical';
showSeconds: boolean;
}
import { ITimeFormatConfig } from '../configurations/TimeFormatConfig';
export class TimeFormatter {
private static settings: ITimeFormatSettings = {
timezone: 'Europe/Copenhagen', // Default to Denmark
use24HourFormat: true, // 24-hour format standard in Denmark
locale: 'da-DK', // Danish locale
dateFormat: 'technical', // Use technical format yyyy-mm-dd hh:mm:ss
showSeconds: false // Don't show seconds by default
};
private static settings: ITimeFormatConfig | null = null;
// DateService will be initialized lazily to avoid circular dependency with CalendarConfig
private static dateService: DateService | null = null;
private static getDateService(): DateService {
if (!TimeFormatter.dateService) {
if (!TimeFormatter.settings) {
throw new Error('TimeFormatter must be configured before use. Call TimeFormatter.configure() first.');
}
// Create a minimal config object for DateService
const config = {
getTimezone: () => TimeFormatter.settings.timezone
timeFormatConfig: {
timezone: TimeFormatter.settings.timezone
}
};
TimeFormatter.dateService = new DateService(config as any);
}
@ -43,9 +35,10 @@ export class TimeFormatter {
/**
* Configure time formatting settings
* Must be called before using TimeFormatter
*/
static configure(settings: Partial<ITimeFormatSettings>): void {
TimeFormatter.settings = { ...TimeFormatter.settings, ...settings };
static configure(settings: ITimeFormatConfig): void {
TimeFormatter.settings = settings;
// Reset DateService to pick up new timezone
TimeFormatter.dateService = null;
}
@ -71,6 +64,9 @@ export class TimeFormatter {
* @returns Formatted time string (e.g., "09:00")
*/
private static format24Hour(date: Date): string {
if (!TimeFormatter.settings) {
throw new Error('TimeFormatter must be configured before use. Call TimeFormatter.configure() first.');
}
const localDate = TimeFormatter.convertToLocalTime(date);
return TimeFormatter.getDateService().formatTime(localDate, TimeFormatter.settings.showSeconds);
}