This is an automated email from the ASF dual-hosted git repository.
justinpark pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git
The following commit(s) were added to refs/heads/master by this push:
new 172e5dd095 fix(echart): Thrown errors shown after resized (#33143)
172e5dd095 is described below
commit 172e5dd095469d1beac915a21db6e52e0242e56a
Author: JUST.in DO IT <[email protected]>
AuthorDate: Thu Apr 17 09:49:49 2025 -0700
fix(echart): Thrown errors shown after resized (#33143)
---
.../plugin-chart-echarts/src/components/Echart.tsx | 38 ++++++++++++++--------
1 file changed, 25 insertions(+), 13 deletions(-)
diff --git
a/superset-frontend/plugins/plugin-chart-echarts/src/components/Echart.tsx
b/superset-frontend/plugins/plugin-chart-echarts/src/components/Echart.tsx
index 5f5f71c14b..e93327a696 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/src/components/Echart.tsx
+++ b/superset-frontend/plugins/plugin-chart-echarts/src/components/Echart.tsx
@@ -25,6 +25,7 @@ import {
useLayoutEffect,
useCallback,
Ref,
+ useState,
} from 'react';
import { useSelector } from 'react-redux';
@@ -106,6 +107,16 @@ use([
LabelLayout,
]);
+const loadLocale = async (locale: string) => {
+ let lang;
+ try {
+ lang = await import(`echarts/lib/i18n/lang${locale}`);
+ } catch (e) {
+ console.error(`Locale ${locale} not supported in ECharts`, e);
+ }
+ return lang?.default;
+};
+
function Echart(
{
width,
@@ -123,6 +134,7 @@ function Echart(
// eslint-disable-next-line no-param-reassign
refs.divRef = divRef;
}
+ const [didMount, setDidMount] = useState(false);
const chartRef = useRef<EChartsType>();
const currentSelection = useMemo(
() => Object.keys(selectedValues) || [],
@@ -148,20 +160,20 @@ function Echart(
);
useEffect(() => {
- const loadLocaleAndInitChart = async () => {
- if (!divRef.current) return;
-
- const lang = await import(`echarts/lib/i18n/lang${locale}`).catch(e => {
- console.error(`Locale ${locale} not supported in ECharts`, e);
- });
- if (lang?.default) {
- registerLocale(locale, lang.default);
+ loadLocale(locale).then(localeObj => {
+ if (localeObj) {
+ registerLocale(locale, localeObj);
}
-
+ if (!divRef.current) return;
if (!chartRef.current) {
chartRef.current = init(divRef.current, null, { locale });
}
+ setDidMount(true);
+ });
+ }, [locale]);
+ useEffect(() => {
+ if (didMount) {
Object.entries(eventHandlers || {}).forEach(([name, handler]) => {
chartRef.current?.off(name);
chartRef.current?.on(name, handler);
@@ -172,14 +184,14 @@ function Echart(
chartRef.current?.getZr().on(name, handler);
});
- chartRef.current.setOption(echartOptions, true);
+ chartRef.current?.setOption(echartOptions, true);
// did mount
handleSizeChange({ width, height });
- };
+ }
+ }, [didMount, echartOptions, eventHandlers, zrEventHandlers]);
- loadLocaleAndInitChart();
- }, [echartOptions, eventHandlers, zrEventHandlers, locale]);
+ useEffect(() => () => chartRef.current?.dispose(), []);
// highlighting
useEffect(() => {