import type { NavIcon } from './navLink' import { RiEqualizer2Line, RiMenuLine, } from '@remixicon/react' import * as React from 'react' import { useCallback, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' import { useStore as useAppStore } from '@/app/components/app/store' import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger, } from '@/app/components/base/portal-to-follow-elem' import { useAppContext } from '@/context/app-context' import { AppModeEnum } from '@/types/app' import { cn } from '@/utils/classnames' import AppIcon from '../base/app-icon' import Divider from '../base/divider' import AppInfo from './app-info' import NavLink from './navLink' type Props = { navigation: Array<{ name: string href: string icon: NavIcon selectedIcon: NavIcon }> } const AppSidebarDropdown = ({ navigation }: Props) => { const { t } = useTranslation() const { isCurrentWorkspaceEditor } = useAppContext() const appDetail = useAppStore(state => state.appDetail) const [detailExpand, setDetailExpand] = useState(false) const [open, doSetOpen] = useState(false) const openRef = useRef(open) const setOpen = useCallback((v: boolean) => { doSetOpen(v) openRef.current = v }, [doSetOpen]) const handleTrigger = useCallback(() => { setOpen(!openRef.current) }, [setOpen]) if (!appDetail) return null return ( <>
{ setDetailExpand(true) setOpen(false) }} >
{appDetail.name}
{appDetail.mode === AppModeEnum.ADVANCED_CHAT ? t('types.advanced', { ns: 'app' }) : appDetail.mode === AppModeEnum.AGENT_CHAT ? t('types.agent', { ns: 'app' }) : appDetail.mode === AppModeEnum.CHAT ? t('types.chatbot', { ns: 'app' }) : appDetail.mode === AppModeEnum.COMPLETION ? t('types.completion', { ns: 'app' }) : t('types.workflow', { ns: 'app' })}
) } export default AppSidebarDropdown