Refactors event rendering and display
Improves event rendering by introducing dedicated event renderers and streamlining event display logic. - Adds a base event renderer and specialized date and resource-based renderers to handle event display logic. - Renders all-day events within a dedicated container in the calendar header. - Removes the direct filtering of all-day events from the `GridManager`. - Fixes an issue where the 'Summer Festival' event started on the wrong date. The changes enhance the flexibility and maintainability of the calendar, provide dedicated containers and styling for allday events and fix date issues related to certain events
This commit is contained in:
parent
25522bfe17
commit
9c65143df2
11 changed files with 190 additions and 121 deletions
|
|
@ -74,6 +74,21 @@ export class CalendarManager {
|
|||
}
|
||||
await this.gridManager.render();
|
||||
|
||||
// Step 2b: Trigger event rendering now that data is loaded
|
||||
// Re-emit GRID_RENDERED to trigger EventRendererManager
|
||||
console.log('🎨 Triggering event rendering...');
|
||||
const gridContainer = document.querySelector('swp-calendar-container');
|
||||
if (gridContainer) {
|
||||
const periodRange = this.gridManager.getDisplayDates();
|
||||
this.eventBus.emit(CoreEvents.GRID_RENDERED, {
|
||||
container: gridContainer,
|
||||
currentDate: new Date(),
|
||||
startDate: periodRange[0],
|
||||
endDate: periodRange[periodRange.length - 1],
|
||||
columnCount: periodRange.length
|
||||
});
|
||||
}
|
||||
|
||||
// Step 3: Initialize scroll synchronization
|
||||
console.log('📜 Setting up scroll synchronization...');
|
||||
this.scrollManager.initialize();
|
||||
|
|
|
|||
|
|
@ -122,6 +122,7 @@ export class EventManager {
|
|||
* Get events for a specific time period
|
||||
*/
|
||||
public getEventsForPeriod(startDate: Date, endDate: Date): CalendarEvent[] {
|
||||
console.log(`EventManager.getEventsForPeriod: Checking ${this.events.length} events for period ${startDate.toDateString()} - ${endDate.toDateString()}`);
|
||||
return this.events.filter(event => {
|
||||
const eventStart = new Date(event.start);
|
||||
const eventEnd = new Date(event.end);
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ import { eventBus } from '../core/EventBus';
|
|||
import { calendarConfig } from '../core/CalendarConfig';
|
||||
import { CoreEvents } from '../constants/CoreEvents';
|
||||
import { ResourceCalendarData, CalendarView } from '../types/CalendarTypes';
|
||||
import { AllDayEvent } from '../types/EventTypes';
|
||||
import { ViewStrategy, ViewContext } from '../strategies/ViewStrategy';
|
||||
import { WeekViewStrategy } from '../strategies/WeekViewStrategy';
|
||||
import { MonthViewStrategy } from '../strategies/MonthViewStrategy';
|
||||
|
|
@ -18,7 +17,6 @@ import { MonthViewStrategy } from '../strategies/MonthViewStrategy';
|
|||
export class GridManager {
|
||||
private container: HTMLElement | null = null;
|
||||
private currentDate: Date = new Date();
|
||||
private allDayEvents: AllDayEvent[] = [];
|
||||
private resourceData: ResourceCalendarData | null = null;
|
||||
private currentStrategy: ViewStrategy;
|
||||
private eventCleanup: (() => void)[] = [];
|
||||
|
|
@ -53,15 +51,6 @@ export class GridManager {
|
|||
})
|
||||
);
|
||||
|
||||
// Listen for data changes
|
||||
|
||||
this.eventCleanup.push(
|
||||
eventBus.on(CoreEvents.DATA_LOADED, (e: Event) => {
|
||||
const detail = (e as CustomEvent).detail;
|
||||
this.updateAllDayEvents(detail.events);
|
||||
})
|
||||
);
|
||||
|
||||
// Listen for config changes that affect rendering
|
||||
this.eventCleanup.push(
|
||||
eventBus.on(CoreEvents.REFRESH_REQUESTED, (e: Event) => {
|
||||
|
|
@ -127,7 +116,6 @@ export class GridManager {
|
|||
const context: ViewContext = {
|
||||
currentDate: this.currentDate,
|
||||
container: this.container,
|
||||
allDayEvents: this.allDayEvents,
|
||||
resourceData: this.resourceData
|
||||
};
|
||||
|
||||
|
|
@ -155,14 +143,6 @@ export class GridManager {
|
|||
console.log(`✅ Grid rendered with ${layoutConfig.columnCount} columns`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update all-day events and re-render
|
||||
*/
|
||||
private updateAllDayEvents(events: AllDayEvent[]): void {
|
||||
console.log(`GridManager: Updating ${events.length} all-day events`);
|
||||
this.allDayEvents = events.filter(event => event.allDay);
|
||||
this.render();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get current period label from strategy
|
||||
|
|
@ -239,7 +219,6 @@ export class GridManager {
|
|||
|
||||
// Clear references
|
||||
this.container = null;
|
||||
this.allDayEvents = [];
|
||||
this.resourceData = null;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue