From befeaf6202295e3b351f57cc99bc47599da8ca2b Mon Sep 17 00:00:00 2001 From: Evan Rusackas Date: Fri, 19 Dec 2025 14:50:55 -0800 Subject: [PATCH] fix(types): resolve additional TypeScript CI errors in filter controls MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix operatorId undefined checks for MULTI_OPERATORS.has() and DISABLE_INPUT_OPERATORS.includes() in SimpleTabContent - Add proper type casts through unknown for test file props - Remove unused React import from test file 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../DatasourceControl.test.tsx | 37 +----------- .../DndMetricSelect.tsx | 7 ++- .../AdhocFilterControl/index.tsx | 2 +- .../AdhocFilterEditPopover/index.tsx | 12 ++-- ...FilterEditPopoverSimpleTabContent.test.tsx | 57 +++++++++++++------ .../index.tsx | 18 ++++-- 6 files changed, 68 insertions(+), 65 deletions(-) diff --git a/superset-frontend/src/explore/components/controls/DatasourceControl/DatasourceControl.test.tsx b/superset-frontend/src/explore/components/controls/DatasourceControl/DatasourceControl.test.tsx index 00df5927216..245fa8b7e7d 100644 --- a/superset-frontend/src/explore/components/controls/DatasourceControl/DatasourceControl.test.tsx +++ b/superset-frontend/src/explore/components/controls/DatasourceControl/DatasourceControl.test.tsx @@ -76,39 +76,8 @@ const mockDatasource: TestDatasource = { sql: 'SELECT * FROM mock_datasource_sql', }; -interface TestProps { - hovered: boolean; - type: string; - label: string; - default: null; - description: null; - value: string; - form_data: JsonObject; - datasource: TestDatasource; - validationErrors: string[]; - name: string; - actions: { - changeDatasource: jest.Mock; - setControlValue: jest.Mock; - }; - isEditable: boolean; - user: { - createdOn: string; - email: string; - firstName: string; - isActive: boolean; - lastName: string; - permissions: JsonObject; - roles: JsonObject; - userId: number; - username: string; - }; - onChange: jest.Mock; - onDatasourceSave: jest.Mock; -} - // Use type assertion for test props since the component is wrapped with withTheme -// The withTheme HOC makes the props type complex, so we use a cast to bypass the type check +// The withTheme HOC makes the props type complex, so we cast through unknown to bypass type check type DatasourceControlComponentProps = React.ComponentProps; const createProps = (overrides: JsonObject = {}): DatasourceControlComponentProps => ({ @@ -141,9 +110,9 @@ const createProps = (overrides: JsonObject = {}): DatasourceControlComponentProp onChange: jest.fn(), onDatasourceSave: jest.fn(), ...overrides, - }) as DatasourceControlComponentProps; + }) as unknown as DatasourceControlComponentProps; -async function openAndSaveChanges(datasource: TestDatasource) { +async function openAndSaveChanges(datasource: TestDatasource | Record) { fetchMock.get( 'glob:*/api/v1/database/?q=*', { result: [] }, diff --git a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndMetricSelect.tsx b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndMetricSelect.tsx index efdca7d7446..159af13bc0e 100644 --- a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndMetricSelect.tsx +++ b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndMetricSelect.tsx @@ -89,8 +89,11 @@ const coerceMetrics = ( col => col.column_name === metric.column.column_name, ); if (column) { - // Cast to unknown first to handle type mismatch between @superset-ui/core and local AdhocMetric - return new AdhocMetric({ ...(metric as unknown as Record), column: column as unknown as Record }); + // Cast entire config object to handle type mismatch between @superset-ui/core and local types + return new AdhocMetric({ + ...(metric as unknown as Record), + column, + } as Record); } } // Cast to unknown first to handle type mismatch between @superset-ui/core and local AdhocMetric diff --git a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl/index.tsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl/index.tsx index 284322a4cf1..1eabc6e4439 100644 --- a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl/index.tsx +++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl/index.tsx @@ -399,7 +399,7 @@ class AdhocFilterControl extends Component || {}} options={this.state.options} - onFilterEdit={this.onNewFilter as (editedFilter: AdhocFilter) => void} + onFilterEdit={this.onNewFilter as unknown as (editedFilter: AdhocFilter) => void} partitionColumn={this.state.partitionColumn ?? undefined} > {trigger} 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 c390a4a87d7..1a99f3d82c6 100644 --- a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/index.tsx +++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/index.tsx @@ -403,10 +403,10 @@ export default class AdhocFilterEditPopover extends Component< operators={operators as Operators[] | undefined} adhocFilter={this.state.adhocFilter} onChange={this.onAdhocFilterChange} - options={options} - datasource={datasource} + options={options as unknown as Record[]} + datasource={datasource as unknown as Record} onHeightChange={this.adjustHeight} - partitionColumn={partitionColumn} + partitionColumn={partitionColumn ?? undefined} popoverRef={this.popoverContentRef.current} validHandler={this.setSimpleTabIsValid} /> @@ -421,10 +421,10 @@ export default class AdhocFilterEditPopover extends Component< []} height={this.state.height} activeKey={this.state.activeKey} - datasource={datasource} + datasource={datasource as unknown as Record} /> ), @@ -435,7 +435,7 @@ export default class AdhocFilterEditPopover extends Component<