'use client' import type { Placement } from '@langgenius/dify-ui/dropdown-menu' import type { FC } from 'react' import { cn } from '@langgenius/dify-ui/cn' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from '@langgenius/dify-ui/dropdown-menu' import { useSuspenseQuery } from '@tanstack/react-query' import * as React from 'react' import { useTranslation } from 'react-i18next' import { systemFeaturesQueryOptions } from '@/features/system-features/client' import { PluginSource } from '../types' type Props = 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 }> const operationMenuPopupClassName = 'w-[192px] py-1' const operationMenuItemClassName = 'px-2 py-1 text-text-secondary system-md-regular' const operationMenuLabelClassName = 'min-w-0 grow truncate px-1 py-0.5' const OperationDropdown: FC = ({ source, detailUrl, onInfo, onCheckVersion, onRemove, onViewReadme, placement = 'bottom-end', sideOffset = 4, alignOffset = 0, popupClassName, triggerSize = 'm', destructiveRemove = false, }) => { const { t } = useTranslation() const { data: enable_marketplace } = useSuspenseQuery({ ...systemFeaturesQueryOptions(), select: s => s.enable_marketplace, }) 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' })} )} {onViewReadme && ( {t('detailPanel.operation.viewReadme', { ns: 'plugin' })} )} {(source === PluginSource.marketplace || source === PluginSource.github) && enable_marketplace && ( )} {t('detailPanel.operation.remove', { ns: 'plugin' })} ) } export default React.memo(OperationDropdown)