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 c03e94905e5 Improve XCom table (#48189)
c03e94905e5 is described below

commit c03e94905e5367676c41490254164a89f6170acf
Author: Pierre Jeambrun <pierrejb...@gmail.com>
AuthorDate: Mon Mar 24 14:59:34 2025 +0100

    Improve XCom table (#48189)
---
 .../airflow/ui/src/components/TruncatedText.tsx    |  1 -
 .../ui/src/pages/TaskInstances/TaskInstances.tsx   |  1 +
 .../src/airflow/ui/src/pages/XCom/XCom.tsx         | 49 +++++++++++++++++++++-
 airflow-core/src/airflow/ui/src/utils/links.ts     | 12 ++++++
 4 files changed, 60 insertions(+), 3 deletions(-)

diff --git a/airflow-core/src/airflow/ui/src/components/TruncatedText.tsx 
b/airflow-core/src/airflow/ui/src/components/TruncatedText.tsx
index 5b64f5163d5..c96f928da01 100644
--- a/airflow-core/src/airflow/ui/src/components/TruncatedText.tsx
+++ b/airflow-core/src/airflow/ui/src/components/TruncatedText.tsx
@@ -31,7 +31,6 @@ export const TruncatedText = ({ text, ...rest }: Props) => (
       WebkitLineClamp: 2,
     }}
     title={text}
-    width="200px"
     wordBreak="break-word"
     {...rest}
   >
diff --git 
a/airflow-core/src/airflow/ui/src/pages/TaskInstances/TaskInstances.tsx 
b/airflow-core/src/airflow/ui/src/pages/TaskInstances/TaskInstances.tsx
index cd0d6192ccb..a6fc15f60d4 100644
--- a/airflow-core/src/airflow/ui/src/pages/TaskInstances/TaskInstances.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/TaskInstances/TaskInstances.tsx
@@ -38,6 +38,7 @@ import { getTaskInstanceLink } from "src/utils/links";
 import { TaskInstancesFilter } from "./TaskInstancesFilter";
 
 type TaskInstanceRow = { row: { original: TaskInstanceResponse } };
+
 const {
   END_DATE: END_DATE_PARAM,
   NAME_PATTERN: NAME_PATTERN_PARAM,
diff --git a/airflow-core/src/airflow/ui/src/pages/XCom/XCom.tsx 
b/airflow-core/src/airflow/ui/src/pages/XCom/XCom.tsx
index 2b10ce704d6..39445c375ec 100644
--- a/airflow-core/src/airflow/ui/src/pages/XCom/XCom.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/XCom/XCom.tsx
@@ -16,15 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { Box } from "@chakra-ui/react";
+import { Box, Link } from "@chakra-ui/react";
 import type { ColumnDef } from "@tanstack/react-table";
-import { useParams } from "react-router-dom";
+import { Link as RouterLink, useParams } from "react-router-dom";
 
 import { useXcomServiceGetXcomEntries } from "openapi/queries";
 import type { XComResponse } from "openapi/requests/types.gen";
 import { DataTable } from "src/components/DataTable";
 import { useTableURLState } from "src/components/DataTable/useTableUrlState";
 import { ErrorAlert } from "src/components/ErrorAlert";
+import { TruncatedText } from "src/components/TruncatedText";
+import { getTaskInstanceLinkFromObj } from "src/utils/links";
 
 import { XComEntry } from "./XComEntry";
 
@@ -34,6 +36,49 @@ const columns: Array<ColumnDef<XComResponse>> = [
     enableSorting: false,
     header: "Key",
   },
+  {
+    accessorKey: "dag_id",
+    cell: ({ row: { original } }) => (
+      <Link asChild color="fg.info" fontWeight="bold">
+        <RouterLink 
to={`/dags/${original.dag_id}`}>{original.dag_id}</RouterLink>
+      </Link>
+    ),
+    header: "Dag",
+  },
+  {
+    accessorKey: "run_id",
+    cell: ({ row: { original } }: { row: { original: XComResponse } }) => (
+      <Link asChild color="fg.info" fontWeight="bold">
+        <RouterLink to={`/dags/${original.dag_id}/runs/${original.run_id}`}>
+          <TruncatedText text={original.run_id} />
+        </RouterLink>
+      </Link>
+    ),
+    header: "Run Id",
+  },
+  {
+    accessorKey: "task_id",
+    cell: ({ row: { original } }: { row: { original: XComResponse } }) => (
+      <Link asChild color="fg.info" fontWeight="bold">
+        <RouterLink
+          to={getTaskInstanceLinkFromObj({
+            dagId: original.dag_id,
+            dagRunId: original.run_id,
+            mapIndex: original.map_index,
+            taskId: original.task_id,
+          })}
+        >
+          <TruncatedText text={original.task_id} />
+        </RouterLink>
+      </Link>
+    ),
+    enableSorting: false,
+    header: "Task ID",
+  },
+  {
+    accessorKey: "map_index",
+    header: "Map Index",
+  },
   {
     cell: ({ row: { original } }) => (
       <XComEntry
diff --git a/airflow-core/src/airflow/ui/src/utils/links.ts 
b/airflow-core/src/airflow/ui/src/utils/links.ts
index a4b70aa3e47..69f634268e6 100644
--- a/airflow-core/src/airflow/ui/src/utils/links.ts
+++ b/airflow-core/src/airflow/ui/src/utils/links.ts
@@ -20,3 +20,15 @@ import type { TaskInstanceResponse } from 
"openapi/requests/types.gen";
 
 export const getTaskInstanceLink = (ti: TaskInstanceResponse) =>
   `/dags/${ti.dag_id}/runs/${ti.dag_run_id}/tasks/${ti.task_id}${ti.map_index 
>= 0 ? `/mapped/${ti.map_index}` : ""}`;
+
+export const getTaskInstanceLinkFromObj = ({
+  dagId,
+  dagRunId,
+  mapIndex = -1,
+  taskId,
+}: {
+  dagId: string;
+  dagRunId: string;
+  mapIndex: number;
+  taskId: string;
+}) => `/dags/${dagId}/runs/${dagRunId}/tasks/${taskId}${mapIndex >= 0 ? 
`/mapped/${mapIndex}` : ""}`;

Reply via email to