@@ -70,13 +70,13 @@ function renderResultCountString(resultSet: ResultSet): JSX.Element {
7070export class ResultTables
7171 extends React . Component < ResultTablesProps , ResultTablesState > {
7272
73- private getResultSets ( ) : ResultSet [ ] {
73+ private static _getResultSetsOfProps ( props : ResultTablesProps ) : ResultSet [ ] {
7474 const resultSets : ResultSet [ ] =
7575 // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
7676 // @ts -ignore 2783
77- this . props . rawResultSets . map ( ( rs ) => ( { t : 'RawResultSet' , ...rs } ) ) ;
77+ props . rawResultSets . map ( ( rs ) => ( { t : 'RawResultSet' , ...rs } ) ) ;
7878
79- if ( this . props . interpretation != undefined ) {
79+ if ( props . interpretation != undefined ) {
8080 resultSets . push ( {
8181 t : 'SarifResultSet' ,
8282 // FIXME: The values of version, columns, tupleCount are
@@ -85,12 +85,16 @@ export class ResultTables
8585 // out.
8686 schema : { name : ALERTS_TABLE_NAME , version : 0 , columns : [ ] , tupleCount : 1 } ,
8787 name : ALERTS_TABLE_NAME ,
88- ...this . props . interpretation ,
88+ ...props . interpretation ,
8989 } ) ;
9090 }
9191 return resultSets ;
9292 }
9393
94+ private getResultSets ( ) : ResultSet [ ] {
95+ return ResultTables . _getResultSetsOfProps ( this . props ) ;
96+ }
97+
9498 private getResultSetNames ( resultSets : ResultSet [ ] ) : string [ ] {
9599 if ( this . props . parsedResultSets . t === 'ExtensionParsed' ) {
96100 return this . props . parsedResultSets . resultSetNames . concat ( [ ALERTS_TABLE_NAME ] ) ;
@@ -120,10 +124,14 @@ export class ResultTables
120124
121125 constructor ( props : ResultTablesProps ) {
122126 super ( props ) ;
127+ this . state = ResultTables . getDerivedStateFromProps ( props ) ;
128+ }
123129
124- const selectedTable = props . parsedResultSets . selectedTable || getDefaultResultSet ( this . getResultSets ( ) ) ;
125-
130+ // Static lifecycle method which is called by react when props change.
131+ static getDerivedStateFromProps ( props : Readonly < ResultTablesProps > , _prevState ?: ResultTablesState ) : ResultTablesState {
132+ const selectedTable = props . parsedResultSets . selectedTable || getDefaultResultSet ( ResultTables . _getResultSetsOfProps ( props ) ) ;
126133 let selectedPage : string ;
134+
127135 switch ( props . parsedResultSets . t ) {
128136 case 'ExtensionParsed' :
129137 selectedPage = ( props . parsedResultSets . pageNumber + 1 ) + '' ;
@@ -132,8 +140,7 @@ export class ResultTables
132140 selectedPage = '' ;
133141 break ;
134142 }
135-
136- this . state = { selectedTable, selectedPage } ;
143+ return { selectedTable, selectedPage } ;
137144 }
138145
139146 private onTableSelectionChange = ( event : React . ChangeEvent < HTMLSelectElement > ) : void => {
@@ -218,7 +225,7 @@ export class ResultTables
218225 } ;
219226 return < span >
220227 < button onClick = { prevPage } > <</ button >
221- < input value = { this . state . selectedPage } onChange = { onChange }
228+ < input size = { 3 } value = { this . state . selectedPage } onChange = { onChange }
222229 onBlur = { e => choosePage ( e . target . value ) }
223230 onKeyDown = { e => { if ( e . keyCode === 13 ) choosePage ( ( e . target as HTMLInputElement ) . value ) ; } }
224231 />
0 commit comments