From fb48e410ea7320f231049e142dd9c671d946227c Mon Sep 17 00:00:00 2001 From: "Janus C. H. Knudsen" Date: Thu, 30 Oct 2025 22:05:06 +0100 Subject: [PATCH] Refactors calendar configuration and DI container setup Removes singleton export for CalendarConfig Updates dependency injection to use type registration Adds more flexible renderer and service configuration Integrates CalendarConfig with DateService initialization --- src/core/CalendarConfig.ts | 5 +---- src/index.ts | 33 ++++++++++++++------------------- src/utils/DateService.ts | 5 +++-- 3 files changed, 18 insertions(+), 25 deletions(-) diff --git a/src/core/CalendarConfig.ts b/src/core/CalendarConfig.ts index 76e10c7..fd07177 100644 --- a/src/core/CalendarConfig.ts +++ b/src/core/CalendarConfig.ts @@ -572,7 +572,4 @@ export class CalendarConfig { return this.timeFormatConfig.dateFormat; } -} - -// Create singleton instance -export const calendarConfig = new CalendarConfig(); \ No newline at end of file +} \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 4f8a197..5f3a9fe 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,7 @@ // Main entry point for Calendar Plantempus import { Container } from '@novadi/core'; import { eventBus } from './core/EventBus'; -import { calendarConfig } from './core/CalendarConfig'; +import { CalendarConfig } from './core/CalendarConfig'; import { URLManager } from './utils/URLManager'; import { IEventBus } from './types/CalendarTypes'; @@ -25,6 +25,7 @@ import { DateHeaderRenderer, type HeaderRenderer } from './renderers/HeaderRende import { DateColumnRenderer, type ColumnRenderer } from './renderers/ColumnRenderer'; import { DateEventRenderer, type EventRendererStrategy } from './renderers/EventRenderer'; import { GridRenderer } from './renderers/GridRenderer'; +import { DateService } from './utils/DateService'; /** * Handle deep linking functionality after managers are initialized @@ -56,7 +57,6 @@ async function handleDeepLinking(eventManager: EventManager): Promise { async function initializeCalendar(): Promise { try { // Use the singleton calendar configuration - const config = calendarConfig; // Create NovaDI container const container = new Container(); @@ -65,28 +65,23 @@ async function initializeCalendar(): Promise { // Enable debug mode for development eventBus.setDebug(true); + builder.registerType(CalendarConfig).as().singleInstance(); // Bind core services as instances builder.registerInstance(eventBus).as(); - // Determine calendar mode and bind appropriate renderers - const calendarMode = calendarConfig.getCalendarMode(); - console.log('🔧 DI Container: Calendar mode detected:', calendarMode); - - if (calendarMode === 'resource') { - // Resource mode renderers - console.log('🔧 DI Container: Binding DateHeaderRenderer for resource mode (TEST)'); - builder.registerInstance(new DateHeaderRenderer()).as(); - builder.registerInstance(new DateColumnRenderer()).as(); - builder.registerInstance(new DateEventRenderer()).as(); - } else { - // Date mode renderers (default) - console.log('🔧 DI Container: Binding DateHeaderRenderer for date mode'); - builder.registerInstance(new DateHeaderRenderer()).as(); - builder.registerInstance(new DateColumnRenderer()).as(); - builder.registerInstance(new DateEventRenderer()).as(); - } + // Register renderers with keyed registration based on calendar mode + // Date mode renderers + builder.registerType(DateHeaderRenderer).as().keyed('date'); + builder.registerType(DateColumnRenderer).as().keyed('date'); + builder.registerType(DateEventRenderer).as().keyed('date'); + // Resource mode renderers (using same renderers for now) + builder.registerType(DateHeaderRenderer).as().keyed('resource'); + builder.registerType(DateColumnRenderer).as().keyed('resource'); + builder.registerType(DateEventRenderer).as().keyed('resource'); + builder.registerType(DateService).as().singleInstance(); + builder.registerType(EventRenderingService).as().singleInstance(); builder.registerType(GridRenderer).as().singleInstance(); builder.registerType(GridManager).as().singleInstance(); diff --git a/src/utils/DateService.ts b/src/utils/DateService.ts index cdd6e2b..5059955 100644 --- a/src/utils/DateService.ts +++ b/src/utils/DateService.ts @@ -29,12 +29,13 @@ import { fromZonedTime, formatInTimeZone } from 'date-fns-tz'; +import { CalendarConfig } from '../core/CalendarConfig'; export class DateService { private timezone: string; - constructor(timezone: string = 'Europe/Copenhagen') { - this.timezone = timezone; + constructor(config: CalendarConfig) { + this.timezone = config.getTimezone(); } // ============================================