Improves all-day event layout calculation
Refactors all-day event layout calculation to use the header elements directly. This change improves the accuracy of event positioning and fixes potential issues with date handling.
This commit is contained in:
parent
d7867d4a9f
commit
4e5077364e
2 changed files with 7 additions and 13 deletions
|
|
@ -127,14 +127,14 @@ export class AllDayManager {
|
|||
eventBus.on('header:ready', (event: Event) => {
|
||||
let headerReadyEventPayload = (event as CustomEvent<HeaderReadyEventPayload>).detail;
|
||||
|
||||
var startDate = headerReadyEventPayload.headerElements.startDate;
|
||||
var endDate = headerReadyEventPayload.headerElements.endDate;
|
||||
let startDate = new Date(headerReadyEventPayload.headerElements.at(0)!.date);
|
||||
let endDate = new Date(headerReadyEventPayload.headerElements.at(-1)!.date);
|
||||
|
||||
var events: CalendarEvent[] = this.eventManager.getEventsForPeriod(startDate, endDate);
|
||||
// Filter for all-day events
|
||||
const allDayEvents = events.filter(event => event.allDay);
|
||||
|
||||
var eventLayouts = this.calculateAllDayEventsLayout(allDayEvents, headerReadyEventPayload.headerElements)
|
||||
|
||||
let eventLayouts = this.calculateAllDayEventsLayout(allDayEvents, headerReadyEventPayload.headerElements)
|
||||
|
||||
this.allDayEventRenderer.renderAllDayEventsForPeriod(eventLayouts);
|
||||
this.checkAndAnimateAllDayHeight();
|
||||
|
|
@ -304,14 +304,14 @@ export class AllDayManager {
|
|||
* Calculate layout for ALL all-day events using AllDayLayoutEngine
|
||||
* This is the correct method that processes all events together for proper overlap detection
|
||||
*/
|
||||
private calculateAllDayEventsLayout(events: CalendarEvent[], weekDates: ColumnBounds[]): EventLayout[] {
|
||||
private calculateAllDayEventsLayout(events: CalendarEvent[], dayHeaders: ColumnBounds[]): EventLayout[] {
|
||||
|
||||
// Store current state
|
||||
this.currentAllDayEvents = events;
|
||||
this.currentWeekDates = weekDates;
|
||||
this.currentWeekDates = dayHeaders;
|
||||
|
||||
// Initialize layout engine with provided week dates
|
||||
var layoutEngine = new AllDayLayoutEngine(weekDates);
|
||||
let layoutEngine = new AllDayLayoutEngine(dayHeaders.map(column => column.date));
|
||||
|
||||
// Calculate layout for all events together - AllDayLayoutEngine handles CalendarEvents directly
|
||||
return layoutEngine.calculateLayout(events);
|
||||
|
|
|
|||
|
|
@ -5,8 +5,6 @@ import { CoreEvents } from '../constants/CoreEvents';
|
|||
import { HeaderRenderContext } from '../renderers/HeaderRenderer';
|
||||
import { ResourceCalendarData } from '../types/CalendarTypes';
|
||||
import { DragMouseEnterHeaderEventPayload, DragMouseLeaveHeaderEventPayload, HeaderReadyEventPayload } from '../types/EventTypes';
|
||||
import { DateCalculator } from '../utils/DateCalculator';
|
||||
import { PositionUtils } from '../utils/PositionUtils';
|
||||
import { ColumnDetectionUtils } from '../utils/ColumnDetectionUtils';
|
||||
|
||||
/**
|
||||
|
|
@ -138,10 +136,6 @@ export class HeaderManager {
|
|||
// Setup event listeners on the new content
|
||||
this.setupHeaderDragListeners();
|
||||
|
||||
// Calculate period from current date
|
||||
const weekStart = DateCalculator.getISOWeekStart(currentDate);
|
||||
const weekEnd = DateCalculator.addDays(weekStart, 6);
|
||||
|
||||
// Notify other managers that header is ready with period data
|
||||
const payload: HeaderReadyEventPayload = {
|
||||
headerElements: ColumnDetectionUtils.getHeaderColumns(),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue