Stage 2: student lesson viewer, Kinescope player, PDF files, prev/next nav, My Courses dashboard
This commit is contained in:
@@ -2,6 +2,7 @@ import { prisma } from "@/lib/prisma";
|
||||
import { notFound } from "next/navigation";
|
||||
import Link from "next/link";
|
||||
import { LessonEditor } from "@/components/admin/lesson-editor";
|
||||
import { LessonFilesManager } from "@/components/admin/lesson-files-manager";
|
||||
|
||||
interface Props {
|
||||
params: Promise<{ courseId: string; moduleId: string; lessonId: string }>;
|
||||
@@ -13,6 +14,7 @@ export default async function LessonEditorPage({ params }: Props) {
|
||||
const lesson = await prisma.lesson.findUnique({
|
||||
where: { id: lessonId },
|
||||
include: {
|
||||
files: { orderBy: { createdAt: "asc" } },
|
||||
module: {
|
||||
include: { course: { select: { title: true } } },
|
||||
},
|
||||
@@ -23,31 +25,38 @@ export default async function LessonEditorPage({ params }: Props) {
|
||||
|
||||
return (
|
||||
<div className="p-8 max-w-4xl">
|
||||
<nav className="text-sm text-slate-400 mb-6">
|
||||
<Link href="/admin/courses" className="hover:text-slate-600">Курсы</Link>
|
||||
<nav className="text-xs mb-6 uppercase tracking-widest" style={{ color: "var(--muted-foreground)" }}>
|
||||
<Link href="/admin/courses" className="hover:underline">Курсы</Link>
|
||||
<span className="mx-2">/</span>
|
||||
<Link href={`/admin/courses/${courseId}`} className="hover:text-slate-600">
|
||||
{lesson.module.course.title}
|
||||
</Link>
|
||||
<Link href={`/admin/courses/${courseId}`} className="hover:underline">{lesson.module.course.title}</Link>
|
||||
<span className="mx-2">/</span>
|
||||
<Link href={`/admin/courses/${courseId}/modules/${moduleId}`} className="hover:text-slate-600">
|
||||
{lesson.module.title}
|
||||
</Link>
|
||||
<Link href={`/admin/courses/${courseId}/modules/${moduleId}`} className="hover:underline">{lesson.module.title}</Link>
|
||||
<span className="mx-2">/</span>
|
||||
<span className="text-slate-700">{lesson.title}</span>
|
||||
<span style={{ color: "var(--foreground)" }}>{lesson.title}</span>
|
||||
</nav>
|
||||
|
||||
<LessonEditor
|
||||
lesson={{
|
||||
id: lesson.id,
|
||||
title: lesson.title,
|
||||
kinescopeId: lesson.kinescopeId ?? "",
|
||||
content: lesson.content as object ?? {},
|
||||
published: lesson.published,
|
||||
}}
|
||||
courseId={courseId}
|
||||
moduleId={moduleId}
|
||||
/>
|
||||
{/* Lesson editor */}
|
||||
<div className="card-aubade p-6 mb-6">
|
||||
<LessonEditor
|
||||
lesson={{
|
||||
id: lesson.id,
|
||||
title: lesson.title,
|
||||
kinescopeId: lesson.kinescopeId ?? "",
|
||||
content: (lesson.content as object) ?? {},
|
||||
published: lesson.published,
|
||||
}}
|
||||
courseId={courseId}
|
||||
moduleId={moduleId}
|
||||
/>
|
||||
</div>
|
||||
|
||||
{/* Files section */}
|
||||
<div className="card-aubade p-6">
|
||||
<p className="text-xs font-bold uppercase tracking-widest mb-4" style={{ color: "var(--muted-foreground)" }}>
|
||||
Файлы и материалы
|
||||
</p>
|
||||
<LessonFilesManager lessonId={lessonId} initialFiles={lesson.files} />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user