import React, { useState } from "react"; import { motion } from "framer-motion"; import { FolderOpen, ChevronRight, Clock } from "lucide-react"; import { Card, CardContent } from "@/components/ui/card"; import { Pagination } from "@/components/ui/pagination"; import { cn } from "@/lib/utils"; import { formatUnixTimestamp } from "@/lib/date-utils"; import type { Project } from "@/lib/api"; interface ProjectListProps { /** * Array of projects to display */ projects: Project[]; /** * Callback when a project is clicked */ onProjectClick: (project: Project) => void; /** * Optional className for styling */ className?: string; } const ITEMS_PER_PAGE = 5; /** * ProjectList component - Displays a paginated list of projects with hover animations * * @example * console.log('Selected:', project)} * /> */ export const ProjectList: React.FC = ({ projects, onProjectClick, className, }) => { const [currentPage, setCurrentPage] = useState(1); // Calculate pagination const totalPages = Math.ceil(projects.length / ITEMS_PER_PAGE); const startIndex = (currentPage - 1) * ITEMS_PER_PAGE; const endIndex = startIndex + ITEMS_PER_PAGE; const currentProjects = projects.slice(startIndex, endIndex); // Reset to page 1 if projects change React.useEffect(() => { setCurrentPage(1); }, [projects.length]); return (
{currentProjects.map((project, index) => ( onProjectClick(project)} >

{project.path}

{project.sessions.length} session{project.sessions.length !== 1 ? 's' : ''}
{formatUnixTimestamp(project.created_at)}
))}
); };