import type { MouseEvent } from 'react' import { useQuery } from '@tanstack/react-query' import { useCallback } from 'react' import { consoleQuery } from '@/service/client' import { useWorkflowStore } from '../store' import { readWorkflowClipboard } from '../utils' export const usePanelInteractions = () => { const workflowStore = useWorkflowStore() const { data: appDslVersion = '' } = useQuery(consoleQuery.appDslVersion.get.queryOptions({ staleTime: Infinity, select: data => data.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, } }