diff --git a/airflow-core/src/airflow/ui/src/pages/GroupTaskInstance/GroupTaskInstance.tsx b/airflow-core/src/airflow/ui/src/pages/GroupTaskInstance/GroupTaskInstance.tsx
index c9150ac2dbda1..02b74b9b7b1c5 100644
--- a/airflow-core/src/airflow/ui/src/pages/GroupTaskInstance/GroupTaskInstance.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/GroupTaskInstance/GroupTaskInstance.tsx
@@ -18,9 +18,11 @@
*/
import { ReactFlowProvider } from "@xyflow/react";
import { useTranslation } from "react-i18next";
+import { FiUser } from "react-icons/fi";
import { MdOutlineTask } from "react-icons/md";
import { useParams } from "react-router-dom";
+import { useHumanInTheLoopServiceGetHitlDetails } from "openapi/queries";
import { DetailsLayout } from "src/layouts/Details/DetailsLayout";
import { useGridTiSummaries } from "src/queries/useGridTISummaries.ts";
import { isStatePending, useAutoRefresh } from "src/utils";
@@ -28,18 +30,37 @@ import { isStatePending, useAutoRefresh } from "src/utils";
import { Header } from "./Header";
export const GroupTaskInstance = () => {
- const { dagId = "", runId = "", taskId = "" } = useParams();
+ const { dagId = "", groupId = "", runId = "" } = useParams();
const { t: translate } = useTranslation("dag");
const { data: gridTISummaries } = useGridTiSummaries({ dagId, runId });
- const taskInstance = gridTISummaries?.task_instances.find((ti) => ti.task_id === taskId);
+ const taskInstance = gridTISummaries?.task_instances.find((ti) => ti.task_id === groupId);
const refetchInterval = useAutoRefresh({ dagId });
- const tabs = [{ icon: , label: translate("tabs.taskInstances"), value: "" }];
+ const { data: hitlData } = useHumanInTheLoopServiceGetHitlDetails(
+ {
+ dagId,
+ dagRunId: runId,
+ taskIdPattern: groupId,
+ },
+ undefined,
+ {
+ enabled: Boolean(dagId && groupId),
+ },
+ );
+
+ const hasHitlForTask = (hitlData?.total_entries ?? 0) > 0;
+
+ const tabs = [
+ { icon: , label: translate("tabs.taskInstances"), value: "" },
+ { icon: , label: translate("tabs.requiredActions"), value: "required_actions" },
+ ];
+
+ const displayTabs = tabs.filter((tab) => tab.value !== "required_actions" || hasHitlForTask);
return (
-
+
{taskInstance === undefined ? undefined : (
, index: true }],
+ children: [
+ { element: , index: true },
+ { element: , path: "required_actions" },
+ ],
element: ,
path: "dags/:dagId/runs/:runId/tasks/group/:groupId",
},