Skip to content

Commit e2411a6

Browse files
chore(DnD): modify startMultipleDrag method to use DragEvent (#12060)
1 parent 793038b commit e2411a6

File tree

4 files changed

+29
-27
lines changed

4 files changed

+29
-27
lines changed

docs/2-advanced/17-drag-and-drop.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ list.addEventListener("dragstart", (event) => {
148148

149149
// Start multiple drag if more than one item is selected
150150
if (currentSelected.length > 1) {
151-
startMultipleDrag(currentSelected.length);
151+
startMultipleDrag(currentSelected.length, event);
152152
}
153153
});
154154
```
@@ -297,12 +297,12 @@ For advanced cases, use the DragRegistry API to control multiple drag operations
297297
import { startMultipleDrag } from "@ui5/webcomponents-base/dist/DragAndDrop.js";
298298

299299
// Start a multiple drag operation
300-
startMultipleDrag(itemCount);
300+
startMultipleDrag(itemCount, dragEvent);
301301
```
302302

303303
### DragRegistry Methods
304304

305-
- **`startMultipleDrag(count: number)`**: Starts a multiple drag operation with a custom ghost showing the item count
305+
- **`startMultipleDrag(count: number, e: DragEvent)`**: Starts a multiple drag operation with a custom ghost showing the item count
306306

307307
## Best Practices
308308

packages/base/src/util/dragAndDrop/DragRegistry.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,11 @@ const createDefaultMultiDragElement = async (count: number): Promise<HTMLElement
8383
* The drag ghost will be displayed when dragging multiple items.
8484
*
8585
* @param {number} count - The number of items being dragged.
86+
* @param {DragEvent} e - The drag event that triggered the operation.
8687
* @public
8788
*/
88-
const startMultipleDrag = (count: number): void => {
89+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
90+
const startMultipleDrag = (count: number, e: DragEvent): void => {
8991
if (count < MIN_MULTI_DRAG_COUNT) {
9092
console.warn(`Cannot start multiple drag with count ${count}. Minimum is ${MIN_MULTI_DRAG_COUNT}.`); // eslint-disable-line
9193
return;

packages/main/test/pages/MultipleDragDemo.html

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@
3333
color: white;
3434
box-shadow: 0 4px 12px rgba(139, 92, 246, 0.4);
3535
white-space: nowrap;
36-
position: absolute;
37-
top: -1000px;
36+
position: absolute;
37+
top: -1000px;
3838
left: -1000px;
3939
}
4040
</style>
@@ -48,7 +48,7 @@ <h3>ui5-li (DragRegistry)</h3>
4848
Selected: <span id="count1">0</span><br>
4949
Multiple selection mode, drag for multiple
5050
</div>
51-
51+
5252
<ui5-list id="list1" header-text="Standard Items" selection-mode="Multiple">
5353
<ui5-li movable data-id="1">Item 1</ui5-li>
5454
<ui5-li movable data-id="2">Item 2</ui5-li>
@@ -64,7 +64,7 @@ <h3>ui5-li (Direct)</h3>
6464
Selected: <span id="count2">0</span><br>
6565
Multiple selection, purple drag image
6666
</div>
67-
67+
6868
<ui5-list id="list2" header-text="Direct Drag" selection-mode="Multiple">
6969
<ui5-li movable data-id="9">Direct 1</ui5-li>
7070
<ui5-li movable data-id="10">Direct 2</ui5-li>
@@ -77,7 +77,7 @@ <h3>ui5-li (Direct)</h3>
7777
<script type="module">
7878
const lists = [
7979
document.getElementById("list1"),
80-
document.getElementById("list2"),
80+
document.getElementById("list2"),
8181
];
8282
const counters = [
8383
document.getElementById("count1"),
@@ -115,18 +115,18 @@ <h3>ui5-li (Direct)</h3>
115115
lists[0].addEventListener("dragstart", (e) => {
116116
const selectedItems = getSelectedItems(lists[0]);
117117
const draggedItem = e.target;
118-
118+
119119
// If dragged item is not selected, select only it
120120
if (!draggedItem.selected) {
121121
// Clear all selections first
122122
selectedItems.forEach(item => item.selected = false);
123123
draggedItem.selected = true;
124124
updateUI(0);
125125
}
126-
126+
127127
const currentSelected = getSelectedItems(lists[0]);
128128
if (currentSelected.length > 1) {
129-
window["sap-ui-webcomponents-bundle"].startMultipleDrag(currentSelected.length);
129+
window["sap-ui-webcomponents-bundle"].startMultipleDrag(currentSelected.length, e);
130130
}
131131
});
132132

@@ -135,15 +135,15 @@ <h3>ui5-li (Direct)</h3>
135135
lists[1].addEventListener("dragstart", (e) => {
136136
const selectedItems = getSelectedItems(lists[1]);
137137
const draggedItem = e.target;
138-
138+
139139
// If dragged item is not selected, select only it
140140
if (!draggedItem.selected) {
141141
// Clear all selections first
142142
selectedItems.forEach(item => item.selected = false);
143143
draggedItem.selected = true;
144144
updateUI(1);
145145
}
146-
146+
147147
const currentSelected = getSelectedItems(lists[1]);
148148
if (currentSelected.length > 1) {
149149
const dragElement = createPurpleDragImage(currentSelected.length);

packages/website/docs/_samples/main/List/MultipleDrag/main.js

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import MovePlacement from "@ui5/webcomponents-base/dist/types/MovePlacement.js";
77

88
const lists = [
99
document.getElementById("list1"),
10-
document.getElementById("list2"),
10+
document.getElementById("list2"),
1111
];
1212
const counters = [
1313
document.getElementById("count1"),
@@ -34,31 +34,31 @@ function handleDragStart(listIndex) {
3434
const list = lists[listIndex];
3535
const selectedItems = getSelectedItems(list);
3636
const draggedItem = event.target;
37-
37+
3838
// If dragged item is not selected, select only it
3939
if (!draggedItem.selected) {
4040
selectedItems.forEach(item => item.selected = false);
4141
draggedItem.selected = true;
4242
updateSelectionCount(listIndex);
4343
}
44-
44+
4545
const currentSelected = getSelectedItems(list);
46-
46+
4747
// Start multiple drag if more than one item is selected
4848
if (currentSelected.length > 1) {
49-
startMultipleDrag(currentSelected.length);
49+
startMultipleDrag(currentSelected.length, event);
5050
}
5151
};
5252
}
5353

5454
function handleMoveOver(event) {
5555
const { source, destination } = event.detail;
56-
56+
5757
// Allow drops from both lists
5858
const sourceList = source.element.closest('ui5-list');
5959
if (lists.includes(sourceList)) {
6060
// Allow reordering within lists
61-
if (destination.placement === MovePlacement.Before ||
61+
if (destination.placement === MovePlacement.Before ||
6262
destination.placement === MovePlacement.After) {
6363
event.preventDefault();
6464
}
@@ -67,16 +67,16 @@ function handleMoveOver(event) {
6767

6868
function handleMove(event) {
6969
const { source, destination } = event.detail;
70-
70+
7171
// Get the source list to find all selected items
7272
const sourceList = source.element.closest('ui5-list');
7373
const selectedItems = getSelectedItems(sourceList);
74-
74+
7575
// Determine which items to move: all selected items or just the dragged item
76-
const itemsToMove = selectedItems.length > 1 && selectedItems.includes(source.element)
77-
? selectedItems
76+
const itemsToMove = selectedItems.length > 1 && selectedItems.includes(source.element)
77+
? selectedItems
7878
: [source.element];
79-
79+
8080
// Move the items using spread operator
8181
switch (destination.placement) {
8282
case MovePlacement.Before:
@@ -89,7 +89,7 @@ function handleMove(event) {
8989
destination.element.prepend(...itemsToMove);
9090
break;
9191
}
92-
92+
9393
// Update selection counts after move
9494
setTimeout(() => {
9595
updateSelectionCount(0);

0 commit comments

Comments
 (0)