diff --git a/apps/web/src/app/(main)/sheet/[moduleId]/page.tsx b/apps/web/src/app/(main)/sheet/[moduleId]/page.tsx index 8d1704b0..14757d39 100644 --- a/apps/web/src/app/(main)/sheet/[moduleId]/page.tsx +++ b/apps/web/src/app/(main)/sheet/[moduleId]/page.tsx @@ -17,6 +17,12 @@ export default async function SheetModulePage({ params }: PageProps) { notFound(); } + // Create module info for navigation (without docContent) + const modulesInfo = sheetModules.map((m) => ({ + id: m.id, + name: m.name, + })); + return ( <>
@@ -24,6 +30,8 @@ export default async function SheetModulePage({ params }: PageProps) {
diff --git a/apps/web/src/components/sheet/SheetModuleHeader.tsx b/apps/web/src/components/sheet/SheetModuleHeader.tsx index 87552fd4..ffb96e97 100644 --- a/apps/web/src/components/sheet/SheetModuleHeader.tsx +++ b/apps/web/src/components/sheet/SheetModuleHeader.tsx @@ -1,21 +1,51 @@ "use client"; -import { useState } from "react"; +import { useState, useMemo } from "react"; import Link from "next/link"; -import { ArrowLeft, Download, Share2, Check } from "lucide-react"; +import { ArrowLeft, ArrowRight, Download, Share2, Check } from "lucide-react"; import { Badge } from "@/components/ui/badge"; +interface ModuleInfo { + id: string; + name: string; +} + interface SheetModuleHeaderProps { moduleName: string; docContent: string; + currentModuleId?: string; + modules?: ModuleInfo[]; } export function SheetModuleHeader({ moduleName, docContent, + currentModuleId, + modules = [], }: SheetModuleHeaderProps) { const [copied, setCopied] = useState(false); + // Compute next module + const nextModule = useMemo(() => { + if (!currentModuleId || modules.length === 0) return null; + + const sortedModules = [...modules].sort((a, b) => { + const aNum = parseInt(a.id.replace("module-", "")) || 0; + const bNum = parseInt(b.id.replace("module-", "")) || 0; + return aNum - bNum; + }); + + const currentIndex = sortedModules.findIndex( + (m) => m.id === currentModuleId + ); + + if (currentIndex === -1 || currentIndex >= sortedModules.length - 1) { + return null; + } + + return sortedModules[currentIndex + 1]; + }, [currentModuleId, modules]); + const handleShare = async () => { try { await navigator.clipboard.writeText(window.location.href); @@ -110,13 +140,24 @@ export function SheetModuleHeader({ return (
- - - Back to Sheet - +
+ + + Back to Sheet + + {nextModule && ( + + Next: {nextModule.name} + + + )} +
{copied && (