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 && (