import React from "react"; import { ScrollArea } from "@/components/ui/scroll-area"; import { ResizableHandle, ResizablePanel, ResizablePanelGroup, } from "@/components/ui/resizable"; import { unified } from "unified"; import remarkParse from "remark-parse"; import remarkRehype from "remark-rehype"; import rehypeStringify from "rehype-stringify"; import rehypePrettyCode from "rehype-pretty-code"; import markdownStyles from "@/styles/markdown-styles.module.css"; import { tutorialData } from "@/constants/tutorial-data"; import { notFound } from "next/navigation"; import { buttonVariants } from "@/components/ui/button"; import Link from "next/link"; import { cn } from "@/lib/utils"; import EditorWindow from "@/components/task/editor-window"; import { LANGUAGE_VERSIONS } from "@/constants/language-options"; async function main(tutorialCode: string) { const file = await unified() .use(remarkParse) .use(remarkRehype) .use(rehypePrettyCode, {}) .use(rehypeStringify) .process(tutorialCode); return file; } const languages = Object.keys(LANGUAGE_VERSIONS); const Page = async ({ params }: { params: { taskId: string[] } }) => { if (!params.taskId[0] || !languages.includes(params.taskId[0])) { notFound(); } const langTutorial = tutorialData.find( (t) => t.language === params.taskId[0], )!; const tutorial = langTutorial.tutorial.find( (t) => t.id === (Number(params.taskId[1]) || 1), ); const tutorialIndex = langTutorial.tutorial.findIndex( (t) => t.id === (Number(params.taskId[1]) || 1), ); if (!tutorial || tutorialIndex === -1) { notFound(); } const code = await main(tutorial?.content || ""); return ( <>
{langTutorial?.tutorial[tutorialIndex - 1] && ( Prev )}
{langTutorial?.tutorial[tutorialIndex + 1] && ( Next )}
{langTutorial?.tutorial[tutorialIndex - 1] && ( Prev )}
{langTutorial?.tutorial[tutorialIndex + 1] && ( Next )}
); }; export default Page;