From 2cb13e695e25c2fc07e6f58e8a8eab8e38a9defd Mon Sep 17 00:00:00 2001 From: simcha90 <56388545+simcha90@users.noreply.github.com> Date: Sun, 4 Jul 2021 11:26:59 +0300 Subject: [PATCH] fix(native-filters): Fix native filters config modal (#15506) * fix:fix get permission function * fix: native filters * fix: remove unneccesary space fo filters / fix some crashes --- .../components/gridComponents/ChartHolder.jsx | 2 +- .../FilterBar/FilterControls/FilterValue.tsx | 10 +- .../FiltersConfigForm/DefaultValue.tsx | 6 ++ .../FiltersConfigForm/FiltersConfigForm.tsx | 56 +++++----- .../GroupBy/GroupByFilterPlugin.tsx | 7 +- .../components/Range/RangeFilterPlugin.tsx | 7 +- .../components/Select/SelectFilterPlugin.tsx | 102 ++++++++++-------- .../TimeColumn/TimeColumnFilterPlugin.tsx | 7 +- .../TimeGrain/TimeGrainFilterPlugin.tsx | 7 +- .../src/filters/components/common.ts | 7 ++ 10 files changed, 120 insertions(+), 91 deletions(-) diff --git a/superset-frontend/src/dashboard/components/gridComponents/ChartHolder.jsx b/superset-frontend/src/dashboard/components/gridComponents/ChartHolder.jsx index 23365b70ff..23f46f292d 100644 --- a/superset-frontend/src/dashboard/components/gridComponents/ChartHolder.jsx +++ b/superset-frontend/src/dashboard/components/gridComponents/ChartHolder.jsx @@ -132,7 +132,7 @@ const FilterFocusHighlight = React.forwardRef( if (focusedNativeFilterId) { if ( - nativeFilters.filters[focusedNativeFilterId].chartsInScope?.includes( + nativeFilters.filters[focusedNativeFilterId]?.chartsInScope?.includes( chartId, ) ) { diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterValue.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterValue.tsx index 1bd8cd4d48..f833e9e737 100644 --- a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterValue.tsx +++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterValue.tsx @@ -44,6 +44,7 @@ import { FilterProps } from './types'; import { getFormData } from '../../utils'; import { useCascadingFilters } from './state'; import { usePreselectNativeFilter } from '../../state'; +import { checkIsMissingRequiredValue } from '../utils'; const HEIGHT = 32; @@ -197,7 +198,14 @@ const FilterValue: React.FC = ({ /> ); } - const filterState = { ...filter.dataMask?.filterState }; + const isMissingRequiredValue = checkIsMissingRequiredValue( + filter, + filter.dataMask?.filterState, + ); + const filterState = { + ...filter.dataMask?.filterState, + validateMessage: isMissingRequiredValue && t('Value is required'), + }; if (filterState.value === undefined && preselection) { filterState.value = preselection; } diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/DefaultValue.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/DefaultValue.tsx index 0b22dc704b..85d55807b2 100644 --- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/DefaultValue.tsx +++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/DefaultValue.tsx @@ -22,6 +22,7 @@ import { SetDataMaskHook, SuperChart, AppSection, + t, } from '@superset-ui/core'; import { FormInstance } from 'antd/lib/form'; import Loading from 'src/components/Loading'; @@ -56,6 +57,10 @@ const DefaultValue: FC = ({ setLoading(true); } }, [hasDataset, queriesData]); + const value = formFilter.defaultDataMask?.filterState.value; + const isMissingRequiredValue = + (value === null || value === undefined) && + formFilter?.controlValues?.enableEmptyFilter; return loading ? ( ) : ( @@ -74,6 +79,7 @@ const DefaultValue: FC = ({ enableNoResults={enableNoResults} filterState={{ ...formFilter.defaultDataMask?.filterState, + validateMessage: isMissingRequiredValue && t('Value is required'), }} /> ); 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 5e95d1689a..306f06bb32 100644 --- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FiltersConfigForm.tsx +++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FiltersConfigForm.tsx @@ -345,13 +345,27 @@ const FiltersConfigForm = ( const hasDataset = !!nativeFilterItems[formFilter?.filterType]?.value ?.datasourceCount; + const { controlItems = {}, mainControlItems = {} } = formFilter + ? getControlItemsMap({ + disabled: false, + forceUpdate, + form, + filterId, + filterType: formFilter.filterType, + filterToEdit, + formFilter, + removed, + }) + : {}; + const hasColumn = !!mainControlItems.groupby; + const nativeFilterItem = nativeFilterItems[formFilter?.filterType] ?? {}; // @ts-ignore const enableNoResults = !!nativeFilterItem.value?.enableNoResults; const datasetId = formFilter?.dataset?.value; useEffect(() => { - if (datasetId && hasDataset) { + if (datasetId && hasColumn) { cachedSupersetGet({ endpoint: `/api/v1/dataset/${datasetId}`, }) @@ -367,7 +381,7 @@ const FiltersConfigForm = ( addDangerToast(response.message); }); } - }, [datasetId, hasDataset]); + }, [datasetId, hasColumn]); useImperativeHandle(ref, () => ({ changeTab(tab: 'configuration' | 'scoping') { @@ -375,10 +389,10 @@ const FiltersConfigForm = ( }, })); - const hasMetrics = hasDataset && !!metrics.length; + const hasMetrics = hasColumn && !!metrics.length; const hasFilledDataset = - !hasDataset || (datasetId && (formFilter?.column || !hasDataset)); + !hasDataset || (datasetId && (formFilter?.column || !hasColumn)); const hasAdditionalFilters = FILTERS_WITH_ADHOC_FILTERS.includes( formFilter?.filterType, @@ -477,7 +491,7 @@ const FiltersConfigForm = ( : undefined); const newFormData = getFormData({ datasetId, - groupby: hasDataset ? formFilter?.column : undefined, + groupby: hasColumn ? formFilter?.column : undefined, ...formFilter, }); @@ -534,20 +548,10 @@ const FiltersConfigForm = ( const hasSorting = typeof filterToEdit?.controlValues?.sortAscending === 'boolean'; - const showDefaultValue = !hasDataset || (!isDataDirty && hasFilledDataset); - - const { controlItems = {}, mainControlItems = {} } = formFilter - ? getControlItemsMap({ - disabled: false, - forceUpdate, - form, - filterId, - filterType: formFilter.filterType, - filterToEdit, - formFilter, - removed, - }) - : {}; + const showDefaultValue = + !hasDataset || + (!isDataDirty && hasFilledDataset) || + !mainControlItems.groupby; const onSortChanged = (value: boolean | undefined) => { const previous = form.getFieldValue('filters')?.[filterId].controlValues; @@ -683,6 +687,7 @@ const FiltersConfigForm = ( setNativeFilterFieldValues(form, filterId, { filterType: value, defaultDataMask: null, + column: null, }); forceUpdate(); }} @@ -738,13 +743,6 @@ const FiltersConfigForm = ( header={FilterPanels.basic.name} key={FilterPanels.basic.key} > - {hasFilledDataset && ( -