import { Suspense } from "react" import Link from "next/link" import { Button } from "@/shared/components/ui/button" import { Badge } from "@/shared/components/ui/badge" import { EmptyState } from "@/shared/components/ui/empty-state" import { Skeleton } from "@/shared/components/ui/skeleton" import { ExamDataTable } from "@/modules/exams/components/exam-data-table" import { examColumns } from "@/modules/exams/components/exam-columns" import { ExamFilters } from "@/modules/exams/components/exam-filters" import { getExams } from "@/modules/exams/data-access" import { FileText, PlusCircle } from "lucide-react" type SearchParams = { [key: string]: string | string[] | undefined } const getParam = (params: SearchParams, key: string) => { const v = params[key] return Array.isArray(v) ? v[0] : v } async function ExamsResults({ searchParams }: { searchParams: Promise }) { const params = await searchParams const q = getParam(params, "q") const status = getParam(params, "status") const difficulty = getParam(params, "difficulty") const exams = await getExams({ q, status, difficulty, }) const hasFilters = Boolean(q || (status && status !== "all") || (difficulty && difficulty !== "all")) const counts = exams.reduce( (acc, e) => { acc.total += 1 if (e.status === "draft") acc.draft += 1 if (e.status === "published") acc.published += 1 if (e.status === "archived") acc.archived += 1 return acc }, { total: 0, draft: 0, published: 0, archived: 0 } ) return (
Showing {counts.total} exams Draft {counts.draft} Published {counts.published} Archived {counts.archived}
{exams.length === 0 ? ( ) : ( )}
) } function ExamsResultsFallback() { return (
{Array.from({ length: 6 }).map((_, idx) => ( ))}
) } export default async function AllExamsPage({ searchParams, }: { searchParams: Promise }) { return (

All Exams

View and manage all your exams.

}> }>
) }