'use client' import type { MouseEventHandler, ReactNode } from 'react' import { Avatar } from '@langgenius/dify-ui/avatar' import { DropdownMenuGroup, DropdownMenuItem, DropdownMenuLinkItem, DropdownMenuSeparator, } from '@langgenius/dify-ui/dropdown-menu' import { StatusDot } from '@langgenius/dify-ui/status-dot' import { useSuspenseQuery } from '@tanstack/react-query' import { useTranslation } from 'react-i18next' import PremiumBadge from '@/app/components/base/premium-badge' import ThemeSwitcher from '@/app/components/base/theme-switcher' import { ACCOUNT_SETTING_TAB } from '@/app/components/header/account-setting/constants' import { IS_CLOUD_EDITION } from '@/config' import { useAppContext } from '@/context/app-context' import { useDocLink } from '@/context/i18n' import { useModalContext } from '@/context/modal-context' import { useProviderContext } from '@/context/provider-context' import { env } from '@/env' import { systemFeaturesQueryOptions } from '@/features/system-features/client' import Link from '@/next/link' import GithubStar from '../github-star' import Compliance from './compliance' import { ExternalLinkIndicator, MenuItemContent } from './menu-item-content' type AccountMenuRouteItemProps = { href: string iconClassName: string label: ReactNode trailing?: ReactNode } function AccountMenuRouteItem({ href, iconClassName, label, trailing, }: AccountMenuRouteItemProps) { return ( } > ) } type AccountMenuExternalItemProps = { href: string iconClassName: string label: ReactNode trailing?: ReactNode } function AccountMenuExternalItem({ href, iconClassName, label, trailing, }: AccountMenuExternalItemProps) { return ( ) } type AccountMenuActionItemProps = { iconClassName: string label: ReactNode onClick?: MouseEventHandler trailing?: ReactNode } function AccountMenuActionItem({ iconClassName, label, onClick, trailing, }: AccountMenuActionItemProps) { return ( ) } type AccountMenuSectionProps = { children: ReactNode } function AccountMenuSection({ children }: AccountMenuSectionProps) { return {children} } type DefaultMenuContentProps = { closeAccountDropdown: () => void onShowAbout: () => void onLogout: () => Promise } export function DefaultMenuContent({ closeAccountDropdown, onShowAbout, onLogout, }: DefaultMenuContentProps) { const { data: systemFeatures } = useSuspenseQuery(systemFeaturesQueryOptions()) const { t } = useTranslation() const docLink = useDocLink() const { userProfile, langGeniusVersionInfo, isCurrentWorkspaceOwner } = useAppContext() const { isEducationAccount } = useProviderContext() const { setShowAccountSettingModal } = useModalContext() return ( <>
{userProfile.name} {isEducationAccount && ( EDU )}
{userProfile.email}
} /> setShowAccountSettingModal({ payload: ACCOUNT_SETTING_TAB.MEMBERS })} />
{!systemFeatures.branding.enabled && ( <> } /> {IS_CLOUD_EDITION && isCurrentWorkspaceOwner && } } /> )} /> {env.NEXT_PUBLIC_SITE_ABOUT !== 'hide' && ( { onShowAbout() closeAccountDropdown() }} trailing={(
{langGeniusVersionInfo.current_version}
)} /> )}
)} } /> { void onLogout() }} /> ) }