import type { JSX } from "react" import { getTranslations } from "next-intl/server" import { requirePermission } from "@/shared/lib/auth-guard" import { Permissions } from "@/shared/types/permissions" import { getParam, type SearchParams } from "@/shared/lib/search-params" import { getElectiveCourses } from "@/modules/elective/data-access" import { ElectiveCourseList } from "@/modules/elective/components/elective-course-list" import { ElectivePageLayout } from "@/modules/elective/components/elective-page-layout" import type { ElectiveCourseStatus } from "@/modules/elective/types" export const dynamic = "force-dynamic" const VALID_STATUSES: ReadonlySet = new Set([ "draft", "open", "closed", "cancelled", ]) function parseStatus(v?: string): ElectiveCourseStatus | undefined { return v && VALID_STATUSES.has(v) ? (v as ElectiveCourseStatus) : undefined } export default async function TeacherElectivePage({ searchParams, }: { searchParams: Promise }): Promise { const t = await getTranslations("elective") const ctx = await requirePermission(Permissions.ELECTIVE_READ) const teacherId = ctx.userId const sp = await searchParams const statusParam = getParam(sp, "status") const status = parseStatus(statusParam) const courses = teacherId ? await getElectiveCourses({ teacherId, status }) : [] const header = (

{t("title.teacher")}

{t("description.teacher")}

) return ( ) }