mirror of
https://mirror.skon.top/github.com/langgenius/dify.git
synced 2026-04-20 15:20:15 +08:00
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
59 lines
1.8 KiB
TypeScript
59 lines
1.8 KiB
TypeScript
import type { MouseEvent } from 'react'
|
|
import { useCallback } from 'react'
|
|
import { useGlobalPublicStore } from '@/context/global-public-context'
|
|
import { useWorkflowStore } from '../store'
|
|
import { readWorkflowClipboard } from '../utils'
|
|
|
|
export const usePanelInteractions = () => {
|
|
const workflowStore = useWorkflowStore()
|
|
const appDslVersion = useGlobalPublicStore(s => s.systemFeatures.app_dsl_version)
|
|
|
|
const handlePaneContextMenu = useCallback((e: MouseEvent) => {
|
|
e.preventDefault()
|
|
// Sync the latest system clipboard into the workflow store before opening
|
|
// the pane menu because "Paste here" is disabled when no compatible node
|
|
// copy exists, including cross-app copies written outside this tab.
|
|
void readWorkflowClipboard(appDslVersion).then(({ nodes, edges }) => {
|
|
if (nodes.length)
|
|
workflowStore.getState().setClipboardData({ nodes, edges })
|
|
})
|
|
|
|
const container = document.querySelector('#workflow-container')
|
|
const { x, y } = container!.getBoundingClientRect()
|
|
workflowStore.setState({
|
|
nodeMenu: undefined,
|
|
selectionMenu: undefined,
|
|
edgeMenu: undefined,
|
|
panelMenu: {
|
|
top: e.clientY - y,
|
|
left: e.clientX - x,
|
|
},
|
|
})
|
|
}, [workflowStore, appDslVersion])
|
|
|
|
const handlePaneContextmenuCancel = useCallback(() => {
|
|
workflowStore.setState({
|
|
panelMenu: undefined,
|
|
})
|
|
}, [workflowStore])
|
|
|
|
const handleNodeContextmenuCancel = useCallback(() => {
|
|
workflowStore.setState({
|
|
nodeMenu: undefined,
|
|
})
|
|
}, [workflowStore])
|
|
|
|
const handleEdgeContextmenuCancel = useCallback(() => {
|
|
workflowStore.setState({
|
|
edgeMenu: undefined,
|
|
})
|
|
}, [workflowStore])
|
|
|
|
return {
|
|
handlePaneContextMenu,
|
|
handlePaneContextmenuCancel,
|
|
handleNodeContextmenuCancel,
|
|
handleEdgeContextmenuCancel,
|
|
}
|
|
}
|