use-workflow-node-loop-next.ts 978 B

1234567891011121314151617181920212223242526272829303132333435
  1. import { useCallback } from 'react'
  2. import { useStoreApi } from 'reactflow'
  3. import produce from 'immer'
  4. import type { LoopNextResponse } from '@/types/workflow'
  5. import { NodeRunningStatus } from '@/app/components/workflow/types'
  6. export const useWorkflowNodeLoopNext = () => {
  7. const store = useStoreApi()
  8. const handleWorkflowNodeLoopNext = useCallback((params: LoopNextResponse) => {
  9. const { data } = params
  10. const {
  11. getNodes,
  12. setNodes,
  13. } = store.getState()
  14. const nodes = getNodes()
  15. const newNodes = produce(nodes, (draft) => {
  16. const currentNode = draft.find(node => node.id === data.node_id)!
  17. currentNode.data._loopIndex = data.index
  18. draft.forEach((node) => {
  19. if (node.parentId === data.node_id) {
  20. node.data._waitingRun = true
  21. node.data._runningStatus = NodeRunningStatus.Waiting
  22. }
  23. })
  24. })
  25. setNodes(newNodes)
  26. }, [store])
  27. return {
  28. handleWorkflowNodeLoopNext,
  29. }
  30. }