import { Tooltip, TooltipContent, TooltipTrigger, TooltipPortal, TooltipArrow, } from '@janhq/uikit' import { motion as m } from 'framer-motion' import { useAtom, useSetAtom } from 'jotai' import { MessageCircleIcon, SettingsIcon, LayoutGridIcon, SquareCodeIcon, } from 'lucide-react' import { twMerge } from 'tailwind-merge' import LogoMark from '@/containers/Brand/Logo/Mark' import { MainViewState } from '@/constants/screens' import { mainViewStateAtom } from '@/helpers/atoms/App.atom' import { editMessageAtom } from '@/helpers/atoms/ChatMessage.atom' import { serverEnabledAtom } from '@/helpers/atoms/LocalServer.atom' export default function RibbonNav() { const [mainViewState, setMainViewState] = useAtom(mainViewStateAtom) const [serverEnabled] = useAtom(serverEnabledAtom) const setEditMessage = useSetAtom(editMessageAtom) const onMenuClick = (state: MainViewState) => { if (mainViewState === state) return if (serverEnabled && state === MainViewState.Thread) return setMainViewState(state) setEditMessage('') } const primaryMenus = [ { name: 'Thread', icon: ( ), state: MainViewState.Thread, }, { name: 'Hub', icon: ( ), state: MainViewState.Hub, }, ] const secondaryMenus = [ { name: 'Local API Server', icon: ( ), state: MainViewState.LocalServer, }, { name: 'Settings', icon: ( ), state: MainViewState.Settings, }, ] return (
{primaryMenus .filter((primary) => !!primary) .map((primary, i) => { const isActive = mainViewState === primary.state return (
onMenuClick(primary.state)} > {primary.icon}
{isActive && ( )}
{serverEnabled && primary.state === MainViewState.Thread ? ( Threads are disabled while the server is running ) : ( {primary.name} )}
) })}
{secondaryMenus .filter((secondary) => !!secondary) .map((secondary, i) => { const isActive = mainViewState === secondary.state return (
onMenuClick(secondary.state)} > {secondary.icon}
{isActive && ( )}
{secondary.name}
) })}
) }