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 (

Reply via email to