import CommonHead from '@/components/CommonHead' import { useState, createContext, useContext, useEffect } from 'react' import Footer from './components/Footer' import InfoCard from './components/InfoCard' import RevolverMaps from './components/RevolverMaps' import CONFIG_GITBOOK from './config_gitbook' import TopNavBar from './components/TopNavBar' import SearchInput from './components/SearchInput' import BottomMenuBar from './components/BottomMenuBar' import { useGlobal } from '@/lib/global' import Live2D from '@/components/Live2D' import BLOG from '@/blog.config' import BlogPostListScroll from './components/BlogPostListScroll' import ArticleInfo from './components/ArticleInfo' import Catalog from './components/Catalog' import { useRouter } from 'next/router' import Announcement from './components/Announcement' import PageNavDrawer from './components/PageNavDrawer' import FloatTocButton from './components/FloatTocButton' const ThemeGlobalMedium = createContext() /** * 基础布局 采用左右两侧布局,移动端使用顶部导航栏 * @returns {JSX.Element} * @constructor */ const LayoutBase = (props) => { const { children, meta, post, allNavPages, slotLeft, slotRight, slotTop, siteInfo } = props const [tocVisible, changeTocVisible] = useState(false) const [pageNavVisible, changePageNavVisible] = useState(false) const [filterPosts, setFilterPosts] = useState(allNavPages) const { onLoading } = useGlobal() const router = useRouter() const showTocButton = post?.toc?.length > 1 useEffect(() => { setFilterPosts(allNavPages) }, [post]) const LoadingCover =