use-workflow-finished.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import { useCallback } from 'react'
  2. import produce from 'immer'
  3. import type { WorkflowFinishedResponse } from '@/types/workflow'
  4. import { useWorkflowStore } from '@/app/components/workflow/store'
  5. import { getFilesInLogs } from '@/app/components/base/file-uploader/utils'
  6. export const useWorkflowFinished = () => {
  7. const workflowStore = useWorkflowStore()
  8. const handleWorkflowFinished = useCallback((params: WorkflowFinishedResponse) => {
  9. const { data } = params
  10. const {
  11. workflowRunningData,
  12. setWorkflowRunningData,
  13. } = workflowStore.getState()
  14. const isStringOutput = data.outputs && Object.keys(data.outputs).length === 1 && typeof data.outputs[Object.keys(data.outputs)[0]] === 'string'
  15. setWorkflowRunningData(produce(workflowRunningData!, (draft) => {
  16. draft.result = {
  17. ...draft.result,
  18. ...data,
  19. files: getFilesInLogs(data.outputs),
  20. } as any
  21. if (isStringOutput) {
  22. draft.resultTabActive = true
  23. draft.resultText = data.outputs[Object.keys(data.outputs)[0]]
  24. }
  25. }))
  26. }, [workflowStore])
  27. return {
  28. handleWorkflowFinished,
  29. }
  30. }