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 <[email protected]>
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}` : ""}`;