refactor: Consolidate tag drag/drop handlers into a single tagInteractions prop and streamline prop inheritance in DesktopWorkspace.
This commit is contained in:
@@ -118,20 +118,26 @@ type WorkspaceSnapshotState = {
|
||||
initialLoadDone: boolean;
|
||||
};
|
||||
|
||||
import type { DocumentsViewProps } from '../documents/panel/DocumentsPanel';
|
||||
|
||||
interface DesktopWorkspaceProps extends DocumentsViewProps {
|
||||
// Override entries if needed, or rely on DocumentsViewProps
|
||||
// entries: DocumentsListEntry[];
|
||||
}
|
||||
|
||||
interface DesktopWorkspaceViewProps {
|
||||
engine: WorkspaceEngine;
|
||||
items: DeskDocument[];
|
||||
containerRef: React.RefObject<HTMLDivElement>;
|
||||
export interface DeskTagInteractions {
|
||||
handleTagDragEnterDoc: (...args: unknown[]) => void;
|
||||
handleTagDragOverDoc: (...args: unknown[]) => void;
|
||||
handleTagDragLeaveDoc: (...args: unknown[]) => void;
|
||||
handleTagDropOnDoc: (...args: unknown[]) => void;
|
||||
handleDocTagPointerDown: (...args: unknown[]) => void;
|
||||
handleDocTagDragStart: (...args: unknown[]) => void;
|
||||
handleDocTagDrag: (...args: unknown[]) => void;
|
||||
handleDocTagDragEnd: (...args: unknown[]) => void;
|
||||
handleCanvasDragOver: (event: React.DragEvent<HTMLDivElement>) => void;
|
||||
handleCanvasDragLeave: (event: React.DragEvent<HTMLDivElement>) => void;
|
||||
handleCanvasDrop: (event: React.DragEvent<HTMLDivElement>) => void;
|
||||
}
|
||||
|
||||
import type { DocumentsViewProps } from '../documents/panel/DocumentsPanel';
|
||||
|
||||
interface DesktopWorkspaceViewProps extends Omit<DocumentsViewProps, 'entries' | 'activeTagFilters'> {
|
||||
engine: WorkspaceEngine;
|
||||
items: DeskDocument[];
|
||||
containerRef: React.RefObject<HTMLDivElement>;
|
||||
ensureDocumentSize: (doc: DeskDocument | null) => DocumentSizeInfo | null;
|
||||
layoutSnapshot: Map<string, LayoutEntry>;
|
||||
layoutRef: React.MutableRefObject<Map<string, LayoutEntry>>;
|
||||
@@ -142,26 +148,14 @@ interface DesktopWorkspaceViewProps {
|
||||
tagDropTargetId: string | null;
|
||||
pendingTagDocId: string | null;
|
||||
pendingRemovalTag: unknown;
|
||||
ensureAssetUrl?: DesktopWorkspaceProps['ensureAssetUrl'];
|
||||
getDocumentAsset?: DesktopWorkspaceProps['getDocumentAsset'];
|
||||
handleNavigatorSnapshot: (docId: Identifier | null, snapshot: NavigatorSnapshot | null) => void;
|
||||
activeTagSet: Set<string>;
|
||||
handleTagDragEnterDoc: (...args: unknown[]) => void;
|
||||
handleTagDragOverDoc: (...args: unknown[]) => void;
|
||||
handleTagDragLeaveDoc: (...args: unknown[]) => void;
|
||||
handleTagDropOnDoc: (...args: unknown[]) => void;
|
||||
handleDocTagPointerDown: (...args: unknown[]) => void;
|
||||
handleDocTagDragStart: (...args: unknown[]) => void;
|
||||
handleDocTagDrag: (...args: unknown[]) => void;
|
||||
handleDocTagDragEnd: (...args: unknown[]) => void;
|
||||
tagInteractions: DeskTagInteractions;
|
||||
overlayDisplay: OverlayDisplay | null;
|
||||
closeOverlay: () => void;
|
||||
overlayOriginRect: DOMRect | null;
|
||||
overlayOriginTransform: OverlayOriginTransform | null;
|
||||
overlayDocument: DeskDocument | null;
|
||||
onDocumentClick?: DesktopWorkspaceProps['onDocumentClick'];
|
||||
onDocumentStackSelect?: (docIds: Identifier[], event?: PointerEvent | MouseEvent | null) => void;
|
||||
onPromoteSelection?: (docId: Identifier | null) => void;
|
||||
documentLookup: Map<string, DeskDocument>;
|
||||
selectedDocumentIds: Identifier[];
|
||||
onClearSelection: () => void;
|
||||
@@ -176,24 +170,22 @@ interface DesktopWorkspaceViewProps {
|
||||
openOverlayForDoc: (docId: Identifier | null, originInfo?: OverlayOriginHint | null) => void;
|
||||
recalcVisibleDocIds: () => void;
|
||||
dragSettings: DragSettings;
|
||||
onDocumentActivate?: DesktopWorkspaceProps['onDocumentActivate'];
|
||||
markLayoutDirty: () => void;
|
||||
}
|
||||
|
||||
const defaultGetDocumentAsset: GetAsset = () => null;
|
||||
|
||||
const DesktopWorkspace: React.FC<DesktopWorkspaceProps> = ({
|
||||
const DesktopWorkspace: React.FC<DocumentsViewProps> = ({
|
||||
entries = [],
|
||||
onDocumentActivate = null,
|
||||
onDocumentClick = null,
|
||||
onDocumentTagDrop = null,
|
||||
ensureAssetUrl = null,
|
||||
getDocumentAsset = defaultGetDocumentAsset,
|
||||
activeTagFilters = [],
|
||||
onDocumentTagDrop = null,
|
||||
tenantId = null,
|
||||
viewId = 'default',
|
||||
documentLinks,
|
||||
ensureDownloadUrl,
|
||||
ensureAssetUrl = null,
|
||||
getDocumentAsset = defaultGetDocumentAsset,
|
||||
...passThroughProps
|
||||
}) => {
|
||||
const {
|
||||
selectedDocumentIds,
|
||||
@@ -526,20 +518,6 @@ const DesktopWorkspace: React.FC<DesktopWorkspaceProps> = ({
|
||||
requestCanvasFocus,
|
||||
});
|
||||
|
||||
const {
|
||||
handleTagDragEnterDoc,
|
||||
handleTagDragOverDoc,
|
||||
handleTagDragLeaveDoc,
|
||||
handleTagDropOnDoc,
|
||||
handleCanvasDragOver,
|
||||
handleCanvasDragLeave,
|
||||
handleCanvasDrop,
|
||||
handleDocTagPointerDown,
|
||||
handleDocTagDragStart,
|
||||
handleDocTagDrag,
|
||||
handleDocTagDragEnd,
|
||||
} = tagInteractions;
|
||||
|
||||
useEffect(() => {
|
||||
const current = docSizeMapRef.current;
|
||||
const next = new Map<string, DocumentSizeInfo>(current);
|
||||
@@ -789,110 +767,45 @@ const DesktopWorkspace: React.FC<DesktopWorkspaceProps> = ({
|
||||
[],
|
||||
);
|
||||
|
||||
const viewProps = useMemo<DesktopWorkspaceViewProps>(
|
||||
() => ({
|
||||
engine,
|
||||
items,
|
||||
containerRef,
|
||||
handleCanvasDragOver,
|
||||
handleCanvasDragLeave,
|
||||
handleCanvasDrop,
|
||||
ensureDocumentSize,
|
||||
layoutSnapshot,
|
||||
layoutRef,
|
||||
dragTransformsRef,
|
||||
itemRefs,
|
||||
visibleDocIds,
|
||||
draggingId,
|
||||
tagDropTargetId,
|
||||
pendingTagDocId,
|
||||
pendingRemovalTag,
|
||||
ensureAssetUrl,
|
||||
getDocumentAsset,
|
||||
handleNavigatorSnapshot,
|
||||
activeTagSet,
|
||||
handleTagDragEnterDoc,
|
||||
handleTagDragOverDoc,
|
||||
handleTagDragLeaveDoc,
|
||||
handleTagDropOnDoc,
|
||||
handleDocTagPointerDown,
|
||||
handleDocTagDragStart,
|
||||
handleDocTagDrag,
|
||||
handleDocTagDragEnd,
|
||||
overlayDisplay,
|
||||
closeOverlay,
|
||||
overlayOriginRect,
|
||||
overlayOriginTransform,
|
||||
overlayDocument,
|
||||
onDocumentClick,
|
||||
handleStackSelect,
|
||||
handlePromoteSelection,
|
||||
onDocumentStackSelect: handleStackSelect,
|
||||
onPromoteSelection: handlePromoteSelection,
|
||||
selectedDocumentIds,
|
||||
onClearSelection: clearSelection,
|
||||
documentLookup,
|
||||
resolveBaseMetrics,
|
||||
bringToFront,
|
||||
setDraggingId,
|
||||
canvasSize,
|
||||
openOverlayForDoc,
|
||||
recalcVisibleDocIds,
|
||||
dragSettings,
|
||||
onDocumentActivate,
|
||||
markLayoutDirty,
|
||||
}),
|
||||
[
|
||||
activeTagSet,
|
||||
bringToFront,
|
||||
canvasSize,
|
||||
closeOverlay,
|
||||
containerRef,
|
||||
draggingId,
|
||||
dragSettings,
|
||||
engine,
|
||||
ensureAssetUrl,
|
||||
ensureDocumentSize,
|
||||
getDocumentAsset,
|
||||
dragTransformsRef,
|
||||
handleCanvasDragLeave,
|
||||
handleCanvasDragOver,
|
||||
handleCanvasDrop,
|
||||
handleDocTagDrag,
|
||||
handleDocTagDragEnd,
|
||||
handleDocTagDragStart,
|
||||
handleDocTagPointerDown,
|
||||
handleNavigatorSnapshot,
|
||||
handleTagDragEnterDoc,
|
||||
handleTagDragLeaveDoc,
|
||||
handleTagDragOverDoc,
|
||||
handleTagDropOnDoc,
|
||||
itemRefs,
|
||||
items,
|
||||
layoutRef,
|
||||
layoutSnapshot,
|
||||
onDocumentClick,
|
||||
handleStackSelect,
|
||||
handlePromoteSelection,
|
||||
openOverlayForDoc,
|
||||
overlayDisplay,
|
||||
overlayOriginRect,
|
||||
overlayOriginTransform,
|
||||
overlayDocument,
|
||||
documentLookup,
|
||||
pendingRemovalTag,
|
||||
pendingTagDocId,
|
||||
recalcVisibleDocIds,
|
||||
resolveBaseMetrics,
|
||||
setDraggingId,
|
||||
selectedDocumentIds,
|
||||
clearSelection,
|
||||
onDocumentActivate,
|
||||
markLayoutDirty,
|
||||
tagDropTargetId,
|
||||
visibleDocIds,
|
||||
],
|
||||
);
|
||||
const viewProps: DesktopWorkspaceViewProps = {
|
||||
...passThroughProps,
|
||||
engine,
|
||||
items,
|
||||
containerRef,
|
||||
ensureDocumentSize,
|
||||
layoutSnapshot,
|
||||
layoutRef,
|
||||
dragTransformsRef,
|
||||
itemRefs,
|
||||
visibleDocIds,
|
||||
draggingId,
|
||||
tagDropTargetId,
|
||||
pendingTagDocId,
|
||||
pendingRemovalTag,
|
||||
ensureAssetUrl,
|
||||
getDocumentAsset,
|
||||
handleNavigatorSnapshot,
|
||||
activeTagSet,
|
||||
tagInteractions,
|
||||
overlayDisplay,
|
||||
closeOverlay,
|
||||
overlayOriginRect,
|
||||
overlayOriginTransform,
|
||||
overlayDocument,
|
||||
onDocumentStackSelect: handleStackSelect,
|
||||
onPromoteSelection: handlePromoteSelection,
|
||||
selectedDocumentIds,
|
||||
onClearSelection: clearSelection,
|
||||
documentLookup,
|
||||
resolveBaseMetrics,
|
||||
bringToFront,
|
||||
setDraggingId,
|
||||
canvasSize,
|
||||
openOverlayForDoc,
|
||||
recalcVisibleDocIds,
|
||||
dragSettings,
|
||||
markLayoutDirty,
|
||||
};
|
||||
return <DesktopWorkspaceView {...viewProps} />;
|
||||
};
|
||||
|
||||
@@ -900,12 +813,10 @@ function DesktopWorkspaceView({
|
||||
engine,
|
||||
items,
|
||||
containerRef,
|
||||
handleCanvasDragOver,
|
||||
handleCanvasDragLeave,
|
||||
handleCanvasDrop,
|
||||
ensureDocumentSize,
|
||||
layoutSnapshot,
|
||||
layoutRef,
|
||||
dragTransformsRef,
|
||||
itemRefs,
|
||||
visibleDocIds,
|
||||
draggingId,
|
||||
@@ -916,14 +827,7 @@ function DesktopWorkspaceView({
|
||||
getDocumentAsset,
|
||||
handleNavigatorSnapshot,
|
||||
activeTagSet,
|
||||
handleTagDragEnterDoc,
|
||||
handleTagDragOverDoc,
|
||||
handleTagDragLeaveDoc,
|
||||
handleTagDropOnDoc,
|
||||
handleDocTagPointerDown,
|
||||
handleDocTagDragStart,
|
||||
handleDocTagDrag,
|
||||
handleDocTagDragEnd,
|
||||
tagInteractions,
|
||||
overlayDisplay,
|
||||
closeOverlay,
|
||||
overlayOriginRect,
|
||||
@@ -944,7 +848,6 @@ function DesktopWorkspaceView({
|
||||
dragSettings,
|
||||
onDocumentActivate,
|
||||
markLayoutDirty,
|
||||
dragTransformsRef,
|
||||
}: DesktopWorkspaceViewProps) {
|
||||
const handleDeskDocumentActivate = useCallback(
|
||||
(docId: Identifier) => {
|
||||
@@ -1036,9 +939,9 @@ function DesktopWorkspaceView({
|
||||
ref={containerRef}
|
||||
tabIndex={0}
|
||||
onKeyDown={handleShellKeyDown}
|
||||
onDragOver={handleCanvasDragOver}
|
||||
onDragLeave={handleCanvasDragLeave}
|
||||
onDrop={handleCanvasDrop}
|
||||
onDragOver={tagInteractions.handleCanvasDragOver}
|
||||
onDragLeave={tagInteractions.handleCanvasDragLeave}
|
||||
onDrop={tagInteractions.handleCanvasDrop}
|
||||
onPointerDown={(event) => {
|
||||
if (event.target === event.currentTarget) {
|
||||
onClearSelection();
|
||||
@@ -1129,14 +1032,14 @@ function DesktopWorkspaceView({
|
||||
handleNavigatorSnapshot={handleNavigatorSnapshot}
|
||||
cardPointerHandlers={cardPointerHandlers}
|
||||
onDocumentActivate={onDocumentActivate}
|
||||
onTagDragEnter={handleTagDragEnterDoc}
|
||||
onTagDragOver={handleTagDragOverDoc}
|
||||
onTagDragLeave={handleTagDragLeaveDoc}
|
||||
onTagDrop={handleTagDropOnDoc}
|
||||
onDocTagPointerDown={handleDocTagPointerDown}
|
||||
onDocTagDragStart={handleDocTagDragStart}
|
||||
onDocTagDrag={handleDocTagDrag}
|
||||
onDocTagDragEnd={handleDocTagDragEnd}
|
||||
onTagDragEnter={tagInteractions.handleTagDragEnterDoc}
|
||||
onTagDragOver={tagInteractions.handleTagDragOverDoc}
|
||||
onTagDragLeave={tagInteractions.handleTagDragLeaveDoc}
|
||||
onTagDrop={tagInteractions.handleTagDropOnDoc}
|
||||
onDocTagPointerDown={tagInteractions.handleDocTagPointerDown}
|
||||
onDocTagDragStart={tagInteractions.handleDocTagDragStart}
|
||||
onDocTagDrag={tagInteractions.handleDocTagDrag}
|
||||
onDocTagDragEnd={tagInteractions.handleDocTagDragEnd}
|
||||
pendingRemovalTag={pendingRemovalTag}
|
||||
registerNode={registerNode}
|
||||
/>
|
||||
|
||||
Reference in New Issue
Block a user