@@ -87,6 +87,59 @@ export class ResultsApp extends React.Component<
8787 } ;
8888 }
8989
90+ private updateStateWithNewResultsInfo ( resultsInfo : ResultsInfo ) : void {
91+ this . setState ( ( prevState ) => {
92+ if ( resultsInfo === null && prevState . isExpectingResultsUpdate ) {
93+ // Display loading message
94+ return {
95+ displayedResults : {
96+ resultsInfo : null ,
97+ results : null ,
98+ errorMessage : "Loading results…" ,
99+ } ,
100+ isExpectingResultsUpdate : prevState . isExpectingResultsUpdate ,
101+ nextResultsInfo : resultsInfo ,
102+ } ;
103+ } else if ( resultsInfo === null ) {
104+ // No results to display
105+ return {
106+ displayedResults : {
107+ resultsInfo : null ,
108+ results : null ,
109+ errorMessage : "No results to display" ,
110+ } ,
111+ isExpectingResultsUpdate : prevState . isExpectingResultsUpdate ,
112+ nextResultsInfo : resultsInfo ,
113+ } ;
114+ }
115+
116+ let results : Results | null = null ;
117+ let statusText = "" ;
118+ try {
119+ const resultSets = getResultSets ( resultsInfo ) ;
120+ results = {
121+ resultSets,
122+ database : resultsInfo . database ,
123+ sortStates : getSortStates ( resultsInfo ) ,
124+ } ;
125+ } catch ( e ) {
126+ const errorMessage = getErrorMessage ( e ) ;
127+
128+ statusText = `Error loading results: ${ errorMessage } ` ;
129+ }
130+
131+ return {
132+ displayedResults : {
133+ resultsInfo,
134+ results,
135+ errorMessage : statusText ,
136+ } ,
137+ nextResultsInfo : null ,
138+ isExpectingResultsUpdate : false ,
139+ } ;
140+ } ) ;
141+ }
142+
90143 handleMessage ( msg : IntoResultsViewMsg ) : void {
91144 switch ( msg . t ) {
92145 case "setState" :
@@ -160,85 +213,23 @@ export class ResultsApp extends React.Component<
160213 }
161214 }
162215
163- private updateStateWithNewResultsInfo ( resultsInfo : ResultsInfo ) : void {
164- this . setState ( ( prevState ) => {
165- if ( resultsInfo === null && prevState . isExpectingResultsUpdate ) {
166- // Display loading message
167- return {
168- displayedResults : {
169- resultsInfo : null ,
170- results : null ,
171- errorMessage : "Loading results…" ,
172- } ,
173- isExpectingResultsUpdate : prevState . isExpectingResultsUpdate ,
174- nextResultsInfo : resultsInfo ,
175- } ;
176- } else if ( resultsInfo === null ) {
177- // No results to display
178- return {
179- displayedResults : {
180- resultsInfo : null ,
181- results : null ,
182- errorMessage : "No results to display" ,
183- } ,
184- isExpectingResultsUpdate : prevState . isExpectingResultsUpdate ,
185- nextResultsInfo : resultsInfo ,
186- } ;
187- }
188-
189- let results : Results | null = null ;
190- let statusText = "" ;
191- try {
192- const resultSets = this . getResultSets ( resultsInfo ) ;
193- results = {
194- resultSets,
195- database : resultsInfo . database ,
196- sortStates : this . getSortStates ( resultsInfo ) ,
197- } ;
198- } catch ( e ) {
199- const errorMessage = getErrorMessage ( e ) ;
200-
201- statusText = `Error loading results: ${ errorMessage } ` ;
202- }
203-
204- return {
205- displayedResults : {
206- resultsInfo,
207- results,
208- errorMessage : statusText ,
209- } ,
210- nextResultsInfo : null ,
211- isExpectingResultsUpdate : false ,
212- } ;
213- } ) ;
216+ private vscodeMessageHandler ( evt : MessageEvent ) {
217+ // sanitize origin
218+ const origin = evt . origin . replace ( / \n | \r / g, "" ) ;
219+ evt . origin === window . origin
220+ ? this . handleMessage ( evt . data as IntoResultsViewMsg )
221+ : console . error ( `Invalid event origin ${ origin } ` ) ;
214222 }
215223
216- private getResultSets ( resultsInfo : ResultsInfo ) : readonly ResultSet [ ] {
217- const parsedResultSets = resultsInfo . parsedResultSets ;
218- const resultSet = parsedResultSets . resultSet ;
219- if (
220- resultSet . t !== "InterpretedResultSet" &&
221- resultSet . t !== "RawResultSet"
222- ) {
223- throw new Error (
224- `Invalid result set type. Should be either "InterpretedResultSet" or "RawResultSet", but got "${
225- ( resultSet as { t : string } ) . t
226- } ".`,
227- ) ;
228- }
229- return [ resultSet ] ;
224+ componentDidMount ( ) : void {
225+ this . vscodeMessageHandler = this . vscodeMessageHandler . bind ( this ) ;
226+ window . addEventListener ( "message" , this . vscodeMessageHandler ) ;
230227 }
231228
232- private getSortStates (
233- resultsInfo : ResultsInfo ,
234- ) : Map < string , RawResultsSortState > {
235- const entries = Array . from ( resultsInfo . sortedResultsMap . entries ( ) ) ;
236- return new Map (
237- entries . map ( ( [ key , sortedResultSetInfo ] ) => [
238- key ,
239- sortedResultSetInfo . sortState ,
240- ] ) ,
241- ) ;
229+ componentWillUnmount ( ) : void {
230+ if ( this . vscodeMessageHandler ) {
231+ window . removeEventListener ( "message" , this . vscodeMessageHandler ) ;
232+ }
242233 }
243234
244235 render ( ) : JSX . Element {
@@ -286,23 +277,32 @@ export class ResultsApp extends React.Component<
286277 return < span > { displayedResults . errorMessage } </ span > ;
287278 }
288279 }
280+ }
289281
290- componentDidMount ( ) : void {
291- this . vscodeMessageHandler = this . vscodeMessageHandler . bind ( this ) ;
292- window . addEventListener ( "message" , this . vscodeMessageHandler ) ;
293- }
294-
295- componentWillUnmount ( ) : void {
296- if ( this . vscodeMessageHandler ) {
297- window . removeEventListener ( "message" , this . vscodeMessageHandler ) ;
298- }
299- }
282+ function getSortStates (
283+ resultsInfo : ResultsInfo ,
284+ ) : Map < string , RawResultsSortState > {
285+ const entries = Array . from ( resultsInfo . sortedResultsMap . entries ( ) ) ;
286+ return new Map (
287+ entries . map ( ( [ key , sortedResultSetInfo ] ) => [
288+ key ,
289+ sortedResultSetInfo . sortState ,
290+ ] ) ,
291+ ) ;
292+ }
300293
301- private vscodeMessageHandler ( evt : MessageEvent ) {
302- // sanitize origin
303- const origin = evt . origin . replace ( / \n | \r / g, "" ) ;
304- evt . origin === window . origin
305- ? this . handleMessage ( evt . data as IntoResultsViewMsg )
306- : console . error ( `Invalid event origin ${ origin } ` ) ;
294+ function getResultSets ( resultsInfo : ResultsInfo ) : readonly ResultSet [ ] {
295+ const parsedResultSets = resultsInfo . parsedResultSets ;
296+ const resultSet = parsedResultSets . resultSet ;
297+ if (
298+ resultSet . t !== "InterpretedResultSet" &&
299+ resultSet . t !== "RawResultSet"
300+ ) {
301+ throw new Error (
302+ `Invalid result set type. Should be either "InterpretedResultSet" or "RawResultSet", but got "${
303+ ( resultSet as { t : string } ) . t
304+ } ".`,
305+ ) ;
307306 }
307+ return [ resultSet ] ;
308308}
0 commit comments