mirror of
https://github.com/apache/superset.git
synced 2026-06-08 09:09:27 +00:00
fix(explore): Allow only saved metrics and columns (#27539)
This commit is contained in:
@@ -105,7 +105,27 @@ const getOptionsForSavedMetrics = (
|
||||
type ValueType = Metric | AdhocMetric | QueryFormMetric;
|
||||
|
||||
const DndMetricSelect = (props: any) => {
|
||||
const { onChange, multi } = props;
|
||||
const { onChange, multi, datasource, savedMetrics } = props;
|
||||
|
||||
const extra = useMemo<{ disallow_adhoc_metrics?: boolean }>(() => {
|
||||
let extra = {};
|
||||
if (datasource?.extra) {
|
||||
try {
|
||||
extra = JSON.parse(datasource.extra);
|
||||
} catch {} // eslint-disable-line no-empty
|
||||
}
|
||||
return extra;
|
||||
}, [datasource?.extra]);
|
||||
|
||||
const savedMetricSet = useMemo(
|
||||
() =>
|
||||
new Set(
|
||||
(savedMetrics as savedMetricType[]).map(
|
||||
({ metric_name }) => metric_name,
|
||||
),
|
||||
),
|
||||
[savedMetrics],
|
||||
);
|
||||
|
||||
const handleChange = useCallback(
|
||||
opts => {
|
||||
@@ -148,11 +168,19 @@ const DndMetricSelect = (props: any) => {
|
||||
|
||||
const canDrop = useCallback(
|
||||
(item: DatasourcePanelDndItem) => {
|
||||
if (
|
||||
extra.disallow_adhoc_metrics &&
|
||||
(item.type !== DndItemType.Metric ||
|
||||
!savedMetricSet.has(item.value.metric_name))
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const isMetricAlreadyInValues =
|
||||
item.type === 'metric' ? value.includes(item.value.metric_name) : false;
|
||||
return !isMetricAlreadyInValues;
|
||||
},
|
||||
[value],
|
||||
[value, extra, savedMetricSet],
|
||||
);
|
||||
|
||||
const onNewMetric = useCallback(
|
||||
|
||||
Reference in New Issue
Block a user