diff --git a/src/di/container.ts b/src/di/container.ts index cdc5d63..ca851e1 100644 --- a/src/di/container.ts +++ b/src/di/container.ts @@ -27,6 +27,7 @@ import { HeaderManager } from '../managers/HeaderManager'; import { DateHeaderRenderer, ResourceHeaderRenderer } from '../renderers/HeaderRenderer'; import { DateColumnRenderer, ResourceColumnRenderer } from '../renderers/ColumnRenderer'; import { DateEventRenderer } from '../renderers/EventRenderer'; +import { GridRenderer } from '../renderers/GridRenderer'; /** * Create and configure the DI container @@ -62,16 +63,19 @@ export function createContainer(): Container { const eventManager = new EventManager(eventBus); container.bind(TOKENS.eventManager).toConstant(eventManager); - const eventRenderer = new EventRenderingService(eventBus, eventManager); + const eventRenderer = new EventRenderingService(eventBus, eventManager, container.get(TOKENS.eventRendererStrategy)); container.bind(TOKENS.eventRenderer).toConstant(eventRenderer); - const gridManager = new GridManager(); + const gridRenderer = new GridRenderer(container.get(TOKENS.columnRenderer)); + container.bind(TOKENS.gridRenderer).toConstant(gridRenderer); + + const gridManager = new GridManager(gridRenderer); container.bind(TOKENS.gridManager).toConstant(gridManager); const scrollManager = new ScrollManager(); container.bind(TOKENS.scrollManager).toConstant(scrollManager); - const navigationManager = new NavigationManager(eventBus, eventRenderer); + const navigationManager = new NavigationManager(eventBus, eventRenderer, gridRenderer); container.bind(TOKENS.navigationManager).toConstant(navigationManager); const viewManager = new ViewManager(eventBus); diff --git a/src/di/tokens.ts b/src/di/tokens.ts index 29ab897..9321683 100644 --- a/src/di/tokens.ts +++ b/src/di/tokens.ts @@ -21,6 +21,7 @@ import { HeaderManager } from '../managers/HeaderManager'; import { HeaderRenderer } from '../renderers/HeaderRenderer'; import { ColumnRenderer } from '../renderers/ColumnRenderer'; import { EventRendererStrategy } from '../renderers/EventRenderer'; +import { GridRenderer } from '../renderers/GridRenderer'; /** * DI Tokens - Type-safe identifiers for dependency injection @@ -33,6 +34,7 @@ export const TOKENS = { headerRenderer: token('headerRenderer'), columnRenderer: token('columnRenderer'), eventRendererStrategy: token('eventRendererStrategy'), + gridRenderer: token('gridRenderer'), // Managers eventManager: token('eventManager'), diff --git a/src/managers/GridManager.ts b/src/managers/GridManager.ts index 30ffe92..ca54f57 100644 --- a/src/managers/GridManager.ts +++ b/src/managers/GridManager.ts @@ -22,10 +22,10 @@ export class GridManager { private gridRenderer: GridRenderer; private styleManager: GridStyleManager; private dateService: DateService; - - constructor() { - // Initialize GridRenderer and StyleManager with config - this.gridRenderer = new GridRenderer(); + + constructor(gridRenderer: GridRenderer) { + // Inject GridRenderer via DI + this.gridRenderer = gridRenderer; this.styleManager = new GridStyleManager(); this.dateService = new DateService('Europe/Copenhagen'); this.init(); diff --git a/src/managers/NavigationManager.ts b/src/managers/NavigationManager.ts index d56d634..e09912d 100644 --- a/src/managers/NavigationManager.ts +++ b/src/managers/NavigationManager.ts @@ -19,11 +19,11 @@ export class NavigationManager { private targetWeek: Date; private animationQueue: number = 0; - constructor(eventBus: IEventBus, eventRenderer: EventRenderingService) { + constructor(eventBus: IEventBus, eventRenderer: EventRenderingService, gridRenderer: GridRenderer) { this.eventBus = eventBus; this.dateService = new DateService('Europe/Copenhagen'); this.navigationRenderer = new NavigationRenderer(eventBus, eventRenderer); - this.gridRenderer = new GridRenderer(); + this.gridRenderer = gridRenderer; this.currentWeek = this.getISOWeekStart(new Date()); this.targetWeek = new Date(this.currentWeek); this.init(); diff --git a/src/renderers/EventRendererManager.ts b/src/renderers/EventRendererManager.ts index 3d77c61..1fc2eb1 100644 --- a/src/renderers/EventRendererManager.ts +++ b/src/renderers/EventRendererManager.ts @@ -21,13 +21,10 @@ export class EventRenderingService { private dragMouseLeaveHeaderListener: ((event: Event) => void) | null = null; - constructor(eventBus: IEventBus, eventManager: EventManager) { + constructor(eventBus: IEventBus, eventManager: EventManager, strategy: EventRendererStrategy) { this.eventBus = eventBus; this.eventManager = eventManager; - - // Cache strategy at initialization - const calendarType = calendarConfig.getCalendarMode(); - this.strategy = CalendarTypeFactory.getEventRenderer(calendarType); + this.strategy = strategy; // Initialize DateService const timezone = calendarConfig.getTimezone?.(); diff --git a/src/renderers/GridRenderer.ts b/src/renderers/GridRenderer.ts index 0ffd50f..887a33b 100644 --- a/src/renderers/GridRenderer.ts +++ b/src/renderers/GridRenderer.ts @@ -15,10 +15,12 @@ export class GridRenderer { private cachedGridContainer: HTMLElement | null = null; private cachedTimeAxis: HTMLElement | null = null; private dateService: DateService; + private columnRenderer: ColumnRenderer; - constructor() { + constructor(columnRenderer: ColumnRenderer) { const timezone = calendarConfig.getTimezone?.(); this.dateService = new DateService(timezone); + this.columnRenderer = columnRenderer; } public renderGrid( @@ -139,16 +141,13 @@ export class GridRenderer { resourceData: ResourceCalendarData | null, view: CalendarView ): void { - const calendarType = calendarConfig.getCalendarMode(); - const columnRenderer = CalendarTypeFactory.getColumnRenderer(calendarType); - const context: ColumnRenderContext = { currentWeek: currentDate, // ColumnRenderer expects currentWeek property config: calendarConfig, resourceData: resourceData }; - columnRenderer.render(columnContainer, context); + this.columnRenderer.render(columnContainer, context); } /**