1
- import { isEqual , map , find } from "lodash" ;
1
+ import { isEqual , isEmpty , map , find } from "lodash" ;
2
2
import React , { useState , useMemo , useEffect , useRef } from "react" ;
3
3
import PropTypes from "prop-types" ;
4
4
import getQueryResultData from "@/lib/getQueryResultData" ;
@@ -55,7 +55,9 @@ export default function VisualizationRenderer(props) {
55
55
) ;
56
56
57
57
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
+ ] ;
59
61
60
62
// Avoid unnecessary updates (which may be expensive or cause issues with
61
63
// internal state of some visualizations like Table) - compare options deeply
@@ -78,16 +80,22 @@ export default function VisualizationRenderer(props) {
78
80
< ErrorBoundary
79
81
ref = { errorHandlerRef }
80
82
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
+ ) }
91
99
</ ErrorBoundary >
92
100
</ div >
93
101
) ;
@@ -99,9 +107,11 @@ VisualizationRenderer.propTypes = {
99
107
filters : FiltersType ,
100
108
showFilters : PropTypes . bool ,
101
109
context : PropTypes . oneOf ( [ "query" , "widget" ] ) . isRequired ,
110
+ emptyState : PropTypes . node ,
102
111
} ;
103
112
104
113
VisualizationRenderer . defaultProps = {
105
114
filters : [ ] ,
106
115
showFilters : true ,
116
+ emptyState : null ,
107
117
} ;
0 commit comments