Files
dify/web/app/components/workflow/hooks/use-panel-interactions.ts

39 lines
1.3 KiB
TypeScript

import type { MouseEvent } from 'react'
import { useSuspenseQuery } from '@tanstack/react-query'
import { useCallback } from 'react'
import { systemFeaturesQueryOptions } from '@/service/system-features'
import { useWorkflowStore } from '../store'
import { readWorkflowClipboard } from '../utils'
export const usePanelInteractions = () => {
const workflowStore = useWorkflowStore()
const { data: appDslVersion } = useSuspenseQuery({
...systemFeaturesQueryOptions(),
select: s => s.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 })
})
workflowStore.setState({
contextMenuTarget: { type: 'panel' },
})
}, [workflowStore, appDslVersion])
const handlePaneContextmenuCancel = useCallback(() => {
workflowStore.setState({ contextMenuTarget: undefined })
}, [workflowStore])
return {
handlePaneContextMenu,
handlePaneContextmenuCancel,
}
}