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

@ -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<void> {
async function initializeCalendar(): Promise<void> {
try {
// Use the singleton calendar configuration
const config = calendarConfig;
// Create NovaDI container
const container = new Container();
@ -65,28 +65,23 @@ async function initializeCalendar(): Promise<void> {
// Enable debug mode for development
eventBus.setDebug(true);
builder.registerType(CalendarConfig).as<CalendarConfig>().singleInstance();
// Bind core services as instances
builder.registerInstance(eventBus).as<IEventBus>();
// 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<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>();
}
// Register renderers with keyed registration based on calendar mode
// Date mode renderers
builder.registerType(DateHeaderRenderer).as<HeaderRenderer>().keyed('date');
builder.registerType(DateColumnRenderer).as<ColumnRenderer>().keyed('date');
builder.registerType(DateEventRenderer).as<EventRendererStrategy>().keyed('date');
// 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(GridRenderer).as<GridRenderer>().singleInstance();
builder.registerType(GridManager).as<GridManager>().singleInstance();