diff --git a/src/managers/DragDropManager.ts b/src/managers/DragDropManager.ts index 933c816..c16d48b 100644 --- a/src/managers/DragDropManager.ts +++ b/src/managers/DragDropManager.ts @@ -161,6 +161,7 @@ export class DragDropManager { private draggedClone!: HTMLElement | null; private currentColumn: IColumnBounds | null = null; private previousColumn: IColumnBounds | null = null; + private originalSourceColumn: IColumnBounds | null = null; // Track original start column private isDragStarted = false; // Movement threshold to distinguish click from drag @@ -360,6 +361,7 @@ export class DragDropManager { const originalElement = this.originalElement as BaseSwpEventElement; this.currentColumn = ColumnDetectionUtils.getColumnBounds(currentPosition); + this.originalSourceColumn = this.currentColumn; // Store original source column at drag start this.draggedClone = originalElement.createClone(); const dragStartPayload: IDragStartEventPayload = { @@ -459,7 +461,7 @@ export class DragDropManager { originalElement: this.originalElement, draggedClone: this.draggedClone, mousePosition, - sourceColumn: this.previousColumn!!, + originalSourceColumn: this.originalSourceColumn!!, finalPosition: { column, snappedY }, // Where drag ended target: dropTarget }; @@ -625,6 +627,7 @@ export class DragDropManager { this.originalElement = null; this.draggedClone = null; this.currentColumn = null; + this.originalSourceColumn = null; this.isDragStarted = false; this.scrollDeltaY = 0; this.lastScrollTop = 0; diff --git a/src/renderers/EventRendererManager.ts b/src/renderers/EventRendererManager.ts index 037820d..6fb043d 100644 --- a/src/renderers/EventRendererManager.ts +++ b/src/renderers/EventRendererManager.ts @@ -161,7 +161,7 @@ export class EventRenderingService { private setupDragEndListener(): void { this.eventBus.on('drag:end', async (event: Event) => { - const { originalElement: draggedElement, sourceColumn, finalPosition, target } = (event as CustomEvent).detail; + const { originalElement: draggedElement, originalSourceColumn, finalPosition, target } = (event as CustomEvent).detail; const finalColumn = finalPosition.column; const finalY = finalPosition.snappedY; const eventId = draggedElement.dataset.eventId || ''; @@ -196,7 +196,7 @@ export class EventRenderingService { } // Re-render affected columns for stacking/grouping (now with updated data) - this.reRenderAffectedColumns(sourceColumn, finalColumn); + await this.reRenderAffectedColumns(originalSourceColumn, finalColumn); } // Clean up any remaining day event clones @@ -308,29 +308,29 @@ export class EventRenderingService { /** * Re-render affected columns after drag to recalculate stacking/grouping */ - private reRenderAffectedColumns(sourceColumn: IColumnBounds | null, targetColumn: IColumnBounds | null): void { + private async reRenderAffectedColumns(originalSourceColumn: IColumnBounds | null, targetColumn: IColumnBounds | null): Promise { const columnsToRender = new Set(); - // Add source column if exists - if (sourceColumn) { - columnsToRender.add(sourceColumn.date); + // Add original source column if exists + if (originalSourceColumn) { + columnsToRender.add(originalSourceColumn.date); } // Add target column if exists and different from source - if (targetColumn && targetColumn.date !== sourceColumn?.date) { + if (targetColumn && targetColumn.date !== originalSourceColumn?.date) { columnsToRender.add(targetColumn.date); } // Re-render each affected column - columnsToRender.forEach(columnDate => { - this.renderSingleColumn(columnDate); - }); + for (const columnDate of columnsToRender) { + await this.renderSingleColumn(columnDate); + } } /** * Render events for a single column by re-rendering entire container */ - private renderSingleColumn(columnDate: string): void { + private async renderSingleColumn(columnDate: string): Promise { // Find the column element const columnElement = document.querySelector(`swp-day-column[data-date="${columnDate}"]`) as HTMLElement; if (!columnElement) { @@ -359,7 +359,7 @@ export class EventRenderingService { const endDate = this.dateService.parseISO(`${lastColumnDate}T23:59:59.999`); // Re-render entire container (this will recalculate stacking for all columns) - this.renderEvents({ + await this.renderEvents({ container, startDate, endDate diff --git a/src/types/EventTypes.ts b/src/types/EventTypes.ts index 45daa17..72db8be 100644 --- a/src/types/EventTypes.ts +++ b/src/types/EventTypes.ts @@ -40,7 +40,7 @@ export interface IDragEndEventPayload { originalElement: HTMLElement; draggedClone: HTMLElement | null; mousePosition: IMousePosition; - sourceColumn: IColumnBounds; + originalSourceColumn: IColumnBounds; // Original column where drag started finalPosition: { column: IColumnBounds | null; // Where drag ended snappedY: number;