Refactors event rendering to be event-driven
Moves event rendering logic into a dedicated EventRenderer class that uses a strategy pattern for different calendar types. The rendering is now triggered by `GRID_RENDERED` and `CONTAINER_READY_FOR_EVENTS` events, emitted by the GridManager and NavigationManager respectively. This change decouples the CalendarManager from direct event rendering and allows for more flexible and efficient event updates. The EventManager now has a method to fetch events for a given time period. Removes direct calls to event rendering from CalendarManager. Improves animation transitions by using pre-rendered containers in the NavigationManager.
This commit is contained in:
parent
afe5b6b899
commit
a03f314c4a
9 changed files with 271 additions and 166 deletions
|
|
@ -76,14 +76,18 @@ export class CalendarManager {
|
|||
this.setView(this.currentView);
|
||||
this.setCurrentDate(this.currentDate);
|
||||
|
||||
// Step 5: Render events (after view is set) - only render events for current period
|
||||
console.log('🎨 Rendering events for current period...');
|
||||
const events = this.getEventsForCurrentPeriod();
|
||||
await this.eventRenderer.renderEvents(events);
|
||||
// Step 5: Event rendering will be triggered by GRID_RENDERED event
|
||||
console.log('🎨 Event rendering will be triggered automatically by grid events...');
|
||||
|
||||
this.isInitialized = true;
|
||||
console.log('✅ CalendarManager: Simple initialization complete');
|
||||
|
||||
// Emit initialization complete event
|
||||
this.eventBus.emit(EventTypes.CALENDAR_INITIALIZED, {
|
||||
currentDate: this.currentDate,
|
||||
currentView: this.currentView
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ CalendarManager initialization failed:', error);
|
||||
throw error;
|
||||
|
|
@ -110,10 +114,7 @@ export class CalendarManager {
|
|||
date: this.currentDate
|
||||
});
|
||||
|
||||
// Re-render events for new view if calendar is initialized
|
||||
if (this.isInitialized) {
|
||||
this.rerenderEventsForCurrentPeriod();
|
||||
}
|
||||
// Grid re-rendering will trigger event rendering automatically via GRID_RENDERED event
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -132,10 +133,7 @@ export class CalendarManager {
|
|||
view: this.currentView
|
||||
});
|
||||
|
||||
// Re-render events for new period if calendar is initialized
|
||||
if (this.isInitialized) {
|
||||
this.rerenderEventsForCurrentPeriod();
|
||||
}
|
||||
// Grid update for new date will trigger event rendering automatically via GRID_RENDERED event
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -313,34 +311,6 @@ export class CalendarManager {
|
|||
return previousDate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get events filtered for the current period (week/month/day)
|
||||
*/
|
||||
private getEventsForCurrentPeriod(): CalendarEvent[] {
|
||||
const allEvents = this.eventManager.getEvents();
|
||||
|
||||
// Calculate current period based on view
|
||||
const period = this.calculateCurrentPeriod();
|
||||
|
||||
// Filter events to only include those in the current period
|
||||
const filteredEvents = allEvents.filter(event => {
|
||||
const eventStart = new Date(event.start);
|
||||
const eventEnd = new Date(event.end);
|
||||
const periodStart = new Date(period.start);
|
||||
const periodEnd = new Date(period.end);
|
||||
|
||||
// Include event if it overlaps with the period
|
||||
return eventStart <= periodEnd && eventEnd >= periodStart;
|
||||
});
|
||||
|
||||
// Also filter out all-day events (handled by GridManager)
|
||||
const nonAllDayEvents = filteredEvents.filter(event => !event.allDay);
|
||||
|
||||
console.log(`CalendarManager: Filtered ${allEvents.length} total events to ${nonAllDayEvents.length} non-all-day events for current period`);
|
||||
|
||||
return nonAllDayEvents;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate the current period based on view and date
|
||||
*/
|
||||
|
|
@ -399,12 +369,4 @@ export class CalendarManager {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-render events for the current period
|
||||
*/
|
||||
private async rerenderEventsForCurrentPeriod(): Promise<void> {
|
||||
console.log('CalendarManager: Re-rendering events for current period');
|
||||
const events = this.getEventsForCurrentPeriod();
|
||||
await this.eventRenderer.renderEvents(events);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue