import React, { memo } from 'react'; import { useDragLayer } from "react-dnd"; import Circle from './Circle' import type { CSSProperties, FC } from 'react' const layerStyles: CSSProperties = { position: "fixed", pointerEvents: "none", zIndex: 100, left: 0, top: 0, width: "100%", height: "100%" }; const ItemTypes = { BOX: 'box', } function getItemStyles(initialOffset, currentOffset, maxX, minX) { if (!initialOffset || !currentOffset) { return { display: "none" }; } let { x, y } = currentOffset; // if (isSnapToGrid) { // x -= initialOffset.x; // y -= initialOffset.y; // [x, y] = [x, y]; // x += initialOffset.x; // y += initialOffset.y; // } if (x > maxX) { x = maxX; } if (x < minX) { x = minX; } const transform = `translate(${x}px, ${initialOffset.y}px)`; return { transition: 'transform 0.1s ease-out', transform, WebkitTransform: transform }; } interface Props { onDrag: (offset: { x: number, y: number } | null) => void; maxX: number; minX: number; } const CustomDragLayer: FC = memo(function CustomDragLayer(props) { const { itemType, isDragging, item, initialOffset, currentOffset, } = useDragLayer((monitor) => ({ item: monitor.getItem(), itemType: monitor.getItemType(), initialOffset: monitor.getInitialSourceClientOffset(), currentOffset: monitor.getSourceClientOffset(), isDragging: monitor.isDragging(), })); function renderItem() { switch (itemType) { case ItemTypes.BOX: return ; default: return null; } } if (!isDragging) { return null; } if (isDragging) { props.onDrag(currentOffset) } return (
{renderItem()}
); }) export default CustomDragLayer;