fix(explore): Allow only saved metrics and columns (#27539)

This commit is contained in:
JUST.in DO IT
2024-03-18 09:51:02 -07:00
committed by GitHub
parent ae294274c7
commit 1c155e8591
5 changed files with 392 additions and 19 deletions

View File

@@ -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(