diff --git a/extensions/ql-vscode/src/view/results/ResultCount.tsx b/extensions/ql-vscode/src/view/results/ResultCount.tsx
new file mode 100644
index 000000000..832b928d7
--- /dev/null
+++ b/extensions/ql-vscode/src/view/results/ResultCount.tsx
@@ -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 (
+
+ {resultCount} {resultCount === 1 ? "result" : "results"}
+
+ );
+}
diff --git a/extensions/ql-vscode/src/view/results/ResultTables.tsx b/extensions/ql-vscode/src/view/results/ResultTables.tsx
index 064327d48..a1eb319bf 100644
--- a/extensions/ql-vscode/src/view/results/ResultTables.tsx
+++ b/extensions/ql-vscode/src/view/results/ResultTables.tsx
@@ -16,7 +16,6 @@ import {
} from "../../common/interface-types";
import {
tableHeaderClassName,
- tableHeaderItemClassName,
toggleDiagnosticsClassName,
alertExtrasClassName,
} from "./result-table-utils";
@@ -25,6 +24,7 @@ import { sendTelemetry } from "../common/telemetry";
import { ResultTable } from "./ResultTable";
import { ResultTablesHeader } from "./ResultTablesHeader";
import { useCallback, useEffect, useMemo, useState } from "react";
+import { ResultCount } from "./ResultCount";
/**
* Properties for the `ResultTables` component.
@@ -47,24 +47,6 @@ interface ResultTablesProps {
const UPDATING_RESULTS_TEXT_CLASS_NAME =
"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 (
-
- {resultCount} {resultCount === 1 ? "result" : "results"}
-
- );
-}
-
function getInterpretedTableName(interpretation: Interpretation): string {
return interpretation.data.t === "GraphInterpretationData"
? GRAPH_TABLE_NAME
@@ -256,7 +238,6 @@ export function ResultTables(props: ResultTablesProps) {
const nonemptyRawResults = resultSets.some(
(resultSet) => resultSet.t === "RawResultSet" && resultSet.rows.length > 0,
);
- const numberOfResults = resultSet && renderResultCountString(resultSet);
const resultSetOptions = resultSetNames.map((name) => (