@kwiz/fluentui
Version:
KWIZ common controls for FluentUI
39 lines (36 loc) • 1.06 kB
text/typescript
import { ConnectDropTarget, DropTargetMonitor, useDrop } from 'react-dnd';
import { iDraggedItemType, iDroppableProps } from './drag-drop.types';
export function useDroppable<DropType extends string, ItemType extends iDraggedItemType<DropType>>(props?: iDroppableProps<DropType, ItemType>): {
canDrop: boolean;
isOver: boolean;
dropRef: ConnectDropTarget;
} {
const {
acceptTypes,
onItemDrop,
onHover,
onDrop,
} = props || {
acceptTypes: [],
onItemDrop: () => { }
};
const [{ canDrop, isOver }, dropRef] = useDrop({
accept: acceptTypes,
drop: (item: ItemType) => {
onItemDrop(item);
onDrop?.();
},
hover: (item: ItemType) => {
onHover?.(item);
},
collect: (monitor: DropTargetMonitor) => ({
canDrop: monitor.canDrop(),
isOver: monitor.isOver(),
}),
});
return {
canDrop,
isOver,
dropRef,
};
}