From 924e113bdb4500c56dc85194229e06f81a02e8b9 Mon Sep 17 00:00:00 2001 From: Shreyas-Microsoft Date: Tue, 7 Apr 2026 20:36:10 +0530 Subject: [PATCH] auto-refresh AI Summary and Gap Analysis when document processing completes --- .../ProcessQueueGrid/ProcessQueueGrid.tsx | 27 ++++++++++++------- .../src/Pages/DefaultPage/PanelCenter.tsx | 4 +-- .../src/Pages/DefaultPage/PanelLeft.tsx | 19 +++++++++++++ 3 files changed, 39 insertions(+), 11 deletions(-) diff --git a/src/ContentProcessorWeb/src/Pages/DefaultPage/Components/ProcessQueueGrid/ProcessQueueGrid.tsx b/src/ContentProcessorWeb/src/Pages/DefaultPage/Components/ProcessQueueGrid/ProcessQueueGrid.tsx index e4f0193f..6f234d79 100644 --- a/src/ContentProcessorWeb/src/Pages/DefaultPage/Components/ProcessQueueGrid/ProcessQueueGrid.tsx +++ b/src/ContentProcessorWeb/src/Pages/DefaultPage/Components/ProcessQueueGrid/ProcessQueueGrid.tsx @@ -108,16 +108,25 @@ const ProcessQueueGrid: React.FC = () => { })); }); - // Auto-select first claim + // Preserve current selection on refresh, or auto-select first claim on initial load if (claimRows.length > 0) { - const firstClaim = claimRows[0].claim; - setSelectedClaimId(firstClaim.id); - setSelectedDocumentId(null); - dispatch( - setSelectedClaim({ - claim: firstClaim, - }) - ); + const currentClaim = selectedClaimId + ? claimRows.find(r => r.claim.id === selectedClaimId) + : null; + + if (currentClaim) { + // Update selected claim with fresh data (status may have changed) + // Only dispatch if in claim mode (no document selected) + if (!selectedDocumentId) { + dispatch(setSelectedClaim({ claim: currentClaim.claim })); + } + } else { + // Auto-select first claim (initial load or selected claim no longer exists) + const firstClaim = claimRows[0].claim; + setSelectedClaimId(firstClaim.id); + setSelectedDocumentId(null); + dispatch(setSelectedClaim({ claim: firstClaim })); + } } } else { setClaims([]); diff --git a/src/ContentProcessorWeb/src/Pages/DefaultPage/PanelCenter.tsx b/src/ContentProcessorWeb/src/Pages/DefaultPage/PanelCenter.tsx index 14976f4d..5249929f 100644 --- a/src/ContentProcessorWeb/src/Pages/DefaultPage/PanelCenter.tsx +++ b/src/ContentProcessorWeb/src/Pages/DefaultPage/PanelCenter.tsx @@ -188,13 +188,13 @@ const PanelCenter: React.FC = ({ togglePanel }) => { } }, [store.activeProcessId, store.selectedItem, store.selectionType]) - // Fetch claim details when a claim is selected + // Fetch claim details when a claim is selected or its status changes (e.g., processing → Completed) useEffect(() => { if (store.selectionType === 'claim' && store.selectedClaim?.id) { setClaimComment(''); dispatch(fetchClaimDetails({ claimId: store.selectedClaim.id })); } - }, [store.selectionType, store.selectedClaim?.id, dispatch]) + }, [store.selectionType, store.selectedClaim?.id, store.selectedClaim?.status, dispatch]) // Sync claim comment with API response useEffect(() => { diff --git a/src/ContentProcessorWeb/src/Pages/DefaultPage/PanelLeft.tsx b/src/ContentProcessorWeb/src/Pages/DefaultPage/PanelLeft.tsx index 99337e67..e69bac7b 100644 --- a/src/ContentProcessorWeb/src/Pages/DefaultPage/PanelLeft.tsx +++ b/src/ContentProcessorWeb/src/Pages/DefaultPage/PanelLeft.tsx @@ -43,6 +43,7 @@ const PanelLeft: React.FC = ({ togglePanel }) => { page_size: state.leftPanel.gridData.page_size, pageSize: state.leftPanel.pageSize, isGridRefresh: state.leftPanel.isGridRefresh, + gridItems: state.leftPanel.gridData.items, }), shallowEqual); useEffect(() => { @@ -71,6 +72,24 @@ const PanelLeft: React.FC = ({ togglePanel }) => { } }, [store.isGridRefresh, dispatch]); + // Auto-poll grid data while any claim is still processing + useEffect(() => { + const hasProcessingItems = store.gridItems?.some( + (item: Record) => { + const itemStatus = item.status as string; + return itemStatus && itemStatus !== 'Completed' && itemStatus !== 'Error'; + } + ); + + if (!hasProcessingItems) return; + + const intervalId = setInterval(() => { + dispatch(fetchContentTableData({ pageSize: store.pageSize, pageNumber: 1 })); + }, 10000); + + return () => clearInterval(intervalId); + }, [store.gridItems, store.pageSize, dispatch]); + const refreshGrid = async () => { try { dispatch(startLoader("1"));