'use client' import React, { useState, useRef } from 'react' import styles from './styles.module.css' interface GridItemProps { id: number x: number y: number w: number h: number gridSize: number onDrag: (id: number, deltaX: number, deltaY: number) => void onResize: (id: number, deltaW: number, deltaH: number) => void } export const GridItem = ({ id, x, y, w, h, gridSize, onDrag, onResize }: GridItemProps) => { const itemRef = useRef(null) const [dragging, setDragging] = useState(false) const [resizing, setResizing] = useState(false) const [startPos, setStartPos] = useState({ x: 0, y: 0 }) const handleMouseDown = (e: React.MouseEvent) => { if ((e.target as HTMLElement).classList.contains('resize-handle')) return setDragging(true) setStartPos({ x: e.clientX, y: e.clientY }) } const handleMouseMove = (e: MouseEvent) => { if (dragging) { const deltaX = e.clientX - startPos.x const deltaY = e.clientY - startPos.y onDrag(id, deltaX, deltaY) setStartPos({ x: e.clientX, y: e.clientY }) } if (resizing) { const deltaX = e.clientX - startPos.x const deltaY = e.clientY - startPos.y onResize(id, deltaX, deltaY) setStartPos({ x: e.clientX, y: e.clientY }) } } const handleMouseUp = () => { setDragging(false) setResizing(false) } const handleResizeMouseDown = (e: React.MouseEvent) => { e.stopPropagation() setResizing(true) setStartPos({ x: e.clientX, y: e.clientY }) } React.useEffect(() => { document.addEventListener('mousemove', handleMouseMove) document.addEventListener('mouseup', handleMouseUp) return () => { document.removeEventListener('mousemove', handleMouseMove) document.removeEventListener('mouseup', handleMouseUp) } }, [dragging, resizing, startPos]) const style = { width: `${w * gridSize}px`, height: `${h * gridSize}px`, transform: `translate(${x * gridSize}px, ${y * gridSize}px)`, } return (
) }