This is an automated email from the ASF dual-hosted git repository.
pierrejeambrun pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new a8f2d975983 Fix grid links for tasks with retries (#57063)
a8f2d975983 is described below
commit a8f2d9759831cebfc1fd4f47d7dae737180996cf
Author: Pierre Jeambrun <[email protected]>
AuthorDate: Wed Oct 22 20:09:27 2025 +0200
Fix grid links for tasks with retries (#57063)
* Fix grid links for tasks with retries
* Update following code review
---
.../src/airflow/ui/src/layouts/Details/Grid/GridTI.tsx | 15 +++++++++++----
.../ui/src/layouts/Details/Grid/TaskInstancesColumn.tsx | 5 +----
2 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/airflow-core/src/airflow/ui/src/layouts/Details/Grid/GridTI.tsx
b/airflow-core/src/airflow/ui/src/layouts/Details/Grid/GridTI.tsx
index fe411e15283..ddf294353cb 100644
--- a/airflow-core/src/airflow/ui/src/layouts/Details/Grid/GridTI.tsx
+++ b/airflow-core/src/airflow/ui/src/layouts/Details/Grid/GridTI.tsx
@@ -20,7 +20,7 @@ import { Badge, Flex } from "@chakra-ui/react";
import type { MouseEvent } from "react";
import React, { useCallback } from "react";
import { useTranslation } from "react-i18next";
-import { Link, useLocation, useParams } from "react-router-dom";
+import { Link, useLocation, useParams, useSearchParams } from
"react-router-dom";
import type { LightGridTaskInstanceSummary } from "openapi/requests/types.gen";
import { StateIcon } from "src/components/StateIcon";
@@ -58,16 +58,17 @@ type Props = {
readonly label: string;
readonly onClick?: () => void;
readonly runId: string;
- readonly search: string;
readonly taskId: string;
};
-const Instance = ({ dagId, instance, isGroup, isMapped, onClick, runId,
search, taskId }: Props) => {
+const Instance = ({ dagId, instance, isGroup, isMapped, onClick, runId, taskId
}: Props) => {
const { setHoveredTaskId } = useHover();
const { groupId: selectedGroupId, taskId: selectedTaskId } = useParams();
const { t: translate } = useTranslation();
const location = useLocation();
+ const [searchParams] = useSearchParams();
+
const onMouseEnter = handleMouseEnter(setHoveredTaskId);
const onMouseLeave = handleMouseLeave(taskId, setHoveredTaskId);
@@ -84,6 +85,12 @@ const Instance = ({ dagId, instance, isGroup, isMapped,
onClick, runId, search,
[dagId, isGroup, isMapped, location.pathname, runId, taskId],
);
+ // Remove try_number query param when navigating to reset to the
+ // latest try of the task instance and avoid issues with invalid try numbers:
+ // https://github.com/apache/airflow/issues/56977
+ searchParams.delete("try_number");
+ const redirectionSearch = searchParams.toString();
+
return (
<Flex
alignItems="center"
@@ -105,7 +112,7 @@ const Instance = ({ dagId, instance, isGroup, isMapped,
onClick, runId, search,
replace
to={{
pathname: getTaskUrl(),
- search,
+ search: redirectionSearch,
}}
>
<Tooltip
diff --git
a/airflow-core/src/airflow/ui/src/layouts/Details/Grid/TaskInstancesColumn.tsx
b/airflow-core/src/airflow/ui/src/layouts/Details/Grid/TaskInstancesColumn.tsx
index 5fdde79a432..c312af33dab 100644
---
a/airflow-core/src/airflow/ui/src/layouts/Details/Grid/TaskInstancesColumn.tsx
+++
b/airflow-core/src/airflow/ui/src/layouts/Details/Grid/TaskInstancesColumn.tsx
@@ -17,7 +17,7 @@
* under the License.
*/
import { Box } from "@chakra-ui/react";
-import { useParams, useSearchParams } from "react-router-dom";
+import { useParams } from "react-router-dom";
import type { LightGridTaskInstanceSummary } from "openapi/requests/types.gen";
@@ -34,8 +34,6 @@ type Props = {
export const TaskInstancesColumn = ({ nodes, onCellClick, runId, taskInstances
}: Props) => {
const { dagId = "" } = useParams();
- const [searchParams] = useSearchParams();
- const search = searchParams.toString();
return nodes.map((node) => {
// todo: how does this work with mapped? same task id for multiple tis
@@ -55,7 +53,6 @@ export const TaskInstancesColumn = ({ nodes, onCellClick,
runId, taskInstances }
label={node.label}
onClick={onCellClick}
runId={runId}
- search={search}
taskId={node.id}
/>
);