diff --git a/src/app/(app)/problems/[id]/features/submissions.tsx b/src/app/(app)/problems/[id]/features/submissions.tsx
index d0a4e57..8bf0d4d 100644
--- a/src/app/(app)/problems/[id]/features/submissions.tsx
+++ b/src/app/(app)/problems/[id]/features/submissions.tsx
@@ -1,3 +1,18 @@
+"use client";
+
+import SubmissionsTable from "@/components/submissions-table";
+import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area";
+import { useProblemStore } from "@/providers/problem-store-provider";
+
export default function Submissions() {
- return
Submissions
;
+ const submissions = useProblemStore((state) => state.submissions);
+
+ return (
+
+
+
+
+
+
+ )
}
diff --git a/src/components/submissions-table.tsx b/src/components/submissions-table.tsx
new file mode 100644
index 0000000..e48e292
--- /dev/null
+++ b/src/components/submissions-table.tsx
@@ -0,0 +1,69 @@
+import {
+ Table,
+ TableBody,
+ TableCell,
+ TableHead,
+ TableHeader,
+ TableRow,
+} from "@/components/ui/table";
+import { Submission } from "@/generated/client";
+import { getStatusColorClass } from "@/lib/status";
+import { EditorLanguageIcons } from "@/config/editor-language-icons";
+import { formatDistanceToNow, isBefore, subDays, format } from "date-fns";
+
+interface SubmissionsTableProps {
+ submissions: Submission[]
+}
+
+export default function SubmissionsTable({ submissions }: SubmissionsTableProps) {
+ const sortedSubmissions = [...submissions].sort(
+ (a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()
+ )
+
+ return (
+
+
+
+ Index
+ Status
+ Language
+ Time
+ Memory
+ Submitted
+
+
+
+
+ {sortedSubmissions.map((submission, index) => {
+ const Icon = EditorLanguageIcons[submission.language];
+ const createdAt = new Date(submission.createdAt);
+ const submittedDisplay = isBefore(createdAt, subDays(new Date(), 1))
+ ? format(createdAt, "yyyy-MM-dd")
+ : formatDistanceToNow(createdAt, { addSuffix: true });
+
+ return (
+
+
+ {sortedSubmissions.length - index}
+
+
+ {submission.status}
+
+
+
+
+ {submission.executionTime}
+ {submission.memoryUsage}
+
+ {submittedDisplay}
+
+
+ );
+ })}
+
+
+ )
+}