'use client' import type { Placement } from '@langgenius/dify-ui/dropdown-menu' import { cn } from '@langgenius/dify-ui/cn' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLinkItem, DropdownMenuSeparator, DropdownMenuTrigger, } from '@langgenius/dify-ui/dropdown-menu' import { useSuspenseQuery } from '@tanstack/react-query' import { useTranslation } from 'react-i18next' import { systemFeaturesQueryOptions } from '@/features/system-features/client' import { PluginSource } from '../types' type OperationDropdownProps = Readonly<{ source: PluginSource onInfo: () => void onCheckVersion: () => void onRemove: () => void onViewReadme?: () => void detailUrl: string placement?: Placement sideOffset?: number alignOffset?: number popupClassName?: string triggerSize?: 'm' | 'xs' destructiveRemove?: boolean showCheckVersion?: boolean showRemove?: boolean }> export function OperationDropdown({ source, detailUrl, onInfo, onCheckVersion, onRemove, onViewReadme, placement = 'bottom-end', sideOffset = 4, alignOffset = 0, popupClassName, triggerSize = 'm', destructiveRemove = false, showCheckVersion = true, showRemove = true, }: OperationDropdownProps) { const { t } = useTranslation() const { data: enable_marketplace } = useSuspenseQuery({ ...systemFeaturesQueryOptions(), select: (s) => s.enable_marketplace, }) const showInfo = source === PluginSource.github const showCheckVersionAction = showCheckVersion && source === PluginSource.github const showMarketplaceDetail = (source === PluginSource.marketplace || source === PluginSource.github) && enable_marketplace const showRemoveAction = showRemove const showSeparator = showRemoveAction && (showMarketplaceDetail || !!onViewReadme) if ( !showInfo && !showCheckVersionAction && !showMarketplaceDetail && !onViewReadme && !showRemoveAction ) return null return ( $['detailPanel.operation.moreActions'], { ns: 'plugin' })} > {showInfo && ( {t(($) => $['detailPanel.operation.info'], { ns: 'plugin' })} )} {showCheckVersionAction && ( {t(($) => $['detailPanel.operation.checkUpdate'], { ns: 'plugin' })} )} {showMarketplaceDetail && ( $['detailPanel.operation.viewDetail'], { ns: 'plugin' })} > {t(($) => $['detailPanel.operation.viewDetail'], { ns: 'plugin' })} )} {onViewReadme && ( {t(($) => $['detailPanel.operation.viewReadme'], { ns: 'plugin' })} )} {showSeparator && } {showRemoveAction && ( {t(($) => $['detailPanel.operation.remove'], { ns: 'plugin' })} )} ) }