diff --git a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndSelectLabel.tsx b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndSelectLabel.tsx index 7ffdb175e2a..d5d365fa743 100644 --- a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndSelectLabel.tsx +++ b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndSelectLabel.tsx @@ -40,9 +40,11 @@ export default function DndSelectLabel({ drop: (item: DatasourcePanelDndItem) => { props.onDrop(item); + props.onDropValue?.(item.value); }, - canDrop: (item: DatasourcePanelDndItem) => props.canDrop(item), + canDrop: (item: DatasourcePanelDndItem) => + props.canDrop(item) && (props.canDropValue?.(item.value) ?? true), collect: monitor => ({ isOver: monitor.isOver(), diff --git a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/types.ts b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/types.ts index f11bb1d3f9e..8826762cb39 100644 --- a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/types.ts +++ b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/types.ts @@ -19,7 +19,10 @@ import { ReactNode } from 'react'; import { Metric } from '@superset-ui/core'; import { ColumnMeta } from '@superset-ui/chart-controls'; -import { DatasourcePanelDndItem } from '../../DatasourcePanel/types'; +import { + DatasourcePanelDndItem, + DndItemValue, +} from '../../DatasourcePanel/types'; import { DndItemType } from '../../DndItemType'; export interface OptionProps { @@ -53,6 +56,8 @@ export interface DndColumnSelectProps< > extends LabelProps { onDrop: (item: DatasourcePanelDndItem) => void; canDrop: (item: DatasourcePanelDndItem) => boolean; + canDropValue?: (value: DndItemValue) => boolean; + onDropValue?: (value: DndItemValue) => void; valuesRenderer: () => ReactNode; accept: DndItemType | DndItemType[]; ghostButtonText?: string;