From c540a04c367980afc7eeba90af8c0d81a3c644aa Mon Sep 17 00:00:00 2001 From: cfngc4594 Date: Mon, 14 Apr 2025 17:35:31 +0800 Subject: [PATCH] feat(problemset): add status icons for problem set page, support completed and attempted states --- src/app/(app)/problemset/page.tsx | 52 +++++++++++-------------------- 1 file changed, 18 insertions(+), 34 deletions(-) diff --git a/src/app/(app)/problemset/page.tsx b/src/app/(app)/problemset/page.tsx index ddff828..ee79df3 100644 --- a/src/app/(app)/problemset/page.tsx +++ b/src/app/(app)/problemset/page.tsx @@ -9,38 +9,28 @@ import { } from "@/components/ui/table"; import prisma from "@/lib/prisma"; import { auth } from "@/lib/auth"; -import { CircleCheckBigIcon } from "lucide-react"; import { getDifficultyColorClass } from "@/lib/utils"; +import { CircleCheckBigIcon, CircleDotIcon } from "lucide-react"; export default async function ProblemsetPage() { const problems = await prisma.problem.findMany({ where: { published: true }, - orderBy: { - id: "asc", - }, - select: { - id: true, - title: true, - difficulty: true, - }, + orderBy: { id: "asc" }, + select: { id: true, title: true, difficulty: true }, }); const session = await auth(); + const userId = session?.user?.id; - let completedProblems: string[] = []; - if (session?.user) { - const submissions = await prisma.submission.findMany({ - where: { - userId: session.user.id, - status: "AC", - }, - select: { - problemId: true, - }, - }); + const submissions = userId + ? await prisma.submission.findMany({ + where: { userId }, + select: { problemId: true, status: true }, + }) + : []; - completedProblems = submissions.map(sub => sub.problemId); - } + const completedProblems = new Set(submissions.filter(s => s.status === "AC").map(s => s.problemId)); + const attemptedProblems = new Set(submissions.filter(s => s.status !== "AC").map(s => s.problemId)); return ( @@ -51,7 +41,6 @@ export default async function ProblemsetPage() { Difficulty - {problems.map((problem, index) => ( - {session?.user && completedProblems.includes(problem.id) && ( - - + {index + 1}. {problem.title}