diff --git a/airflow-core/src/airflow/ui/src/pages/Dag/Dag.tsx b/airflow-core/src/airflow/ui/src/pages/Dag/Dag.tsx index 15fa137bc623c..d5b192110a828 100644 --- a/airflow-core/src/airflow/ui/src/pages/Dag/Dag.tsx +++ b/airflow-core/src/airflow/ui/src/pages/Dag/Dag.tsx @@ -44,19 +44,6 @@ export const Dag = () => { // Get external views with dag destination const externalTabs = usePluginTabs("dag"); - const tabs = [ - { icon: , label: translate("tabs.overview"), value: "" }, - { icon: , label: translate("tabs.runs"), value: "runs" }, - { icon: , label: translate("tabs.tasks"), value: "tasks" }, - { icon: , label: translate("tabs.calendar"), value: "calendar" }, - { icon: , label: translate("tabs.requiredActions"), value: "required_actions" }, - { icon: , label: translate("tabs.backfills"), value: "backfills" }, - { icon: , label: translate("tabs.auditLog"), value: "events" }, - { icon: , label: translate("tabs.code"), value: "code" }, - { icon: , label: translate("tabs.details"), value: "details" }, - ...externalTabs, - ]; - const refetchInterval = useAutoRefresh({ dagId }); const [hasPendingRuns, setHasPendingRuns] = useState(false); @@ -106,6 +93,19 @@ export const Dag = () => { }, ); + const tabs = [ + { icon: , label: translate("tabs.overview"), value: "" }, + { icon: , label: translate("tabs.runs"), value: "runs" }, + { icon: , label: translate("tabs.tasks"), value: "tasks" }, + { icon: , label: translate("tabs.calendar"), value: "calendar" }, + { icon: , label: translate("tabs.requiredActions"), value: "required_actions" }, + { icon: , label: translate("tabs.backfills"), value: "backfills" }, + { icon: , label: translate("tabs.auditLog"), value: "events" }, + { icon: , label: translate("tabs.code"), value: "code" }, + { icon: , label: translate("tabs.details"), value: "details" }, + ...externalTabs, + ]; + const { tabs: processedTabs } = useRequiredActionTabs({ dagId }, tabs, { refetchInterval: (dag?.active_runs_count ?? 0) > 0 || (latestRun && isStatePending(latestRun.state)) diff --git a/airflow-core/src/airflow/ui/src/pages/DagRuns.tsx b/airflow-core/src/airflow/ui/src/pages/DagRuns.tsx index 99186d6102ee1..2f9cddd966acf 100644 --- a/airflow-core/src/airflow/ui/src/pages/DagRuns.tsx +++ b/airflow-core/src/airflow/ui/src/pages/DagRuns.tsx @@ -20,9 +20,9 @@ import { Flex, HStack, Link, Text } from "@chakra-ui/react"; import type { ColumnDef } from "@tanstack/react-table"; import type { TFunction } from "i18next"; import { useTranslation } from "react-i18next"; -import { Link as RouterLink, useParams, useSearchParams } from "react-router-dom"; +import { Link as RouterLink, Navigate, useLocation, useParams, useSearchParams } from "react-router-dom"; -import { useDagRunServiceGetDagRuns } from "openapi/queries"; +import { useDagRunServiceGetDagRuns, useDagServiceGetDagDetails } from "openapi/queries"; import type { DAGRunResponse } from "openapi/requests/types.gen"; import { ClearRunButton } from "src/components/Clear"; import { DagVersion } from "src/components/DagVersion"; @@ -188,6 +188,7 @@ const runColumns = (translate: TFunction, dagId?: string): Array { const { t: translate } = useTranslation(); const { dagId } = useParams(); + const location = useLocation(); const [searchParams] = useSearchParams(); const { setTableURLState, tableURLState } = useTableURLState({ @@ -203,6 +204,12 @@ export const DagRuns = () => { const orderBy = sort ? [`${sort.desc ? "-" : ""}${sort.id}`] : ["-run_after"]; const { pageIndex, pageSize } = pagination; + const { data: dagDetails } = useDagServiceGetDagDetails( + { dagId: dagId ?? "" }, + undefined, + { enabled: Boolean(dagId) }, + ); + const filteredState = searchParams.get(STATE_PARAM); const filteredType = searchParams.get(RUN_TYPE_PARAM); const filteredRunIdPattern = searchParams.get(RUN_ID_PATTERN_PARAM); @@ -256,6 +263,14 @@ export const DagRuns = () => { const columns = runColumns(translate, dagId); + if (dagId && dagDetails?.timetable_summary === "Partitioned Asset" && filteredType === null) { + const next = new URLSearchParams(searchParams); + + next.set(RUN_TYPE_PARAM, "asset_triggered"); + + return ; + } + return ( <>