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.

index.tsx 2.5KB

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