Refactors date handling in calendar components
Updates event and column date parsing to use identifier instead of data attribute Improves date handling consistency across multiple calendar managers and renderers Replaces direct Date casting with dateService.parseISO() for more robust date parsing
This commit is contained in:
parent
8e52d670d6
commit
0f10d44037
3 changed files with 14 additions and 14 deletions
|
|
@ -165,8 +165,8 @@ export class AllDayManager {
|
||||||
eventBus.on('header:ready', async (event: Event) => {
|
eventBus.on('header:ready', async (event: Event) => {
|
||||||
let headerReadyEventPayload = (event as CustomEvent<IHeaderReadyEventPayload>).detail;
|
let headerReadyEventPayload = (event as CustomEvent<IHeaderReadyEventPayload>).detail;
|
||||||
|
|
||||||
let startDate = new Date(headerReadyEventPayload.headerElements.at(0)!.data as Date);
|
let startDate = this.dateService.parseISO(headerReadyEventPayload.headerElements.at(0)!.identifier);
|
||||||
let endDate = new Date(headerReadyEventPayload.headerElements.at(-1)!.data as Date);
|
let endDate = this.dateService.parseISO(headerReadyEventPayload.headerElements.at(-1)!.identifier);
|
||||||
|
|
||||||
let events: ICalendarEvent[] = await this.eventManager.getEventsForPeriod(startDate, endDate);
|
let events: ICalendarEvent[] = await this.eventManager.getEventsForPeriod(startDate, endDate);
|
||||||
// Filter for all-day events
|
// Filter for all-day events
|
||||||
|
|
@ -398,7 +398,7 @@ export class AllDayManager {
|
||||||
this.currentWeekDates = dayHeaders;
|
this.currentWeekDates = dayHeaders;
|
||||||
|
|
||||||
// Initialize layout engine with provided week dates
|
// Initialize layout engine with provided week dates
|
||||||
let layoutEngine = new AllDayLayoutEngine(dayHeaders.map(column => column.data as Date));
|
let layoutEngine = new AllDayLayoutEngine(dayHeaders.map(column => column.identifier));
|
||||||
|
|
||||||
// Calculate layout for all events together - AllDayLayoutEngine handles CalendarEvents directly
|
// Calculate layout for all events together - AllDayLayoutEngine handles CalendarEvents directly
|
||||||
return layoutEngine.calculateLayout(events);
|
return layoutEngine.calculateLayout(events);
|
||||||
|
|
@ -489,7 +489,7 @@ export class AllDayManager {
|
||||||
|
|
||||||
const clone = dragEndEvent.draggedClone as SwpAllDayEventElement;
|
const clone = dragEndEvent.draggedClone as SwpAllDayEventElement;
|
||||||
const eventId = clone.eventId.replace('clone-', '');
|
const eventId = clone.eventId.replace('clone-', '');
|
||||||
const targetDate = dragEndEvent.finalPosition.column.data as Date;
|
const targetDate = this.dateService.parseISO(dragEndEvent.finalPosition.column.identifier);
|
||||||
|
|
||||||
console.log('🔄 AllDayManager: Converting timed event to all-day', { eventId, targetDate });
|
console.log('🔄 AllDayManager: Converting timed event to all-day', { eventId, targetDate });
|
||||||
|
|
||||||
|
|
@ -537,7 +537,7 @@ export class AllDayManager {
|
||||||
|
|
||||||
const clone = dragEndEvent.draggedClone as SwpAllDayEventElement;
|
const clone = dragEndEvent.draggedClone as SwpAllDayEventElement;
|
||||||
const eventId = clone.eventId.replace('clone-', '');
|
const eventId = clone.eventId.replace('clone-', '');
|
||||||
const targetDate = dragEndEvent.finalPosition.column.data as Date;
|
const targetDate = this.dateService.parseISO(dragEndEvent.finalPosition.column.identifier);
|
||||||
|
|
||||||
// Calculate duration in days
|
// Calculate duration in days
|
||||||
const durationDays = this.dateService.differenceInCalendarDays(clone.end, clone.start);
|
const durationDays = this.dateService.differenceInCalendarDays(clone.end, clone.start);
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,7 @@ export class DateEventRenderer implements IEventRenderer {
|
||||||
public handleDragMove(payload: IDragMoveEventPayload): void {
|
public handleDragMove(payload: IDragMoveEventPayload): void {
|
||||||
|
|
||||||
const swpEvent = payload.draggedClone as SwpEventElement;
|
const swpEvent = payload.draggedClone as SwpEventElement;
|
||||||
const columnDate = this.dateService.parseISO(payload.columnBounds!!.data as Date);
|
const columnDate = this.dateService.parseISO(payload.columnBounds!!.identifier);
|
||||||
swpEvent.updatePosition(columnDate, payload.snappedY);
|
swpEvent.updatePosition(columnDate, payload.snappedY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -118,7 +118,7 @@ export class DateEventRenderer implements IEventRenderer {
|
||||||
// Recalculate timestamps with new column date
|
// Recalculate timestamps with new column date
|
||||||
const currentTop = parseFloat(payload.draggedClone.style.top) || 0;
|
const currentTop = parseFloat(payload.draggedClone.style.top) || 0;
|
||||||
const swpEvent = payload.draggedClone as SwpEventElement;
|
const swpEvent = payload.draggedClone as SwpEventElement;
|
||||||
const columnDate = this.dateService.parseISO(payload.newColumn.data as Date);
|
const columnDate = this.dateService.parseISO(payload.newColumn.identifier);
|
||||||
swpEvent.updatePosition(columnDate, currentTop);
|
swpEvent.updatePosition(columnDate, currentTop);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -130,7 +130,7 @@ export class DateEventRenderer implements IEventRenderer {
|
||||||
|
|
||||||
console.log('🎯 DateEventRenderer: Converting all-day to timed event', {
|
console.log('🎯 DateEventRenderer: Converting all-day to timed event', {
|
||||||
eventId: payload.calendarEvent.id,
|
eventId: payload.calendarEvent.id,
|
||||||
targetColumn: payload.targetColumn.data as Date,
|
targetColumn: payload.targetColumn.identifier,
|
||||||
snappedY: payload.snappedY
|
snappedY: payload.snappedY
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -216,7 +216,7 @@ export class EventRenderingService {
|
||||||
cloneElement.style.display = '';
|
cloneElement.style.display = '';
|
||||||
|
|
||||||
console.log('🚪 EventRendererManager: Received drag:mouseleave-header', {
|
console.log('🚪 EventRendererManager: Received drag:mouseleave-header', {
|
||||||
targetDate,
|
targetColumn: targetColumn?.identifier,
|
||||||
originalElement: originalElement,
|
originalElement: originalElement,
|
||||||
cloneElement: cloneElement
|
cloneElement: cloneElement
|
||||||
});
|
});
|
||||||
|
|
@ -296,7 +296,7 @@ export class EventRenderingService {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Re-render target column if exists and different from source
|
// Re-render target column if exists and different from source
|
||||||
if (targetColumn && (targetColumn.data as Date) !== (originalSourceColumn?.data as Date)) {
|
if (targetColumn && targetColumn.identifier !== originalSourceColumn?.identifier) {
|
||||||
await this.renderSingleColumn(targetColumn);
|
await this.renderSingleColumn(targetColumn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -317,7 +317,7 @@ export class EventRenderingService {
|
||||||
*/
|
*/
|
||||||
private async renderSingleColumn(column: IColumnBounds): Promise<void> {
|
private async renderSingleColumn(column: IColumnBounds): Promise<void> {
|
||||||
// Get events for just this column's date
|
// Get events for just this column's date
|
||||||
const dateString = (column.data as Date).toISOString().split('T')[0];
|
const dateString = column.identifier;
|
||||||
const columnStart = this.dateService.parseISO(`${dateString}T00:00:00`);
|
const columnStart = this.dateService.parseISO(`${dateString}T00:00:00`);
|
||||||
const columnEnd = this.dateService.parseISO(`${dateString}T23:59:59.999`);
|
const columnEnd = this.dateService.parseISO(`${dateString}T23:59:59.999`);
|
||||||
|
|
||||||
|
|
@ -343,7 +343,7 @@ export class EventRenderingService {
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('🔄 EventRendererManager: Re-rendered single column', {
|
console.log('🔄 EventRendererManager: Re-rendered single column', {
|
||||||
columnDate: column.data as Date,
|
columnDate: column.identifier,
|
||||||
eventsCount: timedEvents.length
|
eventsCount: timedEvents.length
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue