import React, { useContext, useEffect, useState } from 'react'; import { Link, useNavigate } from 'react-router-dom'; import { UserContext } from '../context/User'; import { useSetTheme, useTheme } from '../context/Theme'; import { useTranslation } from 'react-i18next'; import { API, getLogo, getSystemName, isMobile, showSuccess } from '../helpers'; import '../index.css'; import fireworks from 'react-fireworks'; import { IconClose, IconHelpCircle, IconHome, IconHomeStroked, IconIndentLeft, IconKey, IconMenu, IconNoteMoneyStroked, IconPriceTag, IconUser, IconLanguage } from '@douyinfe/semi-icons'; import { Avatar, Button, Dropdown, Layout, Nav, Switch } from '@douyinfe/semi-ui'; import { stringToColor } from '../helpers/render'; import Text from '@douyinfe/semi-ui/lib/es/typography/text'; import { StyleContext } from '../context/Style/index.js'; // HeaderBar Buttons let headerButtons = [ { text: '关于', itemKey: 'about', to: '/about', icon: , }, ]; if (localStorage.getItem('chat_link')) { headerButtons.splice(1, 0, { name: '聊天', to: '/chat', icon: 'comments', }); } const HeaderBar = () => { const { t, i18n } = useTranslation(); const [userState, userDispatch] = useContext(UserContext); const [styleState, styleDispatch] = useContext(StyleContext); let navigate = useNavigate(); const [currentLang, setCurrentLang] = useState(i18n.language); const systemName = getSystemName(); const logo = getLogo(); const currentDate = new Date(); // enable fireworks on new year(1.1 and 2.9-2.24) const isNewYear = (currentDate.getMonth() === 0 && currentDate.getDate() === 1); let buttons = [ { text: t('首页'), itemKey: 'home', to: '/', }, { text: t('控制台'), itemKey: 'detail', to: '/', }, { text: t('定价'), itemKey: 'pricing', to: '/pricing', }, { text: t('关于'), itemKey: 'about', to: '/about', }, ]; async function logout() { await API.get('/api/user/logout'); showSuccess(t('注销成功!')); userDispatch({ type: 'logout' }); localStorage.removeItem('user'); navigate('/login'); } const handleNewYearClick = () => { fireworks.init('root', {}); fireworks.start(); setTimeout(() => { fireworks.stop(); setTimeout(() => { window.location.reload(); }, 10000); }, 3000); }; const theme = useTheme(); const setTheme = useSetTheme(); useEffect(() => { if (theme === 'dark') { document.body.setAttribute('theme-mode', 'dark'); } if (isNewYear) { console.log('Happy New Year!'); } }, []); useEffect(() => { const handleLanguageChanged = (lng) => { setCurrentLang(lng); }; i18n.on('languageChanged', handleLanguageChanged); return () => { i18n.off('languageChanged', handleLanguageChanged); }; }, [i18n]); const handleLanguageChange = (lang) => { i18n.changeLanguage(lang); }; return ( <> { const routerMap = { about: '/about', login: '/login', register: '/register', pricing: '/pricing', detail: '/detail', home: '/', }; return ( { if (props.itemKey === 'home') { styleDispatch({ type: 'SET_INNER_PADDING', payload: false }); // styleDispatch({ type: 'SET_SIDER', payload: false }); } else { styleDispatch({ type: 'SET_INNER_PADDING', payload: true }); // styleDispatch({ type: 'SET_SIDER', payload: true }); } }}> {itemElement} ); }} selectedKeys={[]} // items={headerButtons} onSelect={(key) => {}} header={styleState.isMobile?{ logo: ( <> { !styleState.showSider ? } theme="light" aria-label={t('展开侧边栏')} onClick={ () => styleDispatch({ type: 'SET_SIDER', payload: true }) } />: } theme="light" aria-label={t('闭侧边栏')} onClick={ () => styleDispatch({ type: 'SET_SIDER', payload: false }) } /> } > ), }:{ logo: ( ), text: systemName, }} items={buttons} footer={ <> {isNewYear && ( // happy new year Happy New Year!!! } > )} {/* } /> */} <> { setTheme(checked); }} /> > handleLanguageChange('zh')} type={currentLang === 'zh' ? 'primary' : 'tertiary'} > 中文 handleLanguageChange('en')} type={currentLang === 'en' ? 'primary' : 'tertiary'} > English } > } /> {userState.user ? ( <> {t('退出')} } > {userState.user.username[0]} {styleState.isMobile?null:{userState.user.username}} > ) : ( <> } /> { !styleState.isMobile && ( } /> ) } > )} > } > > ); }; export default HeaderBar;