import { Box } from '@chakra-ui/react'; import React, { useState } from 'react'; import { DragDropContext, DroppableProps, Droppable, DraggableChildrenFn, DragStart, DropResult } from 'react-beautiful-dnd'; export * from 'react-beautiful-dnd'; type Props = { onDragEndCb: (result: T[]) => void; renderClone?: DraggableChildrenFn; children: DroppableProps['children']; dataList: T[]; }; function DndDrag({ children, renderClone, onDragEndCb, dataList }: Props) { const [draggingItemHeight, setDraggingItemHeight] = useState(0); const onDragStart = (start: DragStart) => { const draggingNode = document.querySelector(`[data-rbd-draggable-id="${start.draggableId}"]`); setDraggingItemHeight(draggingNode?.getBoundingClientRect().height || 0); }; const onDragEnd = (result: DropResult) => { if (!result.destination) { return; } setDraggingItemHeight(0); const startIndex = result.source.index; const endIndex = result.destination.index; const list = Array.from(dataList); const [removed] = list.splice(startIndex, 1); list.splice(endIndex, 0, removed); onDragEndCb(list); }; return ( {(provided, snapshot) => { return ( {children(provided, snapshot)} {snapshot.isDraggingOver && } ); }} ); } export default DndDrag;