import React, { useState, useRef, useEffect } from 'react'; import { Sidebar } from './Sidebar'; import { UploadStatus } from './UploadStatus'; import type { Collection } from '../types'; interface LayoutProps { children: React.ReactNode; collections: Collection[]; selectedCollectionId: string | null | undefined; onSelectCollection: (id: string | null | undefined) => void; onCreateCollection: (name: string) => void; onEditCollection: (id: string, name: string) => void; onDeleteCollection: (id: string) => void; onDrop?: (e: React.DragEvent, collectionId: string | null) => void; } export const Layout: React.FC = ({ children, collections, selectedCollectionId, onSelectCollection, onCreateCollection, onEditCollection, onDeleteCollection, onDrop }) => { const [sidebarWidth, setSidebarWidth] = useState(260); const [isResizing, setIsResizing] = useState(false); const sidebarRef = useRef(null); const startXRef = useRef(0); const startWidthRef = useRef(0); // Handle mouse down on resize handle const handleMouseDown = (e: React.MouseEvent) => { e.preventDefault(); setIsResizing(true); startXRef.current = e.clientX; startWidthRef.current = sidebarWidth; const handleMouseMove = (e: MouseEvent) => { const diff = e.clientX - startXRef.current; const newWidth = Math.max(200, Math.min(600, startWidthRef.current + diff)); setSidebarWidth(newWidth); }; const handleMouseUp = () => { setIsResizing(false); document.removeEventListener('mousemove', handleMouseMove); document.removeEventListener('mouseup', handleMouseUp); }; document.addEventListener('mousemove', handleMouseMove); document.addEventListener('mouseup', handleMouseUp); }; // Cleanup event listeners on unmount useEffect(() => { return () => { document.removeEventListener('mousemove', () => {}); document.removeEventListener('mouseup', () => {}); }; }, []); return (
{children}
); };