diff --git a/frontend/src/hooks/useAccessibleVideoEdit.ts b/frontend/src/hooks/useAccessibleVideoEdit.ts index 7aa40f4..a48d148 100644 --- a/frontend/src/hooks/useAccessibleVideoEdit.ts +++ b/frontend/src/hooks/useAccessibleVideoEdit.ts @@ -1,4 +1,4 @@ -import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; +import { useQuery, useMutation, useQueryClient, keepPreviousData } from '@tanstack/react-query'; import { apiClient } from '../lib/api'; /** @@ -9,8 +9,9 @@ export function useAccessibleVideoEditState(jobId: string, language: string) { queryKey: ['jobs', jobId, 'accessible-video', language, 'edit-state'], queryFn: () => apiClient.getAccessibleVideoEditState(jobId, language), enabled: !!jobId && !!language, - staleTime: 30000, // 30 seconds + staleTime: 0, refetchOnWindowFocus: false, + placeholderData: keepPreviousData, }); } diff --git a/frontend/src/routes/admin/QCDetail.tsx b/frontend/src/routes/admin/QCDetail.tsx index c95a078..718030a 100644 --- a/frontend/src/routes/admin/QCDetail.tsx +++ b/frontend/src/routes/admin/QCDetail.tsx @@ -523,6 +523,9 @@ export function QCDetail() { if (!id) return; try { + // Force prevJobStatusRef to 'rendering_qc' so the completion effect fires + // even if polling misses the rendering_qc state (fast renders < 10s) + prevJobStatusRef.current = 'rendering_qc'; await rerenderMutation.mutateAsync({ jobId: id, language: selectedLanguage,