UNPKG

@kwiz/fluentui

Version:

KWIZ common controls for FluentUI

48 lines (43 loc) 1.37 kB
import { useEffect } from 'react'; import { ConnectDragSource, DragSourceMonitor, useDrag } from 'react-dnd'; import { useDragDropContextInternal } from './drag-drop-context-internal'; import { iDraggableProps, iDraggedItemType } from './drag-drop.types'; export function useDraggable<ItemType extends iDraggedItemType<string>>(props?: iDraggableProps<ItemType>): { isDragging: boolean; dragRef: ConnectDragSource } { const { item, onBeginDrag, onEndDrag, } = props || { item: { type: "~invalid~" } }; const dragDropContext = useDragDropContextInternal(); const [{ isDragging }, dragRef] = useDrag( () => ({ type: item.type, item, collect: (monitor: DragSourceMonitor) => ({ isDragging: monitor.isDragging(), }), end: (item, monitor) => { dragDropContext.setDragItem(null); onEndDrag && onEndDrag(monitor.getDropResult()); }, }), [item, item.type] ); useEffect(() => { if (isDragging) { dragDropContext.setDragItem(item); onBeginDrag && onBeginDrag(); } }, [isDragging, onBeginDrag]) return { isDragging, dragRef, }; }