diff --git a/frontend/src/DesktopWorkspace.css b/frontend/src/DesktopWorkspace.css index 7c0192e..7870e96 100644 --- a/frontend/src/DesktopWorkspace.css +++ b/frontend/src/DesktopWorkspace.css @@ -69,7 +69,8 @@ } .desk-item.is-tag-pending .desk-item__card { - opacity: 0.6; + outline: 0.25rem solid var(--accent-outline); + outline-offset: 0.25rem; } .desk-item.is-filtered-out { @@ -201,6 +202,9 @@ body.desk-cursor-remove * { height: 100%; object-fit: contain; display: block; + pointer-events: none; + user-select: none; + -webkit-user-drag: none; } .desk-item__card--empty { diff --git a/frontend/src/DesktopWorkspace.jsx b/frontend/src/DesktopWorkspace.jsx index b05e967..8486407 100644 --- a/frontend/src/DesktopWorkspace.jsx +++ b/frontend/src/DesktopWorkspace.jsx @@ -17,13 +17,17 @@ import useDocumentDrag from './desktop/useDocumentDrag'; import { DesktopProvider, useDesktopContext } from './desktop/context'; import PreviewZoomOverlay from './detail/PreviewZoomOverlay'; import { getTagColorStyle } from './utils/colors'; +import { + isTagTransferEvent, + parseTagTransferPayload, + writeTagTransferData, +} from './documents/tagTransfer'; import './DesktopWorkspace.css'; const CANVAS_PADDING = 24; const ROTATION_RANGE = 7; const DEFAULT_CANVAS_WIDTH = 1024; const DEFAULT_CANVAS_HEIGHT = 680; -const TAG_MIME_TYPES = ['application/x-papercrate-tag', 'text/papercrate-tag']; const CARD_MIN = 240; const CARD_MAX = 340; @@ -111,50 +115,6 @@ const polygonCentroid = (polygon) => { }; }; -const readTransferData = (dataTransfer, mimeTypes) => { - if (!dataTransfer) { - return null; - } - for (let index = 0; index < mimeTypes.length; index += 1) { - const type = mimeTypes[index]; - try { - const raw = dataTransfer.getData(type); - if (raw) { - return raw; - } - } catch (error) { - if (DEBUG_DROP) { - console.warn('[desk] readTransferData failed for type', type, error); - } - } - } - return null; -}; - -const parseTagTransferPayload = (event) => { - const raw = readTransferData(event?.dataTransfer, [ - 'application/x-papercrate-tag', - 'text/papercrate-tag', - ]); - if (!raw) { - return null; - } - try { - return JSON.parse(raw); - } catch (error) { - console.warn('[desk] parseTagTransferPayload failed', error); - } - return null; -}; - -const resolveTagKey = (tag) => { - if (!tag) { - return null; - } - const key = tag.id ?? tag.uuid ?? tag.slug ?? tag.label; - return key != null ? String(key) : null; -}; - const DesktopPreviewCard = ({ doc, title, @@ -214,9 +174,21 @@ const DesktopPreviewCard = ({ const showNav = hasPreview && (cardinality > 1 || canGoPrev || canGoNext); return ( -