"use client"; import { cn } from "@/lib/utils"; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from "@/components/ui/accordion"; import { useEffect, useState } from "react"; import { ArrowLeftIcon } from "lucide-react"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import { useProblem } from "@/hooks/use-problem"; import MdxPreview from "@/components/mdx-preview"; import { useDockviewStore } from "@/stores/dockview"; import { Separator } from "@/components/ui/separator"; import { getStatusColorClass, statusMap } from "@/lib/status"; import type { TestcaseResultWithTestcase } from "@/types/prisma"; import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area"; import { formatDistanceToNow, isBefore, subDays, format } from "date-fns"; export default function DetailsPage() { const { api, submission } = useDockviewStore(); const { editorLanguageConfigs, problemId } = useProblem(); const [lastFailedTestcase, setLastFailedTestcase] = useState(null); useEffect(() => { if (!api || !problemId || !submission?.id) return; if (problemId !== submission.problemId) { const detailsPanel = api.getPanel("Details"); if (detailsPanel) { api.removePanel(detailsPanel); } } }, [api, problemId, submission]); useEffect(() => { if (!submission?.id || !submission.testcaseResults) return; const failedTestcases = submission.testcaseResults.filter( (result) => (submission.status === "WA" && !result.isCorrect) || (submission.status === "TLE" && !result.isCorrect) || (submission.status === "MLE" && !result.isCorrect) || (submission.status === "RE" && !result.isCorrect) ); setLastFailedTestcase(failedTestcases[0]); }, [submission]); if (!api || !problemId || !submission?.id) return null; const createdAt = new Date(submission.createdAt); const submittedDisplay = isBefore(createdAt, subDays(new Date(), 1)) ? format(createdAt, "yyyy-MM-dd") : formatDistanceToNow(createdAt, { addSuffix: true }); const source = `\`\`\`${submission?.language}\n${submission?.code}\n\`\`\``; const handleClick = () => { if (!api) return; const submissionsPanel = api.getPanel("Submissions"); submissionsPanel?.api.setActive(); const detailsPanel = api.getPanel("Details"); if (detailsPanel) { api.removePanel(detailsPanel); } }; return (

{statusMap.get(submission.status)?.message}

Submitted on {submittedDisplay}
{lastFailedTestcase && (

Input

{lastFailedTestcase.testcase.data.map((field) => (
))}

Expected Output

{submission.status === "WA" && (

Your Output

)}
)} {(submission.status === "CE" || submission.status === "SE") && ( )}
Code { editorLanguageConfigs.find( (config) => config.language === submission.language )?.label }
); }