'use client' import type { ReactNode } from 'react' import type { DocPathWithoutLang } from '@/types/doc-paths' import { Button } from '@langgenius/dify-ui/button' import { cn } from '@langgenius/dify-ui/cn' import { DropdownMenu, DropdownMenuContent, DropdownMenuLinkItem, DropdownMenuSeparator, DropdownMenuTrigger, } from '@langgenius/dify-ui/dropdown-menu' import { Fragment, useState } from 'react' import { useTranslation } from 'react-i18next' import { MARKETPLACE_URL_PREFIX } from '@/config' import { useDocLink } from '@/context/i18n' type DropdownItemProps = { href: string icon: ReactNode text: string } function DropdownItem({ href, icon, text }: DropdownItemProps) { return ( {icon} {text} ) } type OptionLabelKey = | 'requestAPlugin' | 'pluginDevelopmentGuide' | 'pluginPublishGuide' | 'templatePublishingGuide' function getOptions(docLink: (path: DocPathWithoutLang) => string): { href: string icon: ReactNode labelKey: OptionLabelKey }[] { return [ { href: 'https://github.com/langgenius/dify-plugins/issues/new?template=plugin_request.yaml', icon: , labelKey: 'requestAPlugin', }, { href: docLink('/develop-plugin/getting-started/getting-started-dify-plugin'), icon: , labelKey: 'pluginDevelopmentGuide', }, { href: docLink('/develop-plugin/publishing/marketplace-listing/release-overview'), icon: , labelKey: 'pluginPublishGuide', }, { href: MARKETPLACE_URL_PREFIX.replace('marketplace', 'creators'), icon: , labelKey: 'templatePublishingGuide', }, ] } type SubmitRequestDropdownProps = { dividerAfterFirst?: boolean } export function SubmitRequestDropdown({ dividerAfterFirst }: SubmitRequestDropdownProps) { const { t } = useTranslation() const [open, setOpen] = useState(false) const docLink = useDocLink() const options = getOptions(docLink) return ( $.requestSubmit, { ns: 'plugin', defaultValue: t(($) => $.requestAPlugin, { ns: 'plugin' }), })} variant="ghost" className={cn( 'size-8 p-2 text-text-tertiary hover:bg-state-base-hover hover:text-text-secondary', 'data-popup-open:bg-state-base-hover data-popup-open:text-text-secondary', )} > } /> {options.map((option, index) => ( {dividerAfterFirst && index === 1 && } $[option.labelKey], { ns: 'plugin' })} /> ))} ) }