import type { JSX } from "react" import { Suspense } from "react" import { ClipboardList } from "lucide-react" import { QuestionDataTable } from "@/modules/questions/components/question-data-table" import { columns } from "@/modules/questions/components/question-columns" import { QuestionFilters } from "@/modules/questions/components/question-filters" import { CreateQuestionButton } from "@/modules/questions/components/create-question-button" import { EmptyState } from "@/shared/components/ui/empty-state" import { Skeleton } from "@/shared/components/ui/skeleton" import { getQuestions } from "@/modules/questions/data-access" import { getParam, type SearchParams } from "@/shared/lib/search-params" import { requirePermission } from "@/shared/lib/auth-guard" import { Permissions } from "@/shared/types/permissions" import type { QuestionType } from "@/modules/questions/types" export const dynamic = "force-dynamic" const VALID_QUESTION_TYPES: ReadonlySet = new Set([ "single_choice", "multiple_choice", "text", "judgment", "composite", ]) function parseQuestionType(v?: string): QuestionType | undefined { return v && VALID_QUESTION_TYPES.has(v) ? (v as QuestionType) : undefined } async function QuestionBankResults({ searchParams }: { searchParams: Promise }): Promise { await requirePermission(Permissions.QUESTION_READ) const params = await searchParams const q = getParam(params, "q") const type = getParam(params, "type") const difficulty = getParam(params, "difficulty") const knowledgePointId = getParam(params, "kp") const questionType = parseQuestionType(type) const difficultyNum = difficulty && difficulty !== "all" ? Number(difficulty) : undefined const safeDifficulty = difficultyNum !== undefined && Number.isFinite(difficultyNum) ? difficultyNum : undefined const { data: questions } = await getQuestions({ q: q || undefined, type: questionType, difficulty: safeDifficulty, knowledgePointId: knowledgePointId && knowledgePointId !== "all" ? knowledgePointId : undefined, pageSize: 200, }) const hasFilters = Boolean( q || (type && type !== "all") || (difficulty && difficulty !== "all") || (knowledgePointId && knowledgePointId !== "all") ) if (questions.length === 0) { return ( ) } return (
) } function QuestionBankResultsFallback() { return (
{Array.from({ length: 6 }).map((_, idx) => ( ))}
) } export default async function QuestionBankPage({ searchParams, }: { searchParams: Promise }): Promise { return (

Question Bank

Manage your question repository for exams and assignments.

}> }>
) }