'use client'; import { AdjustmentsHorizontalIcon, InboxStackIcon } from '@heroicons/react/24/outline'; import classNames from 'classnames'; import type { FC, ReactNode } from 'react'; import { useCallback, useContext } from 'react'; import { DeviceContext } from '@/context/DeviceContext'; import { MenuContext, MenuKey } from '@/context/MenuContext'; import { useDarkMode } from '@/hooks/useDarkMode'; import { sleep } from '@/utils/sleep'; import { LoginButton } from './buttons/LoginButton'; import { MenuEntryButton } from './buttons/MenuEntryButton'; import { History } from './History'; import { Settings } from './Settings'; /** * 菜单栏 */ export const Menu = () => { const { isWeChat } = useContext(DeviceContext)!; const { isMenuShow } = useContext(MenuContext)!; useDarkMode(); return ( <>
); }; /** * 菜单栏蒙层 */ const MenuMask: FC<{ children: ReactNode }> = ({ children }) => { const { windowHeight, isMobile } = useContext(DeviceContext)!; const { isMenuShow, setIsMenuShow } = useContext(MenuContext)!; const onTouchMask = useCallback(async () => { setIsMenuShow(false); // 由于 transform 的 fixed 定位失效问题,这里需要手动设置和取消 form-container 的 top await sleep(300); const formContainer = document.getElementById('form-container'); if (formContainer) { formContainer.style.top = 'unset'; } }, [setIsMenuShow]); return ( <>
{children}
); }; const IconMap = { [MenuKey.InboxStack]: InboxStackIcon, [MenuKey.AdjustmentsHorizontal]: AdjustmentsHorizontalIcon, }; /** * 菜单栏 tabs */ const MenuTabs = () => { const { currentMenu, setCurrentMenu } = useContext(MenuContext)!; return ( {[MenuKey.InboxStack, MenuKey.AdjustmentsHorizontal].map((key) => { const Icon = IconMap[key]; return ( ); })}
); }; /** * 菜单栏 tabs 内容 */ const MenuTabsContent = () => { const { currentMenu } = useContext(MenuContext)!; return (
{currentMenu === MenuKey.InboxStack && } {currentMenu === MenuKey.AdjustmentsHorizontal && }
); }; /** * 菜单栏底部 */ const MenuFooter = () => { return (
由{' '} ChatGPT Next {' '} 驱动
); };