From 05a2fe51013fd83aff92da8b7b9b061638aca51d Mon Sep 17 00:00:00 2001 From: Vadym Samoilenko Date: Fri, 27 Mar 2026 12:31:06 +0000 Subject: [PATCH] fix: timeline disappears after QC re-render - Set staleTime=0 on useAccessibleVideoEditState so edit-state is immediately refetched when invalidated after render completes - Force prevJobStatusRef='rendering_qc' at render start so the pending_qc completion effect always fires, even when fast renders complete before the 10s polling interval catches rendering_qc status Co-Authored-By: Claude Sonnet 4.6 --- frontend/src/hooks/useAccessibleVideoEdit.ts | 5 +++-- frontend/src/routes/admin/QCDetail.tsx | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) 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,