"use client"; import React, { useState, useEffect, useRef } from "react"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Label } from "@/components/ui/label"; import { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuLabel, ContextMenuSeparator, ContextMenuItem, ContextMenuGroup } from "@/components/ui/context-menu"; import { Copy, Check, Users, Calendar, Clock } from "lucide-react"; import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area"; import Image from 'next/image'; import { stripHtml } from "@/lib/utils"; import { HtmlDisplay } from "@/components/html-display"; interface Question { id: string; label: string; type: string; imageUrl: string | null; } interface SubmissionDetailClientProps { submission: { id: string; userName: string | null; userDiscordId: string | null; submittedAt: Date; editHistory?: { editedAt: string; oldAnswers: Record }[] | null; }; questions: Question[]; answers: Record; } export default function SubmissionDetailClient({ submission, questions, answers, }: SubmissionDetailClientProps) { const [copiedId, setCopiedId] = useState(null); const handleCopy = (text: string, id: string) => { if (!text) return; navigator.clipboard.writeText(text); setCopiedId(id); setTimeout(() => setCopiedId(null), 2000); }; const userLabel = submission.userName ? `${submission.userName} (${submission.userDiscordId || "N/A"})` : submission.userDiscordId || "Anonymous"; const editHistory = Array.isArray(submission.editHistory) ? submission.editHistory : []; return (
{/* Submission Metadata Card */} Submission Info Details about this respondent.
Respondent: {userLabel}
Initial Submission: {new Date(submission.submittedAt).toLocaleString("en-US", { timeZone: "Asia/Bangkok", hour12: false })}
{editHistory.length > 0 && (
Edit History:
    {editHistory.map((edit, idx) => (
  • Edited at {new Date(edit.editedAt).toLocaleString("en-US", { timeZone: "Asia/Bangkok", hour12: false })}
  • ))}
)}
{/* Answers List */}
{questions.map((q) => { const ansValue = answers[q.id] || ""; const wasEdited = editHistory.some( (edit) => (edit.oldAnswers[q.id] ?? "") !== ansValue ); const qAnswerHistory = editHistory.map((edit) => ({ editedAt: edit.editedAt, answer: edit.oldAnswers[q.id] ?? "", })); return (
{wasEdited && (

edited

)}
{q.imageUrl && (
Question image
)}
{ansValue ? (
{wasEdited && ( Current Answer: )} {ansValue}
) : ( No response provided )}
{wasEdited && ( History {stripHtml(q.label)} Previous Answers: {qAnswerHistory.length === 0 ? ( No edit history for this question. ) : ( {qAnswerHistory.map((entry, idx) => (
{new Date(entry.editedAt).toLocaleString("en-US", { timeZone: "Asia/Bangkok", hour12: false })}
{entry.answer || No response}
))}
)}
)}
); })}
); }