Refactor CalendarConfig to static configuration class
Converts CalendarConfig to a pure static configuration management class with improved initialization and dependency handling Removes event bus dependencies and simplifies configuration loading Adds static methods for config management and initialization Improves flexibility and reduces class complexity
This commit is contained in:
parent
8bbb2f05d3
commit
349e1e8293
7 changed files with 3299 additions and 318 deletions
37
src/index.ts
37
src/index.ts
|
|
@ -19,10 +19,11 @@ import { ResizeHandleManager } from './managers/ResizeHandleManager';
|
|||
import { EdgeScrollManager } from './managers/EdgeScrollManager';
|
||||
import { DragHoverManager } from './managers/DragHoverManager';
|
||||
import { HeaderManager } from './managers/HeaderManager';
|
||||
import { ConfigManager } from './managers/ConfigManager';
|
||||
|
||||
// Import renderers
|
||||
import { DateHeaderRenderer, type HeaderRenderer } from './renderers/HeaderRenderer';
|
||||
import { DateColumnRenderer, type ColumnRenderer } from './renderers/ColumnRenderer';
|
||||
import { DateHeaderRenderer, ResourceHeaderRenderer, type HeaderRenderer } from './renderers/HeaderRenderer';
|
||||
import { DateColumnRenderer, ResourceColumnRenderer, type ColumnRenderer } from './renderers/ColumnRenderer';
|
||||
import { DateEventRenderer, type EventRendererStrategy } from './renderers/EventRenderer';
|
||||
import { AllDayEventRenderer } from './renderers/AllDayEventRenderer';
|
||||
import { GridRenderer } from './renderers/GridRenderer';
|
||||
|
|
@ -66,7 +67,8 @@ async function handleDeepLinking(eventManager: EventManager, urlManager: URLMana
|
|||
*/
|
||||
async function initializeCalendar(): Promise<void> {
|
||||
try {
|
||||
// Use the singleton calendar configuration
|
||||
// Initialize static calendar configuration
|
||||
CalendarConfig.initialize();
|
||||
|
||||
// Create NovaDI container
|
||||
const container = new Container();
|
||||
|
|
@ -75,20 +77,25 @@ async function initializeCalendar(): Promise<void> {
|
|||
// Enable debug mode for development
|
||||
eventBus.setDebug(true);
|
||||
|
||||
builder.registerType(CalendarConfig).as<CalendarConfig>().singleInstance();
|
||||
// Register CalendarConfig as singleton instance (static class, not instantiated)
|
||||
builder.registerInstance(CalendarConfig).as<CalendarConfig>();
|
||||
|
||||
// Register ConfigManager for event-driven config updates
|
||||
builder.registerType(ConfigManager).as<ConfigManager>().singleInstance();
|
||||
|
||||
// Bind core services as instances
|
||||
builder.registerInstance(eventBus).as<IEventBus>();
|
||||
|
||||
// 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');
|
||||
// Register renderers based on calendar mode
|
||||
const calendarMode = CalendarConfig.getCalendarMode();
|
||||
if (calendarMode === 'resource') {
|
||||
builder.registerType(ResourceHeaderRenderer).as<HeaderRenderer>().singleInstance();
|
||||
builder.registerType(ResourceColumnRenderer).as<ColumnRenderer>().singleInstance();
|
||||
} else {
|
||||
builder.registerType(DateHeaderRenderer).as<HeaderRenderer>().singleInstance();
|
||||
builder.registerType(DateColumnRenderer).as<ColumnRenderer>().singleInstance();
|
||||
}
|
||||
builder.registerType(DateEventRenderer).as<EventRendererStrategy>().singleInstance();
|
||||
|
||||
// Register core services and utilities
|
||||
builder.registerType(DateService).as<DateService>().singleInstance();
|
||||
|
|
@ -167,9 +174,11 @@ async function initializeCalendar(): Promise<void> {
|
|||
if (document.readyState === 'loading') {
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
initializeCalendar().catch(error => {
|
||||
console.error('Calendar initialization failed:', error);
|
||||
});
|
||||
});
|
||||
} else {
|
||||
initializeCalendar().catch(error => {
|
||||
console.error('Calendar initialization failed:', error);
|
||||
});
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue