dstandish commented on code in PR #54484:
URL: https://github.com/apache/airflow/pull/54484#discussion_r2288300837


##########
airflow-core/src/airflow/ui/src/pages/Dag/Tasks/Tasks.tsx:
##########
@@ -47,16 +55,102 @@ export const Tasks = () => {
     dagId,
   });
 
+  const onClearFilters = () => {
+    setSelectedOperators(undefined);
+    setSelectedTriggerRules(undefined);
+    setSelectedRetryValues(undefined);
+    setSelectedMapped(undefined);
+  };
+
+  const allOperatorNames: Array<string> = [
+    ...new Set(data?.tasks.map((task) => task.operator_name).filter((item) => 
item !== null) ?? []),
+  ];
+  const allTriggerRules: Array<string> = [
+    ...new Set(data?.tasks.map((task) => task.trigger_rule).filter((item) => 
item !== null) ?? []),
+  ];
+  const allRetryValues: Array<string> = [
+    ...new Set(
+      data?.tasks.map((task) => task.retries?.toString()).filter((item) => 
item !== undefined) ?? [],
+    ),
+  ];
+  const allMappedValues = [
+    { key: "true", label: "Mapped" },
+    { key: "false", label: "Not mapped" },
+  ];
+
+  const filterTasks = ({
+    mapped,
+    operatorNames,
+    retryValues,
+    tasks,
+    triggerRuleNames,
+  }: {
+    mapped: string | undefined;
+    operatorNames: Array<string>;
+    retryValues: Array<string>;
+    tasks: Array<TaskResponse>;
+    triggerRuleNames: Array<string>;
+  }) =>
+    tasks.filter(
+      (task) =>
+        (operatorNames.length === 0 || 
operatorNames.includes(task.operator_name as string)) &&
+        (triggerRuleNames.length === 0 || 
triggerRuleNames.includes(task.trigger_rule as string)) &&
+        (retryValues.length === 0 || 
retryValues.includes(task.retries?.toString() as string)) &&
+        (mapped === undefined || task.is_mapped?.toString() === mapped),
+    );
+
+  const filteredTasks = filterTasks({
+    mapped: selectedMapped,
+    operatorNames: selectedOperators ?? [],
+    retryValues: selectedRetryValues ?? [],
+    tasks: data ? data.tasks : [],
+    triggerRuleNames: selectedTriggerRules ?? [],
+  });
+
   return (
     <Box>
       <ErrorAlert error={tasksError} />
       <Heading my={1} size="md">
         {translate("task", { count: data?.total_entries ?? 0 })}
       </Heading>
+
+      <HStack>
+        <AttrSelectFilterMulti
+          displayPrefix={undefined}
+          handleSelect={setSelectedOperators}
+          placeholderText={translate("selectOperator")}
+          selectedValues={selectedOperators}
+          values={allOperatorNames}
+        />
+        <AttrSelectFilterMulti
+          displayPrefix={undefined}
+          handleSelect={setSelectedTriggerRules}
+          placeholderText={translate("selectTriggerRules")}
+          selectedValues={selectedTriggerRules}
+          values={allTriggerRules}
+        />
+        <AttrSelectFilterMulti
+          displayPrefix="Retries"
+          handleSelect={setSelectedRetryValues}
+          placeholderText={translate("selectRetryValues")}
+          selectedValues={selectedRetryValues}
+          values={allRetryValues}
+        />
+        <AttrSelectFilter
+          handleSelect={setSelectedMapped}
+          placeholderText="Select mapped"

Review Comment:
   ah yes



##########
airflow-core/src/airflow/ui/src/pages/Dag/Tasks/Tasks.tsx:
##########
@@ -47,16 +55,102 @@ export const Tasks = () => {
     dagId,
   });
 
+  const onClearFilters = () => {
+    setSelectedOperators(undefined);
+    setSelectedTriggerRules(undefined);
+    setSelectedRetryValues(undefined);
+    setSelectedMapped(undefined);
+  };
+
+  const allOperatorNames: Array<string> = [
+    ...new Set(data?.tasks.map((task) => task.operator_name).filter((item) => 
item !== null) ?? []),
+  ];
+  const allTriggerRules: Array<string> = [
+    ...new Set(data?.tasks.map((task) => task.trigger_rule).filter((item) => 
item !== null) ?? []),
+  ];
+  const allRetryValues: Array<string> = [
+    ...new Set(
+      data?.tasks.map((task) => task.retries?.toString()).filter((item) => 
item !== undefined) ?? [],
+    ),
+  ];
+  const allMappedValues = [
+    { key: "true", label: "Mapped" },
+    { key: "false", label: "Not mapped" },

Review Comment:
   thanks



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to