mirror of
https://github.com/langgenius/dify.git
synced 2026-05-25 19:00:43 -04:00
39 lines
1.3 KiB
TypeScript
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,
|
|
}
|
|
}
|