diff --git a/superset-frontend/plugins/plugin-chart-ag-grid-table/src/buildQuery.ts b/superset-frontend/plugins/plugin-chart-ag-grid-table/src/buildQuery.ts index 293509ff1aa..9212936686b 100644 --- a/superset-frontend/plugins/plugin-chart-ag-grid-table/src/buildQuery.ts +++ b/superset-frontend/plugins/plugin-chart-ag-grid-table/src/buildQuery.ts @@ -120,6 +120,12 @@ const buildQuery: BuildQuery = ( } } + // Dashboard filter override - allows dashboard-level time shifts to OVERRIDE + // chart-level time shift settings (from PRs #33947 and #34014) + if (extra_form_data?.time_compare) { + timeOffsets = [extra_form_data.time_compare]; + } + let temporalColumnAdded = false; let temporalColumn = null; diff --git a/superset-frontend/plugins/plugin-chart-ag-grid-table/src/controlPanel.tsx b/superset-frontend/plugins/plugin-chart-ag-grid-table/src/controlPanel.tsx index ef0204805e0..4ab4d8139ba 100644 --- a/superset-frontend/plugins/plugin-chart-ag-grid-table/src/controlPanel.tsx +++ b/superset-frontend/plugins/plugin-chart-ag-grid-table/src/controlPanel.tsx @@ -43,9 +43,7 @@ import { import { t } from '@apache-superset/core'; import { ensureIsArray, - FeatureFlag, isAdhocColumn, - isFeatureEnabled, isPhysicalColumn, validateInteger, QueryFormColumn, @@ -752,9 +750,7 @@ const config: ControlPanelConfig = { showCalculationType: false, showFullChoices: false, }), - visibility: ({ controls }) => - isAggMode({ controls }) && - isFeatureEnabled(FeatureFlag.TableV2TimeComparisonEnabled), + visibility: isAggMode, }, ], formDataOverrides: formData => ({ diff --git a/superset-frontend/plugins/plugin-chart-ag-grid-table/src/transformProps.ts b/superset-frontend/plugins/plugin-chart-ag-grid-table/src/transformProps.ts index 465f744425a..73cee040fa9 100644 --- a/superset-frontend/plugins/plugin-chart-ag-grid-table/src/transformProps.ts +++ b/superset-frontend/plugins/plugin-chart-ag-grid-table/src/transformProps.ts @@ -25,12 +25,10 @@ import { DataRecord, ensureIsArray, extractTimegrain, - FeatureFlag, getMetricLabel, getNumberFormatter, getTimeFormatter, getTimeFormatterForGranularity, - isFeatureEnabled, NumberFormats, QueryMode, SMART_DATE_ID, @@ -38,7 +36,7 @@ import { TimeFormatter, } from '@superset-ui/core'; import { GenericDataType } from '@apache-superset/core/api/core'; -import { isEmpty, isEqual } from 'lodash'; +import { isEmpty, isEqual, merge } from 'lodash'; import { ConditionalFormattingConfig, getColorFormatters, @@ -465,7 +463,7 @@ const transformProps = ( const { height, width, - rawFormData: formData, + rawFormData: originalFormData, queriesData = [], ownState: serverPaginationData, filterState, @@ -474,6 +472,15 @@ const transformProps = ( theme, } = chartProps; + // Merge extra_form_data (dashboard filter overrides) into formData + // This ensures dashboard-level settings (like time_compare) override chart-level settings + // From PRs #33947 and #34014 + const formData = merge( + {}, + originalFormData, + originalFormData.extra_form_data, + ); + const { include_search: includeSearch = false, page_length: pageLength, @@ -499,8 +506,7 @@ const transformProps = ( const isUsingTimeComparison = !isEmpty(time_compare) && queryMode === QueryMode.Aggregate && - comparison_type === ComparisonType.Values && - isFeatureEnabled(FeatureFlag.TableV2TimeComparisonEnabled); + comparison_type === ComparisonType.Values; const nonCustomNorInheritShifts = ensureIsArray(formData.time_compare).filter( (shift: string) => shift !== 'custom' && shift !== 'inherit', diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigModal.test.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigModal.test.tsx index 3550acf71d7..e27c90395ae 100644 --- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigModal.test.tsx +++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigModal.test.tsx @@ -509,7 +509,7 @@ test('deletes a filter including dependencies', async () => { }), ), ); -}); +}, 30000); test('reorders filters via drag and drop', async () => { const nativeFilterConfig = [