import { useEffect, useState } from "react"; import { useParams, useNavigate } from "react-router-dom"; import { useProject } from "../hooks/useProjects"; import { getAnalysisImageUrl } from "../api/analysis"; import { AuthImage } from "../components/AuthImage"; import Card from "../components/common/Card"; import Button from "../components/common/Button"; import LoadingSpinner from "../components/common/LoadingSpinner"; export default function ComparisonView() { const { comparisonId } = useParams<{ comparisonId: string }>(); const navigate = useNavigate(); const { data: project, isLoading } = useProject(comparisonId); const [selectedIds, setSelectedIds] = useState([]); const analyses = (project?.analyses || []).filter( (a) => a.status === "completed", ); useEffect(() => { if (analyses.length >= 2 && selectedIds.length === 0) { setSelectedIds(analyses.slice(0, 2).map((a) => a.id)); } }, [analyses, selectedIds.length]); const toggleSelection = (id: string) => { setSelectedIds((prev) => prev.includes(id) ? prev.filter((i) => i !== id) : [...prev, id], ); }; if (isLoading) { return ; } if (!project) { return (

Project not found.

); } const selected = analyses.filter((a) => selectedIds.includes(a.id)); return (

Compare Analyses

{project.name} -- Side-by-side heatmap comparison

{/* Selection */}

Select analyses to compare:

{analyses.map((a) => ( ))}
{/* Side-by-side view */} {selected.length >= 2 ? (
{selected.map((analysis) => (

{analysis.name}

{analysis.model}

))}
) : (

Select at least 2 completed analyses to compare.

)} {/* Comparison table */} {selected.length >= 2 && (

Comparison Metrics

{selected.map((a) => ( ))} {selected.map((a) => ( ))} {selected.map((a) => ( ))} {selected.map((a) => ( ))}
Metric {a.name}
Model {a.model}
Status {a.status}
Date {new Date(a.created_at).toLocaleDateString()}
)}
); }