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
This commit is contained in:
Janus C. H. Knudsen 2025-10-30 22:05:06 +01:00
parent 10cb3792f4
commit fb48e410ea
3 changed files with 18 additions and 25 deletions

View file

@ -572,7 +572,4 @@ export class CalendarConfig {
return this.timeFormatConfig.dateFormat; return this.timeFormatConfig.dateFormat;
} }
} }
// Create singleton instance
export const calendarConfig = new CalendarConfig();

View file

@ -1,7 +1,7 @@
// Main entry point for Calendar Plantempus // Main entry point for Calendar Plantempus
import { Container } from '@novadi/core'; import { Container } from '@novadi/core';
import { eventBus } from './core/EventBus'; import { eventBus } from './core/EventBus';
import { calendarConfig } from './core/CalendarConfig'; import { CalendarConfig } from './core/CalendarConfig';
import { URLManager } from './utils/URLManager'; import { URLManager } from './utils/URLManager';
import { IEventBus } from './types/CalendarTypes'; import { IEventBus } from './types/CalendarTypes';
@ -25,6 +25,7 @@ import { DateHeaderRenderer, type HeaderRenderer } from './renderers/HeaderRende
import { DateColumnRenderer, type ColumnRenderer } from './renderers/ColumnRenderer'; import { DateColumnRenderer, type ColumnRenderer } from './renderers/ColumnRenderer';
import { DateEventRenderer, type EventRendererStrategy } from './renderers/EventRenderer'; import { DateEventRenderer, type EventRendererStrategy } from './renderers/EventRenderer';
import { GridRenderer } from './renderers/GridRenderer'; import { GridRenderer } from './renderers/GridRenderer';
import { DateService } from './utils/DateService';
/** /**
* Handle deep linking functionality after managers are initialized * Handle deep linking functionality after managers are initialized
@ -56,7 +57,6 @@ async function handleDeepLinking(eventManager: EventManager): Promise<void> {
async function initializeCalendar(): Promise<void> { async function initializeCalendar(): Promise<void> {
try { try {
// Use the singleton calendar configuration // Use the singleton calendar configuration
const config = calendarConfig;
// Create NovaDI container // Create NovaDI container
const container = new Container(); const container = new Container();
@ -65,28 +65,23 @@ async function initializeCalendar(): Promise<void> {
// Enable debug mode for development // Enable debug mode for development
eventBus.setDebug(true); eventBus.setDebug(true);
builder.registerType(CalendarConfig).as<CalendarConfig>().singleInstance();
// Bind core services as instances // Bind core services as instances
builder.registerInstance(eventBus).as<IEventBus>(); builder.registerInstance(eventBus).as<IEventBus>();
// Determine calendar mode and bind appropriate renderers // Register renderers with keyed registration based on calendar mode
const calendarMode = calendarConfig.getCalendarMode(); // Date mode renderers
console.log('🔧 DI Container: Calendar mode detected:', calendarMode); builder.registerType(DateHeaderRenderer).as<HeaderRenderer>().keyed('date');
builder.registerType(DateColumnRenderer).as<ColumnRenderer>().keyed('date');
if (calendarMode === 'resource') { builder.registerType(DateEventRenderer).as<EventRendererStrategy>().keyed('date');
// Resource mode renderers
console.log('🔧 DI Container: Binding DateHeaderRenderer for resource mode (TEST)');
builder.registerInstance(new DateHeaderRenderer()).as<HeaderRenderer>();
builder.registerInstance(new DateColumnRenderer()).as<ColumnRenderer>();
builder.registerInstance(new DateEventRenderer()).as<EventRendererStrategy>();
} else {
// Date mode renderers (default)
console.log('🔧 DI Container: Binding DateHeaderRenderer for date mode');
builder.registerInstance(new DateHeaderRenderer()).as<HeaderRenderer>();
builder.registerInstance(new DateColumnRenderer()).as<ColumnRenderer>();
builder.registerInstance(new DateEventRenderer()).as<EventRendererStrategy>();
}
// Resource mode renderers (using same renderers for now)
builder.registerType(DateHeaderRenderer).as<HeaderRenderer>().keyed('resource');
builder.registerType(DateColumnRenderer).as<ColumnRenderer>().keyed('resource');
builder.registerType(DateEventRenderer).as<EventRendererStrategy>().keyed('resource');
builder.registerType(DateService).as<DateService>().singleInstance();
builder.registerType(EventRenderingService).as<EventRenderingService>().singleInstance(); builder.registerType(EventRenderingService).as<EventRenderingService>().singleInstance();
builder.registerType(GridRenderer).as<GridRenderer>().singleInstance(); builder.registerType(GridRenderer).as<GridRenderer>().singleInstance();
builder.registerType(GridManager).as<GridManager>().singleInstance(); builder.registerType(GridManager).as<GridManager>().singleInstance();

View file

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