Skip to content

Commit cff0163

Browse files
committed
Control visualization row emptyState from Renderer
1 parent 3c981c7 commit cff0163

File tree

3 files changed

+37
-22
lines changed

3 files changed

+37
-22
lines changed

client/app/pages/queries/components/QueryVisualizationTabs.jsx

+13-10
Original file line numberDiff line numberDiff line change
@@ -142,17 +142,20 @@ export default function QueryVisualizationTabs({
142142
onDelete={() => onDeleteVisualization(visualization.id)}
143143
/>
144144
}>
145-
{queryResult && !(queryResult.isEmpty && queryResult.isEmpty()) && (
146-
<VisualizationRenderer visualization={visualization} queryResult={queryResult} context="query" />
147-
)}
148-
{queryResult && queryResult.isEmpty && queryResult.isEmpty() && (
149-
<EmptyState
150-
title="No rows returned"
151-
message="Please update your query or refresh the results using the button below."
152-
refreshButton={refreshButton}
145+
{queryResult ? (
146+
<VisualizationRenderer
147+
visualization={visualization}
148+
queryResult={queryResult}
149+
context="query"
150+
emptyState={
151+
<EmptyState
152+
title="No rows returned"
153+
message="Please update your query or refresh the results using the button below."
154+
refreshButton={refreshButton}
155+
/>
156+
}
153157
/>
154-
)}
155-
{!queryResult && (
158+
) : (
156159
<EmptyState
157160
title="No results found!"
158161
message="Please update your query or refresh the results using the button below."

client/app/visualizations/components/VisualizationRenderer.jsx

+22-12
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { isEqual, map, find } from "lodash";
1+
import { isEqual, isEmpty, map, find } from "lodash";
22
import React, { useState, useMemo, useEffect, useRef } from "react";
33
import PropTypes from "prop-types";
44
import getQueryResultData from "@/lib/getQueryResultData";
@@ -55,7 +55,9 @@ export default function VisualizationRenderer(props) {
5555
);
5656

5757
const { showFilters, visualization } = props;
58-
const { Renderer, getOptions } = registeredVisualizations[visualization.type];
58+
const { Renderer, getOptions, isVisualizationEmpty = data => isEmpty(data.rows) } = registeredVisualizations[
59+
visualization.type
60+
];
5961

6062
// Avoid unnecessary updates (which may be expensive or cause issues with
6163
// internal state of some visualizations like Table) - compare options deeply
@@ -78,16 +80,22 @@ export default function VisualizationRenderer(props) {
7880
<ErrorBoundary
7981
ref={errorHandlerRef}
8082
renderError={() => <ErrorMessage>Error while rendering visualization.</ErrorMessage>}>
81-
{showFilters && <Filters filters={filters} onChange={setFilters} />}
82-
<div className="visualization-renderer-wrapper">
83-
<Renderer
84-
key={`visualization${visualization.id}`}
85-
options={options}
86-
data={filteredData}
87-
visualizationName={visualization.name}
88-
context={props.context}
89-
/>
90-
</div>
83+
{!isVisualizationEmpty(data, options) ? (
84+
<>
85+
{showFilters && <Filters filters={filters} onChange={setFilters} />}
86+
<div className="visualization-renderer-wrapper">
87+
<Renderer
88+
key={`visualization${visualization.id}`}
89+
options={options}
90+
data={filteredData}
91+
visualizationName={visualization.name}
92+
context={props.context}
93+
/>
94+
</div>
95+
</>
96+
) : (
97+
props.emptyState
98+
)}
9199
</ErrorBoundary>
92100
</div>
93101
);
@@ -99,9 +107,11 @@ VisualizationRenderer.propTypes = {
99107
filters: FiltersType,
100108
showFilters: PropTypes.bool,
101109
context: PropTypes.oneOf(["query", "widget"]).isRequired,
110+
emptyState: PropTypes.node,
102111
};
103112

104113
VisualizationRenderer.defaultProps = {
105114
filters: [],
106115
showFilters: true,
116+
emptyState: null,
107117
};

client/app/visualizations/counter/index.js

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { get, isEmpty } from "lodash";
12
import Renderer from "./Renderer";
23
import Editor from "./Editor";
34

@@ -16,6 +17,7 @@ export default {
1617
type: "COUNTER",
1718
name: "Counter",
1819
getOptions: options => ({ ...DEFAULT_OPTIONS, ...options }),
20+
isVisualizationEmpty: (data, options) => !get(options, "countRow") && isEmpty(data.rows),
1921
Renderer,
2022
Editor,
2123

0 commit comments

Comments
 (0)