tirkarthi commented on PR #44656:
URL: https://github.com/apache/airflow/pull/44656#issuecomment-2519606200

   One way to handle mapped task instances might be to pass `map_index` as a 
query parameter in the URL and then handle it. Below is a rough approach but 
this could be discussed in a separate issue since this will involve URL changes.
   
   ```patch
   diff --git a/airflow/ui/src/pages/Events/Events.tsx 
b/airflow/ui/src/pages/Events/Events.tsx
   index 60663aefec..d311471252 100644
   --- a/airflow/ui/src/pages/Events/Events.tsx
   +++ b/airflow/ui/src/pages/Events/Events.tsx
   @@ -18,7 +18,7 @@
     */
    import { Box } from "@chakra-ui/react";
    import type { ColumnDef } from "@tanstack/react-table";
   -import { useParams } from "react-router-dom";
   +import { useSearchParams, useParams } from "react-router-dom";
    
    import { useEventLogServiceGetEventLogs } from "openapi/queries";
    import type { EventLogResponse } from "openapi/requests/types.gen";
   @@ -113,6 +113,8 @@ const eventsColumn = (
    
    export const Events = () => {
      const { dagId, runId, taskId } = useParams();
   +  const [searchParams, setSearchParams] = useSearchParams();
   +  const mapIndex = searchParams.get("map_index");
      const { setTableURLState, tableURLState } = useTableURLState({
        sorting: [{ desc: true, id: "when" }],
      });
   @@ -132,6 +134,8 @@ export const Events = () => {
        offset: pagination.pageIndex * pagination.pageSize,
        orderBy,
        runId,
   +    taskId,
   +    mapIndex,
      });
    
      return (
   diff --git a/airflow/ui/src/pages/Run/TaskInstances.tsx 
b/airflow/ui/src/pages/Run/TaskInstances.tsx
   index e96ff55d46..4e4127cdfc 100644
   --- a/airflow/ui/src/pages/Run/TaskInstances.tsx
   +++ b/airflow/ui/src/pages/Run/TaskInstances.tsx
   @@ -35,7 +35,7 @@ const columns: Array<ColumnDef<TaskInstanceResponse>> = [
        cell: ({ row: { original } }) => (
          <Link asChild color="fg.info" fontWeight="bold">
            <RouterLink
   -          
to={`/dags/${original.dag_id}/runs/${original.dag_run_id}/tasks/${original.task_id}`}
   +          
to={`/dags/${original.dag_id}/runs/${original.dag_run_id}/tasks/${original.task_id}?map_index=${original.map_index}`}
            >
              {original.task_display_name}
            </RouterLink>
   diff --git a/airflow/ui/src/pages/TaskInstance/TaskInstance.tsx 
b/airflow/ui/src/pages/TaskInstance/TaskInstance.tsx
   index b9e41de93d..d0f5ca9930 100644
   --- a/airflow/ui/src/pages/TaskInstance/TaskInstance.tsx
   +++ b/airflow/ui/src/pages/TaskInstance/TaskInstance.tsx
   @@ -17,37 +17,51 @@
     * under the License.
     */
    import { LiaSlashSolid } from "react-icons/lia";
   -import { useParams, Link as RouterLink } from "react-router-dom";
   +import {
   +  useParams,
   +  useSearchParams,
   +  Link as RouterLink,
   +} from "react-router-dom";
    
    import {
      useDagServiceGetDagDetails,
      useTaskInstanceServiceGetTaskInstance,
   +  useTaskInstanceServiceGetMappedTaskInstance,
    } from "openapi/queries";
    import { Breadcrumb } from "src/components/ui";
    import { DetailsLayout } from "src/layouts/Details/DetailsLayout";
    
    import { Header } from "./Header";
    
   -const tabs = [
   -  { label: "Logs", value: "" },
   -  { label: "Events", value: "events" },
   -  { label: "XCom", value: "xcom" },
   -  { label: "Code", value: "code" },
   -  { label: "Details", value: "details" },
   -];
   -
    export const TaskInstance = () => {
      const { dagId = "", runId = "", taskId = "" } = useParams();
   +  const [searchParams, setSearchParams] = useSearchParams();
   +  const mapIndex = searchParams.get("map_index");
   +
   +  const tabs = [
   +    { label: "Logs", value: "" },
   +    { label: "Events", value: `events?map_index=${mapIndex}` },
   +    { label: "XCom", value: `xcom?map_index=${mapIndex}` },
   +    { label: "Code", value: `code?map_index=${mapIndex}` },
   +    { label: "Details", value: `details?map_index=${mapIndex}` },
   +  ];
    
      const {
        data: taskInstance,
        error,
        isLoading,
   -  } = useTaskInstanceServiceGetTaskInstance({
   -    dagId,
   -    dagRunId: runId,
   -    taskId,
   -  });
   +  } = Boolean(mapIndex) && mapIndex > -1
   +    ? useTaskInstanceServiceGetMappedTaskInstance({
   +        dagId,
   +        dagRunId: runId,
   +        taskId,
   +        mapIndex,
   +      })
   +    : useTaskInstanceServiceGetTaskInstance({
   +        dagId,
   +        dagRunId: runId,
   +        taskId,
   +      });
    
      const {
        data: dag,
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to