You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { ReactComponent as StarIon } from '@/assets/svg/chat-star.svg';
  2. import { ReactComponent as KnowledgeBaseIcon } from '@/assets/svg/knowledge-base.svg';
  3. import { ReactComponent as Logo } from '@/assets/svg/logo.svg';
  4. import { Layout, Radio, Space, theme } from 'antd';
  5. import Toolbar from '../right-toolbar';
  6. import styles from './index.less';
  7. import { useMemo } from 'react';
  8. import { useLocation, useNavigate } from 'umi';
  9. const { Header } = Layout;
  10. const RagHeader = () => {
  11. const {
  12. token: { colorBgContainer },
  13. } = theme.useToken();
  14. const navigate = useNavigate();
  15. const { pathname } = useLocation();
  16. const tagsData = useMemo(
  17. () => [
  18. { path: '/knowledge', name: 'Knowledge Base', icon: KnowledgeBaseIcon },
  19. { path: '/chat', name: 'Chat', icon: StarIon },
  20. // { path: '/file', name: 'File Management', icon: FileIcon },
  21. ],
  22. [],
  23. );
  24. const currentPath = useMemo(() => {
  25. return (
  26. tagsData.find((x) => pathname.startsWith(x.path))?.name || 'knowledge'
  27. );
  28. }, [pathname, tagsData]);
  29. const handleChange = (path: string) => {
  30. navigate(path);
  31. };
  32. return (
  33. <Header
  34. style={{
  35. padding: '0 16px',
  36. background: colorBgContainer,
  37. display: 'flex',
  38. justifyContent: 'space-between',
  39. alignItems: 'center',
  40. height: '72px',
  41. }}
  42. >
  43. <Space size={12}>
  44. <Logo className={styles.appIcon}></Logo>
  45. <label className={styles.appName}>RagFlow</label>
  46. </Space>
  47. <Space size={[0, 8]} wrap>
  48. <Radio.Group
  49. defaultValue="a"
  50. buttonStyle="solid"
  51. className={styles.radioGroup}
  52. value={currentPath}
  53. >
  54. {tagsData.map((item) => (
  55. <Radio.Button
  56. value={item.name}
  57. onClick={() => handleChange(item.path)}
  58. key={item.name}
  59. >
  60. <Space>
  61. <item.icon
  62. className={styles.radioButtonIcon}
  63. stroke={item.name === currentPath ? 'black' : 'white'}
  64. ></item.icon>
  65. {item.name}
  66. </Space>
  67. </Radio.Button>
  68. ))}
  69. </Radio.Group>
  70. </Space>
  71. <Toolbar></Toolbar>
  72. </Header>
  73. );
  74. };
  75. export default RagHeader;