import React, { useCallback, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' import { useAppContext } from '@/context/app-context' import { RiEqualizer2Line, RiMenuLine, } from '@remixicon/react' import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger, } from '@/app/components/base/portal-to-follow-elem' import AppIcon from '../base/app-icon' import Divider from '../base/divider' import AppInfo from './app-info' import NavLink from './navLink' import { useStore as useAppStore } from '@/app/components/app/store' import type { NavIcon } from './navLink' import cn from '@/utils/classnames' 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 === 'advanced-chat' ? t('app.types.advanced') : appDetail.mode === 'agent-chat' ? t('app.types.agent') : appDetail.mode === 'chat' ? t('app.types.chatbot') : appDetail.mode === 'completion' ? t('app.types.completion') : t('app.types.workflow')}
) } export default AppSidebarDropdown