123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- 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,
- } = workflowStore.getState()
- fetchWorkflowDraft(`/apps/${appId}/workflows/draft`).then((response) => {
- handleUpdateWorkflowCanvas(response.graph as WorkflowDataUpdator)
- setSyncWorkflowDraftHash(response.hash)
- })
- }, [handleUpdateWorkflowCanvas, workflowStore])
- return {
- handleUpdateWorkflowCanvas,
- handleRefreshWorkflowDraft,
- }
- }
|