From 8d7cc9061906e676b4d20aa9d8caa15b9e7101db Mon Sep 17 00:00:00 2001 From: Arbaaz Ahmed Date: Tue, 3 Mar 2026 21:52:56 +0530 Subject: [PATCH 1/2] Fix XCom edit modal value not repopulating on reopen --- .../src/airflow/ui/src/pages/XCom/XComModal.tsx | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/airflow-core/src/airflow/ui/src/pages/XCom/XComModal.tsx b/airflow-core/src/airflow/ui/src/pages/XCom/XComModal.tsx index b16b8161f6640..2febb9959b374 100644 --- a/airflow-core/src/airflow/ui/src/pages/XCom/XComModal.tsx +++ b/airflow-core/src/airflow/ui/src/pages/XCom/XComModal.tsx @@ -62,12 +62,16 @@ const XComModal = ({ dagId, isOpen, mapIndex, mode, onClose, runId, taskId, xcom xcomKey: xcomKey ?? "", }, undefined, - { enabled: isOpen && isEditMode && Boolean(xcomKey) }, + { + enabled: isOpen && isEditMode && Boolean(xcomKey), + refetchOnMount: "always", + staleTime: 0, + } ); // Populate form when editing useEffect(() => { - if (isEditMode && data?.value !== undefined) { + if (isEditMode && data) { const val = data.value; setValue(typeof val === "string" ? val : JSON.stringify(val, undefined, 2)); @@ -167,7 +171,7 @@ const XComModal = ({ dagId, isOpen, mapIndex, mode, onClose, runId, taskId, xcom const title = isEditMode ? translate("browse:xcom.edit.title") : translate("browse:xcom.add.title"); return ( - + {title} From 43412e16193446b590d5fcbbbdec453668256c50 Mon Sep 17 00:00:00 2001 From: Arbaaz Ahmed Date: Fri, 6 Mar 2026 20:28:43 +0530 Subject: [PATCH 2/2] Fix XCom modal value not repopulating when reopened --- .../airflow/ui/src/pages/XCom/XComModal.tsx | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/airflow-core/src/airflow/ui/src/pages/XCom/XComModal.tsx b/airflow-core/src/airflow/ui/src/pages/XCom/XComModal.tsx index 2febb9959b374..f7f9494786ae5 100644 --- a/airflow-core/src/airflow/ui/src/pages/XCom/XComModal.tsx +++ b/airflow-core/src/airflow/ui/src/pages/XCom/XComModal.tsx @@ -58,25 +58,22 @@ const XComModal = ({ dagId, isOpen, mapIndex, mode, onClose, runId, taskId, xcom dagRunId: runId, deserialize: true, mapIndex, + stringify: false, taskId, xcomKey: xcomKey ?? "", }, undefined, - { - enabled: isOpen && isEditMode && Boolean(xcomKey), - refetchOnMount: "always", - staleTime: 0, - } + { enabled: isOpen && isEditMode && Boolean(xcomKey) }, ); // Populate form when editing useEffect(() => { - if (isEditMode && data) { + if (isOpen && isEditMode && data) { const val = data.value; setValue(typeof val === "string" ? val : JSON.stringify(val, undefined, 2)); } - }, [data, isEditMode]); + }, [data, isEditMode, isOpen]); // Reset form when modal closes useEffect(() => { @@ -117,13 +114,25 @@ const XComModal = ({ dagId, isOpen, mapIndex, mode, onClose, runId, taskId, xcom type: "error", }); }, - onSuccess: async () => { + onSuccess: async (response) => { + queryClient.setQueryData( + [ + useXcomServiceGetXcomEntryKey, + { + dagId, + dagRunId: runId, + deserialize: true, + mapIndex, + stringify: false, + taskId, + xcomKey, + }, + ], + response, + ); await queryClient.invalidateQueries({ queryKey: [useXcomServiceGetXcomEntriesKey], }); - await queryClient.invalidateQueries({ - queryKey: [useXcomServiceGetXcomEntryKey], - }); onClose(); toaster.create({ description: translate("browse:xcom.edit.success"), @@ -171,7 +180,7 @@ const XComModal = ({ dagId, isOpen, mapIndex, mode, onClose, runId, taskId, xcom const title = isEditMode ? translate("browse:xcom.edit.title") : translate("browse:xcom.add.title"); return ( - + {title}