1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import { useCallback } from 'react'
- import { useReactFlow } from 'reactflow'
- import { useWorkflowStore } from '../store'
- import { WORKFLOW_DATA_UPDATE } from '../constants'
- import type { WorkflowDataUpdator } from '../types'
- import {
- initialEdges,
- initialNodes,
- } from '../utils'
- import { useEdgesInteractions } from './use-edges-interactions'
- import { useNodesInteractions } from './use-nodes-interactions'
- import { useEventEmitterContextContext } from '@/context/event-emitter'
- import { fetchWorkflowDraft } from '@/service/workflow'
- export const useWorkflowInteractions = () => {
- const workflowStore = useWorkflowStore()
- const { handleNodeCancelRunningStatus } = useNodesInteractions()
- const { handleEdgeCancelRunningStatus } = useEdgesInteractions()
- const handleCancelDebugAndPreviewPanel = useCallback(() => {
- workflowStore.setState({
- showDebugAndPreviewPanel: false,
- workflowRunningData: undefined,
- })
- handleNodeCancelRunningStatus()
- handleEdgeCancelRunningStatus()
- }, [workflowStore, handleNodeCancelRunningStatus, handleEdgeCancelRunningStatus])
- return {
- handleCancelDebugAndPreviewPanel,
- }
- }
- export const useWorkflowUpdate = () => {
- const reactflow = useReactFlow()
- const workflowStore = useWorkflowStore()
- const { eventEmitter } = useEventEmitterContextContext()
- const handleUpdateWorkflowCanvas = useCallback((payload: WorkflowDataUpdator) => {
- const {
- nodes,
- edges,
- viewport,
- } = payload
- const { setViewport } = reactflow
- eventEmitter?.emit({
- type: WORKFLOW_DATA_UPDATE,
- payload: {
- nodes: initialNodes(nodes, edges),
- edges: initialEdges(edges, nodes),
- },
- } as any)
- setViewport(viewport)
- }, [eventEmitter, reactflow])
- const handleRefreshWorkflowDraft = useCallback(() => {
- const {
- appId,
- setSyncWorkflowDraftHash,
- setIsSyncingWorkflowDraft,
- } = workflowStore.getState()
- setIsSyncingWorkflowDraft(true)
- fetchWorkflowDraft(`/apps/${appId}/workflows/draft`).then((response) => {
- handleUpdateWorkflowCanvas(response.graph as WorkflowDataUpdator)
- setSyncWorkflowDraftHash(response.hash)
- }).finally(() => setIsSyncingWorkflowDraft(false))
- }, [handleUpdateWorkflowCanvas, workflowStore])
- return {
- handleUpdateWorkflowCanvas,
- handleRefreshWorkflowDraft,
- }
- }
|