| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- 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 { MouseEventHandler, useCallback, useMemo } from 'react';
- import { useLocation } from 'umi';
- import Toolbar from '../right-toolbar';
-
- import { useTheme } from '@/components/theme-provider';
- 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 { theme: themeRag } = useTheme();
- 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: '/agent-list', 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 = useCallback(
- (path: string): MouseEventHandler =>
- (e) => {
- e.preventDefault();
- navigate(path);
- },
- [navigate],
- );
-
- const handleLogoClick = useCallback(() => {
- navigate('/');
- }, [navigate]);
-
- return (
- <Header
- style={{
- padding: '0 16px',
- background: colorBgContainer,
- display: 'flex',
- justifyContent: 'space-between',
- alignItems: 'center',
- height: '72px',
- }}
- >
- <a href={window.location.origin}>
- <Space
- size={12}
- onClick={handleLogoClick}
- className={styles.logoWrapper}
- >
- <img src="/logo.svg" alt="" className={styles.appIcon} />
- <span className={styles.appName}>{appConf.appName}</span>
- </Space>
- </a>
- <Space size={[0, 8]} wrap>
- <Radio.Group
- defaultValue="a"
- buttonStyle="solid"
- className={
- themeRag === 'dark' ? styles.radioGroupDark : styles.radioGroup
- }
- value={currentPath}
- >
- {tagsData.map((item, index) => (
- <Radio.Button
- className={`${themeRag === 'dark' ? 'dark' : 'light'} ${index === 0 ? 'first' : ''} ${index === tagsData.length - 1 ? 'last' : ''}`}
- value={item.name}
- key={item.name}
- >
- <a href={item.path}>
- <Flex
- align="center"
- gap={8}
- onClick={handleChange(item.path)}
- className="cursor-pointer"
- >
- <item.icon
- className={styles.radioButtonIcon}
- stroke={item.name === currentPath ? 'black' : 'white'}
- ></item.icon>
- {item.name}
- </Flex>
- </a>
- </Radio.Button>
- ))}
- </Radio.Group>
- </Space>
- <Toolbar></Toolbar>
- </Header>
- );
- };
-
- export default RagHeader;
|