Files
dify/web/app/components/workflow/workflow-contextmenu.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

38 lines
1.4 KiB
TypeScript

import type { ContextMenuActions } from '@langgenius/dify-ui/context-menu'
import type { ReactNode } from 'react'
import { ContextMenu, ContextMenuTrigger } from '@langgenius/dify-ui/context-menu'
import { useCallback, useRef } from 'react'
import { EdgeContextmenu } from './edge-contextmenu'
import { NodeContextmenu } from './node-contextmenu'
import { PanelContextmenu } from './panel-contextmenu'
import { SelectionContextmenu } from './selection-contextmenu'
import { useWorkflowStore } from './store'
export function WorkflowContextmenu({ children }: { children: ReactNode }) {
const workflowStore = useWorkflowStore()
const actionsRef = useRef<ContextMenuActions | null>(null)
const clearContextMenuTarget = useCallback(() => {
workflowStore.setState({ contextMenuTarget: undefined })
}, [workflowStore])
const closeContextMenu = useCallback(() => {
actionsRef.current?.close()
}, [])
return (
<ContextMenu
actionsRef={actionsRef}
onOpenChangeComplete={(open) => {
if (!open) clearContextMenuTarget()
}}
>
<ContextMenuTrigger render={<div className="h-full w-full" />}>{children}</ContextMenuTrigger>
<PanelContextmenu onClose={closeContextMenu} />
<NodeContextmenu onClose={closeContextMenu} />
<EdgeContextmenu onClose={closeContextMenu} />
<SelectionContextmenu onClose={closeContextMenu} />
</ContextMenu>
)
}