From cf42a7b184e9e7e416bc887944278e24a0f65ff6 Mon Sep 17 00:00:00 2001 From: Idris Akorede Ibrahim Date: Sat, 21 Mar 2026 11:19:38 +0100 Subject: [PATCH 1/2] fix(ui): guard against null/undefined dates in Gantt chart to prevent RangeError Closes: #63954 --- .../src/airflow/ui/src/layouts/Details/Gantt/utils.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/airflow-core/src/airflow/ui/src/layouts/Details/Gantt/utils.ts b/airflow-core/src/airflow/ui/src/layouts/Details/Gantt/utils.ts index b2a54fa7d7e82..fd9d64f4b8554 100644 --- a/airflow-core/src/airflow/ui/src/layouts/Details/Gantt/utils.ts +++ b/airflow-core/src/airflow/ui/src/layouts/Details/Gantt/utils.ts @@ -96,7 +96,7 @@ export const transformGanttData = ({ // Handle groups and mapped tasks using grid summary (aggregated min/max times) // Use ISO so time scale and bar positions render consistently across browsers if ((node.isGroup ?? node.is_mapped) && gridSummary) { - if (gridSummary.min_start_date === null || gridSummary.max_end_date === null) { + if (!gridSummary.min_start_date || !gridSummary.max_end_date) { return undefined; } @@ -124,7 +124,10 @@ export const transformGanttData = ({ .filter((tryInstance) => tryInstance.start_date !== null) .map((tryInstance) => { const hasTaskRunning = isStatePending(tryInstance.state); - const endTime = hasTaskRunning ? dayjs().toISOString() : tryInstance.end_date; + const endTime = + hasTaskRunning || tryInstance.end_date === null + ? dayjs().toISOString() + : tryInstance.end_date; return { isGroup: false, From eb1d76c4d9d8dfb168b81c8efcc8cc6a127ced01 Mon Sep 17 00:00:00 2001 From: Idris Akorede Ibrahim Date: Tue, 24 Mar 2026 14:00:10 +0100 Subject: [PATCH 2/2] Fix strict-boolean-expressions lint error in Gantt utils --- airflow-core/src/airflow/ui/src/layouts/Details/Gantt/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airflow-core/src/airflow/ui/src/layouts/Details/Gantt/utils.ts b/airflow-core/src/airflow/ui/src/layouts/Details/Gantt/utils.ts index fd9d64f4b8554..22df4eb28cffc 100644 --- a/airflow-core/src/airflow/ui/src/layouts/Details/Gantt/utils.ts +++ b/airflow-core/src/airflow/ui/src/layouts/Details/Gantt/utils.ts @@ -96,7 +96,7 @@ export const transformGanttData = ({ // Handle groups and mapped tasks using grid summary (aggregated min/max times) // Use ISO so time scale and bar positions render consistently across browsers if ((node.isGroup ?? node.is_mapped) && gridSummary) { - if (!gridSummary.min_start_date || !gridSummary.max_end_date) { + if (gridSummary.min_start_date === null || gridSummary.max_end_date === null) { return undefined; }