fix(explore): make clicked dnd filters unique (#16700)
(cherry picked from commit 1d890f8913cfaf9e6688e42d2b2c6a68869a1b39)
diff --git a/superset-frontend/src/explore/components/DatasourcePanel/types.ts b/superset-frontend/src/explore/components/DatasourcePanel/types.ts
index 2290477..315eba9 100644
--- a/superset-frontend/src/explore/components/DatasourcePanel/types.ts
+++ b/superset-frontend/src/explore/components/DatasourcePanel/types.ts
@@ -31,3 +31,7 @@
): item is DatasourcePanelDndItem {
return item?.value && item?.type;
}
+
+export function isSavedMetric(item: any): item is Metric {
+ return item?.metric_name;
+}
diff --git a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndFilterSelect.tsx b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndFilterSelect.tsx
index a9e327b..886f43f 100644
--- a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndFilterSelect.tsx
+++ b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndFilterSelect.tsx
@@ -46,9 +46,11 @@
import {
DatasourcePanelDndItem,
DndItemValue,
+ isSavedMetric,
} from 'src/explore/components/DatasourcePanel/types';
import { DndItemType } from 'src/explore/components/DndItemType';
+const EMPTY_OBJECT = {};
const DND_ACCEPTED_TYPES = [
DndItemType.Column,
DndItemType.Metric,
@@ -70,7 +72,9 @@
);
const [partitionColumn, setPartitionColumn] = useState(undefined);
const [newFilterPopoverVisible, setNewFilterPopoverVisible] = useState(false);
- const [droppedItem, setDroppedItem] = useState<DndItemValue | null>(null);
+ const [droppedItem, setDroppedItem] = useState<
+ DndItemValue | typeof EMPTY_OBJECT
+ >({});
const optionsForSelect = (
columns: ColumnMeta[],
@@ -334,12 +338,12 @@
);
const handleClickGhostButton = useCallback(() => {
- setDroppedItem(null);
+ setDroppedItem({});
togglePopover(true);
}, [togglePopover]);
const adhocFilter = useMemo(() => {
- if (droppedItem?.metric_name) {
+ if (isSavedMetric(droppedItem)) {
return new AdhocFilter({
expressionType: EXPRESSION_TYPES.SQL,
clause: CLAUSES.HAVING,