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}` : ""}`;