Skip to content

Commit 20dea5e

Browse files
committed
Also show selection in raw result view
1 parent 3c4682e commit 20dea5e

3 files changed

Lines changed: 23 additions & 4 deletions

File tree

extensions/ql-vscode/src/view/results/RawTableRow.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,28 @@
11
import * as React from 'react';
22
import { ResultRow } from '../../pure/bqrs-cli-types';
3-
import { zebraStripe } from './result-table-utils';
3+
import { selectableZebraStripe } from './result-table-utils';
44
import RawTableValue from './RawTableValue';
55

66
interface Props {
77
rowIndex: number;
88
row: ResultRow;
99
databaseUri: string;
1010
className?: string;
11+
isSelected?: boolean;
12+
onSelected?: (row: number, column: number) => void;
1113
}
1214

1315
export default function RawTableRow(props: Props) {
1416
return (
15-
<tr key={props.rowIndex} {...zebraStripe(props.rowIndex, props.className || '')}>
17+
<tr key={props.rowIndex} {...selectableZebraStripe(props.isSelected ?? false, props.rowIndex, props.className || '')}>
1618
<td key={-1}>{props.rowIndex + 1}</td>
1719

1820
{props.row.map((value, columnIndex) => (
1921
<td key={columnIndex}>
2022
<RawTableValue
2123
value={value}
2224
databaseUri={props.databaseUri}
25+
onSelected={() => props.onSelected?.(props.rowIndex, columnIndex)}
2326
/>
2427
</td>
2528
))}

extensions/ql-vscode/src/view/results/RawTableValue.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { CellValue } from '../../pure/bqrs-cli-types';
66
interface Props {
77
value: CellValue;
88
databaseUri: string;
9+
onSelected?: () => void;
910
}
1011

1112
export default function RawTableValue(props: Props): JSX.Element {
@@ -18,5 +19,5 @@ export default function RawTableValue(props: Props): JSX.Element {
1819
return <span>{renderLocation(undefined, rawValue.toString())}</span>;
1920
}
2021

21-
return renderLocation(rawValue.url, rawValue.label, props.databaseUri);
22+
return renderLocation(rawValue.url, rawValue.label, props.databaseUri, undefined, props.onSelected);
2223
}

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

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,22 @@ export type RawTableProps = ResultTableProps & {
1212
offset: number;
1313
};
1414

15-
export class RawTable extends React.Component<RawTableProps, Record<string, never>> {
15+
interface RawTableState {
16+
selectedItem?: { row: number, column: number };
17+
}
18+
19+
export class RawTable extends React.Component<RawTableProps, RawTableState> {
1620
constructor(props: RawTableProps) {
1721
super(props);
22+
this.setSelection = this.setSelection.bind(this);
23+
this.state = {};
24+
}
25+
26+
private setSelection(row: number, column: number) {
27+
this.setState(prev => ({
28+
...prev,
29+
selectedItem: { row, column }
30+
}));
1831
}
1932

2033
render(): React.ReactNode {
@@ -37,6 +50,8 @@ export class RawTable extends React.Component<RawTableProps, Record<string, neve
3750
rowIndex={rowIndex + this.props.offset}
3851
row={row}
3952
databaseUri={databaseUri}
53+
isSelected={this.state.selectedItem?.row === rowIndex}
54+
onSelected={this.setSelection}
4055
/>
4156
);
4257

0 commit comments

Comments
 (0)