From be833dce4f45919cb96a36a48aa019fc09bb8abf Mon Sep 17 00:00:00 2001 From: "Michael S. Molina" <70410625+michael-s-molina@users.noreply.github.com> Date: Mon, 22 Jul 2024 09:02:16 -0300 Subject: [PATCH] fix: Layout of native filters modal with lengthy columns (#29648) --- .../FilterScope/FilterScope.test.tsx | 1 + .../FiltersConfigForm/FiltersConfigForm.tsx | 45 ++++++++++++++----- .../getControlItemsMap.test.tsx | 1 + .../FiltersConfigForm/getControlItemsMap.tsx | 4 ++ .../FiltersConfigModal/FiltersConfigModal.tsx | 2 + 5 files changed, 41 insertions(+), 12 deletions(-) diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/FilterScope.test.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/FilterScope.test.tsx index ce8ff0245ee1d..93f3dd6ec1c83 100644 --- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/FilterScope.test.tsx +++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/FilterScope.test.tsx @@ -34,6 +34,7 @@ describe('FilterScope', () => { const save = jest.fn(); let form: FormInstance; const mockedProps = { + expanded: false, filterId: 'DefaultFilterId', dependencies: [], setErroredFilters: jest.fn(), 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 154cdbf368413..63cdd0d052160 100644 --- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FiltersConfigForm.tsx +++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FiltersConfigForm.tsx @@ -105,6 +105,8 @@ import { import { FILTER_SUPPORTED_TYPES, INPUT_WIDTH } from './constants'; import DependencyList from './DependencyList'; +const FORM_ITEM_WIDTH = 260; + const TabPane = styled(Tabs.TabPane)` padding: ${({ theme }) => theme.gridUnit * 4}px 0px; `; @@ -136,8 +138,8 @@ const controlsOrder: ControlKey[] = [ 'inverseSelection', ]; -export const StyledFormItem = styled(FormItem)` - width: 49%; +export const StyledFormItem = styled(FormItem)<{ expanded: boolean }>` + width: ${({ expanded }) => (expanded ? '49%' : `${FORM_ITEM_WIDTH}px`)}; margin-bottom: ${({ theme }) => theme.gridUnit * 4}px; & .ant-form-item-label { @@ -149,10 +151,10 @@ export const StyledFormItem = styled(FormItem)` } `; -export const StyledRowFormItem = styled(FormItem)` +export const StyledRowFormItem = styled(FormItem)<{ expanded: boolean }>` margin-bottom: 0; padding-bottom: 0; - min-width: 50%; + min-width: ${({ expanded }) => (expanded ? '50%' : `${FORM_ITEM_WIDTH}px`)}; & .ant-form-item-label { padding-bottom: 0; @@ -167,8 +169,8 @@ export const StyledRowFormItem = styled(FormItem)` } `; -export const StyledRowSubFormItem = styled(FormItem)` - min-width: 50%; +export const StyledRowSubFormItem = styled(FormItem)<{ expanded: boolean }>` + min-width: ${({ expanded }) => (expanded ? '50%' : `${FORM_ITEM_WIDTH}px`)}; & .ant-form-item-label { padding-bottom: 0; @@ -264,9 +266,9 @@ const StyledAsterisk = styled.span` } `; -const FilterTypeInfo = styled.div` - ${({ theme }) => ` - width: 49%; +const FilterTypeInfo = styled.div<{ expanded: boolean }>` + ${({ theme, expanded }) => ` + width: ${expanded ? '49%' : `${FORM_ITEM_WIDTH}px`}; font-size: ${theme.typography.sizes.s}px; color: ${theme.colors.grayscale.light1}; margin: @@ -300,6 +302,7 @@ export const FilterPanels = { }; export interface FiltersConfigFormProps { + expanded: boolean; filterId: string; filterToEdit?: Filter; removedFilters: Record; @@ -334,6 +337,7 @@ const FILTER_TYPE_NAME_MAPPING = { */ const FiltersConfigForm = ( { + expanded, filterId, filterToEdit, removedFilters, @@ -376,7 +380,7 @@ const FiltersConfigForm = ( const nativeFilterVizTypes = Object.entries(nativeFilterItems) // @ts-ignore .filter(([, { value }]) => value.behaviors?.includes(Behavior.NativeFilter)) - .map(([key]) => key); + .map(([key]) => key as keyof typeof FILTER_SUPPORTED_TYPES); const loadedDatasets = useSelector( ({ datasources }) => datasources, @@ -411,6 +415,7 @@ const FiltersConfigForm = ( const { controlItems = {}, mainControlItems = {} } = formFilter ? getControlItemsMap({ + expanded, datasetId, disabled: false, forceUpdate, @@ -760,6 +765,7 @@ const FiltersConfigForm = ( const timeColumn = ( @@ -807,6 +813,7 @@ const FiltersConfigForm = ( > {t('Filter name')}} initialValue={filterToEdit?.name} @@ -822,6 +830,7 @@ const FiltersConfigForm = ( {formFilter?.filterType === 'filter_time' && ( - + {t(`Dashboard time range filters apply to temporal columns defined in the filter section of each chart. Add temporal columns to the chart filters to have this dashboard filter impact those charts.`)} @@ -877,6 +886,7 @@ const FiltersConfigForm = ( {showDataset ? ( {t('Dataset')}} initialValue={ @@ -915,7 +925,10 @@ const FiltersConfigForm = ( /> ) : ( - {t('Dataset')}}> + {t('Dataset')}} + > )} @@ -941,6 +954,7 @@ const FiltersConfigForm = ( > {canDependOnOtherFilters && hasAvailableFilters && ( @@ -981,6 +995,7 @@ const FiltersConfigForm = ( }} > {showTimeRangePicker && ( {t('Time range')}} initialValue={ @@ -1057,6 +1073,7 @@ const FiltersConfigForm = ( }} > {hasMetrics && ( {t('Description')}} @@ -1194,6 +1214,7 @@ const FiltersConfigForm = ( > {!isRemoved && ( ControlItemsProps = () => ({ + expanded: false, datasetId: 1, disabled: false, forceUpdate: jest.fn(), diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/getControlItemsMap.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/getControlItemsMap.tsx index 937862094b049..62fd4917ec8cb 100644 --- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/getControlItemsMap.tsx +++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/getControlItemsMap.tsx @@ -44,6 +44,7 @@ import { import { ColumnSelect } from './ColumnSelect'; export interface ControlItemsProps { + expanded: boolean; datasetId: number; disabled: boolean; forceUpdate: Function; @@ -60,6 +61,7 @@ const CleanFormItem = styled(FormItem)` `; export default function getControlItemsMap({ + expanded, datasetId, disabled, forceUpdate, @@ -104,6 +106,7 @@ export default function getControlItemsMap({ } /> ) : (