import { Tooltip, useMediaQuery } from '@janhq/joi' import { useAtom, useAtomValue, useSetAtom } from 'jotai' import { MessageCircleIcon, SettingsIcon, LayoutGridIcon, SquareCodeIcon, } from 'lucide-react' import { twMerge } from 'tailwind-merge' import { MainViewState } from '@/constants/screens' import { mainViewStateAtom, showLeftPanelAtom } from '@/helpers/atoms/App.atom' import { editMessageAtom } from '@/helpers/atoms/ChatMessage.atom' import { serverEnabledAtom } from '@/helpers/atoms/LocalServer.atom' import { isDownloadALocalModelAtom } from '@/helpers/atoms/Model.atom' import { reduceTransparentAtom, selectedSettingAtom, } from '@/helpers/atoms/Setting.atom' import { threadsAtom } from '@/helpers/atoms/Thread.atom' export default function RibbonPanel() { const [mainViewState, setMainViewState] = useAtom(mainViewStateAtom) const [serverEnabled] = useAtom(serverEnabledAtom) const setEditMessage = useSetAtom(editMessageAtom) const showLeftPanel = useAtomValue(showLeftPanelAtom) const matches = useMediaQuery('(max-width: 880px)') const reduceTransparent = useAtomValue(reduceTransparentAtom) const setSelectedSetting = useSetAtom(selectedSettingAtom) const threads = useAtomValue(threadsAtom) const isDownloadALocalModel = useAtomValue(isDownloadALocalModelAtom) const onMenuClick = (state: MainViewState) => { if (mainViewState === state) return if (serverEnabled && state === MainViewState.Thread) return if (state === MainViewState.Settings) setSelectedSetting('My Models') setMainViewState(state) setEditMessage('') } const RibbonNavMenus = [ { name: 'Thread', icon: ( ), state: MainViewState.Thread, }, { name: 'Hub', icon: , state: MainViewState.Hub, }, { name: 'Local API Server', icon: , state: MainViewState.LocalServer, }, { name: 'Settings', icon: , state: MainViewState.Settings, }, ] return (
{RibbonNavMenus.filter((menu) => !!menu).map((menu, i) => { const isActive = mainViewState === menu.state return (
onMenuClick(menu.state)} >
{menu.icon}
} content={ serverEnabled && menu.state === MainViewState.Thread ? 'Threads are disabled while the server is running' : menu.name } />
) })} ) }