From ef022bba52778cab3f5bc6e4f6bcc97a4cc0e523 Mon Sep 17 00:00:00 2001 From: John Bodley Date: Thu, 9 Mar 2023 07:14:40 +1300 Subject: [PATCH] fix: Native filter modal caching --- .../integration/dashboard/nativeFilters.test.ts | 6 +++--- .../FiltersConfigForm/ColumnSelect.tsx | 13 ++----------- .../FiltersConfigForm/DatasetSelect.tsx | 13 ++----------- .../FiltersConfigForm/FiltersConfigForm.tsx | 11 +---------- .../FiltersConfigForm/utils.ts | 16 +++++++++++++++- 5 files changed, 23 insertions(+), 36 deletions(-) diff --git a/superset-frontend/cypress-base/cypress/integration/dashboard/nativeFilters.test.ts b/superset-frontend/cypress-base/cypress/integration/dashboard/nativeFilters.test.ts index 1e119ae775c21..3126b75625d66 100644 --- a/superset-frontend/cypress-base/cypress/integration/dashboard/nativeFilters.test.ts +++ b/superset-frontend/cypress-base/cypress/integration/dashboard/nativeFilters.test.ts @@ -576,7 +576,7 @@ describe('Native filters', () => { }, ); saveNativeFilterSettings([SAMPLE_CHART]); - enterNativeFilterEditModal(); + enterNativeFilterEditModal(false); cy.get(nativeFilters.modal.tabsList.removeTab) .should('be.visible') .first() @@ -812,7 +812,7 @@ describe('Native filters', () => { force: true, }); cancelNativeFilterSettings(); - enterNativeFilterEditModal(); + enterNativeFilterEditModal(false); cy.get(nativeFilters.filtersList.removeIcon).first().click(); cy.contains('You have removed this filter.').should('be.visible'); }); @@ -855,7 +855,7 @@ describe('Native filters', () => { .contains(testItems.filterDefaultValue) .should('be.visible'); validateFilterNameOnDashboard(testItems.topTenChart.filterColumn); - enterNativeFilterEditModal(); + enterNativeFilterEditModal(false); deleteNativeFilter(); saveNativeFilterSettings([SAMPLE_CHART]); cy.get(dataTestChartName(testItems.topTenChart.name)).within(() => { diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/ColumnSelect.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/ColumnSelect.tsx index 41c591ade3c81..e8a9299080f00 100644 --- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/ColumnSelect.tsx +++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/ColumnSelect.tsx @@ -17,14 +17,13 @@ * under the License. */ import React, { useCallback, useState, useMemo, useEffect } from 'react'; -import { Column, ensureIsArray, SupersetClient, t } from '@superset-ui/core'; +import { Column, ensureIsArray, t } from '@superset-ui/core'; import { useChangeEffect } from 'src/hooks/useChangeEffect'; import { Select, FormInstance } from 'src/components'; import { useToasts } from 'src/components/MessageToasts/withToasts'; import { getClientErrorObject } from 'src/utils/getClientErrorObject'; -import { cacheWrapper } from 'src/utils/cacheWrapper'; import { NativeFiltersForm } from '../types'; -import { doesColumnMatchFilterType } from './utils'; +import { cachedSupersetGet, doesColumnMatchFilterType } from './utils'; interface ColumnSelectProps { allowClear?: boolean; @@ -38,14 +37,6 @@ interface ColumnSelectProps { mode?: 'multiple'; } -const localCache = new Map(); - -const cachedSupersetGet = cacheWrapper( - SupersetClient.get, - localCache, - ({ endpoint }) => endpoint || '', -); - /** Special purpose AsyncSelect that selects a column from a dataset */ // eslint-disable-next-line import/prefer-default-export export function ColumnSelect({ diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/DatasetSelect.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/DatasetSelect.tsx index fa0b4fbea09b2..db1c6d4124314 100644 --- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/DatasetSelect.tsx +++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/DatasetSelect.tsx @@ -18,22 +18,13 @@ */ import React, { useCallback, useMemo } from 'react'; import rison from 'rison'; -import { t, SupersetClient } from '@superset-ui/core'; +import { t } from '@superset-ui/core'; import { AsyncSelect } from 'src/components'; -import { cacheWrapper } from 'src/utils/cacheWrapper'; import { ClientErrorObject, getClientErrorObject, } from 'src/utils/getClientErrorObject'; -import { datasetToSelectOption } from './utils'; - -const localCache = new Map(); - -const cachedSupersetGet = cacheWrapper( - SupersetClient.get, - localCache, - ({ endpoint }) => endpoint || '', -); +import { cachedSupersetGet, datasetToSelectOption } from './utils'; interface DatasetSelectProps { onChange: (value: { label: string; value: number }) => void; 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 0b6a33f06932d..b9e97060a5e95 100644 --- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FiltersConfigForm.tsx +++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FiltersConfigForm.tsx @@ -34,7 +34,6 @@ import { NativeFilterType, styled, SupersetApiError, - SupersetClient, t, } from '@superset-ui/core'; import { isEqual } from 'lodash'; @@ -70,7 +69,6 @@ import DateFilterControl from 'src/explore/components/controls/DateFilterControl import AdhocFilterControl from 'src/explore/components/controls/FilterControl/AdhocFilterControl'; import { FeatureFlag, isFeatureEnabled } from 'src/featureFlags'; import { waitForAsyncData } from 'src/middleware/asyncEvent'; -import { cacheWrapper } from 'src/utils/cacheWrapper'; import { ClientErrorObject } from 'src/utils/getClientErrorObject'; import { SingleValueType } from 'src/filters/components/Range/SingleValueType'; import { @@ -91,6 +89,7 @@ import getControlItemsMap from './getControlItemsMap'; import RemovedFilter from './RemovedFilter'; import { useBackendFormUpdate, useDefaultValue } from './state'; import { + cachedSupersetGet, FILTER_SUPPORTED_TYPES, hasTemporalColumns, mostUsedDataset, @@ -320,14 +319,6 @@ const FILTER_TYPE_NAME_MAPPING = { [t('Group By')]: t('Group by'), }; -const localCache = new Map(); - -const cachedSupersetGet = cacheWrapper( - SupersetClient.get, - localCache, - ({ endpoint }) => endpoint || '', -); - /** * The configuration form for a specific filter. * Assigns field values to `filters[filterId]` in the form. diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/utils.ts b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/utils.ts index 77e27a42110cf..4344806591a12 100644 --- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/utils.ts +++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/utils.ts @@ -20,8 +20,14 @@ import { flatMapDeep } from 'lodash'; import { FormInstance } from 'src/components'; import React from 'react'; import { CustomControlItem, Dataset } from '@superset-ui/chart-controls'; -import { Column, ensureIsArray, GenericDataType } from '@superset-ui/core'; +import { + Column, + ensureIsArray, + GenericDataType, + SupersetClient, +} from '@superset-ui/core'; import { DatasourcesState, ChartsState } from 'src/dashboard/types'; +import { cacheWrapper } from 'src/utils/cacheWrapper'; const FILTERS_FIELD_NAME = 'filters'; @@ -130,3 +136,11 @@ export const mostUsedDataset = ( return datasets[mostUsedDataset]?.id; }; + +const localCache = new Map(); + +export const cachedSupersetGet = cacheWrapper( + SupersetClient.get, + localCache, + ({ endpoint }) => endpoint || '', +);