11import * as React from 'react' ;
2- import { DatabaseInfo , Interpretation , RawResultsSortState , QueryMetadata , ResultsPaths } from '../interface-types' ;
2+ import { DatabaseInfo , Interpretation , RawResultsSortState , QueryMetadata , ResultsPaths , InterpretedResultsSortOrder , InterpretedResultsSortState } from '../interface-types' ;
33import { PathTable } from './alert-table' ;
44import { RawTable } from './raw-results-table' ;
5- import { ResultTableProps , tableSelectionHeaderClassName , toggleDiagnosticsClassName } from './result-table-utils' ;
5+ import { ResultTableProps , tableSelectionHeaderClassName , toggleDiagnosticsClassName , alertExtrasClassName } from './result-table-utils' ;
66import { ResultSet , vscode } from './results' ;
77
88/**
@@ -16,6 +16,7 @@ export interface ResultTablesProps {
1616 resultsPath : string ;
1717 origResultsPaths : ResultsPaths ;
1818 sortStates : Map < string , RawResultsSortState > ;
19+ interpretedSortState ?: InterpretedResultsSortState ;
1920 isLoadingNewResults : boolean ;
2021}
2122
@@ -89,17 +90,21 @@ export class ResultTables
8990 return [ ALERTS_TABLE_NAME , SELECT_TABLE_NAME , resultSets [ 0 ] . schema . name ] . filter ( resultSetName => resultSetNames . includes ( resultSetName ) ) [ 0 ] ;
9091 }
9192
92- private onChange = ( event : React . ChangeEvent < HTMLSelectElement > ) : void => {
93+ private onTableSelectionChange = ( event : React . ChangeEvent < HTMLSelectElement > ) : void => {
9394 this . setState ( { selectedTable : event . target . value } ) ;
9495 }
9596
96- render ( ) : React . ReactNode {
97- const { selectedTable } = this . state ;
98- const resultSets = this . getResultSets ( ) ;
99- const { database, resultsPath, metadata, origResultsPaths } = this . props ;
97+ private onSortChange = ( event : React . ChangeEvent < HTMLSelectElement > ) : void => {
98+ vscode . postMessage ( {
99+ t : 'changeInterpretedSort' ,
100+ sortState : { sortBy : event . target . value as InterpretedResultsSortOrder } ,
101+ } ) ;
102+ }
103+
104+ private alertTableExtras ( ) : JSX . Element | undefined {
105+ const { database, resultsPath, metadata, origResultsPaths, interpretedSortState } = this . props ;
100106
101- // Only show the Problems view display checkbox for the alerts table.
102- const diagnosticsCheckBox = selectedTable === ALERTS_TABLE_NAME ?
107+ const displayProblemsAsAlertsToggle =
103108 < div className = { toggleDiagnosticsClassName } >
104109 < input type = "checkbox" id = "toggle-diagnostics" name = "toggle-diagnostics" onChange = { ( e ) => {
105110 if ( resultsPath !== undefined ) {
@@ -113,14 +118,31 @@ export class ResultTables
113118 }
114119 } } />
115120 < label htmlFor = "toggle-diagnostics" > Show results in Problems view</ label >
116- </ div > : undefined ;
121+ </ div > ;
122+
123+ const interpretedResultsSortSelect = < select value = { interpretedSortState ?. sortBy || 'file-position' }
124+ onChange = { this . onSortChange } >
125+ < option value = { 'file-position' } > Source File Position</ option >
126+ < option value = { 'alert-message' } > Alert Message</ option >
127+ </ select > ;
128+
129+ return < div className = { alertExtrasClassName } >
130+ Sort:
131+ { interpretedResultsSortSelect }
132+ { displayProblemsAsAlertsToggle }
133+ </ div >
134+ }
135+
136+ render ( ) : React . ReactNode {
137+ const { selectedTable } = this . state ;
138+ const resultSets = this . getResultSets ( ) ;
117139
118140 const resultSet = resultSets . find ( resultSet => resultSet . schema . name == selectedTable ) ;
119141 const numberOfResults = resultSet && renderResultCountString ( resultSet ) ;
120142
121143 return < div >
122144 < div className = { tableSelectionHeaderClassName } >
123- < select value = { selectedTable } onChange = { this . onChange } >
145+ < select value = { selectedTable } onChange = { this . onTableSelectionChange } >
124146 {
125147 resultSets . map ( resultSet =>
126148 < option key = { resultSet . schema . name } value = { resultSet . schema . name } >
@@ -130,7 +152,7 @@ export class ResultTables
130152 }
131153 </ select >
132154 { numberOfResults }
133- { diagnosticsCheckBox }
155+ { selectedTable === ALERTS_TABLE_NAME ? this . alertTableExtras ( ) : undefined }
134156 {
135157 this . props . isLoadingNewResults ?
136158 < span className = { UPDATING_RESULTS_TEXT_CLASS_NAME } > Updating results…</ span >
@@ -144,7 +166,7 @@ export class ResultTables
144166 resultsPath = { this . props . resultsPath }
145167 sortState = { this . props . sortStates . get ( resultSet . schema . name ) } />
146168 }
147- </ div > ;
169+ </ div > ;
148170 }
149171}
150172
0 commit comments