"use client" import { useEffect, useCallback, memo } from 'react'; import { useAtom } from 'jotai'; import { GitCommitHorizontal, GitCommitVertical } from 'lucide-react'; import { cn } from './utils'; import ChatUserList from './ChatUserList'; import ChatDetail from './ChatDetail'; import { ChatUser } from './types'; import { leftOpenAtom, isMobileAtom, anyMobileSidebarOpenAtom, selectedUserAtom, chatDetailOpenAtom, toggleLeftSidebarAtom, goBackToListAtom, mobileSidebarPriorityAtom } from './store'; const SidebarLeft = () => { // State management with Jotai const [leftOpen, setLeftOpen] = useAtom(leftOpenAtom); const [isMobile, setIsMobile] = useAtom(isMobileAtom); const [anyMobileSidebarOpen] = useAtom(anyMobileSidebarOpenAtom); const [selectedUser] = useAtom(selectedUserAtom); const [chatDetailOpen] = useAtom(chatDetailOpenAtom); const [, toggleLeftSidebar] = useAtom(toggleLeftSidebarAtom); const [, goBackToList] = useAtom(goBackToListAtom); const [, manageMobileSidebars] = useAtom(mobileSidebarPriorityAtom); // Detect mobile screen size useEffect(() => { const handleResize = () => { const wasMobile = isMobile; const newIsMobile = typeof window !== 'undefined' && window.innerWidth < 768; // Set the new mobile state setIsMobile(newIsMobile); // Apply mobile sidebar priority rules manageMobileSidebars(wasMobile); }; // Set initial value handleResize(); // Add event listener with passive option for better performance if (typeof window !== 'undefined') { window.addEventListener('resize', handleResize, { passive: true }); } // Clean up on unmount return () => { if (typeof window !== 'undefined') { window.removeEventListener('resize', handleResize); } }; }, [isMobile, setIsMobile, manageMobileSidebars]); // Handler for toggling sidebar const handleToggleSidebar = useCallback(() => { if (isMobile) { toggleLeftSidebar(); } else { setLeftOpen(!leftOpen); } }, [isMobile, leftOpen, setLeftOpen, toggleLeftSidebar]); // Handler for selecting a user const handleSelectUser = useCallback((user: ChatUser) => { // Selection is handled by the ChatUserList component }, []); // Handler for going back to the user list const handleBackToList = useCallback(() => { goBackToList(); }, [goBackToList]); // If any mobile sidebar is open but not this one, don't render if (isMobile && anyMobileSidebarOpen && !leftOpen) { return null; } // Desktop view with chat detail open if (!isMobile && chatDetailOpen && selectedUser && leftOpen) { return (