From a9512c1eef562e432a845ff289a2e0ef4f1965c0 Mon Sep 17 00:00:00 2001 From: Lily Kuang Date: Tue, 12 Sep 2023 23:19:21 +0900 Subject: [PATCH] fix: inability to remove chart filter when dashboard time filter is applied (#25217) --- .../src/explore/actions/saveModalActions.js | 25 +++++++++++++------ .../explore/actions/saveModalActions.test.js | 14 +---------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/superset-frontend/src/explore/actions/saveModalActions.js b/superset-frontend/src/explore/actions/saveModalActions.js index 8c864eceac..0bf7ced475 100644 --- a/superset-frontend/src/explore/actions/saveModalActions.js +++ b/superset-frontend/src/explore/actions/saveModalActions.js @@ -59,6 +59,11 @@ const extractAddHocFiltersFromFormData = formDataToHandle => {}, ); +const hasTemporalRangeFilter = formData => + (formData?.adhoc_filters || []).some( + filter => filter.operator === Operators.TEMPORAL_RANGE, + ); + export const getSlicePayload = ( sliceName, formDataWithNativeFilters, @@ -66,7 +71,7 @@ export const getSlicePayload = ( owners, formDataFromSlice = {}, ) => { - let adhocFilters = extractAddHocFiltersFromFormData( + const adhocFilters = extractAddHocFiltersFromFormData( formDataWithNativeFilters, ); @@ -76,18 +81,24 @@ export const getSlicePayload = ( // would end up as an extra filter and when overwriting the chart the original // time range adhoc_filter was lost if (isEmpty(adhocFilters?.adhoc_filters) && !isEmpty(formDataFromSlice)) { - adhocFilters = extractAddHocFiltersFromFormData(formDataFromSlice); + formDataFromSlice?.adhoc_filters?.forEach(filter => { + if (filter.operator === Operators.TEMPORAL_RANGE && !filter.isExtra) { + adhocFilters.adhoc_filters.push({ ...filter, comparator: 'No filter' }); + } + }); } // This loop iterates through the adhoc_filters array in formDataWithNativeFilters. // If a filter is of type TEMPORAL_RANGE and isExtra, it sets its comparator to // 'No filter' and adds the modified filter to the adhocFilters array. This ensures that all // TEMPORAL_RANGE filters are converted to 'No filter' when saving a chart. - formDataWithNativeFilters?.adhoc_filters?.forEach(filter => { - if (filter.operator === Operators.TEMPORAL_RANGE && filter.isExtra) { - adhocFilters.adhoc_filters.push({ ...filter, comparator: 'No filter' }); - } - }); + if (!hasTemporalRangeFilter(adhocFilters)) { + formDataWithNativeFilters?.adhoc_filters?.forEach(filter => { + if (filter.operator === Operators.TEMPORAL_RANGE && filter.isExtra) { + adhocFilters.adhoc_filters.push({ ...filter, comparator: 'No filter' }); + } + }); + } const formData = { ...formDataWithNativeFilters, diff --git a/superset-frontend/src/explore/actions/saveModalActions.test.js b/superset-frontend/src/explore/actions/saveModalActions.test.js index dedddfb4cd..4c0da5132d 100644 --- a/superset-frontend/src/explore/actions/saveModalActions.test.js +++ b/superset-frontend/src/explore/actions/saveModalActions.test.js @@ -302,19 +302,7 @@ describe('getSlicePayload', () => { formDataWithNativeFilters, dashboards, owners, - { - datasource: '22__table', - viz_type: 'pie', - adhoc_filters: [ - { - clause: 'WHERE', - subject: 'year', - operator: 'TEMPORAL_RANGE', - comparator: 'No filter', - expressionType: 'SIMPLE', - }, - ], - }, + formDataFromSlice, ); expect(result).toHaveProperty('params'); expect(result).toHaveProperty('slice_name', sliceName);