diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FiltersConfigForm.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FiltersConfigForm.tsx index 2c740d771ea..a8a4bba5c61 100644 --- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FiltersConfigForm.tsx +++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FiltersConfigForm.tsx @@ -78,6 +78,7 @@ import { } from 'src/dashboard/types'; import DateFilterControl from 'src/explore/components/controls/DateFilterControl'; import AdhocFilterControl from 'src/explore/components/controls/FilterControl/AdhocFilterControl'; +import type AdhocFilterClass from 'src/explore/components/controls/FilterControl/AdhocFilter'; import { waitForAsyncData } from 'src/middleware/asyncEvent'; import { SingleValueType } from 'src/filters/components/Range/SingleValueType'; import { RangeDisplayMode } from 'src/filters/components/Range/types'; @@ -1003,7 +1004,7 @@ const FiltersConfigForm = ( } datasource={datasetDetails} onChange={( - filters: AdhocFilter[], + filters: AdhocFilterClass[], ) => { setNativeFilterFieldValues( form, diff --git a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/AdhocFilterEditPopover.test.tsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/AdhocFilterEditPopover.test.tsx index f7b9e6ddcd6..8419f8850a4 100644 --- a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/AdhocFilterEditPopover.test.tsx +++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/AdhocFilterEditPopover.test.tsx @@ -39,7 +39,8 @@ const sqlAdhocFilter = new AdhocFilter({ }); const faultyAdhocFilter = new AdhocFilter({ - expressionType: null, + // Use undefined for faulty expressionType to trigger error state + expressionType: undefined, subject: null, operator: '>', comparator: '10', @@ -69,7 +70,7 @@ const defaultProps = { datasource: {}, }; -const renderPopover = (props = {}) => +const renderPopover = (props: Partial = {}) => render(, { useRedux: true, // Add Redux provider for context }); @@ -123,7 +124,7 @@ describe('AdhocFilterEditPopover', () => { fireEvent.change(sqlInput, { target: { value: 'COUNT(*) > 0' } }); // Wait for validation to complete - await screen.findByRole('button', { name: /save/i, disabled: false }); + await screen.findByRole('button', { name: /save/i }); // Click save button const saveButton = screen.getByRole('button', { name: /save/i }); diff --git a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/index.tsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/index.tsx index ad2630be1e6..546057a6614 100644 --- a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/index.tsx +++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/index.tsx @@ -178,13 +178,11 @@ export default class AdhocFilterEditPopover extends Component< document.addEventListener('mouseup', this.onMouseUp); // Load layer options if deck_slices exist - if ( - this.props.adhocFilter?.deck_slices && - this.props.adhocFilter.deck_slices.length > 0 - ) { + const deckSlices = this.props.adhocFilter?.deck_slices as number[] | undefined; + if (deckSlices && deckSlices.length > 0) { this.loadLayerOptions(0, 100).then(result => { this.setState({ layerOptions: result.data }); - const layerFilterScope = this.props.adhocFilter?.layerFilterScope; + const layerFilterScope = this.props.adhocFilter?.layerFilterScope as number[] | undefined; if (layerFilterScope) { const selectedLayers = layerFilterScope.map(item => { const layerOption = result.data.find( @@ -192,7 +190,7 @@ export default class AdhocFilterEditPopover extends Component< ); return layerOption; }); - this.setState({ selectedLayers }); + this.setState({ selectedLayers: selectedLayers.filter(Boolean) as LayerOption[] }); } }); }