diff --git a/frontend/src/desktop/DesktopWorkspace.tsx b/frontend/src/desktop/DesktopWorkspace.tsx index 5c839a9..1d5f0c5 100644 --- a/frontend/src/desktop/DesktopWorkspace.tsx +++ b/frontend/src/desktop/DesktopWorkspace.tsx @@ -10,7 +10,7 @@ import React, { import { resolveDocumentAssetUrl } from '../asset_manager'; import type { GetAsset } from '../asset_manager'; import { formatTransform } from '../utils/math'; -import useDocumentDrag from './useDocumentDrag'; +import useDocumentDrag, { PointerDownOptions } from './useDocumentDrag'; import PreviewZoomOverlay from '../detail/PreviewZoomOverlay'; import { WorkspaceEngine, @@ -894,7 +894,7 @@ function DesktopWorkspaceView({ onDocumentActivate: handleDeskDocumentActivate, markLayoutDirty, }) as { - handlePointerDown: React.PointerEventHandler; + handlePointerDown: (event: React.PointerEvent, docId: Identifier | null, options: PointerDownOptions) => void; handlePointerMove: React.PointerEventHandler; handlePointerUp: React.PointerEventHandler; handlePointerCancel: React.PointerEventHandler; diff --git a/frontend/src/desktop/useDocumentDrag.ts b/frontend/src/desktop/useDocumentDrag.ts index f1a9873..94e17ac 100644 --- a/frontend/src/desktop/useDocumentDrag.ts +++ b/frontend/src/desktop/useDocumentDrag.ts @@ -82,8 +82,8 @@ interface DragSettings { debugDrag?: boolean; } -interface PointerDownOptions { - draggedDocIds?: string[]; +export interface PointerDownOptions { + draggedDocIds: string[]; stackSelectionApplied?: boolean; modifierActive?: boolean; } @@ -310,7 +310,7 @@ const useDocumentDrag = (options: UseDocumentDragOptions) => { ); const handlePointerDown = useCallback( - (event: PointerEventLike, docIdInput?: Identifier | null, options: PointerDownOptions = {}) => { + (event: PointerEventLike, docIdInput: Identifier | null, options: PointerDownOptions) => { const targetElement = getEventTargetElement(event); if (targetElement?.closest && targetElement.closest('[data-desk-tag-chip="true"]')) { return; @@ -330,22 +330,14 @@ const useDocumentDrag = (options: UseDocumentDragOptions) => { return; } const massGrams = computeDocumentMassGrams(doc); - const draggedDocIds = options?.draggedDocIds; + const draggedDocIds = options.draggedDocIds; - let selectionIds: string[] = []; - - if (Array.isArray(draggedDocIds) && draggedDocIds.length > 0) { - // Use explicitly provided IDs for the drag operation - selectionIds = draggedDocIds; - } else { - // Fallback (should ideally not happen if useDeskPointer is correct) - selectionIds = [docKey]; - } + let selectionIds: string[] = draggedDocIds; selectionIds = selectionIds.filter((id, index, array) => array.indexOf(id) === index && documentLookup.has(id)); if (!selectionIds.length) { - selectionIds = [docKey]; + return; } const isGroupDrag = selectionIds.length > 1;