"use client"; import Link from "next/link"; import { usePathname } from "next/navigation"; import { useState } from "react"; import { Menu, X } from "lucide-react"; import NumberFlow, { NumberFlowGroup } from "@number-flow/react"; import { AubadeDrawer, ResponsiveDialogTitle } from "@/components/shared/responsive-dialog"; import { useIsMobile } from "@/hooks/use-media-query"; interface Lesson { id: string; title: string; } interface Module { id: string; title: string; lessons: Lesson[]; } interface Course { slug: string; title: string; modules: Module[]; } function CourseNavBody({ course, completedLessonIds, pathname, onNavigate, }: { course: Course; completedLessonIds: Set; pathname: string; onNavigate: () => void; }) { const totalLessons = course.modules.reduce((s, m) => s + m.lessons.length, 0); const completedCount = course.modules .flatMap((m) => m.lessons) .filter((l) => completedLessonIds.has(l.id)).length; const progressPct = totalLessons > 0 ? Math.round((completedCount / totalLessons) * 100) : 0; return ( <> {/* Course title + progress */}
{course.title} ← Все курсы {totalLessons > 0 && (
из {totalLessons} уроков
0 ? "1px solid var(--foreground)" : "none", }} />
)}
{/* Modules and lessons */} ); } export function CourseSidebar({ course, completedLessonIds = new Set(), }: { course: Course; completedLessonIds?: Set; }) { const pathname = usePathname(); // Tablet (768–1023px): the old off-canvas panel. Phone (<768px): bottom sheet. const [open, setOpen] = useState(false); const [sheetOpen, setSheetOpen] = useState(false); const isMobile = useIsMobile(); const menuOpen = isMobile ? sheetOpen : open; return ( <> {/* Mobile hamburger */} {/* Overlay */} {open && !isMobile && (
setOpen(false)} /> )} {isMobile && ( Навигация по курсу setSheetOpen(false)} /> )} ); }