You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@superset.apache.org by GitBox <gi...@apache.org> on 2018/11/12 22:52:37 UTC
[GitHub] kristw closed pull request #6376: Update SuperChart onRenderXXX
listeners
kristw closed pull request #6376: Update SuperChart onRenderXXX listeners
URL: https://github.com/apache/incubator-superset/pull/6376
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git a/superset/assets/src/chart/Chart.jsx b/superset/assets/src/chart/Chart.jsx
index 67ae006a07..4833d11960 100644
--- a/superset/assets/src/chart/Chart.jsx
+++ b/superset/assets/src/chart/Chart.jsx
@@ -205,7 +205,6 @@ class Chart extends React.PureComponent {
chartProps={skipChartRendering ? null : this.prepareChartProps()}
onRenderSuccess={this.handleRenderSuccess}
onRenderFailure={this.handleRenderFailure}
- skipRendering={skipChartRendering}
/>
</ErrorBoundary>
</div>
diff --git a/superset/assets/src/visualizations/core/components/SuperChart.jsx b/superset/assets/src/visualizations/core/components/SuperChart.jsx
index 4361b1a125..a0117c02bc 100644
--- a/superset/assets/src/visualizations/core/components/SuperChart.jsx
+++ b/superset/assets/src/visualizations/core/components/SuperChart.jsx
@@ -16,7 +16,6 @@ const propTypes = {
postTransformProps: PropTypes.func,
onRenderSuccess: PropTypes.func,
onRenderFailure: PropTypes.func,
- skipRendering: PropTypes.bool,
};
const defaultProps = {
id: '',
@@ -26,7 +25,6 @@ const defaultProps = {
postTransformProps: IDENTITY,
onRenderSuccess() {},
onRenderFailure() {},
- skipRendering: false,
};
class SuperChart extends React.PureComponent {
@@ -66,7 +64,7 @@ class SuperChart extends React.PureComponent {
input => input.overrideTransformProps,
(chartType, overrideTransformProps) => {
if (chartType) {
- return Loadable.Map({
+ const LoadableRenderer = Loadable.Map({
loader: {
Chart: () => componentRegistry.getAsPromise(chartType),
transformProps: overrideTransformProps
@@ -76,12 +74,49 @@ class SuperChart extends React.PureComponent {
loading: loadingProps => this.renderLoading(loadingProps, chartType),
render: this.renderChart,
});
+
+ // Trigger preloading.
+ LoadableRenderer.preload();
+
+ // Extends the behavior of LoadableComponent
+ // generated by react-loadable
+ // to provide post-render listeners
+ class CustomLoadableRenderer extends LoadableRenderer {
+ componentDidMount() {
+ this.afterRender();
+ }
+
+ componentDidUpdate() {
+ this.afterRender();
+ }
+
+ afterRender() {
+ const { loaded, error } = this.state;
+ if (error) {
+ this.props.onRenderFailure(error);
+ } else if (loaded) {
+ this.props.onRenderSuccess();
+ }
+ }
+ }
+
+ CustomLoadableRenderer.propTypes = {
+ onRenderSuccess: PropTypes.func,
+ onRenderFailure: PropTypes.func,
+ };
+ CustomLoadableRenderer.defaultProps = {
+ onRenderSuccess() {},
+ onRenderFailure() {},
+ };
+
+ return CustomLoadableRenderer;
}
return null;
},
);
}
+
renderChart(loaded, props) {
const Chart = loaded.Chart.default || loaded.Chart;
const transformProps = loaded.transformProps.default || loaded.transformProps;
@@ -91,7 +126,7 @@ class SuperChart extends React.PureComponent {
postTransformProps,
} = props;
- const result = (
+ return (
<Chart
{...this.processChartProps({
preTransformProps,
@@ -101,23 +136,19 @@ class SuperChart extends React.PureComponent {
})}
/>
);
- setTimeout(() => this.props.onRenderSuccess(), 0);
- return result;
}
renderLoading(loadableProps, chartType) {
const { error } = loadableProps;
if (error) {
- const result = (
+ return (
<div className="alert alert-warning" role="alert">
<strong>ERROR</strong>
<code>chartType="{chartType}"</code> —
{JSON.stringify(error)}
</div>
);
- setTimeout(() => this.props.onRenderFailure(error), 0);
- return result;
}
return null;
@@ -130,14 +161,18 @@ class SuperChart extends React.PureComponent {
preTransformProps,
postTransformProps,
chartProps,
- skipRendering,
+ onRenderSuccess,
+ onRenderFailure,
} = this.props;
+ // Create LoadableRenderer and start preloading
+ // the lazy-loaded Chart components
const LoadableRenderer = this.createLoadableRenderer(this.props);
- // Use this to allow loading the vis components
- // without rendering (while waiting for data)
- if (skipRendering || !chartProps) {
+ // Do not render if chartProps is not available.
+ // but the pre-loading has been started in this.createLoadableRenderer
+ // to prepare for rendering once chartProps becomes available.
+ if (!chartProps) {
return null;
}
@@ -148,6 +183,8 @@ class SuperChart extends React.PureComponent {
preTransformProps={preTransformProps}
postTransformProps={postTransformProps}
chartProps={chartProps}
+ onRenderSuccess={onRenderSuccess}
+ onRenderFailure={onRenderFailure}
/>
)}
</div>
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
With regards,
Apache Git Services
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org