diff --git a/frontend/src/documents/DocumentsTable.jsx b/frontend/src/documents/DocumentsTable.jsx index b381caa..ababa22 100644 --- a/frontend/src/documents/DocumentsTable.jsx +++ b/frontend/src/documents/DocumentsTable.jsx @@ -235,6 +235,7 @@ const DocumentsTable = ({ [activeCorrespondentIds], ); const scrollRef = useRef(null); + const suppressDocumentClickRef = useRef(false); const [, forceVisibilityTick] = useState(0); const lastScrollNodeRef = useRef(null); const assignScrollRef = useCallback((node) => { @@ -373,6 +374,34 @@ const DocumentsTable = ({ [isTagDragEvent, onDocumentTagDrop], ); + const handleDocumentClick = useCallback( + (documentId, event) => { + if (suppressDocumentClickRef.current) { + return; + } + onDocumentRowClick?.(documentId, event); + }, + [onDocumentRowClick], + ); + + const handleDocumentDragStartLocal = useCallback( + (event, doc) => { + suppressDocumentClickRef.current = true; + onDocumentDragStart?.(event, doc); + }, + [onDocumentDragStart], + ); + + const handleDocumentDragEndLocal = useCallback( + (event) => { + onDocumentDragEnd?.(event); + requestAnimationFrame(() => { + suppressDocumentClickRef.current = false; + }); + }, + [onDocumentDragEnd], + ); + const renderCorrespondentLinks = useCallback( (correspondents) => correspondents.map((correspondent, index) => { @@ -594,11 +623,11 @@ const DocumentsTable = ({ role="listitem" id={`document-card-${doc.id}`} data-doc-id={doc.id} - onClick={(event) => onDocumentRowClick(doc.id, event)} + onClick={(event) => handleDocumentClick(doc.id, event)} onDoubleClick={() => onDocumentOpen(doc.id)} draggable - onDragStart={(event) => onDocumentDragStart(event, doc)} - onDragEnd={onDocumentDragEnd} + onDragStart={(event) => handleDocumentDragStartLocal(event, doc)} + onDragEnd={handleDocumentDragEndLocal} onDragOver={(event) => handleDocumentTagDragOver(event)} onDragOverCapture={(event) => handleDocumentTagDragOver(event)} onDragLeave={handleDocumentTagDragLeave} @@ -818,11 +847,11 @@ const DocumentsTable = ({ className={rowClasses.join(' ')} id={`document-row-${doc.id}`} data-doc-id={doc.id} - onClick={(event) => onDocumentRowClick(doc.id, event)} + onClick={(event) => handleDocumentClick(doc.id, event)} onDoubleClick={() => onDocumentOpen(doc.id)} draggable - onDragStart={(event) => onDocumentDragStart(event, doc)} - onDragEnd={onDocumentDragEnd} + onDragStart={(event) => handleDocumentDragStartLocal(event, doc)} + onDragEnd={handleDocumentDragEndLocal} onDragOver={handleDocumentTagDragOver} onDragLeave={handleDocumentTagDragLeave} onDrop={(event) => handleDocumentTagDrop(event, doc.id)} diff --git a/frontend/src/index.jsx b/frontend/src/index.jsx index 64bb048..5c941c8 100644 --- a/frontend/src/index.jsx +++ b/frontend/src/index.jsx @@ -2836,11 +2836,16 @@ const AppLayout = () => { return; } + const isGridView = documentsViewMode === 'grid'; const isAlreadySelected = selectedDocumentIds.includes(documentId); - const selection = isAlreadySelected ? [...selectedDocumentIds] : [documentId]; + const selection = isAlreadySelected + ? [...selectedDocumentIds] + : isGridView + ? [...selectedDocumentIds, documentId] + : [documentId]; const folderSelection = selectedFolderIds.length ? [...selectedFolderIds] : []; - if (!isAlreadySelected) { + if (!isAlreadySelected && !isGridView) { applySelection([documentKey], { anchor: documentKey, interactedKeys: [documentKey], @@ -2890,6 +2895,7 @@ const AppLayout = () => { documentLookup, createDragPreview, setDraggedFolderId, + documentsViewMode, ], );