ClassLens-dev / chatkit /frontend /src /components /step2 /ParsedDataSummary.tsx
chih.yikuan
Redesign ClassLens v2: 3-step exam analysis workflow
bc45e54
Raw
History Blame Contribute Delete
1.84 kB
import { useState } from "react";
interface ParsedDataSummaryProps {
parsedData: Record<string, unknown>;
}
export function ParsedDataSummary({ parsedData }: ParsedDataSummaryProps) {
const [expanded, setExpanded] = useState(false);
const questions = parsedData.questions as { questions?: unknown[] } | undefined;
const students = parsedData.student_answers as { students?: unknown[] } | undefined;
const answers = parsedData.teacher_answers as { answers?: unknown[] } | undefined;
const qCount = questions?.questions?.length ?? 0;
const sCount = students?.students?.length ?? 0;
const aCount = answers?.answers?.length ?? 0;
return (
<div className="card p-4">
<button
onClick={() => setExpanded(!expanded)}
className="w-full flex items-center justify-between text-left"
>
<div className="flex items-center gap-4">
<h3 className="font-display text-sm font-semibold text-[var(--color-text)]">
ε·²θ§£ζžθ³‡ζ–™
</h3>
<div className="flex gap-3 text-xs">
{qCount > 0 && <span className="badge badge-success">πŸ“ {qCount} 鑌</span>}
{sCount > 0 && <span className="badge badge-success">πŸ‘¨β€πŸŽ“ {sCount} δ½ε­Έη”Ÿ</span>}
{aCount > 0 && <span className="badge badge-success">βœ… {aCount} η­”ζ‘ˆ</span>}
</div>
</div>
<span className="text-[var(--color-text-muted)] text-lg">
{expanded ? "β–²" : "β–Ό"}
</span>
</button>
{expanded && (
<div className="mt-4 pt-4 border-t border-[var(--color-border)] text-sm max-h-64 overflow-y-auto">
<pre className="text-[var(--color-text-muted)] whitespace-pre-wrap break-words">
{JSON.stringify(parsedData, null, 2)}
</pre>
</div>
)}
</div>
);
}