feat(explore): Add Echarts option editor (#37868)

This commit is contained in:
JUST.in DO IT
2026-03-04 08:34:34 -08:00
committed by GitHub
parent 80a29cd6fe
commit 35d0aad854
24 changed files with 2413 additions and 8 deletions

View File

@@ -505,6 +505,7 @@ const config: ControlPanelConfig = {
},
},
],
['echart_options'],
],
},
],

View File

@@ -58,6 +58,7 @@ import {
Refs,
} from '../types';
import { parseAxisBound } from '../utils/controls';
import { safeParseEChartOptions } from '../utils/safeEChartOptionsParser';
import {
dedupSeries,
extractDataTotalValues,
@@ -99,6 +100,7 @@ import {
getYAxisFormatter,
} from '../utils/formatters';
import { getMetricDisplayName } from '../utils/metricDisplayName';
import { mergeCustomEChartOptions } from '../utils/mergeCustomEChartOptions';
const getFormatter = (
customFormatters: Record<string, ValueFormatter>,
@@ -122,7 +124,7 @@ export default function transformProps(
const {
width,
height,
formData,
formData: { echartOptions: _echartOptions, ...formData },
queriesData,
hooks,
filterState,
@@ -803,11 +805,25 @@ export default function transformProps(
focusedSeries = seriesName;
};
let customEchartOptions;
try {
// Parse custom EChart options safely using AST analysis
// This replaces the unsafe `new Function()` approach with a secure parser
// that only allows static data structures (no function callbacks)
customEchartOptions = safeParseEChartOptions(_echartOptions);
} catch (_) {
customEchartOptions = undefined;
}
const mergedEchartOptions = customEchartOptions
? mergeCustomEChartOptions(echartOptions, customEchartOptions)
: echartOptions;
return {
formData,
width,
height,
echartOptions,
echartOptions: mergedEchartOptions,
setDataMask,
emitCrossFilters,
labelMap,