diff --git a/components/result-dashboard.tsx b/components/result-dashboard.tsx
index 6e89d31..0ed4f3f 100644
--- a/components/result-dashboard.tsx
+++ b/components/result-dashboard.tsx
@@ -1,3 +1,6 @@
+"use client";
+
+import { useState } from "react";
import { ComparisonTable } from "./comparison-table";
import { ComparisonChart } from "./comparison-chart";
import { BreakdownBars } from "./breakdown-bars";
@@ -5,7 +8,7 @@ import { TopList } from "./top-list";
import { InsightsList } from "./insights-list";
import { ScoreCard } from "./score-card";
import { Card, CardContent } from "./ui/card";
-import { Trophy } from "lucide-react";
+import { Trophy, Copy, Check } from "lucide-react";
import { UserResult } from "@/types/user-result";
type Props = {
@@ -14,12 +17,39 @@ type Props = {
};
export function ResultDashboard({ user1, user2 }: Props) {
+ const [copied, setCopied] = useState(false);
+
const winner =
user1.finalScore === user2.finalScore
? null
: user1.finalScore > user2.finalScore
? user1
: user2;
+
+ const handleCopy = async () => {
+ const summary = {
+ winner: winner?.username ?? "Tie",
+ users: [
+ {
+ username: user1.username,
+ finalScore: user1.finalScore,
+ repoScore: user1.repoScore,
+ prScore: user1.prScore,
+ contributionScore: user1.contributionScore,
+ },
+ {
+ username: user2.username,
+ finalScore: user2.finalScore,
+ repoScore: user2.repoScore,
+ prScore: user2.prScore,
+ contributionScore: user2.contributionScore,
+ },
+ ],
+ };
+ await navigator.clipboard.writeText(JSON.stringify(summary, null, 2));
+ setCopied(true);
+ setTimeout(() => setCopied(false), 2000);
+ };
const loser = winner === user1 ? user2 : user1;
const diffPct = winner
? Math.round(
@@ -128,6 +158,25 @@ export function ResultDashboard({ user1, user2 }: Props) {