mirror of
https://github.com/apache/superset.git
synced 2026-08-12 11:11:01 +00:00
[Bugfix/Feature] Fixed slice render staggering on dashboard first load (#3478)
* Feature: disable dashboard refresh staggering * Removed refresh staggering everywhere except during periodic render
This commit is contained in:
committed by
Maxime Beauchemin
parent
bb0f69d074
commit
e95132ddc3
@@ -126,7 +126,8 @@ export function dashboardContainer(dashboard, datasources, userid) {
|
||||
}
|
||||
});
|
||||
this.loadPreSelectFilters();
|
||||
this.startPeriodicRender(0);
|
||||
this.renderSlices(this.sliceObjects);
|
||||
this.firstLoad = false;
|
||||
this.bindResizeToWindowResize();
|
||||
},
|
||||
onChange() {
|
||||
@@ -254,25 +255,31 @@ export function dashboardContainer(dashboard, datasources, userid) {
|
||||
this.refreshTimer = null;
|
||||
}
|
||||
},
|
||||
renderSlices(slices, force = false, interval = 0) {
|
||||
if (!interval) {
|
||||
slices.forEach(slice => slice.render(force));
|
||||
return;
|
||||
}
|
||||
const meta = this.metadata;
|
||||
const refreshTime = Math.max(interval, meta.stagger_time || 5000); // default 5 seconds
|
||||
if (typeof meta.stagger_refresh !== 'boolean') {
|
||||
meta.stagger_refresh = meta.stagger_refresh === undefined ?
|
||||
true : meta.stagger_refresh === 'true';
|
||||
}
|
||||
const delay = meta.stagger_refresh ? refreshTime / (slices.length - 1) : 0;
|
||||
slices.forEach((slice, i) => {
|
||||
setTimeout(() => slice.render(force), delay * i);
|
||||
});
|
||||
},
|
||||
startPeriodicRender(interval) {
|
||||
this.stopPeriodicRender();
|
||||
const dash = this;
|
||||
const immune = this.metadata.timed_refresh_immune_slices || [];
|
||||
const maxRandomDelay = Math.max(interval * 0.2, 5000);
|
||||
const refreshAll = () => {
|
||||
dash.sliceObjects.forEach((slice) => {
|
||||
const force = !dash.firstLoad;
|
||||
if (immune.indexOf(slice.data.slice_id) === -1) {
|
||||
setTimeout(() => {
|
||||
slice.render(force);
|
||||
},
|
||||
// Randomize to prevent all widgets refreshing at the same time
|
||||
maxRandomDelay * Math.random());
|
||||
}
|
||||
});
|
||||
dash.firstLoad = false;
|
||||
const slices = dash.sliceObjects
|
||||
.filter(slice => immune.indexOf(slice.data.slice_id) === -1);
|
||||
dash.renderSlices(slices, true, interval * 0.2);
|
||||
};
|
||||
|
||||
const fetchAndRender = function () {
|
||||
refreshAll();
|
||||
if (interval > 0) {
|
||||
@@ -285,16 +292,9 @@ export function dashboardContainer(dashboard, datasources, userid) {
|
||||
},
|
||||
refreshExcept(sliceId) {
|
||||
const immune = this.metadata.filter_immune_slices || [];
|
||||
this.sliceObjects.forEach((slice) => {
|
||||
if (slice.data.slice_id !== sliceId && immune.indexOf(slice.data.slice_id) === -1) {
|
||||
slice.render();
|
||||
const sliceSeletor = $(`#${slice.data.slice_id}-cell`);
|
||||
sliceSeletor.addClass('slice-cell-highlight');
|
||||
setTimeout(function () {
|
||||
sliceSeletor.removeClass('slice-cell-highlight');
|
||||
}, 1200);
|
||||
}
|
||||
});
|
||||
const slices = this.sliceObjects.filter(slice =>
|
||||
slice.data.slice_id !== sliceId && immune.indexOf(slice.data.slice_id) === -1);
|
||||
this.renderSlices(slices);
|
||||
},
|
||||
clearFilters(sliceId) {
|
||||
delete this.filters[sliceId];
|
||||
|
||||
@@ -35,9 +35,8 @@ class Controls extends React.PureComponent {
|
||||
});
|
||||
}
|
||||
refresh() {
|
||||
this.props.dashboard.sliceObjects.forEach((slice) => {
|
||||
slice.render(true);
|
||||
});
|
||||
// Force refresh all slices
|
||||
this.props.dashboard.renderSlices(this.props.dashboard.sliceObjects, true);
|
||||
}
|
||||
changeCss(css) {
|
||||
this.setState({ css });
|
||||
|
||||
Reference in New Issue
Block a user