import { DrawerTOC } from "@/components/reader-page/DrawerTOC"; import { MorePostLinks } from "@/components/reader-page/MorePostLinks"; import { PostComments } from "@/components/reader-page/PostComments"; import { PostCover } from "@/components/reader-page/PostCover"; import { PostRender } from "@/components/reader-page/PostRender"; import { ShareButtons } from "@/components/reader-page/ShareButtons"; import { Separator } from "@/components/ui/separator"; import { Toaster } from "@/components/ui/toaster"; import { Footer } from "@/components/utils/Footer"; import { ContentContainer, Page } from "@/components/utils/Layout"; import { NavBar } from "@/components/utils/NavBar"; import { SEO } from "@/components/utils/SEO"; import { Config } from "@/data/config"; import { getPostFileContent, sortedPosts } from "@/lib/post-process"; import { makeTOCTree } from "@/lib/toc"; import type { TPostFrontmatter, TPostListItem, TPostTOCItem } from "@/types/docs.type"; import type { GetStaticPaths, GetStaticProps } from "next"; import { MDXRemote, type MDXRemoteSerializeResult } from "next-mdx-remote"; import { serialize } from "next-mdx-remote/serialize"; import { renderToString } from "react-dom/server"; import rehypeAutolinkHeadings from "rehype-autolink-headings"; import rehypeHighlight from "rehype-highlight"; import rehypeKatex from "rehype-katex"; import rehypePresetMinify from "rehype-preset-minify"; import rehypeRaw from "rehype-raw"; import rehypeSlug from "rehype-slug"; import externalLinks from "remark-external-links"; import remarkGfm from "remark-gfm"; import remarkMath from "remark-math"; import { titleCase } from "title-case"; type ReaderPageProps = { compiledSource: MDXRemoteSerializeResult; tocList: TPostTOCItem[]; frontMatter: TPostFrontmatter; postId: string; nextPostListItem: TPostListItem | null; prevPostListItem: TPostListItem | null; }; const ReaderPage = (props: ReaderPageProps) => { // Only the TOC length reaches 3 can be displayed. // In order to avoid large blank spaces that ruin the visual perception const isTOCLongEnough = props.tocList.length > 2; // const handleLeftSwipe = useSwipeable({ // onSwipedLeft: () => isTOCLongEnough && setIsTOCOpen(true), // delta: 150, // }); return (
{props.frontMatter.coverURL && } {Config.Giscus?.enabled && } {isTOCLongEnough && }