import { IconFontFill } from '@/components/icon-font'; import { RAGFlowAvatar } from '@/components/ragflow-avatar'; import { useTheme } from '@/components/theme-provider'; import { Button } from '@/components/ui/button'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { Segmented, SegmentedValue } from '@/components/ui/segmented'; import { LanguageList, LanguageMap, ThemeEnum } from '@/constants/common'; import { useChangeLanguage } from '@/hooks/logic-hooks'; import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks'; import { useNavigateWithFromState } from '@/hooks/route-hook'; import { useFetchUserInfo } from '@/hooks/user-setting-hooks'; import { Routes } from '@/routes'; import { camelCase } from 'lodash'; import { ChevronDown, CircleHelp, Cpu, File, House, Library, MessageSquareText, Moon, Search, Sun, } from 'lucide-react'; import React, { useCallback, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { useLocation } from 'umi'; import { BellButton } from './bell-button'; const handleDocHelpCLick = () => { window.open('https://ragflow.io/docs/dev/category/guides', 'target'); }; export function Header() { const { t } = useTranslation(); const { pathname } = useLocation(); const navigate = useNavigateWithFromState(); const { navigateToOldProfile } = useNavigatePage(); const changeLanguage = useChangeLanguage(); const { setTheme, theme } = useTheme(); const { data: { language = 'English', avatar, nickname }, } = useFetchUserInfo(); const handleItemClick = (key: string) => () => { changeLanguage(key); }; const items = LanguageList.map((x) => ({ key: x, label: {LanguageMap[x as keyof typeof LanguageMap]}, })); const onThemeClick = React.useCallback(() => { setTheme(theme === ThemeEnum.Dark ? ThemeEnum.Light : ThemeEnum.Dark); }, [setTheme, theme]); const tagsData = useMemo( () => [ { path: Routes.Root, name: t('header.Root'), icon: House }, { path: Routes.Datasets, name: t('header.dataset'), icon: Library }, { path: Routes.Chats, name: t('header.chat'), icon: MessageSquareText }, { path: Routes.Searches, name: t('header.search'), icon: Search }, { path: Routes.Agents, name: t('header.flow'), icon: Cpu }, { path: Routes.Files, name: t('header.fileManager'), icon: File }, ], [t], ); const options = useMemo(() => { return tagsData.map((tag) => { const HeaderIcon = tag.icon; return { label: tag.path === Routes.Root ? ( ) : ( {tag.name} ), value: tag.path, }; }); }, [tagsData]); // const currentPath = useMemo(() => { // return ( // tagsData.find((x) => pathname.startsWith(x.path))?.path || Routes.Root // ); // }, [pathname, tagsData]); const handleChange = (path: SegmentedValue) => { navigate(path as Routes); }; const handleLogoClick = useCallback(() => { navigate(Routes.Root); }, [navigate]); return ( {t(`common.${camelCase(language)}`)} {items.map((x) => ( {x.label} ))} {theme === 'light' ? : } {/* Temporarily hidden */} {/* Pro */} ); }