diff --git a/src/app/(app)/problems/[id]/@Details/page.tsx b/src/app/(app)/problems/[id]/@Details/page.tsx index 25f1765..37f9348 100644 --- a/src/app/(app)/problems/[id]/@Details/page.tsx +++ b/src/app/(app)/problems/[id]/@Details/page.tsx @@ -1,20 +1,30 @@ "use client"; import { cn } from "@/lib/utils"; -import { useEffect } from "react"; +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; @@ -24,7 +34,19 @@ export default function DetailsPage() { api.removePanel(detailsPanel); } } - }, [api, problemId, submission]) + }, [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; @@ -43,7 +65,7 @@ export default function DetailsPage() { if (detailsPanel) { api.removePanel(detailsPanel); } - } + }; return (
@@ -70,9 +92,7 @@ export default function DetailsPage() { getStatusColorClass(submission.status) )} > - - {statusMap.get(submission.status)?.message} - + {statusMap.get(submission.status)?.message}
Submitted on @@ -84,7 +104,74 @@ export default function DetailsPage() {
-
+
+ {lastFailedTestcase && ( +
+
+ + + +

Input

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

Expected Output

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

Your Output

+ +
+ )} +
+ )} + + {(submission.status === "CE" || + submission.status === "SE") && ( + + )} +
Code @@ -95,7 +182,8 @@ export default function DetailsPage() { { editorLanguageConfigs.find( - (config) => config.language === submission.language + (config) => + config.language === submission.language )?.label }