Skip to content

Commit 4287f4d

Browse files
authored
Merge pull request #169 from jcreedcmu/no-selected-class
Simplify selected results table handling
2 parents cfcbdcd + 155a235 commit 4287f4d

File tree

5 files changed

+37
-57
lines changed

5 files changed

+37
-57
lines changed

extensions/ql-vscode/src/view/alert-table.tsx

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
import cx from 'classnames';
21
import * as path from 'path';
32
import * as React from 'react';
43
import * as Sarif from 'sarif';
54
import { LocationStyle, ResolvableLocationValue } from 'semmle-bqrs';
65
import * as octicons from './octicons';
7-
import { className, renderLocation, ResultTableProps, selectedClassName, zebraStripe } from './result-table-utils';
6+
import { className, renderLocation, ResultTableProps, zebraStripe } from './result-table-utils';
87
import { PathTableResultSet } from './results';
98

109
export type PathTableProps = ResultTableProps & { resultSet: PathTableResultSet };
@@ -99,11 +98,7 @@ export class PathTable extends React.Component<PathTableProps, PathTableState> {
9998
}
10099

101100
render(): JSX.Element {
102-
const { selected, databaseUri, resultSet } = this.props;
103-
104-
const tableClassName = cx(className, {
105-
[selectedClassName]: selected
106-
});
101+
const { databaseUri, resultSet } = this.props;
107102

108103
const rows: JSX.Element[] = [];
109104
const { numTruncatedResults, sourceLocationPrefix } = resultSet;
@@ -342,7 +337,7 @@ export class PathTable extends React.Component<PathTableProps, PathTableState> {
342337
</td></tr>);
343338
}
344339

345-
return <table className={tableClassName}>
340+
return <table className={className}>
346341
<tbody>{rows}</tbody>
347342
</table>;
348343
}

extensions/ql-vscode/src/view/raw-results-table.tsx

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import cx from 'classnames';
21
import * as React from "react";
3-
import { className, renderLocation, ResultTableProps, selectedClassName, zebraStripe } from "./result-table-utils";
2+
import { renderLocation, ResultTableProps, zebraStripe, className } from "./result-table-utils";
43
import { RawTableResultSet, ResultValue, vscode } from "./results";
54
import { assertNever } from "../helpers-pure";
65
import { SortDirection, SortState, RAW_RESULTS_LIMIT } from "../interface-types";
@@ -16,11 +15,7 @@ export class RawTable extends React.Component<RawTableProps, {}> {
1615
}
1716

1817
render(): React.ReactNode {
19-
const { resultSet, selected, databaseUri } = this.props;
20-
21-
const tableClassName = cx(className, {
22-
[selectedClassName]: selected
23-
});
18+
const { resultSet, databaseUri } = this.props;
2419

2520
let dataRows = this.props.resultSet.rows;
2621
let numTruncatedResults = 0;
@@ -52,7 +47,7 @@ export class RawTable extends React.Component<RawTableProps, {}> {
5247
</td></tr>);
5348
}
5449

