fix colliding drawing IDs

This commit is contained in:
Zimeng Xiong
2026-02-07 12:08:49 -08:00
parent 8fcca43b0d
commit c40a5f46a0
5 changed files with 178 additions and 14 deletions
+21 -2
View File
@@ -36,6 +36,8 @@ export const Layout: React.FC<LayoutProps> = ({
const sidebarRef = useRef<HTMLDivElement>(null);
const startXRef = useRef(0);
const startWidthRef = useRef(0);
const resizeMouseMoveHandlerRef = useRef<((e: MouseEvent) => void) | null>(null);
const resizeMouseUpHandlerRef = useRef<(() => void) | null>(null);
// Handle mouse down on resize handle
const handleMouseDown = (e: React.MouseEvent) => {
@@ -44,6 +46,13 @@ export const Layout: React.FC<LayoutProps> = ({
startXRef.current = e.clientX;
startWidthRef.current = sidebarWidth;
if (resizeMouseMoveHandlerRef.current) {
document.removeEventListener('mousemove', resizeMouseMoveHandlerRef.current);
}
if (resizeMouseUpHandlerRef.current) {
document.removeEventListener('mouseup', resizeMouseUpHandlerRef.current);
}
const handleMouseMove = (e: MouseEvent) => {
const diff = e.clientX - startXRef.current;
const newWidth = Math.max(200, Math.min(600, startWidthRef.current + diff));
@@ -54,8 +63,12 @@ export const Layout: React.FC<LayoutProps> = ({
setIsResizing(false);
document.removeEventListener('mousemove', handleMouseMove);
document.removeEventListener('mouseup', handleMouseUp);
resizeMouseMoveHandlerRef.current = null;
resizeMouseUpHandlerRef.current = null;
};
resizeMouseMoveHandlerRef.current = handleMouseMove;
resizeMouseUpHandlerRef.current = handleMouseUp;
document.addEventListener('mousemove', handleMouseMove);
document.addEventListener('mouseup', handleMouseUp);
};
@@ -63,8 +76,14 @@ export const Layout: React.FC<LayoutProps> = ({
// Cleanup event listeners on unmount
useEffect(() => {
return () => {
document.removeEventListener('mousemove', () => {});
document.removeEventListener('mouseup', () => {});
if (resizeMouseMoveHandlerRef.current) {
document.removeEventListener('mousemove', resizeMouseMoveHandlerRef.current);
resizeMouseMoveHandlerRef.current = null;
}
if (resizeMouseUpHandlerRef.current) {
document.removeEventListener('mouseup', resizeMouseUpHandlerRef.current);
resizeMouseUpHandlerRef.current = null;
}
};
}, []);