import React, { useEffect } from 'react'; import { FileText, Clock, Home, Puzzle, History } from 'lucide-react'; import { useNavigate } from 'react-router-dom'; import { SidebarContent, SidebarFooter, SidebarMenu, SidebarMenuItem, SidebarMenuButton, SidebarGroup, SidebarGroupContent, SidebarSeparator, } from '../ui/sidebar'; import { ChatSmart, Gear } from '../icons'; import { ViewOptions, View } from '../../App'; interface SidebarProps { onSelectSession: (sessionId: string) => void; refreshTrigger?: number; children?: React.ReactNode; setIsGoosehintsModalOpen?: (isOpen: boolean) => void; setView?: (view: View, viewOptions?: ViewOptions) => void; currentPath?: string; } // Main Sidebar Component const AppSidebar: React.FC = ({ currentPath }) => { const navigate = useNavigate(); useEffect(() => { // Trigger animation after a small delay const timer = setTimeout(() => { // setIsVisible(true); }, 100); // eslint-disable-next-line no-undef return () => clearTimeout(timer); }, []); // Helper function to check if a path is active const isActivePath = (path: string) => { return currentPath === path; }; return ( <> {/* Menu */} {/* Navigation Group */}
{ navigate('/'); }} isActive={isActivePath('/')} tooltip="Go back to the main chat screen" className="w-full justify-start px-3 rounded-lg h-fit hover:bg-background-medium/50 transition-all duration-200 data-[active=true]:bg-background-medium" > Home
{/* Chat & Configuration Group */}
navigate('/pair')} isActive={isActivePath('/pair')} tooltip="Start pairing with Goose" className="w-full justify-start px-3 rounded-lg h-fit hover:bg-background-medium/50 transition-all duration-200 data-[active=true]:bg-background-medium" > Chat
navigate('/sessions')} isActive={isActivePath('/sessions')} tooltip="View your session history" className="w-full justify-start px-3 rounded-lg h-fit hover:bg-background-medium/50 transition-all duration-200 data-[active=true]:bg-background-medium" > History
{/* Content Group */} {/*
*/} {/* */} {/* navigate('/projects')}*/} {/* isActive={isActivePath('/projects')}*/} {/* tooltip="Manage your projects"*/} {/* className="w-full justify-start px-3 rounded-lg h-fit hover:bg-background-medium/50 transition-all duration-200 data-[active=true]:bg-background-medium"*/} {/* >*/} {/* */} {/* Projects*/} {/* */} {/* */} {/*
*/}
navigate('/recipes')} isActive={isActivePath('/recipes')} tooltip="Browse your saved recipes" className="w-full justify-start px-3 rounded-lg h-fit hover:bg-background-medium/50 transition-all duration-200 data-[active=true]:bg-background-medium" > Recipes
navigate('/schedules')} isActive={isActivePath('/schedules')} tooltip="Manage scheduled runs" className="w-full justify-start px-3 rounded-lg h-fit hover:bg-background-medium/50 transition-all duration-200 data-[active=true]:bg-background-medium" > Scheduler
navigate('/extensions')} isActive={isActivePath('/extensions')} tooltip="Manage your extensions" className="w-full justify-start px-3 rounded-lg h-fit hover:bg-background-medium/50 transition-all duration-200 data-[active=true]:bg-background-medium" > Extensions
{/* Settings Group */}
navigate('/settings')} isActive={isActivePath('/settings')} tooltip="Configure Goose settings" className="w-full justify-start px-3 rounded-lg h-fit hover:bg-background-medium/50 transition-all duration-200 data-[active=true]:bg-background-medium" > Settings
); }; export default AppSidebar;