Spaces:
Sleeping
Sleeping
File size: 1,370 Bytes
a706099 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
import { useState, useEffect, useRef } from 'react';
export const usePanelResize = (initialWidth = 40) => {
const [leftPanelWidth, setLeftPanelWidth] = useState(initialWidth);
const [isDragging, setIsDragging] = useState(false);
const containerRef = useRef(null);
const handleMouseDown = (e) => {
setIsDragging(true);
e.preventDefault();
};
const handleMouseMove = (e) => {
if (!isDragging || !containerRef.current) return;
const containerRect = containerRef.current.getBoundingClientRect();
const newLeftWidth = ((e.clientX - containerRect.left) / containerRect.width) * 100;
if (newLeftWidth >= 20 && newLeftWidth <= 80) {
setLeftPanelWidth(newLeftWidth);
}
};
const handleMouseUp = () => {
setIsDragging(false);
};
useEffect(() => {
if (isDragging) {
document.addEventListener('mousemove', handleMouseMove);
document.addEventListener('mouseup', handleMouseUp);
return () => {
document.removeEventListener('mousemove', handleMouseMove);
document.removeEventListener('mouseup', handleMouseUp);
};
}
}, [isDragging]);
return {
leftPanelWidth,
isDragging,
containerRef,
handleMouseDown
};
}; |