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", },