diff --git a/src-web/components/Sidebar.tsx b/src-web/components/Sidebar.tsx index 1b0e7ca1..cf8a7d68 100644 --- a/src-web/components/Sidebar.tsx +++ b/src-web/components/Sidebar.tsx @@ -3,8 +3,8 @@ import type { Identifier } from 'dnd-core'; import type { CSSProperties } from 'react'; import React, { useCallback, useEffect, useRef, useState } from 'react'; import type { XYCoord } from 'react-dnd'; -import { DndProvider, useDrag, useDragLayer, useDrop } from 'react-dnd'; -import { getEmptyImage, HTML5Backend } from 'react-dnd-html5-backend'; +import { DndProvider, useDrag, useDrop } from 'react-dnd'; +import { HTML5Backend } from 'react-dnd-html5-backend'; import { useActiveRequest } from '../hooks/useActiveRequest'; import { useCreateRequest } from '../hooks/useCreateRequest'; import { useDeleteRequest } from '../hooks/useDeleteRequest'; @@ -53,7 +53,7 @@ export function Container({ className }: Props) { useEffect(() => { setItems(requests.map((r) => ({ request: r, left: 0, top: 0 }))); - }, [requests]); + }, [requests.length]); const moveState = useRef<{ move: (e: MouseEvent) => void; up: () => void } | null>(null); const unsub = () => { @@ -107,7 +107,6 @@ export function Container({ className }: Props) { 'bg-gray-100 h-full border-r border-gray-200 relative grid grid-rows-[auto,1fr,auto]', )} > - {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */}
- {items.map(({ request, top, left }, i) => ( + {items.map(({ request, left, top }, i) => ( (null); - const [{ handlerId }, drop] = useDrop({ + const [, drop] = useDrop({ accept: ItemTypes.REQUEST, - collect: (monitor) => ({ handlerId: monitor.getHandlerId() }), hover: (item, monitor) => { if (!ref.current) return; @@ -333,89 +331,23 @@ function DraggableSidebarItem({ }, }); - const [monitor, drag, preview] = useDrag( - () => ({ - type: ItemTypes.REQUEST, - item: () => ({ request, left, top, index }), - collect: (monitor) => ({ - isDragging: monitor.isDragging(), - }), - }), - [request, left, top, index], - ); + const [monitor, drag] = useDrag(() => ({ + type: ItemTypes.REQUEST, + item: () => ({ request, left, top, index }), + isDragging: (monitor) => monitor.getItem().request.id === request.id, + collect: (monitor) => ({ isDragging: monitor.isDragging() }), + })); - useEffect(() => { - preview(getEmptyImage(), { captureDraggingState: true }); - }, []); - - const isDragging = !!monitor?.isDragging; - console.log('IS DRAGGING', isDragging); + const isDragging = monitor?.isDragging; drag(drop(ref)); return (
); } - -function getItemStyles( - initialOffset: XYCoord | null, - currentOffset: XYCoord | null, -): CSSProperties { - if (!initialOffset || !currentOffset) { - return { display: 'none' }; - } - - const { x, y } = currentOffset; - - const transform = `translate(${x}px, ${y}px)`; - return { - transform, - WebkitTransform: transform, - }; -} - -const CustomDragLayer = ({ sidebarWidth }: { sidebarWidth: number }) => { - const dragProps = useDragLayer((monitor) => ({ - item: monitor.getItem(), - itemType: monitor.getItemType(), - initialOffset: monitor.getInitialSourceClientOffset(), - currentOffset: monitor.getSourceClientOffset(), - isDragging: monitor.isDragging(), - })); - - const { itemType, isDragging, item, initialOffset, currentOffset } = dragProps; - - function renderItem() { - switch (itemType) { - case ItemTypes.REQUEST: - return ( - - ); - default: - return null; - } - } - - if (!isDragging) { - return null; - } - - return ( -
-
- {renderItem()} -
-
- ); -};