Add course management improvements: tree view, module descriptions, lesson toggles

- SortableModules: add description textarea in edit form, show description in row
- CourseDetailPage: fetch lessons per module, add CourseTree overview section
- ModulePage: fetch sibling modules, pass as otherModules to SortableLessons

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-08 13:31:30 +05:00
parent d0ba4bf909
commit f0024c4243
3 changed files with 80 additions and 30 deletions
@@ -10,13 +10,20 @@ interface Props {
export default async function ModulePage({ params }: Props) {
const { courseId, moduleId } = await params;
const module = await prisma.module.findUnique({
where: { id: moduleId },
include: {
course: { select: { title: true } },
lessons: { orderBy: { order: "asc" } },
},
});
const [module, allModules] = await Promise.all([
prisma.module.findUnique({
where: { id: moduleId },
include: {
course: { select: { title: true } },
lessons: { orderBy: { order: "asc" } },
},
}),
prisma.module.findMany({
where: { courseId, NOT: { id: moduleId } },
select: { id: true, title: true },
orderBy: { order: "asc" },
}),
]);
if (!module || module.courseId !== courseId) notFound();
@@ -41,7 +48,12 @@ export default async function ModulePage({ params }: Props) {
<p className="text-xs font-bold uppercase tracking-widest mb-5" style={{ color: "var(--muted-foreground)" }}>
Уроки модуля
</p>
<SortableLessons courseId={courseId} moduleId={moduleId} lessons={module.lessons} />
<SortableLessons
courseId={courseId}
moduleId={moduleId}
lessons={module.lessons}
otherModules={allModules}
/>
</section>
</div>
);