Calendar/wwwroot/js/factories/ManagerFactory.js

60 lines
2.2 KiB
JavaScript
Raw Permalink Normal View History

2026-02-03 00:02:25 +01:00
import { EventManager } from '../managers/EventManager';
import { EventRenderingService } from '../renderers/EventRendererManager';
import { GridManager } from '../managers/GridManager';
import { ScrollManager } from '../managers/ScrollManager';
import { NavigationManager } from '../managers/NavigationManager';
import { ViewManager } from '../managers/ViewManager';
import { CalendarManager } from '../managers/CalendarManager';
import { DragDropManager } from '../managers/DragDropManager';
import { AllDayManager } from '../managers/AllDayManager';
/**
* Factory for creating and managing calendar managers with proper dependency injection
*/
export class ManagerFactory {
constructor() { }
static getInstance() {
if (!ManagerFactory.instance) {
ManagerFactory.instance = new ManagerFactory();
}
return ManagerFactory.instance;
}
/**
* Create all managers with proper dependency injection
*/
createManagers(eventBus) {
// Create managers in dependency order
const eventManager = new EventManager(eventBus);
const eventRenderer = new EventRenderingService(eventBus, eventManager);
const gridManager = new GridManager();
const scrollManager = new ScrollManager();
const navigationManager = new NavigationManager(eventBus, eventRenderer);
const viewManager = new ViewManager(eventBus);
const dragDropManager = new DragDropManager(eventBus);
const allDayManager = new AllDayManager();
// CalendarManager depends on all other managers
const calendarManager = new CalendarManager(eventBus, eventManager, gridManager, eventRenderer, scrollManager);
return {
eventManager,
eventRenderer,
gridManager,
scrollManager,
navigationManager,
viewManager,
calendarManager,
dragDropManager,
allDayManager
};
}
/**
* Initialize all managers in the correct order
*/
async initializeManagers(managers) {
try {
await managers.calendarManager.initialize?.();
}
catch (error) {
throw error;
}
}
}
//# sourceMappingURL=ManagerFactory.js.map