Renaming part 1

This commit is contained in:
Janus Knudsen 2025-08-07 00:15:44 +02:00
parent 36ac8d18ab
commit 29811fd4b5
20 changed files with 1424 additions and 582 deletions

View file

@ -0,0 +1,107 @@
// Factory for creating calendar type-specific renderers
import { CalendarType } from '../types/CalendarTypes';
import { HeaderRenderer, DateHeaderRenderer, ResourceHeaderRenderer } from '../renderers/HeaderRenderer';
import { ColumnRenderer, DateColumnRenderer, ResourceColumnRenderer } from '../renderers/ColumnRenderer';
import { EventRendererStrategy, DateEventRenderer, ResourceEventRenderer } from '../renderers/EventRenderer';
/**
* Renderer configuration for a calendar type
*/
export interface RendererConfig {
headerRenderer: HeaderRenderer;
columnRenderer: ColumnRenderer;
eventRenderer: EventRendererStrategy;
}
/**
* Factory for creating calendar type-specific renderers
*/
export class CalendarTypeFactory {
private static renderers: Map<CalendarType, RendererConfig> = new Map();
/**
* Initialize the factory with default renderers
*/
static initialize(): void {
// Register default renderers
this.registerRenderers('date', {
headerRenderer: new DateHeaderRenderer(),
columnRenderer: new DateColumnRenderer(),
eventRenderer: new DateEventRenderer()
});
this.registerRenderers('resource', {
headerRenderer: new ResourceHeaderRenderer(),
columnRenderer: new ResourceColumnRenderer(),
eventRenderer: new ResourceEventRenderer()
});
console.log('CalendarTypeFactory: Initialized with default renderers', Array.from(this.renderers.keys()));
}
/**
* Register renderers for a calendar type
*/
static registerRenderers(type: CalendarType, config: RendererConfig): void {
this.renderers.set(type, config);
console.log(`CalendarTypeFactory: Registered renderers for type '${type}'`);
}
/**
* Get renderers for a calendar type
*/
static getRenderers(type: CalendarType): RendererConfig {
const renderers = this.renderers.get(type);
if (!renderers) {
console.warn(`CalendarTypeFactory: No renderers found for type '${type}', falling back to 'date'`);
return this.renderers.get('date')!;
}
return renderers;
}
/**
* Get header renderer for a calendar type
*/
static getHeaderRenderer(type: CalendarType): HeaderRenderer {
return this.getRenderers(type).headerRenderer;
}
/**
* Get column renderer for a calendar type
*/
static getColumnRenderer(type: CalendarType): ColumnRenderer {
return this.getRenderers(type).columnRenderer;
}
/**
* Get event renderer for a calendar type
*/
static getEventRenderer(type: CalendarType): EventRendererStrategy {
return this.getRenderers(type).eventRenderer;
}
/**
* Check if a calendar type is supported
*/
static isSupported(type: CalendarType): boolean {
return this.renderers.has(type);
}
/**
* Get all supported calendar types
*/
static getSupportedTypes(): CalendarType[] {
return Array.from(this.renderers.keys());
}
/**
* Clear all registered renderers (useful for testing)
*/
static clear(): void {
this.renderers.clear();
console.log('CalendarTypeFactory: All renderers cleared');
}
}