From 9d270217bd4eaa6bd958d292223d53b740082231 Mon Sep 17 00:00:00 2001 From: "Janus C. H. Knudsen" Date: Tue, 18 Nov 2025 22:33:48 +0100 Subject: [PATCH] Refactor data source and configuration management Abstracts column data source with interface Updates managers to use configuration-driven view and date Decouples datasource creation from individual managers Improves flexibility and dependency injection for calendar components --- src/datasources/DateColumnDataSource.ts | 8 +++----- src/managers/CalendarManager.ts | 3 ++- src/managers/GridManager.ts | 9 +++++---- src/managers/HeaderManager.ts | 6 +++--- src/managers/NavigationManager.ts | 9 +++++---- src/types/ColumnDataSource.ts | 13 +++++++++++++ 6 files changed, 31 insertions(+), 17 deletions(-) diff --git a/src/datasources/DateColumnDataSource.ts b/src/datasources/DateColumnDataSource.ts index 9bf5fc6..d4ac0dc 100644 --- a/src/datasources/DateColumnDataSource.ts +++ b/src/datasources/DateColumnDataSource.ts @@ -19,14 +19,12 @@ export class DateColumnDataSource implements IColumnDataSource { constructor( dateService: DateService, - config: Configuration, - currentDate: Date, - currentView: CalendarView + config: Configuration ) { this.dateService = dateService; this.config = config; - this.currentDate = currentDate; - this.currentView = currentView; + this.currentDate = new Date(); + this.currentView = this.config.currentView; } /** diff --git a/src/managers/CalendarManager.ts b/src/managers/CalendarManager.ts index e541e10..68c777d 100644 --- a/src/managers/CalendarManager.ts +++ b/src/managers/CalendarManager.ts @@ -16,7 +16,7 @@ export class CalendarManager { private eventRenderer: EventRenderingService; private scrollManager: ScrollManager; private config: Configuration; - private currentView: CalendarView = 'week'; + private currentView: CalendarView; private currentDate: Date = new Date(); private isInitialized: boolean = false; @@ -34,6 +34,7 @@ export class CalendarManager { this.eventRenderer = eventRenderingService; this.scrollManager = scrollManager; this.config = config; + this.currentView = this.config.currentView; this.setupEventListeners(); } diff --git a/src/managers/GridManager.ts b/src/managers/GridManager.ts index 5faa9f9..36cf352 100644 --- a/src/managers/GridManager.ts +++ b/src/managers/GridManager.ts @@ -8,7 +8,7 @@ import { CoreEvents } from '../constants/CoreEvents'; import { CalendarView } from '../types/CalendarTypes'; import { GridRenderer } from '../renderers/GridRenderer'; import { DateService } from '../utils/DateService'; -import { DateColumnDataSource } from '../datasources/DateColumnDataSource'; +import { IColumnDataSource } from '../types/ColumnDataSource'; import { Configuration } from '../configurations/CalendarConfig'; import { EventManager } from './EventManager'; @@ -22,20 +22,21 @@ export class GridManager { private gridRenderer: GridRenderer; private dateService: DateService; private config: Configuration; - private dataSource: DateColumnDataSource; + private dataSource: IColumnDataSource; private eventManager: EventManager; constructor( gridRenderer: GridRenderer, dateService: DateService, config: Configuration, - eventManager: EventManager + eventManager: EventManager, + dataSource: IColumnDataSource ) { this.gridRenderer = gridRenderer; this.dateService = dateService; this.config = config; this.eventManager = eventManager; - this.dataSource = new DateColumnDataSource(dateService, config, this.currentDate, this.currentView); + this.dataSource = dataSource; this.init(); } diff --git a/src/managers/HeaderManager.ts b/src/managers/HeaderManager.ts index 4ae245a..e12ef4f 100644 --- a/src/managers/HeaderManager.ts +++ b/src/managers/HeaderManager.ts @@ -4,7 +4,7 @@ import { CoreEvents } from '../constants/CoreEvents'; import { IHeaderRenderer, IHeaderRenderContext } from '../renderers/DateHeaderRenderer'; import { IDragMouseEnterHeaderEventPayload, IDragMouseLeaveHeaderEventPayload, IHeaderReadyEventPayload } from '../types/EventTypes'; import { ColumnDetectionUtils } from '../utils/ColumnDetectionUtils'; -import { DateColumnDataSource } from '../datasources/DateColumnDataSource'; +import { IColumnDataSource } from '../types/ColumnDataSource'; /** * HeaderManager - Handles all header-related event logic @@ -14,9 +14,9 @@ import { DateColumnDataSource } from '../datasources/DateColumnDataSource'; export class HeaderManager { private headerRenderer: IHeaderRenderer; private config: Configuration; - private dataSource: DateColumnDataSource; + private dataSource: IColumnDataSource; - constructor(headerRenderer: IHeaderRenderer, config: Configuration, dataSource: DateColumnDataSource) { + constructor(headerRenderer: IHeaderRenderer, config: Configuration, dataSource: IColumnDataSource) { this.headerRenderer = headerRenderer; this.config = config; this.dataSource = dataSource; diff --git a/src/managers/NavigationManager.ts b/src/managers/NavigationManager.ts index 4fa93b0..3aa8b8d 100644 --- a/src/managers/NavigationManager.ts +++ b/src/managers/NavigationManager.ts @@ -5,7 +5,7 @@ import { CoreEvents } from '../constants/CoreEvents'; import { WeekInfoRenderer } from '../renderers/WeekInfoRenderer'; import { GridRenderer } from '../renderers/GridRenderer'; import { INavButtonClickedEventPayload } from '../types/EventTypes'; -import { DateColumnDataSource } from '../datasources/DateColumnDataSource'; +import { IColumnDataSource } from '../types/ColumnDataSource'; import { Configuration } from '../configurations/CalendarConfig'; export class NavigationManager { @@ -14,7 +14,7 @@ export class NavigationManager { private gridRenderer: GridRenderer; private dateService: DateService; private config: Configuration; - private dataSource: DateColumnDataSource; + private dataSource: IColumnDataSource; private currentWeek: Date; private targetWeek: Date; private animationQueue: number = 0; @@ -25,7 +25,8 @@ export class NavigationManager { gridRenderer: GridRenderer, dateService: DateService, weekInfoRenderer: WeekInfoRenderer, - config: Configuration + config: Configuration, + dataSource: IColumnDataSource ) { this.eventBus = eventBus; this.dateService = dateService; @@ -34,7 +35,7 @@ export class NavigationManager { this.config = config; this.currentWeek = this.getISOWeekStart(new Date()); this.targetWeek = new Date(this.currentWeek); - this.dataSource = new DateColumnDataSource(dateService, config, this.currentWeek, 'week' as CalendarView); + this.dataSource = dataSource; this.init(); } diff --git a/src/types/ColumnDataSource.ts b/src/types/ColumnDataSource.ts index ad95d98..f933574 100644 --- a/src/types/ColumnDataSource.ts +++ b/src/types/ColumnDataSource.ts @@ -1,4 +1,5 @@ import { IResource } from './ResourceTypes'; +import { CalendarView } from './CalendarTypes'; /** * Column information container @@ -26,4 +27,16 @@ export interface IColumnDataSource { * Get the type of columns this datasource provides */ getType(): 'date' | 'resource'; + + /** + * Update the current date for column calculations + * @param date - The new current date + */ + setCurrentDate(date: Date): void; + + /** + * Update the current view (day/week/month) + * @param view - The new calendar view + */ + setCurrentView(view: CalendarView): void; }