'use client' import type { Placement } 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 * as React from 'react' import { useState } from 'react' import { useTranslation } from 'react-i18next' import ActionButton from '@/app/components/base/action-button' 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 { webAppLogout } from '@/service/webapp-auth' import InfoModal from './info-modal' type Props = Readonly<{ data?: SiteInfo placement?: Placement hideLogout?: boolean }> const MenuDropdown: FC = ({ data, placement, hideLogout }) => { const webAppAccessMode = useWebAppStore((s) => s.webAppAccessMode) const router = useRouter() const pathname = usePathname() const { t } = useTranslation() const shareCode = useWebAppStore((s) => s.shareCode) const handleLogout = async () => { await webAppLogout(shareCode!) router.replace(`/webapp-signin?redirect_url=${pathname}`) } const [show, setShow] = useState(false) const handleOpenInfoModal = () => { queueMicrotask(() => { setShow(true) }) } return ( <> } aria-label={t(($) => $['operation.more'], { ns: 'common' })} />
{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)