import { ReactComponent as FileIcon } from '@/assets/svg/file-management.svg'; import { ReactComponent as GraphIcon } from '@/assets/svg/graph.svg'; import { ReactComponent as KnowledgeBaseIcon } from '@/assets/svg/knowledge-base.svg'; import { useTranslate } from '@/hooks/common-hooks'; import { useFetchAppConf } from '@/hooks/logic-hooks'; import { useNavigateWithFromState } from '@/hooks/route-hook'; import { MessageOutlined, SearchOutlined } from '@ant-design/icons'; import { Flex, Layout, Radio, Space, theme } from 'antd'; import { useCallback, useMemo } from 'react'; import { useLocation } from 'umi'; import Toolbar from '../right-toolbar'; import styles from './index.less'; const { Header } = Layout; const RagHeader = () => { const { token: { colorBgContainer }, } = theme.useToken(); const navigate = useNavigateWithFromState(); const { pathname } = useLocation(); const { t } = useTranslate('header'); const appConf = useFetchAppConf(); const tagsData = useMemo( () => [ { path: '/knowledge', name: t('knowledgeBase'), icon: KnowledgeBaseIcon }, { path: '/chat', name: t('chat'), icon: MessageOutlined }, { path: '/search', name: t('search'), icon: SearchOutlined }, { path: '/flow', name: t('flow'), icon: GraphIcon }, { path: '/file', name: t('fileManager'), icon: FileIcon }, ], [t], ); const currentPath = useMemo(() => { return ( tagsData.find((x) => pathname.startsWith(x.path))?.name || 'knowledge' ); }, [pathname, tagsData]); const handleChange = (path: string) => { navigate(path); }; const handleLogoClick = useCallback(() => { navigate('/'); }, [navigate]); return ( <Header style={{ padding: '0 16px', background: colorBgContainer, display: 'flex', justifyContent: 'space-between', alignItems: 'center', height: '72px', }} > <Space size={12} onClick={handleLogoClick} className={styles.logoWrapper}> <img src="/logo.svg" alt="" className={styles.appIcon} /> <span className={styles.appName}>{appConf.appName}</span> </Space> <Space size={[0, 8]} wrap> <Radio.Group defaultValue="a" buttonStyle="solid" className={styles.radioGroup} value={currentPath} > {tagsData.map((item) => ( <Radio.Button value={item.name} onClick={() => handleChange(item.path)} key={item.name} > <Flex align="center" gap={8}> <item.icon className={styles.radioButtonIcon} stroke={item.name === currentPath ? 'black' : 'white'} ></item.icon> {item.name} </Flex> </Radio.Button> ))} </Radio.Group> </Space> <Toolbar></Toolbar> </Header> ); }; export default RagHeader;