diff --git a/components/result-dashboard.tsx b/components/result-dashboard.tsx index 6e89d31..7208d34 100644 --- a/components/result-dashboard.tsx +++ b/components/result-dashboard.tsx @@ -1,11 +1,15 @@ +"use client"; + +import { useState } from "react"; import { ComparisonTable } from "./comparison-table"; import { ComparisonChart } from "./comparison-chart"; import { BreakdownBars } from "./breakdown-bars"; import { TopList } from "./top-list"; import { InsightsList } from "./insights-list"; import { ScoreCard } from "./score-card"; +import { Button } from "./ui/button"; import { Card, CardContent } from "./ui/card"; -import { Trophy } from "lucide-react"; +import { Check, Copy, Trophy } from "lucide-react"; import { UserResult } from "@/types/user-result"; type Props = { @@ -14,6 +18,7 @@ type Props = { }; export function ResultDashboard({ user1, user2 }: Props) { + const [copied, setCopied] = useState(false); const winner = user1.finalScore === user2.finalScore ? null @@ -71,6 +76,31 @@ export function ResultDashboard({ user1, user2 }: Props) { Math.max(user1.prScore, user2.prScore) - Math.min(user1.prScore, user2.prScore); + const handleCopy = async () => { + const summary = { + comparison: { + [user1.username]: { + finalScore: user1.finalScore, + repoScore: user1.repoScore, + prScore: user1.prScore, + contributionScore: user1.contributionScore, + }, + [user2.username]: { + finalScore: user2.finalScore, + repoScore: user2.repoScore, + prScore: user2.prScore, + contributionScore: user2.contributionScore, + }, + winner: winner?.username ?? "tie", + leadBy: winner ? `${diffPct}%` : "0%", + insights: getInsights(), + }, + }; + await navigator.clipboard.writeText(JSON.stringify(summary, null, 2)); + setCopied(true); + setTimeout(() => setCopied(false), 2000); + }; + return (