import { useCallback } from 'react'; import { useNavigate } from '@tanstack/react-router'; import { cn } from '@/lib/utils'; import { useAppStore } from '@/store/app-store'; import type { Project } from '@/lib/electron'; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuSeparator, ContextMenuTrigger, } from '@/components/ui/context-menu'; import { Star, Settings, Trash2 } from 'lucide-react'; interface PinnedProjectsProps { pinnedProjects: Project[]; currentProject: Project | null; } export function PinnedProjects({ pinnedProjects, currentProject }: PinnedProjectsProps) { const navigate = useNavigate(); const { setCurrentProject, unpinProject, moveProjectToTrash } = useAppStore(); const handleProjectClick = useCallback( (project: Project) => { setCurrentProject(project); navigate({ to: '/board' }); }, [setCurrentProject, navigate] ); const handleUnpin = useCallback( (projectId: string) => { unpinProject(projectId); }, [unpinProject] ); const handleProjectSettings = useCallback( (project: Project) => { setCurrentProject(project); navigate({ to: '/settings' }); }, [setCurrentProject, navigate] ); const handleRemoveProject = useCallback( (projectId: string) => { moveProjectToTrash(projectId); }, [moveProjectToTrash] ); if (pinnedProjects.length === 0) { return null; } return (
{pinnedProjects.map((project) => { const isActive = currentProject?.id === project.id; // TODO: Get running agent count from store const runningCount = 0; return (
{project.name}
{project.path}
{runningCount > 0 && (
{runningCount} agent{runningCount > 1 ? 's' : ''} running
)}
handleProjectClick(project)}>Open handleUnpin(project.id)}> Unpin from bar handleProjectSettings(project)}> Project Settings handleRemoveProject(project.id)} className="text-destructive focus:text-destructive" > Remove Project
); })} {/* Separator after pinned projects */}
); }