'use client' import type { DropdownMenuContentProps } from '@langgenius/dify-ui/dropdown-menu' import type { FC } from 'react' import type { SiteInfo } from '@/models/share' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLinkItem, DropdownMenuSeparator, DropdownMenuTrigger, } from '@langgenius/dify-ui/dropdown-menu' import { IconButton } from '@langgenius/dify-ui/icon-button' import * as React from 'react' import { useState } from 'react' import { useTranslation } from 'react-i18next' import ThemeSwitcher from '@/app/components/base/theme-switcher' import { useWebAppStore } from '@/context/web-app-context' import { AccessMode } from '@/models/access-control' import { usePathname, useRouter } from '@/next/navigation' import { resolveWebAppAddress } from '@/service/webapp-address' import { webAppLogout } from '@/service/webapp-auth' import InfoModal from './info-modal' type Props = Readonly< Pick & { data?: SiteInfo hideLogout?: boolean } > const MenuDropdown: FC = ({ data, placement, hideLogout }) => { const webAppAccessMode = useWebAppStore((s) => s.webAppAccessMode) const router = useRouter() const pathname = usePathname() const { t } = useTranslation() const handleLogout = async () => { await webAppLogout(resolveWebAppAddress()) router.replace(`/webapp-signin?redirect_url=${pathname}`) } const [show, setShow] = useState(false) const handleOpenInfoModal = () => { queueMicrotask(() => { setShow(true) }) } return ( <> $['operation.more'], { ns: 'common' })} size="lg" className="data-popup-open:bg-state-base-hover" > } />
{t(($) => $['theme.theme'], { ns: 'common' })}
{data?.privacy_policy && ( {t(($) => $['chat.privacyPolicyMiddle'], { ns: 'share' })} )} {t(($) => $['userProfile.about'], { ns: 'common' })} {!( hideLogout || webAppAccessMode === AccessMode.EXTERNAL_MEMBERS || webAppAccessMode === AccessMode.PUBLIC ) && ( {t(($) => $['userProfile.logout'], { ns: 'common' })} )}
{show && ( { setShow(false) }} data={data} /> )} ) } export default React.memo(MenuDropdown)