| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- import { useEffect, useState } from 'react'
- import { useActionRunQuery } from '@/data/actions/action-detail-query'
- import { useActionRunLogsQuery } from '@/data/actions/action-logs-query'
- interface UseWorkflowManagementProps {
- workflowRunId?: string
- projectRef?: string
- onWorkflowComplete?: (status: 'SUCCESS' | 'FAILED') => void
- }
- export const useWorkflowManagement = ({
- workflowRunId,
- projectRef,
- onWorkflowComplete,
- }: UseWorkflowManagementProps) => {
- const [hasRefetched, setHasRefetched] = useState(false)
- const { data: workflowRun } = useActionRunQuery(
- { projectRef, runId: workflowRunId },
- {
- refetchInterval: (query) => {
- return query.state.error?.code === 404 ? false : 2000
- },
- refetchOnMount: 'always',
- staleTime: 0,
- }
- )
- const { data: workflowRunLogs } = useActionRunLogsQuery(
- { projectRef, runId: workflowRunId },
- {
- refetchInterval: (query) => {
- return query.state.error?.code === 404 ? false : 2000
- },
- refetchOnMount: 'always',
- staleTime: 0,
- }
- )
- // Handle workflow completion
- useEffect(() => {
- if (!workflowRun || !workflowRunId) return
- // Only refetch once per workflow completion
- if (!!workflowRun.status && workflowRun.status !== 'RUNNING' && !hasRefetched) {
- setHasRefetched(true)
- onWorkflowComplete?.(workflowRun.status)
- }
- }, [workflowRunId, hasRefetched, onWorkflowComplete, workflowRun])
- // Reset refetch flag when workflow ID changes
- useEffect(() => {
- setHasRefetched(false)
- }, [workflowRunId])
- return {
- run: workflowRun,
- logs: workflowRunLogs,
- }
- }
|