fix: Allow only dttm columns in comparison filter in Period over Period chart (#27209)

This commit is contained in:
Kamil Gabryjelski 2024-03-05 21:24:26 +01:00 committed by GitHub
parent a3d2e0bf44
commit a4c771e013
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 41 additions and 11 deletions

View File

@ -17,11 +17,14 @@
* under the License. * under the License.
*/ */
import { import {
AdhocFilter,
ComparisonTimeRangeType, ComparisonTimeRangeType,
SimpleAdhocFilter,
t, t,
validateTimeComparisonRangeValues, validateTimeComparisonRangeValues,
} from '@superset-ui/core'; } from '@superset-ui/core';
import { import {
ColumnMeta,
ControlPanelConfig, ControlPanelConfig,
ControlPanelState, ControlPanelState,
ControlState, ControlState,
@ -76,16 +79,29 @@ const config: ControlPanelConfig = {
mapStateToProps: ( mapStateToProps: (
state: ControlPanelState, state: ControlPanelState,
controlState: ControlState, controlState: ControlState,
) => ({ ) => {
...(sharedControls.adhoc_filters.mapStateToProps?.( const originalMapStateToPropsRes =
state, sharedControls.adhoc_filters.mapStateToProps?.(
controlState, state,
) || {}), controlState,
externalValidationErrors: validateTimeComparisonRangeValues( ) || {};
state.controls?.time_comparison?.value, const columns = originalMapStateToPropsRes.columns.filter(
controlState.value, (col: ColumnMeta) =>
), col.is_dttm &&
}), (state.controls.adhoc_filters.value as AdhocFilter[]).some(
(val: SimpleAdhocFilter) =>
val.subject === col.column_name,
),
);
return {
...originalMapStateToPropsRes,
columns,
externalValidationErrors: validateTimeComparisonRangeValues(
state.controls?.time_comparison?.value,
controlState.value,
),
};
},
}, },
}, },
], ],
@ -138,6 +154,9 @@ const config: ControlPanelConfig = {
y_axis_format: { y_axis_format: {
label: t('Number format'), label: t('Number format'),
}, },
adhoc_filters: {
rerender: ['adhoc_custom'],
},
}, },
formDataOverrides: formData => ({ formDataOverrides: formData => ({
...formData, ...formData,

View File

@ -382,7 +382,18 @@ const DndFilterSelect = (props: DndFilterSelectProps) => {
return new AdhocFilter(config); return new AdhocFilter(config);
}, [droppedItem]); }, [droppedItem]);
const canDrop = useCallback(() => true, []); const canDrop = useCallback(
(item: DatasourcePanelDndItem) => {
if (item.type === DndItemType.Column) {
return props.columns.some(
col => col.column_name === (item.value as ColumnMeta).column_name,
);
}
return true;
},
[props.columns],
);
const handleDrop = useCallback( const handleDrop = useCallback(
(item: DatasourcePanelDndItem) => { (item: DatasourcePanelDndItem) => {
setDroppedItem(item.value); setDroppedItem(item.value);