1- import { createContext , FC , useContext , useEffect } from 'react'
1+ import { createContext , FC , useContext , useEffect , useRef } from 'react'
22import { SignalREventLabels , useSignalRContext } from './SignalRContext'
33import { SaraAnalysisResultReady , SaraInspectionVisualizationReady } from 'models/Inspection'
44import { useQuery } from '@tanstack/react-query'
@@ -37,14 +37,29 @@ export const InspectionsProvider: FC<Props> = ({ children }) => {
3737 const { registerEvent, connectionReady } = useSignalRContext ( )
3838 const backendApi = useBackendApi ( )
3939
40+ // Keep a stable ref to backendApi so callbacks don't capture a stale closure
41+ const backendApiRef = useRef ( backendApi )
42+ useEffect ( ( ) => {
43+ backendApiRef . current = backendApi
44+ } , [ backendApi ] )
45+
4046 useEffect ( ( ) => {
4147 if ( connectionReady ) {
4248 registerEvent ( SignalREventLabels . inspectionVisualizationReady , ( username : string , message : string ) => {
4349 const inspectionVisualizationData : SaraInspectionVisualizationReady = JSON . parse ( message )
50+ const inspectionId = inspectionVisualizationData . inspectionId
4451 queryClient . invalidateQueries ( {
45- queryKey : [ 'fetchInspectionData' , inspectionVisualizationData . inspectionId ] ,
52+ queryKey : [ 'fetchInspectionData' , inspectionId ] ,
53+ } )
54+ queryClient . fetchQuery ( {
55+ queryKey : [ 'fetchInspectionData' , inspectionId ] ,
56+ queryFn : async ( ) => {
57+ const imageBlob = await backendApiRef . current . getInspection ( inspectionId )
58+ return URL . createObjectURL ( imageBlob )
59+ } ,
60+ retry : 1 ,
61+ staleTime : 10 * 60 * 1000 ,
4662 } )
47- fetchImageData ( inspectionVisualizationData . inspectionId )
4863 } )
4964 }
5065 } , [ registerEvent , connectionReady ] )
@@ -53,10 +68,19 @@ export const InspectionsProvider: FC<Props> = ({ children }) => {
5368 if ( connectionReady ) {
5469 registerEvent ( SignalREventLabels . analysisResultReady , ( username : string , message : string ) => {
5570 const analysisResultData : SaraAnalysisResultReady = JSON . parse ( message )
71+ const inspectionId = analysisResultData . inspectionId
5672 queryClient . invalidateQueries ( {
57- queryKey : [ 'fetchAnalysisData' , analysisResultData . inspectionId ] ,
73+ queryKey : [ 'fetchAnalysisData' , inspectionId ] ,
74+ } )
75+ queryClient . fetchQuery ( {
76+ queryKey : [ 'fetchAnalysisData' , inspectionId ] ,
77+ queryFn : async ( ) => {
78+ const imageBlob = await backendApiRef . current . getAnalysis ( inspectionId )
79+ return URL . createObjectURL ( imageBlob )
80+ } ,
81+ retry : 1 ,
82+ staleTime : 10 * 60 * 1000 ,
5883 } )
59- fetchAnalysisData ( analysisResultData . inspectionId )
6084 } )
6185 }
6286 } , [ registerEvent , connectionReady ] )
0 commit comments