diff --git a/superset/assets/javascripts/explore/components/ChartContainer.jsx b/superset/assets/javascripts/explore/components/ChartContainer.jsx
index 3243f32e1f604..d5b4545192307 100644
--- a/superset/assets/javascripts/explore/components/ChartContainer.jsx
+++ b/superset/assets/javascripts/explore/components/ChartContainer.jsx
@@ -178,7 +178,8 @@ class ChartContainer extends React.PureComponent {
const mockSlice = this.getMockedSliceObject();
this.setState({ mockSlice });
try {
- visMap[this.props.viz_type](mockSlice, this.props.queryResponse);
+ const viz = visMap[this.props.viz_type];
+ viz(mockSlice, this.props.queryResponse, this.props.actions.setControlValue);
} catch (e) {
this.props.actions.chartRenderingFailed(e);
}
diff --git a/superset/assets/javascripts/explore/components/controls/TextControl.jsx b/superset/assets/javascripts/explore/components/controls/TextControl.jsx
index c3f7aa56852ab..4fe558e0524ac 100644
--- a/superset/assets/javascripts/explore/components/controls/TextControl.jsx
+++ b/superset/assets/javascripts/explore/components/controls/TextControl.jsx
@@ -29,13 +29,10 @@ const defaultProps = {
export default class TextControl extends React.Component {
constructor(props) {
super(props);
- const value = props.value ? props.value.toString() : '';
- this.state = { value };
this.onChange = this.onChange.bind(this);
}
onChange(event) {
let value = event.target.value || '';
- this.setState({ value });
// Validation & casting
const errors = [];
@@ -58,6 +55,7 @@ export default class TextControl extends React.Component {
this.props.onChange(value, errors);
}
render() {
+ const value = this.props.value ? this.props.value.toString() : '';
return (
@@ -66,7 +64,7 @@ export default class TextControl extends React.Component {
type="text"
placeholder=""
onChange={this.onChange}
- value={this.state.value}
+ value={value}
/>
diff --git a/superset/assets/visualizations/mapbox.jsx b/superset/assets/visualizations/mapbox.jsx
index 9a868534723d1..c01ad28a40a85 100644
--- a/superset/assets/visualizations/mapbox.jsx
+++ b/superset/assets/visualizations/mapbox.jsx
@@ -8,6 +8,7 @@ import ScatterPlotOverlay from 'react-map-gl/dist/overlays/scatterplot.react';
import Immutable from 'immutable';
import supercluster from 'supercluster';
import ViewportMercator from 'viewport-mercator-project';
+
import {
kmToPixels,
rgbLuminance,
@@ -17,8 +18,9 @@ import {
DEFAULT_LATITUDE,
DEFAULT_ZOOM,
} from '../utils/common';
+import './mapbox.css';
-require('./mapbox.css');
+const NOOP = () => {};
class ScatterPlotGlowOverlay extends ScatterPlotOverlay {
drawText(ctx, pixel, options = {}) {
@@ -201,9 +203,10 @@ class MapboxViz extends React.Component {
}
onChangeViewport(viewport) {
- this.setState({
- viewport,
- });
+ this.setState({ viewport });
+ this.props.setControlValue('viewport_longitude', viewport.longitude);
+ this.props.setControlValue('viewport_latitude', viewport.latitude);
+ this.props.setControlValue('viewport_zoom', viewport.zoom);
}
render() {
@@ -220,11 +223,6 @@ class MapboxViz extends React.Component {
const clusters = this.props.clusterer.getClusters(bbox, Math.round(this.state.viewport.zoom));
const isDragging = this.state.viewport.isDragging === undefined ? false :
this.state.viewport.isDragging;
-
- d3.select('#viewport_longitude').attr('value', this.state.viewport.longitude);
- d3.select('#viewport_latitude').attr('value', this.state.viewport.latitude);
- d3.select('#viewport_zoom').attr('value', this.state.viewport.zoom);
-
return (
,
div.node(),
);