tag drop works

This commit is contained in:
2025-11-07 12:00:28 +01:00
parent 30b90a5bf5
commit ae1884045d
5 changed files with 23 additions and 11 deletions
+4 -4
View File
@@ -5045,7 +5045,7 @@ const AppLayout = () => {
detailPanelOpen, detailPanelOpen,
onCloseDetailPanel: handleDetailPanelClose, onCloseDetailPanel: handleDetailPanelClose,
resolveThumbnailUrl: resolveThumbnailUrlForDoc, resolveThumbnailUrl: resolveThumbnailUrlForDoc,
onAssignTagToDocument: handleDocumentTagAttach, onAssignTagToDocument: handleDocumentTagDrop,
onRemoveTagFromDocument: handleTagRemove, onRemoveTagFromDocument: handleTagRemove,
ensureAssetUrl, ensureAssetUrl,
getDocumentAsset, getDocumentAsset,
@@ -5089,7 +5089,7 @@ const AppLayout = () => {
handleDetailPanelClose, handleDetailPanelClose,
handleDeskDocumentOpen, handleDeskDocumentOpen,
resolveThumbnailUrlForDoc, resolveThumbnailUrlForDoc,
handleDocumentTagAttach, handleDocumentTagDrop,
handleTagRemove, handleTagRemove,
ensureAssetUrl, ensureAssetUrl,
getDocumentAsset, getDocumentAsset,
@@ -5124,7 +5124,7 @@ const AppLayout = () => {
refreshTags, refreshTags,
handleTagUpdate, handleTagUpdate,
handleTagDelete, handleTagDelete,
handleDocumentTagAttach, handleDocumentTagDrop,
correspondents, correspondents,
refreshCorrespondents, refreshCorrespondents,
handleCorrespondentUpdate, handleCorrespondentUpdate,
@@ -5174,7 +5174,7 @@ const AppLayout = () => {
refreshTags, refreshTags,
handleTagUpdate, handleTagUpdate,
handleTagDelete, handleTagDelete,
handleDocumentTagAttach, handleDocumentTagDrop,
correspondents, correspondents,
refreshCorrespondents, refreshCorrespondents,
handleCorrespondentUpdate, handleCorrespondentUpdate,
+5 -1
View File
@@ -105,7 +105,11 @@ const DesktopDocumentCard = ({
style={colorStyle || undefined} style={colorStyle || undefined}
title={tag.label} title={tag.label}
draggable draggable
onPointerDown={(event) => onDocTagPointerDown(event, doc, tag)} data-desk-tag-chip="true"
onPointerDownCapture={(event) => {
event.stopPropagation();
onDocTagPointerDown(event, doc, tag);
}}
onDragStart={(event) => onDocTagDragStart(event, doc, tag)} onDragStart={(event) => onDocTagDragStart(event, doc, tag)}
onDrag={onDocTagDrag} onDrag={onDocTagDrag}
onDragEnd={(event) => onDocTagDragEnd(event)} onDragEnd={(event) => onDocTagDragEnd(event)}
+5 -1
View File
@@ -1157,7 +1157,11 @@ export const createDesktopSurface = ({
breadcrumbs: workspaceProps?.breadcrumbs || null, breadcrumbs: workspaceProps?.breadcrumbs || null,
selectionLabel: null, selectionLabel: null,
floatingActions, floatingActions,
content: <DesktopWorkspace {...workspaceProps} />, content: (
<DesktopWorkspace
{...workspaceProps}
/>
),
detail, detail,
}); });
@@ -46,7 +46,6 @@ export const useDeskPointer = ({
const pointerMovedRef = useRef(false); const pointerMovedRef = useRef(false);
const longPressTimerRef = useRef(null); const longPressTimerRef = useRef(null);
const longPressActiveRef = useRef(false); const longPressActiveRef = useRef(false);
const resetLongPressState = useCallback(() => { const resetLongPressState = useCallback(() => {
if (longPressTimerRef.current) { if (longPressTimerRef.current) {
clearTimeout(longPressTimerRef.current); clearTimeout(longPressTimerRef.current);
@@ -45,6 +45,7 @@ export const useDeskTagInteractions = ({
onRemoveTagFromDocument, onRemoveTagFromDocument,
requestCanvasFocus, requestCanvasFocus,
}) => { }) => {
const draggingTagRef = useRef(null); const draggingTagRef = useRef(null);
const pendingDocTagDragRef = useRef(null); const pendingDocTagDragRef = useRef(null);
const removalCursorActiveRef = useRef(false); const removalCursorActiveRef = useRef(false);
@@ -237,10 +238,10 @@ export const useDeskTagInteractions = ({
engine.setPendingTagDocId(null); engine.setPendingTagDocId(null);
const payload = parseTagTransferPayload(event); const payload = parseTagTransferPayload(event);
if (!payload) { if (!payload || !payload.id) {
return; return;
} }
markActiveTagDropHandled(payload.tagId, payload.sourceDocId); markActiveTagDropHandled(payload.id, payload.sourceDocId);
if (payload.sourceDocId === doc.id) { if (payload.sourceDocId === doc.id) {
return; return;
@@ -248,7 +249,11 @@ export const useDeskTagInteractions = ({
requestCanvasFocus?.(); requestCanvasFocus?.();
void safeInvoke(onAssignTagToDocument, doc.id, payload.tagId, { sourceDocId: payload.sourceDocId }); void safeInvoke(onAssignTagToDocument, doc.id, {
id: payload.id,
label: payload.label || '',
sourceDocId: payload.sourceDocId ?? null,
});
}, },
[engine, isTagTransfer, markActiveTagDropHandled, onAssignTagToDocument, requestCanvasFocus], [engine, isTagTransfer, markActiveTagDropHandled, onAssignTagToDocument, requestCanvasFocus],
); );
@@ -260,7 +265,7 @@ export const useDeskTagInteractions = ({
} }
event.stopPropagation(); event.stopPropagation();
event.dataTransfer.effectAllowed = 'move'; event.dataTransfer.effectAllowed = 'move';
writeTagTransferData(event.dataTransfer, { docId: doc.id, tagId: tag.id }); writeTagTransferData(event.dataTransfer, tag, doc.id);
const { x: pointerX, y: pointerY } = getPointerPosition(event, { fallbackToPage: false }); const { x: pointerX, y: pointerY } = getPointerPosition(event, { fallbackToPage: false });
const { clone, offsetX, offsetY } = createDragPreview(event.currentTarget, pointerX, pointerY) || {}; const { clone, offsetX, offsetY } = createDragPreview(event.currentTarget, pointerX, pointerY) || {};