Screenshot

Image

Description

Currently, when a dashboard refreshes, Superset hides each chart and shows only the loading animation until the new data is rendered. On dashboards with multiple charts refreshing at different speeds, this can cause noticeable flickering and distracting visual changes, especially for users who monitor dashboards continuously.

Are there any specific reasons for fully hiding charts during refresh beyond emphasizing the loading state and ensuring loading animation visibility?

Proposed Improvement

In many use cases, keeping the previous chart visible until the updated data is ready would create a more subtle, less disruptive user experience. This way, users would simply see the chart update once the refresh completes, without repeated disappear/reappear cycles. If the main concern with preserving chart visibility is ensuring that the loading animation remains noticeable, a more flexible approach could be to allow configuring the loading indicator’s position and style — for example, placing it in a specific location within the chart area (e.g. header whitespace in the chart corner), so it remains visible without interfering with the chart content. This would keep the loading feedback clear and accessible while minimizing disruption to users who are actively monitoring dashboards.

Some things I have done

For our needs, I’ve modified the Chart.tsx component to call renderChartContainer() even during loading, overlaying the chart with the loading animation instead of replacing it. This could be considered as a potential default behavior in Superset.

However, the most flexible approach would be to make this configurable — for example, adding a checkbox in the "Edit chart" options to allow users to choose whether charts remain visible during refresh. I’ve tested this by: 1. Adding a new CheckboxControl in sharedControls.tsx 2. Accessing the checkbox control’s value from formData in Chart.tsx to control renderChartContainer() based on the user’s choice and loading state 3. Updating controlPanel.tsx for the desired chart type to include the new control

However, this currently requires applying step 3 to each chart type’s controlPanel.tsx. Is there a more efficient way to make this available across all chart types?

Design input

What is the Superset team’s opinion and vision on this? If you agree this could improve UX, I’m happy to open a PR with an implementation. @kasiazjc @rusackas @mistercrunch

Thanks in advance! Best regards!

Comment From: dosubot[bot]

There aren't any technical or architectural constraints forcing Superset charts to be hidden during refresh—the current approach is mainly a traditional UX choice to clearly indicate loading and avoid showing potentially stale or inconsistent visuals. The logic in Chart.tsx and ChartRenderer.jsx fully replaces the chart with a loading spinner when chartStatus is 'loading', which causes the flickering you described on dashboards with many charts refreshing at different times. There's no built-in option to preserve chart visibility during refresh, but overlaying a loading indicator on top of the existing chart is entirely feasible and can be implemented by adjusting the render logic in these components (source).

Controls in Superset are defined as reusable components, but each chart type's control panel is configured separately. However, you can define a new global control in controls.jsx and reference it in multiple chart types, or potentially add it to a shared section if you want to make this option widely available without duplicating code (source). The codebase is modular enough that adding a global or per-chart toggle for this behavior should be straightforward and robust.

No documentation, tickets, or PRs were found that discuss or implement a configurable option for this, so your proposal would be a novel UX improvement for Superset.

To reply, just mention @dosu.


How did I do? Good | Irrelevant | Incorrect | Verbose | Hallucination | Report 🐛 | Other  Chat with Dosu Join Discord Share on X