Skip to content

Commit 1e833bb

Browse files
committed
fix: decouple drag-and-drop from selection
1 parent 9c5049b commit 1e833bb

File tree

3 files changed

+12
-4
lines changed

3 files changed

+12
-4
lines changed

.changeset/wicked-eels-wonder.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@headless-tree/core": patch
3+
---
4+
5+
drag-and-drop feature is no longer dependent on selection feature, and fill default to focused item if selection feature is missing (#143)

packages/core/src/features/drag-and-drop/feature.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ const handleAutoOpenFolder = (
4646
const defaultCanDropForeignDragObject = () => false;
4747
export const dragAndDropFeature: FeatureImplementation = {
4848
key: "drag-and-drop",
49-
deps: ["selection"],
5049

5150
getDefaultConfig: (defaultConfig, tree) => ({
5251
canDrop: (_, target) => target.item.isFolder(),
@@ -185,12 +184,14 @@ export const dragAndDropFeature: FeatureImplementation = {
185184
onDragEnter: (e: DragEvent) => e.preventDefault(),
186185

187186
onDragStart: (e: DragEvent) => {
188-
const selectedItems = tree.getSelectedItems();
187+
const selectedItems = tree.getSelectedItems
188+
? tree.getSelectedItems()
189+
: [tree.getFocusedItem()];
189190
const items = selectedItems.includes(item) ? selectedItems : [item];
190191
const config = tree.getConfig();
191192

192193
if (!selectedItems.includes(item)) {
193-
tree.setSelectedItems([item.getItemMeta().itemId]);
194+
tree.setSelectedItems?.([item.getItemMeta().itemId]);
194195
}
195196

196197
if (!(config.canDrag?.(items) ?? true)) {

packages/core/src/features/keyboard-drag-and-drop/feature.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,9 @@ export const keyboardDragAndDropFeature: FeatureImplementation = {
191191
preventDefault: true,
192192
isEnabled: (tree) => !tree.getState().dnd,
193193
handler: (_, tree) => {
194-
const selectedItems = tree.getSelectedItems();
194+
const selectedItems = tree.getSelectedItems?.() ?? [
195+
tree.getFocusedItem(),
196+
];
195197
const focusedItem = tree.getFocusedItem();
196198

197199
tree.startKeyboardDrag(

0 commit comments

Comments
 (0)