Refactor event rendering with column-based event management
Improves event rendering by integrating event filtering directly into column data sources Key changes: - Moves event filtering responsibility to IColumnDataSource - Simplifies event rendering pipeline by pre-filtering events per column - Supports both date and resource-based calendar modes - Enhances drag and drop event update mechanism Optimizes calendar rendering performance and flexibility
This commit is contained in:
parent
eeaeddeef8
commit
17909696ed
9 changed files with 179 additions and 250 deletions
|
|
@ -1,6 +1,8 @@
|
|||
/**
|
||||
* GridManager - Simplified grid manager using centralized GridRenderer
|
||||
* Delegates DOM rendering to GridRenderer, focuses on coordination
|
||||
*
|
||||
* Note: Events are now provided by IColumnDataSource (each column has its own events)
|
||||
*/
|
||||
|
||||
import { eventBus } from '../core/EventBus';
|
||||
|
|
@ -10,7 +12,6 @@ import { GridRenderer } from '../renderers/GridRenderer';
|
|||
import { DateService } from '../utils/DateService';
|
||||
import { IColumnDataSource } from '../types/ColumnDataSource';
|
||||
import { Configuration } from '../configurations/CalendarConfig';
|
||||
import { EventManager } from './EventManager';
|
||||
|
||||
/**
|
||||
* Simplified GridManager focused on coordination, delegates rendering to GridRenderer
|
||||
|
|
@ -23,19 +24,16 @@ export class GridManager {
|
|||
private dateService: DateService;
|
||||
private config: Configuration;
|
||||
private dataSource: IColumnDataSource;
|
||||
private eventManager: EventManager;
|
||||
|
||||
constructor(
|
||||
gridRenderer: GridRenderer,
|
||||
dateService: DateService,
|
||||
config: Configuration,
|
||||
eventManager: EventManager,
|
||||
dataSource: IColumnDataSource
|
||||
) {
|
||||
this.gridRenderer = gridRenderer;
|
||||
this.dateService = dateService;
|
||||
this.config = config;
|
||||
this.eventManager = eventManager;
|
||||
this.dataSource = dataSource;
|
||||
this.init();
|
||||
}
|
||||
|
|
@ -82,31 +80,25 @@ export class GridManager {
|
|||
/**
|
||||
* Main render method - delegates to GridRenderer
|
||||
* Note: CSS variables are automatically updated by ConfigManager when config changes
|
||||
* Note: Events are included in columns from IColumnDataSource
|
||||
*/
|
||||
public async render(): Promise<void> {
|
||||
if (!this.container) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Get columns from datasource - single source of truth
|
||||
// Get columns from datasource - single source of truth (includes events per column)
|
||||
const columns = await this.dataSource.getColumns();
|
||||
|
||||
// Set grid columns CSS variable based on actual column count
|
||||
document.documentElement.style.setProperty('--grid-columns', columns.length.toString());
|
||||
|
||||
// Extract dates for EventManager query
|
||||
const dates = columns.map(col => col.data as Date);
|
||||
const startDate = dates[0];
|
||||
const endDate = dates[dates.length - 1];
|
||||
const events = await this.eventManager.getEventsForPeriod(startDate, endDate);
|
||||
|
||||
// Delegate to GridRenderer with columns and events
|
||||
// Delegate to GridRenderer with columns (events are inside each column)
|
||||
this.gridRenderer.renderGrid(
|
||||
this.container,
|
||||
this.currentDate,
|
||||
this.currentView,
|
||||
columns,
|
||||
events
|
||||
columns
|
||||
);
|
||||
|
||||
// Emit grid rendered event
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue