'use client' import type { FC } from 'react' import type { Placement } from '@/app/components/base/ui/placement' import * as React from 'react' import { useTranslation } from 'react-i18next' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from '@/app/components/base/ui/dropdown-menu' import { useGlobalPublicStore } from '@/context/global-public-context' import { cn } from '@/utils/classnames' import { PluginSource } from '../types' type Props = { source: PluginSource onInfo: () => void onCheckVersion: () => void onRemove: () => void detailUrl: string placement?: Placement sideOffset?: number alignOffset?: number popupClassName?: string } const OperationDropdown: FC = ({ source, detailUrl, onInfo, onCheckVersion, onRemove, placement = 'bottom-end', sideOffset = 4, alignOffset = 0, popupClassName, }) => { const { t } = useTranslation() const [open, setOpen] = React.useState(false) const { enable_marketplace } = useGlobalPublicStore(s => s.systemFeatures) return ( {source === PluginSource.github && ( {t('detailPanel.operation.info', { ns: 'plugin' })} )} {source === PluginSource.github && ( {t('detailPanel.operation.checkUpdate', { ns: 'plugin' })} )} {(source === PluginSource.marketplace || source === PluginSource.github) && enable_marketplace && ( }> {t('detailPanel.operation.viewDetail', { ns: 'plugin' })} )} {(source === PluginSource.marketplace || source === PluginSource.github) && enable_marketplace && ( )} {t('detailPanel.operation.remove', { ns: 'plugin' })} ) } export default React.memo(OperationDropdown)