diff --git a/superset-frontend/src/explore/controlUtils/getFormDataFromDashboardContext.test.ts b/superset-frontend/src/explore/controlUtils/getFormDataFromDashboardContext.test.ts index c38c80813b..def35009c6 100644 --- a/superset-frontend/src/explore/controlUtils/getFormDataFromDashboardContext.test.ts +++ b/superset-frontend/src/explore/controlUtils/getFormDataFromDashboardContext.test.ts @@ -48,6 +48,14 @@ const getExploreFormData = (overrides: JsonObject = {}) => ({ sqlExpression: "city = 'Warsaw'", filterOptionName: '567', }, + { + clause: 'WHERE' as const, + expressionType: 'SIMPLE' as const, + operator: 'TEMPORAL_RANGE' as const, + subject: 'ds', + comparator: 'No filter', + filterOptionName: '678', + }, ], adhoc_filters_b: [ { @@ -158,6 +166,14 @@ const getExpectedResultFormData = (overrides: JsonObject = {}) => ({ sqlExpression: "city = 'Warsaw'", filterOptionName: '567', }, + { + clause: 'WHERE', + expressionType: 'SIMPLE', + operator: 'TEMPORAL_RANGE', + subject: 'ds', + comparator: 'Last month', + filterOptionName: expect.any(String), + }, { clause: 'WHERE', expressionType: 'SIMPLE', @@ -279,7 +295,7 @@ const getExpectedResultFormData = (overrides: JsonObject = {}) => ({ ...overrides, }); -it('merges dashboard context form data with explore form data', () => { +test('merges dashboard context form data with explore form data', () => { const fullFormData = getFormDataWithDashboardContext( getExploreFormData(), getDashboardFormData(), diff --git a/superset-frontend/src/explore/controlUtils/getFormDataWithDashboardContext.ts b/superset-frontend/src/explore/controlUtils/getFormDataWithDashboardContext.ts index f6cc31fe6f..0fc32594b2 100644 --- a/superset-frontend/src/explore/controlUtils/getFormDataWithDashboardContext.ts +++ b/superset-frontend/src/explore/controlUtils/getFormDataWithDashboardContext.ts @@ -173,6 +173,25 @@ const mergeNativeFiltersToFormData = ( return nativeFiltersData; }; +const applyTimeRangeFilters = ( + dashboardFormData: JsonObject, + adhocFilters: AdhocFilter[], +) => { + const extraFormData = dashboardFormData.extra_form_data || {}; + if ('time_range' in extraFormData) { + return adhocFilters.map((filter: SimpleAdhocFilter) => { + if (filter.operator === 'TEMPORAL_RANGE') { + return { + ...filter, + comparator: extraFormData.time_range, + }; + } + return filter; + }); + } + return adhocFilters; +}; + export const getFormDataWithDashboardContext = ( exploreFormData: QueryFormData, dashboardContextFormData: JsonObject, @@ -194,14 +213,18 @@ export const getFormDataWithDashboardContext = ( .reduce( (acc, key) => ({ ...acc, - [key]: removeAdhocFilterDuplicates([ - ...ensureIsArray(exploreFormData[key]), - ...ensureIsArray(filterBoxData[key]), - ...ensureIsArray(nativeFiltersData[key]), - ]), + [key]: applyTimeRangeFilters( + dashboardContextFormData, + removeAdhocFilterDuplicates([ + ...ensureIsArray(exploreFormData[key]), + ...ensureIsArray(filterBoxData[key]), + ...ensureIsArray(nativeFiltersData[key]), + ]), + ), }), {}, ); + return { ...exploreFormData, ...dashboardContextFormData,