diff --git a/.vscode/settings.json b/.vscode/settings.json index c94ed07..04d65c4 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,15 +1,16 @@ { "cSpell.words": [ + "alipay", "frontmatter", + "giscus", + "github", "micromessenger", + "nextjs", + "prin", "readerpage", "rehype", - "wechat", - "alipay", + "Swipeable", "vercel", - "github", - "giscus", - "nextjs", - "prin" + "wechat" ] } diff --git a/components/readerpage/DrawerTOC.tsx b/components/readerpage/DrawerTOC.tsx index 9989732..6f7da33 100644 --- a/components/readerpage/DrawerTOC.tsx +++ b/components/readerpage/DrawerTOC.tsx @@ -1,11 +1,12 @@ import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from "@/components/ui/sheet"; +import useDrawerTOCState from "@/stores/useDrawerTOCState"; import { TTOCItem } from "@/types/toc.type"; import Link from "next/link"; -import { useState } from "react"; import { FaHeading } from "react-icons/fa"; export const DrawerTOC = (props: { data: TTOCItem[] }) => { - const [isTOCOpen, setIsTOCOpen] = useState(false); + const isTOCOpen = useDrawerTOCState((state) => state.isOpen); + const setIsTOCOpen = useDrawerTOCState((state) => state.changeDrawerTOCOpen); return ( { const source = props.source; - + const setIsTOCOpen = useDrawerTOCState((state) => state.changeDrawerTOCOpen); + const handleRightSwipe = useSwipeable({ + onSwipedRight: () => { + setIsTOCOpen(true); + }, + }); return ( { className={`typesetting ${fontSourceSerifScreenCN.className} mt-0 mb-10 ${ !props.frontMatter.allowShare && "select-none" }`} + {...handleRightSwipe} > {source && ( void; +}; + +const useDrawerTOCState = create((set) => ({ + isOpen: false, + changeDrawerTOCOpen: (open) => set({ isOpen: open }), +})); + +export default useDrawerTOCState;