diff --git a/airflow/www/static/js/dag/details/FilterTasks.tsx b/airflow/www/static/js/dag/details/FilterTasks.tsx index 33d830b74ddb2..7bc9b976b91b5 100644 --- a/airflow/www/static/js/dag/details/FilterTasks.tsx +++ b/airflow/www/static/js/dag/details/FilterTasks.tsx @@ -28,9 +28,11 @@ import { } from "@chakra-ui/react"; import useFilters from "src/dag/useFilters"; import { MdArrowDropDown } from "react-icons/md"; +import { useGridData } from "src/api"; +import { getTask } from "src/utils"; interface Props { - taskId: string; + taskId: string | null; } const FilterTasks = ({ taskId }: Props) => { @@ -40,34 +42,48 @@ const FilterTasks = ({ taskId }: Props) => { resetRoot, } = useFilters(); - const onFilterUpstream = () => - onFilterTasksChange({ - root: taskId, - filterUpstream: true, - filterDownstream: false, - }); + const { + data: { groups }, + } = useGridData(); - const onFilterDownstream = () => - onFilterTasksChange({ - root: taskId, - filterUpstream: false, - filterDownstream: true, - }); + const label = "Filter upstream and/or downstream of a task"; - const onFilterAll = () => - onFilterTasksChange({ - root: taskId, - filterUpstream: true, - filterDownstream: true, - }); + if (!root && !taskId) return null; - const label = "Filter upstream and/or downstream of a task"; + const onFilterUpstream = () => { + if (taskId) + onFilterTasksChange({ + root: taskId, + filterUpstream: true, + filterDownstream: false, + }); + }; + + const onFilterDownstream = () => { + if (taskId) + onFilterTasksChange({ + root: taskId, + filterUpstream: false, + filterDownstream: true, + }); + }; + + const onFilterAll = () => { + if (taskId) + onFilterTasksChange({ + root: taskId, + filterUpstream: true, + filterDownstream: true, + }); + }; + + const task = root ? getTask({ taskId: root, task: groups }) : undefined; return ( { mt={2} > - {!root ? "Filter Tasks " : "Clear Task Filter "} + {root + ? `Filtered on ${task?.label || "unknown"}` + : "Filter DAG by task"} - Filter Upstream - Filter Downstream - Filter Upstream & Downstream - {!!root && Reset Root} + {!!root && Reset} + {!!taskId && ( + <> + Only upstream + Only downstream + + Both upstream & downstream + + + )} ); diff --git a/airflow/www/static/js/dag/details/Header.tsx b/airflow/www/static/js/dag/details/Header.tsx index d13dfa6c8153f..78f30f362040e 100644 --- a/airflow/www/static/js/dag/details/Header.tsx +++ b/airflow/www/static/js/dag/details/Header.tsx @@ -124,7 +124,7 @@ const Header = ({ mapIndex }: Props) => { )} - {mapIndex !== undefined && ( + {mapIndex !== undefined && mapIndex !== -1 && ( )} - {taskId && runId && } +