diff --git a/src/app/release-notes/[version]/page.tsx b/src/app/release-notes/[version]/page.tsx index 67418c8..12dc3ba 100644 --- a/src/app/release-notes/[version]/page.tsx +++ b/src/app/release-notes/[version]/page.tsx @@ -1,11 +1,56 @@ +import React, { useState, useCallback } from 'react'; import Footer from "@/components/footer"; import { Navigation } from "@/components/navigation"; import ReleaseNote from "@/components/release-note"; import { Button } from "@/components/ui/button"; import { releaseNotes } from "@/lib/release-notes"; import Link from "next/link"; -import { redirect } from "next/navigation"; +import { redirect, useParams } from "next/navigation"; +import { ChevronLeft, ChevronRight, ChevronDown } from 'lucide-react'; + +const VersionList = React.memo(({ currentVersion }: { currentVersion: string }) => { + const [isOpen, setIsOpen] = useState(false); + + const toggleDropdown = useCallback(() => { + setIsOpen(prev => !prev); + }, []); + + return ( +
+
+ + {isOpen && ( +
+ {releaseNotes.map((note) => ( + + {note.version} + + ))} +
+ )} +
+
+ ); +}); + +VersionList.displayName = 'VersionList'; export async function generateStaticParams() { return [{version: "latest"}, ...releaseNotes.map((note) => ({ version: note.version }))]; @@ -18,7 +63,9 @@ export default function ReleaseNotePage({ params }: { params: { version: string return redirect(`/release-notes/${releaseNotes[0].version}`); } - const releaseNote = releaseNotes.find((note) => note.version === version); + const currentIndex = releaseNotes.findIndex((note) => note.version === version); + const releaseNote = releaseNotes[currentIndex]; + if (!releaseNote) { return (
@@ -33,9 +80,39 @@ export default function ReleaseNotePage({ params }: { params: { version: string
); } + + const prevNote = releaseNotes[currentIndex + 1]; + const nextNote = releaseNotes[currentIndex - 1]; + return ( -
- +
+ + +
+ +
+ +
+ {prevNote && ( + + + + )} + {nextNote && ( + + + + )} +
+ +
); }