mirror of
https://github.com/apache/superset.git
synced 2026-05-12 19:35:17 +00:00
feat(explore): Add Echarts option editor (#37868)
This commit is contained in:
@@ -505,6 +505,7 @@ const config: ControlPanelConfig = {
|
||||
},
|
||||
},
|
||||
],
|
||||
['echart_options'],
|
||||
],
|
||||
},
|
||||
],
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user