import type { JSX } from "react" import { Suspense } from "react" import Link from "next/link" import { getTranslations } from "next-intl/server" 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 { ExamFilters } from "@/modules/exams/components/exam-filters" import { getExams } from "@/modules/exams/data-access" import { getAuthContext } from "@/shared/lib/auth-guard" import { getParam, type SearchParams } from "@/shared/lib/search-params" import { FileText, PlusCircle } from "lucide-react" async function ExamsResults({ searchParams }: { searchParams: Promise }): Promise { const params = await searchParams const { dataScope } = await getAuthContext() const t = await getTranslations("examHomework") const q = getParam(params, "q") const status = getParam(params, "status") const difficulty = getParam(params, "difficulty") const exams = await getExams({ q, status, difficulty, scope: dataScope, }) 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 (
{t("exam.list.showing")} {counts.total} {t("exam.list.examsUnit")} {t("exam.status.draft")} {counts.draft} {t("exam.status.published")} {counts.published} {t("exam.status.archived")} {counts.archived}
{exams.length === 0 ? ( ) : ( )}
) } function ExamsResultsFallback() { return (
{Array.from({ length: 6 }).map((_, idx) => ( ))}
) } export default async function AllExamsPage({ searchParams, }: { searchParams: Promise }): Promise { return (
}> }>
) }