diff --git a/superset/assets/src/chart/Chart.jsx b/superset/assets/src/chart/Chart.jsx index 8dfc77d7e34c7..fbdecf6baaa42 100644 --- a/superset/assets/src/chart/Chart.jsx +++ b/superset/assets/src/chart/Chart.jsx @@ -3,6 +3,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import Mustache from 'mustache'; import { Tooltip } from 'react-bootstrap'; +import dompurify from 'dompurify'; import { d3format } from '../modules/utils'; import ChartBody from './ChartBody'; @@ -203,9 +204,13 @@ class Chart extends React.PureComponent { positionLeft={this.state.tooltip.x + 30} arrowOffsetTop={10} > -
+ {typeof (this.state.tooltip.content) === 'string' ? +
+ : + this.state.tooltip.content + } ); } diff --git a/superset/assets/src/visualizations/deckgl/layers/common.js b/superset/assets/src/visualizations/deckgl/layers/common.jsx similarity index 82% rename from superset/assets/src/visualizations/deckgl/layers/common.js rename to superset/assets/src/visualizations/deckgl/layers/common.jsx index 7eed061592248..b67ae7dcb12c7 100644 --- a/superset/assets/src/visualizations/deckgl/layers/common.js +++ b/superset/assets/src/visualizations/deckgl/layers/common.jsx @@ -1,4 +1,4 @@ -import dompurify from 'dompurify'; +import React from 'react'; import { fitBounds } from 'viewport-mercator-project'; import sandboxedEval from '../../../modules/sandbox'; @@ -36,10 +36,14 @@ export function commonLayerProps(formData, slice) { let onHover; let tooltipContentGenerator; if (fd.js_tooltip) { - const unsanitizedTooltipGenerator = sandboxedEval(fd.js_tooltip); - tooltipContentGenerator = o => dompurify.sanitize(unsanitizedTooltipGenerator(o)); + tooltipContentGenerator = sandboxedEval(fd.js_tooltip); } else if (fd.line_column && fd.line_type === 'geohash') { - tooltipContentGenerator = o => `${fd.line_column}: ${o.object[fd.line_column]}`; + tooltipContentGenerator = o => ( +
+
{fd.line_column}: {o.object[fd.line_column]}
+ {fd.metric && +
{fd.metric}: {o.object[fd.metric]}
} +
); } if (tooltipContentGenerator) { onHover = (o) => {