Move ResultCount to a separate component
This commit is contained in:
29
extensions/ql-vscode/src/view/results/ResultCount.tsx
Normal file
29
extensions/ql-vscode/src/view/results/ResultCount.tsx
Normal 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>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -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}>
|
||||||
|
|||||||
Reference in New Issue
Block a user