mirror of
https://github.com/langgenius/dify.git
synced 2026-07-15 17:37:38 +08:00
38 lines
1.4 KiB
TypeScript
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>
|
|
)
|
|
}
|