Improves header drag-and-drop event handling
Enhances drag leave logic for more precise event tracking - Adds conditional cleanup for grid-to-header drag events - Updates drag state management during column transitions - Prevents premature ghost element removal
This commit is contained in:
parent
bc5854e09a
commit
7da88bb977
2 changed files with 24 additions and 3 deletions
|
|
@ -285,11 +285,16 @@ export class HeaderDrawerRenderer {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle drag leaving header - remove preview and restore source
|
* Handle drag leaving header - cleanup for grid→header drag only
|
||||||
*/
|
*/
|
||||||
private handleDragLeave(_payload: IDragLeaveHeaderPayload): void {
|
private handleDragLeave(payload: IDragLeaveHeaderPayload): void {
|
||||||
|
// Only cleanup for grid→header drag (when grid event leaves header back to grid)
|
||||||
|
// For header→grid drag, the header item stays as ghost until drop
|
||||||
|
if (payload.source === 'grid') {
|
||||||
this.cleanup();
|
this.cleanup();
|
||||||
}
|
}
|
||||||
|
// For header source, do nothing - ghost stays until EVENT_DRAG_END
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle drag end - finalize based on drop target
|
* Handle drag end - finalize based on drop target
|
||||||
|
|
|
||||||
|
|
@ -441,6 +441,22 @@ export class DragDropManager {
|
||||||
};
|
};
|
||||||
|
|
||||||
this.eventBus.emit(CoreEvents.EVENT_DRAG_LEAVE_HEADER, payload);
|
this.eventBus.emit(CoreEvents.EVENT_DRAG_LEAVE_HEADER, payload);
|
||||||
|
|
||||||
|
// Re-attach to the new swp-event created by EventRenderer
|
||||||
|
if (targetColumn) {
|
||||||
|
const newElement = targetColumn.querySelector(
|
||||||
|
`swp-event[data-event-id="${this.dragState.eventId}"]`
|
||||||
|
) as HTMLElement;
|
||||||
|
|
||||||
|
if (newElement) {
|
||||||
|
this.dragState.element = newElement;
|
||||||
|
this.dragState.columnElement = targetColumn;
|
||||||
|
this.dragState.currentColumn = targetColumn;
|
||||||
|
|
||||||
|
// Start animation for the new element
|
||||||
|
this.animateDrag();
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// Grid event leaving header → restore to grid
|
// Grid event leaving header → restore to grid
|
||||||
const payload: IDragLeaveHeaderPayload = {
|
const payload: IDragLeaveHeaderPayload = {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue