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
118
src/managers/ConfigManager.ts
Normal file
118
src/managers/ConfigManager.ts
Normal file
|
|
@ -0,0 +1,118 @@
|
|||
// Configuration manager - handles config updates with event emission
|
||||
// Uses static CalendarConfig internally but adds event-driven updates
|
||||
|
||||
import { IEventBus, ICalendarConfig } from '../types/CalendarTypes';
|
||||
import { CoreEvents } from '../constants/CoreEvents';
|
||||
import { CalendarConfig } from '../core/CalendarConfig';
|
||||
|
||||
/**
|
||||
* Grid display settings interface (re-export from CalendarConfig)
|
||||
*/
|
||||
interface GridSettings {
|
||||
dayStartHour: number;
|
||||
dayEndHour: number;
|
||||
workStartHour: number;
|
||||
workEndHour: number;
|
||||
hourHeight: number;
|
||||
snapInterval: number;
|
||||
fitToWidth: boolean;
|
||||
scrollToHour: number | null;
|
||||
gridStartThresholdMinutes: number;
|
||||
showCurrentTime: boolean;
|
||||
showWorkHours: boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
* ConfigManager - Handles configuration updates with event emission
|
||||
* Wraps static CalendarConfig with event-driven functionality for DI system
|
||||
*/
|
||||
export class ConfigManager {
|
||||
constructor(private eventBus: IEventBus) {}
|
||||
|
||||
/**
|
||||
* Set a config value and emit event
|
||||
*/
|
||||
set<K extends keyof ICalendarConfig>(key: K, value: ICalendarConfig[K]): void {
|
||||
const oldValue = CalendarConfig.get(key);
|
||||
CalendarConfig.set(key, value);
|
||||
|
||||
// Emit config update event
|
||||
this.eventBus.emit(CoreEvents.REFRESH_REQUESTED, {
|
||||
key,
|
||||
value,
|
||||
oldValue
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Update multiple config values and emit event
|
||||
*/
|
||||
update(updates: Partial<ICalendarConfig>): void {
|
||||
Object.entries(updates).forEach(([key, value]) => {
|
||||
this.set(key as keyof ICalendarConfig, value);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Update grid display settings and emit event
|
||||
*/
|
||||
updateGridSettings(updates: Partial<GridSettings>): void {
|
||||
CalendarConfig.updateGridSettings(updates);
|
||||
|
||||
// Emit event after update
|
||||
this.eventBus.emit(CoreEvents.REFRESH_REQUESTED, {
|
||||
key: 'gridSettings',
|
||||
value: CalendarConfig.getGridSettings()
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Set selected date and emit event
|
||||
*/
|
||||
setSelectedDate(date: Date): void {
|
||||
const oldDate = CalendarConfig.getSelectedDate();
|
||||
CalendarConfig.setSelectedDate(date);
|
||||
|
||||
// Emit date change event if it actually changed
|
||||
if (!oldDate || oldDate.getTime() !== date.getTime()) {
|
||||
this.eventBus.emit(CoreEvents.DATE_CHANGED, {
|
||||
date,
|
||||
oldDate
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set work week and emit event
|
||||
*/
|
||||
setWorkWeek(workWeekId: string): void {
|
||||
const oldWorkWeek = CalendarConfig.getCurrentWorkWeek();
|
||||
CalendarConfig.setWorkWeek(workWeekId);
|
||||
|
||||
// Emit event if changed
|
||||
if (oldWorkWeek !== workWeekId) {
|
||||
this.eventBus.emit(CoreEvents.REFRESH_REQUESTED, {
|
||||
key: 'workWeek',
|
||||
value: workWeekId,
|
||||
oldValue: oldWorkWeek
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set calendar mode and emit event
|
||||
*/
|
||||
setCalendarMode(mode: 'date' | 'resource'): void {
|
||||
const oldMode = CalendarConfig.getCalendarMode();
|
||||
CalendarConfig.setCalendarMode(mode);
|
||||
|
||||
// Emit event if changed
|
||||
if (oldMode !== mode) {
|
||||
this.eventBus.emit(CoreEvents.REFRESH_REQUESTED, {
|
||||
key: 'calendarMode',
|
||||
value: mode,
|
||||
oldValue: oldMode
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -57,8 +57,8 @@ export class EventManager {
|
|||
private async loadMockData(): Promise<void> {
|
||||
const calendarType = this.config.getCalendarMode();
|
||||
const jsonFile = calendarType === 'resource'
|
||||
? '/src/data/mock-resource-events.json'
|
||||
: '/src/data/mock-events.json';
|
||||
? '/data/mock-resource-events.json'
|
||||
: '/data/mock-events.json';
|
||||
|
||||
const response = await fetch(jsonFile);
|
||||
if (!response.ok) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue