'use client' import type { MainNavItem, MainNavProps } from './types' import { cn } from '@langgenius/dify-ui/cn' import { useSuspenseQuery } from '@tanstack/react-query' import { useAtomValue } from 'jotai' import { useMemo } from 'react' import { useTranslation } from 'react-i18next' import Badge from '@/app/components/base/badge' import DifyLogo from '@/app/components/base/logo/dify-logo' import EnvNav from '@/app/components/header/env-nav' import StepByStepTourMount from '@/app/components/step-by-step-tour/mount' import { langGeniusVersionInfoAtom } from '@/context/version-state' import { isCurrentWorkspaceDatasetOperatorAtom, isCurrentWorkspaceEditorAtom, } from '@/context/workspace-state' import { isAgentV2Enabled } from '@/features/agent-v2/feature-flag' import { systemFeaturesQueryOptions } from '@/features/system-features/client' import dynamic from '@/next/dynamic' import Link from '@/next/link' import { usePathname } from '@/next/navigation' import AccountSection from './components/account-section' import HelpMenu from './components/help-menu' import MainNavLink from './components/nav-link' import { MainNavSearchButton } from './components/search-button' import { WorkspaceCard } from './components/workspace-card' import { isMainNavRouteVisible, MAIN_NAV_ROUTES } from './routes' const WebAppsSection = dynamic(() => import('./components/web-apps-section'), { ssr: false }) export function MainNav({ className }: MainNavProps) { const { t } = useTranslation() const pathname = usePathname() const langGeniusVersionInfo = useAtomValue(langGeniusVersionInfoAtom) const isCurrentWorkspaceDatasetOperator = useAtomValue(isCurrentWorkspaceDatasetOperatorAtom) const isCurrentWorkspaceEditor = useAtomValue(isCurrentWorkspaceEditorAtom) const { data: systemFeatures } = useSuspenseQuery(systemFeaturesQueryOptions()) const agentV2Enabled = isAgentV2Enabled() const showEnvTag = langGeniusVersionInfo.current_env === 'TESTING' || langGeniusVersionInfo.current_env === 'DEVELOPMENT' const canUseAppDeploy = isCurrentWorkspaceEditor && systemFeatures.enable_app_deploy const navItems = useMemo( () => MAIN_NAV_ROUTES.filter((route) => isMainNavRouteVisible(route, { agentV2Enabled, canUseAppDeploy, isCurrentWorkspaceDatasetOperator, marketplaceEnabled: systemFeatures.enable_marketplace, }), ).map((route) => ({ href: route.href, label: 'label' in route ? route.label : t(($) => $[route.labelKey], { ns: 'common' }), active: route.active, icon: route.icon, activeIcon: route.activeIcon, })), [ agentV2Enabled, canUseAppDeploy, isCurrentWorkspaceDatasetOperator, systemFeatures.enable_marketplace, t, ], ) const renderLogo = () => { const appTitle = systemFeatures.branding.enabled && systemFeatures.branding.application_title ? systemFeatures.branding.application_title : 'Dify' return ( {systemFeatures.branding.enabled && systemFeatures.branding.workspace_logo ? ( ) : ( )} ) } return ( ) }