use-workflow-node-iteration-next.ts 981 B

123456789101112131415161718192021222324252627282930313233343536
  1. import { useCallback } from 'react'
  2. import { useStoreApi } from 'reactflow'
  3. import produce from 'immer'
  4. import type { IterationNextResponse } from '@/types/workflow'
  5. import { useWorkflowStore } from '@/app/components/workflow/store'
  6. export const useWorkflowNodeIterationNext = () => {
  7. const store = useStoreApi()
  8. const workflowStore = useWorkflowStore()
  9. const handleWorkflowNodeIterationNext = useCallback((params: IterationNextResponse) => {
  10. const {
  11. iterTimes,
  12. setIterTimes,
  13. } = workflowStore.getState()
  14. const { data } = params
  15. const {
  16. getNodes,
  17. setNodes,
  18. } = store.getState()
  19. const nodes = getNodes()
  20. const newNodes = produce(nodes, (draft) => {
  21. const currentNode = draft.find(node => node.id === data.node_id)!
  22. currentNode.data._iterationIndex = iterTimes
  23. setIterTimes(iterTimes + 1)
  24. })
  25. setNodes(newNodes)
  26. }, [workflowStore, store])
  27. return {
  28. handleWorkflowNodeIterationNext,
  29. }
  30. }