dify/web/app/components/workflow/node-actions-menu/index.tsx
Stephen Zhou a84c2d36a3
style: format with vp fmt (#38803)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-07-12 15:57:46 +00:00

75 lines
2.1 KiB
TypeScript

import type { Node } from '@/app/components/workflow/types'
import { cn } from '@langgenius/dify-ui/cn'
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuTrigger,
} from '@langgenius/dify-ui/dropdown-menu'
import { useCallback, useState } from 'react'
import { useTranslation } from 'react-i18next'
import { NodeActionsDropdownContent } from './dropdown-content'
import { NODE_ACTIONS_MENU_WIDTH_CLASS_NAME } from './shared'
type NodeActionsDropdownProps = {
id: string
data: Node['data']
triggerClassName?: string
onOpenChange?: (open: boolean) => void
showHelpLink?: boolean
}
export function NodeActionsDropdown({
id,
data,
triggerClassName,
onOpenChange,
showHelpLink = true,
}: NodeActionsDropdownProps) {
const { t } = useTranslation()
const [open, setOpen] = useState(false)
const handleOpenChange = useCallback(
(nextOpen: boolean) => {
setOpen(nextOpen)
onOpenChange?.(nextOpen)
},
[onOpenChange],
)
const closeMenu = useCallback(() => {
setOpen(false)
onOpenChange?.(false)
}, [onOpenChange])
return (
<DropdownMenu modal={false} open={open} onOpenChange={handleOpenChange}>
<DropdownMenuTrigger
render={
<button
type="button"
aria-label={t(($) => $['operation.more'], { ns: 'common' })}
className={cn(
'flex size-6 cursor-pointer items-center justify-center rounded-md border-0 bg-transparent p-0 text-text-tertiary hover:bg-state-base-hover',
'focus-visible:ring-1 focus-visible:ring-components-input-border-hover focus-visible:outline-hidden data-popup-open:bg-state-base-hover',
triggerClassName,
)}
>
<span aria-hidden className="i-ri-more-fill size-4" />
</button>
}
/>
<DropdownMenuContent
placement="bottom-end"
popupClassName={NODE_ACTIONS_MENU_WIDTH_CLASS_NAME}
>
<NodeActionsDropdownContent
id={id}
data={data}
onClose={closeMenu}
showHelpLink={showHelpLink}
/>
</DropdownMenuContent>
</DropdownMenu>
)
}