@@ -15,6 +15,7 @@ import {
1515 ALERTS_TABLE_NAME ,
1616 DEFAULT_USER_SETTINGS ,
1717 GRAPH_TABLE_NAME ,
18+ getDefaultResultSetName ,
1819} from "../../common/interface-types" ;
1920import { useMessageFromExtension } from "../common/useMessageFromExtension" ;
2021import { ResultTables } from "./ResultTables" ;
@@ -64,6 +65,7 @@ interface ResultsViewState {
6465 displayedResults : ResultsState ;
6566 nextResultsInfo : ResultsInfo | null ;
6667 isExpectingResultsUpdate : boolean ;
68+ selectedTable : string | undefined ;
6769}
6870
6971/**
@@ -78,6 +80,7 @@ export function ResultsApp() {
7880 } ,
7981 nextResultsInfo : null ,
8082 isExpectingResultsUpdate : true ,
83+ selectedTable : undefined ,
8184 } ) ;
8285
8386 const [ userSettings , setUserSettings ] = useState < UserSettings > (
@@ -86,6 +89,39 @@ export function ResultsApp() {
8689
8790 const [ problemsViewSelected , setProblemsViewSelected ] = useState ( false ) ;
8891
92+ const onSelectedTableChange = useCallback ( ( tableName : string ) => {
93+ setState ( ( prev ) => {
94+ if ( tableName === prev . selectedTable ) return prev ;
95+ return {
96+ ...prev ,
97+ selectedTable : tableName ,
98+ } ;
99+ } ) ;
100+ } , [ ] ) ;
101+
102+ // Ensure selectedTable is valid for the current result sets.
103+ // This runs in ResultsApp (not ResultTables) so it survives remounts.
104+ const displayedResultsInfo = state . displayedResults . resultsInfo ;
105+ useEffect ( ( ) => {
106+ if ( ! displayedResultsInfo ) return ;
107+ const { parsedResultSets, interpretation } = displayedResultsInfo ;
108+ const allNames = interpretation
109+ ? parsedResultSets . resultSetNames . concat ( [
110+ interpretation . data . t === "GraphInterpretationData"
111+ ? GRAPH_TABLE_NAME
112+ : ALERTS_TABLE_NAME ,
113+ ] )
114+ : parsedResultSets . resultSetNames ;
115+ if (
116+ state . selectedTable === undefined ||
117+ ! allNames . includes ( state . selectedTable )
118+ ) {
119+ const tableName =
120+ parsedResultSets . selectedTable ?? getDefaultResultSetName ( allNames ) ;
121+ onSelectedTableChange ( tableName ) ;
122+ }
123+ } , [ displayedResultsInfo , state . selectedTable , onSelectedTableChange ] ) ;
124+
89125 const updateStateWithNewResultsInfo = useCallback (
90126 ( resultsInfo : ResultsInfo ) : void => {
91127 let results : Results | null = null ;
@@ -103,15 +139,16 @@ export function ResultsApp() {
103139 statusText = `Error loading results: ${ errorMessage } ` ;
104140 }
105141
106- setState ( {
142+ setState ( ( prev ) => ( {
143+ ...prev ,
107144 displayedResults : {
108145 resultsInfo,
109146 results,
110147 errorMessage : statusText ,
111148 } ,
112149 nextResultsInfo : null ,
113150 isExpectingResultsUpdate : false ,
114- } ) ;
151+ } ) ) ;
115152 } ,
116153 [ ] ,
117154 ) ;
@@ -232,6 +269,8 @@ export function ResultsApp() {
232269 }
233270 queryName = { displayedResults . resultsInfo . queryName }
234271 queryPath = { displayedResults . resultsInfo . queryPath }
272+ selectedTable = { state . selectedTable ?? "" }
273+ onSelectedTableChange = { onSelectedTableChange }
235274 problemsViewSelected = { problemsViewSelected }
236275 onProblemsViewSelectedChange = { setProblemsViewSelected }
237276 />
0 commit comments