import React, { useEffect, useMemo, useState } from 'react'; import { Flex, Box, type BoxProps, Button, useDisclosure } from '@chakra-ui/react'; import { feConfigs } from '@/store/static'; import { useTranslation } from 'next-i18next'; import { useRouter } from 'next/router'; import Avatar from '@/components/Avatar'; import CommunityModal from '@/components/CommunityModal'; import { useGlobalStore } from '@/store/global'; import MyIcon from '@/components/Icon'; const Navbar = () => { const router = useRouter(); const { t } = useTranslation(); const [scrollTop, setScrollTop] = useState(0); const { isOpen: isOpenCommunity, onOpen: onOpenCommunity, onClose: onCloseCommunity } = useDisclosure(); const { isOpen: isOpenMenu, onOpen: onOpenMenu, onClose: onCloseMenu } = useDisclosure(); const { isPc } = useGlobalStore(); const menuList = useMemo( () => [ // { label: t('home.Features'), key: 'features', onClick: () => {} }, { label: t('home.Community'), key: 'community', onClick: () => { onOpenCommunity(); } }, { label: t('home.Docs'), key: 'docs', onClick: () => { window.open('https://doc.fastgpt.run/docs/intro'); } } ], [onOpenCommunity, t] ); const bgOpacity = useMemo(() => { const rate = scrollTop / 120; if (rate > 0.7) { return 0.7; } return rate; }, [scrollTop]); const menuStyles: BoxProps = { mr: 4, px: 5, py: 2, cursor: 'pointer', transition: '0.5s', borderRadius: 'xl', fontSize: 'lg', _hover: { bg: 'myGray.100' } }; useEffect(() => { const scrollListen = (e: any) => { setScrollTop(e?.target?.scrollTop); }; const dom = document.getElementById('home'); if (!dom) return; dom.addEventListener('scroll', scrollListen); return () => { dom.removeEventListener('scroll', scrollListen); }; }, []); return ( {feConfigs?.systemTitle} {isPc ? ( <> {menuList.map((item) => ( {item.label} ))} | router.push('/login')}> {t('home.Login')} ) : ( (isOpenMenu ? onCloseMenu() : onOpenMenu())} /> )} {isOpenMenu && !isPc && ( {menuList.map((item) => ( {item.label} ))} router.push('/login')}> {t('home.Login')} )} {isOpenCommunity && } ); }; export default Navbar;