Move ResultCount to a separate component

This commit is contained in:
Robert
2023-08-14 16:54:33 +01:00
parent 194c8d5cfc
commit 2ff0ee58fc
2 changed files with 31 additions and 21 deletions

View File

@@ -0,0 +1,29 @@
import * as React from "react";
import { ResultSet } from "../../common/interface-types";
import { tableHeaderItemClassName } from "./result-table-utils";
interface Props {
resultSet?: ResultSet;
}
function getResultCount(resultSet: ResultSet): number {
switch (resultSet.t) {
case "RawResultSet":
return resultSet.schema.rows;
case "InterpretedResultSet":
return resultSet.interpretation.numTotalResults;
}
}
export function ResultCount(props: Props): JSX.Element | null {
if (!props.resultSet) {
return null;
}
const resultCount = getResultCount(props.resultSet);
return (
<span className={tableHeaderItemClassName}>
{resultCount} {resultCount === 1 ? "result" : "results"}
</span>
);
}

View File

@@ -16,7 +16,6 @@ import {
} from "../../common/interface-types"; } from "../../common/interface-types";
import { import {
tableHeaderClassName, tableHeaderClassName,
tableHeaderItemClassName,
toggleDiagnosticsClassName, toggleDiagnosticsClassName,
alertExtrasClassName, alertExtrasClassName,
} from "./result-table-utils"; } from "./result-table-utils";
@@ -25,6 +24,7 @@ import { sendTelemetry } from "../common/telemetry";
import { ResultTable } from "./ResultTable"; import { ResultTable } from "./ResultTable";
import { ResultTablesHeader } from "./ResultTablesHeader"; import { ResultTablesHeader } from "./ResultTablesHeader";
import { useCallback, useEffect, useMemo, useState } from "react"; import { useCallback, useEffect, useMemo, useState } from "react";
import { ResultCount } from "./ResultCount";
/** /**
* Properties for the `ResultTables` component. * Properties for the `ResultTables` component.
@@ -47,24 +47,6 @@ interface ResultTablesProps {
const UPDATING_RESULTS_TEXT_CLASS_NAME = const UPDATING_RESULTS_TEXT_CLASS_NAME =
"vscode-codeql__result-tables-updating-text"; "vscode-codeql__result-tables-updating-text";
function getResultCount(resultSet: ResultSet): number {
switch (resultSet.t) {
case "RawResultSet":
return resultSet.schema.rows;
case "InterpretedResultSet":
return resultSet.interpretation.numTotalResults;
}
}
function renderResultCountString(resultSet: ResultSet): JSX.Element {
const resultCount = getResultCount(resultSet);
return (
<span className={tableHeaderItemClassName}>
{resultCount} {resultCount === 1 ? "result" : "results"}
</span>
);
}
function getInterpretedTableName(interpretation: Interpretation): string { function getInterpretedTableName(interpretation: Interpretation): string {
return interpretation.data.t === "GraphInterpretationData" return interpretation.data.t === "GraphInterpretationData"
? GRAPH_TABLE_NAME ? GRAPH_TABLE_NAME
@@ -256,7 +238,6 @@ export function ResultTables(props: ResultTablesProps) {
const nonemptyRawResults = resultSets.some( const nonemptyRawResults = resultSets.some(
(resultSet) => resultSet.t === "RawResultSet" && resultSet.rows.length > 0, (resultSet) => resultSet.t === "RawResultSet" && resultSet.rows.length > 0,
); );
const numberOfResults = resultSet && renderResultCountString(resultSet);
const resultSetOptions = resultSetNames.map((name) => ( const resultSetOptions = resultSetNames.map((name) => (
<option key={name} value={name}> <option key={name} value={name}>
@@ -271,7 +252,7 @@ export function ResultTables(props: ResultTablesProps) {
<select value={selectedTable} onChange={onTableSelectionChange}> <select value={selectedTable} onChange={onTableSelectionChange}>
{resultSetOptions} {resultSetOptions}
</select> </select>
{numberOfResults} <ResultCount resultSet={resultSet} />
{alertTableExtras} {alertTableExtras}
{isLoadingNewResults ? ( {isLoadingNewResults ? (
<span className={UPDATING_RESULTS_TEXT_CLASS_NAME}> <span className={UPDATING_RESULTS_TEXT_CLASS_NAME}>