This is an automated email from the ASF dual-hosted git repository.
sadpandajoe pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git
The following commit(s) were added to refs/heads/master by this push:
new 965ec472965 fix(explore): hide value input for unary filter operators
(#39924)
965ec472965 is described below
commit 965ec472965048b078fcc3fb5e097c16b08abb9d
Author: Jean Massucatto <[email protected]>
AuthorDate: Sat May 23 15:43:49 2026 -0300
fix(explore): hide value input for unary filter operators (#39924)
---
...AdhocFilterEditPopoverSimpleTabContent.test.tsx | 64 +++++++++++++++
.../index.tsx | 91 +++++++++++-----------
2 files changed, 110 insertions(+), 45 deletions(-)
diff --git
a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/AdhocFilterEditPopoverSimpleTabContent.test.tsx
b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/AdhocFilterEditPopoverSimpleTabContent.test.tsx
index a238ca38f28..c2b5231a90d 100644
---
a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/AdhocFilterEditPopoverSimpleTabContent.test.tsx
+++
b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/AdhocFilterEditPopoverSimpleTabContent.test.tsx
@@ -486,6 +486,70 @@ test('sets comparator to undefined when operator is
IS_NULL or IS_NOT_NULL', ()
});
});
+test('hides the value input when operator is IS_NULL', () => {
+ setup({
+ adhocFilter: new AdhocFilter({
+ expressionType: ExpressionTypes.Simple,
+ subject: 'value',
+ operatorId: Operators.IsNull,
+ operator: OPERATOR_ENUM_TO_OPERATOR_TYPE[Operators.IsNull].operation,
+ comparator: undefined,
+ clause: Clauses.Where,
+ }),
+ });
+ expect(
+ screen.queryByPlaceholderText('Filter value (case sensitive)'),
+ ).not.toBeInTheDocument();
+});
+
+test('hides the value input when operator is IS_NOT_NULL', () => {
+ setup({
+ adhocFilter: new AdhocFilter({
+ expressionType: ExpressionTypes.Simple,
+ subject: 'value',
+ operatorId: Operators.IsNotNull,
+ operator: OPERATOR_ENUM_TO_OPERATOR_TYPE[Operators.IsNotNull].operation,
+ comparator: undefined,
+ clause: Clauses.Where,
+ }),
+ });
+ expect(
+ screen.queryByPlaceholderText('Filter value (case sensitive)'),
+ ).not.toBeInTheDocument();
+});
+
+test('hides the value input when operator is IS_TRUE', () => {
+ setup({
+ adhocFilter: new AdhocFilter({
+ expressionType: ExpressionTypes.Simple,
+ subject: 'value',
+ operatorId: Operators.IsTrue,
+ operator: OPERATOR_ENUM_TO_OPERATOR_TYPE[Operators.IsTrue].operation,
+ comparator: undefined,
+ clause: Clauses.Where,
+ }),
+ });
+ expect(
+ screen.queryByPlaceholderText('Filter value (case sensitive)'),
+ ).not.toBeInTheDocument();
+});
+
+test('hides the value input when operator is IS_FALSE', () => {
+ setup({
+ adhocFilter: new AdhocFilter({
+ expressionType: ExpressionTypes.Simple,
+ subject: 'value',
+ operatorId: Operators.IsFalse,
+ operator: OPERATOR_ENUM_TO_OPERATOR_TYPE[Operators.IsFalse].operation,
+ comparator: undefined,
+ clause: Clauses.Where,
+ }),
+ });
+ expect(
+ screen.queryByPlaceholderText('Filter value (case sensitive)'),
+ ).not.toBeInTheDocument();
+});
+
test('should not call API when column has no advanced data type', async () => {
const props = getAdvancedDataTypeTestProps();
diff --git
a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/index.tsx
b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/index.tsx
index 2a62bdf82df..0c66026f8e1 100644
---
a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/index.tsx
+++
b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/index.tsx
@@ -377,6 +377,14 @@ const AdhocFilterEditPopoverSimpleTabContent: FC<Props> =
props => {
const shouldFocusComparator =
!!subjectSelectProps.value && !!operatorSelectProps.value;
+ const isUnaryOperator =
+ operatorId !== undefined &&
+ DISABLE_INPUT_OPERATORS.includes(operatorId as Operators);
+
+ const hasComparatorOptions =
+ (operatorId && MULTI_OPERATORS.has(operatorId as Operators)) ||
+ suggestions.length > 0;
+
const comparatorSelectProps = {
allowClear: true,
allowNewOptions: true,
@@ -389,9 +397,6 @@ const AdhocFilterEditPopoverSimpleTabContent: FC<Props> =
props => {
value: comparator as SelectValue,
onChange: onComparatorChange,
notFoundContent: t('Type a value here'),
- disabled:
- operatorId !== undefined &&
- DISABLE_INPUT_OPERATORS.includes(operatorId as Operators),
placeholder: createSuggestionsPlaceholder(),
};
@@ -554,49 +559,45 @@ const AdhocFilterEditPopoverSimpleTabContent: FC<Props> =
props => {
}))}
{...operatorSelectProps}
/>
- {(operatorId && MULTI_OPERATORS.has(operatorId as Operators)) ||
- suggestions.length > 0 ? (
- <Tooltip
- title={
- advancedDataTypesState.errorMessage ||
- advancedDataTypesState.parsedAdvancedDataType
- }
- >
- <SelectWithLabel
- css={css`
- margin-top: ${theme.marginXS}px;
- `}
- labelText={labelText}
- options={suggestions}
- {...comparatorSelectProps}
- />
- </Tooltip>
- ) : (
- <Tooltip
- title={
- advancedDataTypesState.errorMessage ||
- advancedDataTypesState.parsedAdvancedDataType
- }
- >
- <div
- css={css`
- margin-top: ${theme.marginXS}px;
- `}
- />
- <Input
- data-test="adhoc-filter-simple-value"
- name="filter-value"
- ref={comparatorInputRef}
- onChange={onInputComparatorChange}
- value={typeof comparator === 'string' ? comparator : undefined}
- placeholder={t('Filter value (case sensitive)')}
- disabled={
- operatorId !== undefined &&
- DISABLE_INPUT_OPERATORS.includes(operatorId as Operators)
+ {!isUnaryOperator &&
+ (hasComparatorOptions ? (
+ <Tooltip
+ title={
+ advancedDataTypesState.errorMessage ||
+ advancedDataTypesState.parsedAdvancedDataType
+ }
+ >
+ <SelectWithLabel
+ css={css`
+ margin-top: ${theme.marginXS}px;
+ `}
+ labelText={labelText}
+ options={suggestions}
+ {...comparatorSelectProps}
+ />
+ </Tooltip>
+ ) : (
+ <Tooltip
+ title={
+ advancedDataTypesState.errorMessage ||
+ advancedDataTypesState.parsedAdvancedDataType
}
- />
- </Tooltip>
- )}
+ >
+ <div
+ css={css`
+ margin-top: ${theme.marginXS}px;
+ `}
+ />
+ <Input
+ data-test="adhoc-filter-simple-value"
+ name="filter-value"
+ ref={comparatorInputRef}
+ onChange={onInputComparatorChange}
+ value={typeof comparator === 'string' ? comparator : undefined}
+ placeholder={t('Filter value (case sensitive)')}
+ />
+ </Tooltip>
+ ))}
</>
);
return (