import type { Metadata } from "next" import type { JSX } from "react" import { Suspense } from "react" import { Calendar } from "lucide-react" import { getTranslations } from "next-intl/server" import { requirePermission } from "@/shared/lib/auth-guard" import { Permissions } from "@/shared/types/permissions" import { getClassSchedule, getTeacherClasses } from "@/modules/classes/data-access" import { ScheduleFilters } from "@/modules/classes/components/schedule-filters" import { ScheduleView } from "@/modules/classes/components/schedule-view" import { ClassErrorBoundary } from "@/modules/classes/components/class-error-boundary" import { EmptyState } from "@/shared/components/ui/empty-state" import { Skeleton } from "@/shared/components/ui/skeleton" import { getParam, type SearchParams } from "@/shared/lib/search-params" export const dynamic = "force-dynamic" export async function generateMetadata(): Promise { const t = await getTranslations("classes") return { title: `${t("metadata.schedule")} - Next_Edu`, description: t("metadata.schedule"), } } async function ScheduleResults({ searchParams }: { searchParams: Promise }): Promise { const params = await searchParams const classId = getParam(params, "classId") const t = await getTranslations("classes") const classes = await getTeacherClasses() const schedule = await getClassSchedule({ classId: classId && classId !== "all" ? classId : undefined, }) const hasFilters = Boolean(classId && classId !== "all") if (schedule.length === 0) { return ( // arbitrary-value: empty state fixed size ) } return } function ScheduleResultsFallback() { return (
{Array.from({ length: 6 }).map((_, idx) => (
))}
) } export default async function SchedulePage({ searchParams }: { searchParams: Promise }): Promise { await requirePermission(Permissions.CLASS_READ) const classes = await getTeacherClasses() return (
}> }>
) }