55-
return <table className={tableClassName}>
50+
return <table className={className}>
5651
<thead>
5752
<tr>
5853
{

extensions/ql-vscode/src/view/result-table-utils.tsx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { SortState } from '../interface-types';
44
import { ResultSet, vscode } from './results';
55

66
export interface ResultTableProps {
7-
selected: boolean;
87
resultSet: ResultSet;
98
databaseUri: string;
109
resultsPath: string | undefined;
@@ -14,8 +13,6 @@ export interface ResultTableProps {
1413
export const className = 'vscode-codeql__result-table';
1514
export const tableSelectionHeaderClassName = 'vscode-codeql__table-selection-header';
1615
export const toggleDiagnosticsClassName = `${className}-toggle-diagnostics`;
17-
export const selectedClassName = `${className}--selected`;
18-
export const toggleDiagnosticsSelectedClassName = `${toggleDiagnosticsClassName}--selected`;
1916
export const evenRowClassName = 'vscode-codeql__result-table-row--even';
2017
export const oddRowClassName = 'vscode-codeql__result-table-row--odd';
2118
export const pathRowClassName = 'vscode-codeql__result-table-row--path';

extensions/ql-vscode/src/view/result-tables.tsx

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
import cx from 'classnames';
21
import * as React from 'react';
32
import { DatabaseInfo, Interpretation, SortState } from '../interface-types';
43
import { PathTable } from './alert-table';
54
import { RawTable } from './raw-results-table';
6-
import { ResultTableProps, toggleDiagnosticsClassName, toggleDiagnosticsSelectedClassName, tableSelectionHeaderClassName } from './result-table-utils';
5+
import { ResultTableProps, tableSelectionHeaderClassName, toggleDiagnosticsClassName } from './result-table-utils';
76
import { ResultSet, vscode } from './results';
87

98
/**
@@ -76,14 +75,26 @@ export class ResultTables
7675
}
7776

7877
render(): React.ReactNode {
79-
const selectedTable = this.state.selectedTable;
78+
const { selectedTable } = this.state;
8079
const resultSets = this.getResultSets();
8180
const { database, resultsPath, kind } = this.props;
8281

8382
// Only show the Problems view display checkbox for the alerts table.
84-
const toggleDiagnosticsClass = cx(toggleDiagnosticsClassName, {
85-
[toggleDiagnosticsSelectedClassName]: selectedTable === ALERTS_TABLE_NAME
86-
});
83+
const diagnosticsCheckBox = selectedTable === ALERTS_TABLE_NAME ?
84+
<div className={toggleDiagnosticsClassName}>
85+
<input type="checkbox" id="toggle-diagnostics" name="toggle-diagnostics" onChange={(e) => {
86+
if (resultsPath !== undefined) {
87+
vscode.postMessage({
88+
t: 'toggleDiagnostics',
89+
resultsPath: resultsPath,
90+
databaseUri: database.databaseUri,
91+
visible: e.target.checked,
92+
kind: kind
93+
});
94+
}
95+
}} />
96+
<label htmlFor="toggle-diagnostics">Show results in Problems view</label>
97+
</div> : undefined;
8798

8899
return <div>
89100
<div className={tableSelectionHeaderClassName}>
@@ -96,20 +107,7 @@ export class ResultTables
96107
)
97108
}
98109
</select>
99-
<div className={toggleDiagnosticsClass}>
100-
<input type="checkbox" id="toggle-diagnostics" name="toggle-diagnostics" onChange={(e) => {
101-
if (resultsPath !== undefined) {
102-
vscode.postMessage({
103-
t: 'toggleDiagnostics',
104-
resultsPath: resultsPath,
105-
databaseUri: database.databaseUri,
106-
visible: e.target.checked,
107-
kind: kind
108-
});
109-
}
110-
}} />
111-
<label htmlFor="toggle-diagnostics">Show results in Problems view</label>
112-
</div>
110+
{diagnosticsCheckBox}
113111
{
114112
this.props.isLoadingNewResults ?
115113
<span className={UPDATING_RESULTS_TEXT_CLASS_NAME}>Updating results…</span>
@@ -118,9 +116,12 @@ export class ResultTables
118116
</div>
119117
{
120118
resultSets.map(resultSet =>
121-
<ResultTable key={resultSet.schema.name} resultSet={resultSet}
122-
databaseUri={this.props.database.databaseUri} selected={resultSet.schema.name === selectedTable}
123-
resultsPath={this.props.resultsPath} sortState={this.props.sortStates.get(resultSet.schema.name)} />
119+
resultSet.schema.name === selectedTable ?
120+
<ResultTable key={resultSet.schema.name} resultSet={resultSet}
121+
databaseUri={this.props.database.databaseUri}
122+
resultsPath={this.props.resultsPath}
123+
sortState={this.props.sortStates.get(resultSet.schema.name)} /> :
124+
undefined
124125
)
125126
}
126127
</div>;
@@ -137,10 +138,10 @@ class ResultTable extends React.Component<ResultTableProps, {}> {
137138
const { resultSet } = this.props;
138139
switch (resultSet.t) {
139140
case 'RawResultSet': return <RawTable
140-
selected={this.props.selected} resultSet={resultSet} databaseUri={this.props.databaseUri}
141+
resultSet={resultSet} databaseUri={this.props.databaseUri}
141142
resultsPath={this.props.resultsPath} sortState={this.props.sortState} />;
142143
case 'SarifResultSet': return <PathTable
143-
selected={this.props.selected} resultSet={resultSet} databaseUri={this.props.databaseUri}
144+
resultSet={resultSet} databaseUri={this.props.databaseUri}
144145
resultsPath={this.props.resultsPath} />;
145146
}
146147
}

extensions/ql-vscode/src/view/resultsView.css

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
.vscode-codeql__result-table {
2-
display: none;
2+
display: table;
33
border-collapse: collapse;
44
width: 100%;
55
}
66

7-
.vscode-codeql__result-table--selected {
8-
display: table;
9-
}
10-
117
.vscode-codeql__table-selection-header {
128
display: flex;
139
padding: 0.5em 0;
@@ -18,22 +14,18 @@
1814
}
1915

2016
.vscode-codeql__result-table-toggle-diagnostics {
21-
display: none;
17+
display: inline-block;
2218
text-align: left;
2319
margin-left: auto;
2420
}
2521

26-
.vscode-codeql__result-table-toggle-diagnostics--selected {
27-
display: inline-block;
28-
}
29-
3022
/* Keep the checkbox and its label in horizontal alignment. */
31-
.vscode-codeql__result-table-toggle-diagnostics--selected label,
32-
.vscode-codeql__result-table-toggle-diagnostics--selected input {
23+
.vscode-codeql__result-table-toggle-diagnostics label,
24+
.vscode-codeql__result-table-toggle-diagnostics input {
3325
display: inline-block;
3426
vertical-align: middle;
3527
}
36-
.vscode-codeql__result-table-toggle-diagnostics--selected input {
28+
.vscode-codeql__result-table-toggle-diagnostics input {
3729
margin: 3px 3px 1px 3px;
3830
}
3931

0 commit comments

Comments
 (0)