From 86d34d1ed1d0616c979427b77b603ebd38daaa76 Mon Sep 17 00:00:00 2001 From: Teodor Taushanov Date: Mon, 23 Feb 2026 15:41:42 +0200 Subject: [PATCH] fix(DnD): fix drag and drop in iOS Safari browser --- packages/base/src/util/dragAndDrop/DragRegistry.ts | 7 ++++++- packages/main/src/ListItem.ts | 2 +- packages/main/src/Tab.ts | 2 +- packages/main/src/TabContainer.ts | 2 +- packages/main/src/TableDragAndDrop.ts | 2 +- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/base/src/util/dragAndDrop/DragRegistry.ts b/packages/base/src/util/dragAndDrop/DragRegistry.ts index c3d1ab26352a..ae229082a226 100644 --- a/packages/base/src/util/dragAndDrop/DragRegistry.ts +++ b/packages/base/src/util/dragAndDrop/DragRegistry.ts @@ -11,8 +11,13 @@ const MIN_MULTI_DRAG_COUNT = 2; let draggedElement: HTMLElement | null = null; -const setDraggedElement = (element: HTMLElement | null) => { +const setDraggedElement = (element: HTMLElement | null, e?: DragEvent) => { draggedElement = element; + + // Store the dragged element's ID in the dataTransfer object to ensure + // the drag operation is recognized across different browsers and contexts. + // Without this, Safari browser in iOS may not recognize the drag operation. + e?.dataTransfer?.setData("text/plain", element ? element.id : ""); }; const clearDraggedElement = () => { diff --git a/packages/main/src/ListItem.ts b/packages/main/src/ListItem.ts index 6e78fea4e0eb..f2d64f0227e1 100644 --- a/packages/main/src/ListItem.ts +++ b/packages/main/src/ListItem.ts @@ -327,7 +327,7 @@ abstract class ListItem extends ListItemBase { } if (e.target === this._listItem) { - DragRegistry.setDraggedElement(this); + DragRegistry.setDraggedElement(this, e); this.setAttribute("data-moving", ""); e.dataTransfer.dropEffect = "move"; e.dataTransfer.effectAllowed = "move"; diff --git a/packages/main/src/Tab.ts b/packages/main/src/Tab.ts index 2ca1a6e2fe29..d954939fca3d 100644 --- a/packages/main/src/Tab.ts +++ b/packages/main/src/Tab.ts @@ -492,7 +492,7 @@ class Tab extends UI5Element implements ITabbable, ITab { _ondragstart(e: DragEvent) { if (e.target instanceof HTMLElement) { - DragRegistry.setDraggedElement(this); + DragRegistry.setDraggedElement(this, e); e.target.setAttribute("data-moving", ""); } } diff --git a/packages/main/src/TabContainer.ts b/packages/main/src/TabContainer.ts index 58805fae48ee..60111494016a 100644 --- a/packages/main/src/TabContainer.ts +++ b/packages/main/src/TabContainer.ts @@ -497,7 +497,7 @@ class TabContainer extends UI5Element { e.dataTransfer.dropEffect = "move"; e.dataTransfer.effectAllowed = "move"; - DragRegistry.setDraggedElement((e.target as TabInStrip).realTabReference); + DragRegistry.setDraggedElement((e.target as TabInStrip).realTabReference, e); } _onHeaderDragEnter(e: DragEvent) { diff --git a/packages/main/src/TableDragAndDrop.ts b/packages/main/src/TableDragAndDrop.ts index 17bfe155e3a8..19b6c14232ad 100644 --- a/packages/main/src/TableDragAndDrop.ts +++ b/packages/main/src/TableDragAndDrop.ts @@ -15,7 +15,7 @@ export default class TableDragAndDrop extends TableExtension { } _ondragstart(e: DragEvent) { - DragRegistry.setDraggedElement(e.target as HTMLElement); + DragRegistry.setDraggedElement(e.target as HTMLElement, e); } _ondragend() {