From 586e03cb809e9ead2d38e4c060e7fbc7e01cfd3b Mon Sep 17 00:00:00 2001 From: Evan Rusackas Date: Fri, 19 Dec 2025 09:49:50 -0800 Subject: [PATCH] fix(types): fix remaining TypeScript errors in filter components MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix AdhocFilterEditPopover deck_slices and layerFilterScope type casts - Fix AdhocFilterEditPopover.test.tsx faultyAdhocFilter expressionType - Fix findByRole options in test (remove unsupported disabled option) - Add proper type for renderPopover props parameter - Import AdhocFilterClass type for FiltersConfigForm onChange callback 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../FiltersConfigForm/FiltersConfigForm.tsx | 3 ++- .../AdhocFilterEditPopover.test.tsx | 7 ++++--- .../FilterControl/AdhocFilterEditPopover/index.tsx | 10 ++++------ 3 files changed, 10 insertions(+), 10 deletions(-) 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[] }); } }); }