This is an automated email from the ASF dual-hosted git repository.
pierrejeambrun pushed a commit to branch v3-1-test
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/v3-1-test by this push:
new 40dbf2ba8ec Upgrade react-dom-router in Airflow UI (#60316) (#60456)
40dbf2ba8ec is described below
commit 40dbf2ba8ec865a58dddf5239e5c7343d33947c3
Author: Pierre Jeambrun <[email protected]>
AuthorDate: Wed Jan 14 09:50:40 2026 +0100
Upgrade react-dom-router in Airflow UI (#60316) (#60456)
---
airflow-core/src/airflow/ui/package.json | 10 +-
airflow-core/src/airflow/ui/pnpm-lock.yaml | 133 +++++++++++++--------
.../src/components/DagActions/DeleteDagButton.tsx | 2 +-
.../airflow/ui/src/components/DurationChart.tsx | 4 +-
.../ui/src/components/SearchDags/SearchDags.tsx | 2 +-
.../ui/src/hooks/navigation/useNavigation.ts | 2 +-
.../airflow/ui/src/hooks/useRequiredActionTabs.ts | 2 +-
.../ui/src/layouts/Details/DagRunSelect.tsx | 8 +-
.../airflow/ui/src/layouts/Details/Gantt/utils.ts | 14 ++-
airflow-core/src/airflow/ui/src/pages/Error.tsx | 17 ++-
airflow-core/src/airflow/ui/src/pages/Security.tsx | 2 +-
.../src/airflow/ui/src/queries/useTrigger.ts | 2 +-
12 files changed, 124 insertions(+), 74 deletions(-)
diff --git a/airflow-core/src/airflow/ui/package.json
b/airflow-core/src/airflow/ui/package.json
index b364a4fae02..e955b6f4afa 100644
--- a/airflow-core/src/airflow/ui/package.json
+++ b/airflow-core/src/airflow/ui/package.json
@@ -57,7 +57,7 @@
"react-markdown": "^9.1.0",
"react-resizable": "^3.0.5",
"react-resizable-panels": "^2.1.7",
- "react-router-dom": "^6.30.0",
+ "react-router-dom": "^7.12.0",
"react-syntax-highlighter": "^15.6.1",
"remark-gfm": "^4.0.1",
"use-debounce": "^10.0.4",
@@ -78,6 +78,9 @@
"@types/react": "^18.3.19",
"@types/react-dom": "^18.3.5",
"@types/react-syntax-highlighter": "^15.5.13",
+ "@typescript-eslint/eslint-plugin": "^8.50.0",
+ "@typescript-eslint/parser": "^8.50.0",
+ "@typescript-eslint/utils": "^8.50.0",
"@vitejs/plugin-react-swc": "^3.9.0",
"@vitest/coverage-v8": "^2.1.9",
"eslint": "^9.25.1",
@@ -102,10 +105,7 @@
"vite": "^5.4.19",
"vite-plugin-css-injected-by-js": "^3.5.2",
"vitest": "^2.1.9",
- "web-worker": "^1.5.0",
- "@typescript-eslint/eslint-plugin": "^8.50.0",
- "@typescript-eslint/utils": "^8.50.0",
- "@typescript-eslint/parser": "^8.50.0"
+ "web-worker": "^1.5.0"
},
"pnpm": {
"onlyBuiltDependencies": [
diff --git a/airflow-core/src/airflow/ui/pnpm-lock.yaml
b/airflow-core/src/airflow/ui/pnpm-lock.yaml
index ad5f3c2d9f9..661968e3da7 100644
--- a/airflow-core/src/airflow/ui/pnpm-lock.yaml
+++ b/airflow-core/src/airflow/ui/pnpm-lock.yaml
@@ -40,7 +40,7 @@ importers:
version:
4.23.12(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])
'@uiw/react-codemirror':
specifier: ^4.23.12
- version:
4.23.12(@babel/[email protected])(@codemirror/[email protected](@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@lezer/[email protected]))(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])([email protected](@lezer/[email protected]))([email protected]([email protected]))([email protected])
+ version:
4.23.12(@babel/[email protected])(@codemirror/[email protected](@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@lezer/[email protected]))(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])([email protected](@lezer/[email protected]))([email protected]([email protected]))([email protected])
'@visx/group':
specifier: ^3.12.0
version: 3.12.0([email protected])
@@ -132,8 +132,8 @@ importers:
specifier: ^2.1.7
version: 2.1.7([email protected]([email protected]))([email protected])
react-router-dom:
- specifier: ^6.30.0
- version: 6.30.0([email protected]([email protected]))([email protected])
+ specifier: ^7.12.0
+ version: 7.12.0([email protected]([email protected]))([email protected])
react-syntax-highlighter:
specifier: ^15.6.1
version: 15.6.1([email protected])
@@ -307,8 +307,8 @@ packages:
resolution: {integrity:
sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
engines: {node: '>=6.9.0'}
- '@babel/[email protected]':
- resolution: {integrity:
sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
+ '@babel/[email protected]':
+ resolution: {integrity:
sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==}
engines: {node: '>=6.9.0'}
'@babel/[email protected]':
@@ -347,8 +347,8 @@ packages:
resolution: {integrity:
sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
engines: {node: '>=6.9.0'}
- '@babel/[email protected]':
- resolution: {integrity:
sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
+ '@babel/[email protected]':
+ resolution: {integrity:
sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
engines: {node: '>=6.9.0'}
'@babel/[email protected]':
@@ -414,6 +414,9 @@ packages:
'@codemirror/view': ^6.0.0
'@lezer/common': ^1.0.0
+ '@codemirror/[email protected]':
+ resolution: {integrity:
sha512-uWDWFypNdQmz2y1LaNJzK7fL7TYKLeUAU0npEC685OKTF3KcQ2Vu3klIM78D7I6wGhktme0lh3CuQLv0ZCrD9Q==}
+
'@codemirror/[email protected]':
resolution: {integrity:
sha512-KlGVYufHMQzxbdQONiLyGQDUW0itrLZwq3CcY7xpv9ZLRHqzkBSoteocBHtMCoY7/Ci4xhzSrToIeLg7FxHuaw==}
@@ -795,9 +798,15 @@ packages:
'@lezer/[email protected]':
resolution: {integrity:
sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==}
+ '@lezer/[email protected]':
+ resolution: {integrity:
sha512-PNGcolp9hr4PJdXR4ix7XtixDrClScvtSCYW3rQG106oVMOOI+jFb+0+J3mbeL/53g1Zd6s0kJzaw6Ri68GmAA==}
+
'@lezer/[email protected]':
resolution: {integrity:
sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==}
+ '@lezer/[email protected]':
+ resolution: {integrity:
sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==}
+
'@lezer/[email protected]':
resolution: {integrity:
sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==}
@@ -847,10 +856,6 @@ packages:
resolution: {integrity:
sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==}
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
- '@remix-run/[email protected]':
- resolution: {integrity:
sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==}
- engines: {node: '>=14.0.0'}
-
'@rollup/[email protected]':
resolution: {integrity:
sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw==}
cpu: [arm]
@@ -2142,6 +2147,10 @@ packages:
resolution: {integrity:
sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
engines: {node: '>= 0.6'}
+ [email protected]:
+ resolution: {integrity:
sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==}
+ engines: {node: '>=18'}
+
[email protected]:
resolution: {integrity:
sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==}
@@ -3218,8 +3227,8 @@ packages:
[email protected]:
resolution: {integrity:
sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
- [email protected]:
- resolution: {integrity:
sha512-r8LA6i4LP4EeWOhqBaZZjDWwehd1xUJPCJd9Sv300H0ZmcUER4+JPh7bqqZeqs1o5pgtgvXm+d9UGrB5zZGDiQ==}
+ [email protected]:
+ resolution: {integrity:
sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==}
engines: {node: 20 || >=22}
[email protected]:
@@ -3642,8 +3651,8 @@ packages:
resolution: {integrity:
sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
engines: {node: '>=16 || 14 >=14.18'}
- [email protected]:
- resolution: {integrity:
sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==}
+ [email protected]:
+ resolution: {integrity:
sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==}
engines: {node: 20 || >=22}
[email protected]:
@@ -3879,18 +3888,22 @@ packages:
peerDependencies:
react: '>= 16.3'
- [email protected]:
- resolution: {integrity:
sha512-x30B78HV5tFk8ex0ITwzC9TTZMua4jGyA9IUlH1JLQYQTFyxr/ZxwOJq7evg1JX1qGVUcvhsmQSKdPncQrjTgA==}
- engines: {node: '>=14.0.0'}
+ [email protected]:
+ resolution: {integrity:
sha512-pfO9fiBcpEfX4Tx+iTYKDtPbrSLLCbwJ5EqP+SPYQu1VYCXdy79GSj0wttR0U4cikVdlImZuEZ/9ZNCgoaxwBA==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
- react: '>=16.8'
- react-dom: '>=16.8'
+ react: '>=18'
+ react-dom: '>=18'
- [email protected]:
- resolution: {integrity:
sha512-D3X8FyH9nBcTSHGdEKurK7r8OYE1kKFn3d/CF+CoxbSHkxU7o37+Uh7eAHRXr6k2tSExXYO++07PeXJtA/dEhQ==}
- engines: {node: '>=14.0.0'}
+ [email protected]:
+ resolution: {integrity:
sha512-kTPDYPFzDVGIIGNLS5VJykK0HfHLY5MF3b+xj0/tTyNYL1gF1qs7u67Z9jEhQk2sQ98SUaHxlG31g1JtF7IfVw==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
- react: '>=16.8'
+ react: '>=18'
+ react-dom: '>=18'
+ peerDependenciesMeta:
+ react-dom:
+ optional: true
[email protected]:
resolution: {integrity:
sha512-roPEZUL4aRZDx6DcsD+ZNreVl+fM8VsKn0Wtex1v4IazH60ILp5xhdlp464IsEAlJdXeD+BhDAFsBVMfvLQueA==}
@@ -4054,6 +4067,9 @@ packages:
resolution: {integrity:
sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==}
engines: {node: '>= 18'}
+ [email protected]:
+ resolution: {integrity:
sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==}
+
[email protected]:
resolution: {integrity:
sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
@@ -4793,9 +4809,9 @@ snapshots:
js-tokens: 4.0.0
picocolors: 1.1.1
- '@babel/[email protected]':
+ '@babel/[email protected]':
dependencies:
- '@babel/helper-validator-identifier': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
js-tokens: 4.0.0
picocolors: 1.1.1
@@ -4841,7 +4857,7 @@ snapshots:
'@babel/[email protected]': {}
- '@babel/[email protected]': {}
+ '@babel/[email protected]': {}
'@babel/[email protected]':
dependencies:
@@ -4927,12 +4943,19 @@ snapshots:
react: 19.1.1
react-dom: 19.1.1([email protected])
-
'@codemirror/[email protected](@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@lezer/[email protected])':
+
'@codemirror/[email protected](@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@lezer/[email protected])':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
'@codemirror/view': 6.36.4
- '@lezer/common': 1.2.3
+ '@lezer/common': 1.5.0
+
+ '@codemirror/[email protected]':
+ dependencies:
+ '@codemirror/language': 6.11.0
+ '@codemirror/state': 6.5.2
+ '@codemirror/view': 6.36.4
+ '@lezer/common': 1.5.0
'@codemirror/[email protected]':
dependencies:
@@ -4976,7 +4999,7 @@ snapshots:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
'@codemirror/view': 6.36.4
- '@lezer/highlight': 1.2.1
+ '@lezer/highlight': 1.2.3
'@codemirror/[email protected]':
dependencies:
@@ -5292,10 +5315,16 @@ snapshots:
'@lezer/[email protected]': {}
+ '@lezer/[email protected]': {}
+
'@lezer/[email protected]':
dependencies:
'@lezer/common': 1.2.3
+ '@lezer/[email protected]':
+ dependencies:
+ '@lezer/common': 1.5.0
+
'@lezer/[email protected]':
dependencies:
'@lezer/common': 1.2.3
@@ -5360,8 +5389,6 @@ snapshots:
'@pkgr/[email protected]': {}
- '@remix-run/[email protected]': {}
-
'@rollup/[email protected]':
optional: true
@@ -5523,7 +5550,7 @@ snapshots:
'@testing-library/[email protected]':
dependencies:
- '@babel/code-frame': 7.27.1
+ '@babel/code-frame': 7.28.6
'@babel/runtime': 7.28.4
'@types/aria-query': 5.0.4
aria-query: 5.3.0
@@ -5869,9 +5896,9 @@ snapshots:
'@typescript-eslint/types': 8.50.0
eslint-visitor-keys: 4.2.1
-
'@uiw/[email protected](@codemirror/[email protected](@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@lezer/[email protected]))(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])':
+
'@uiw/[email protected](@codemirror/[email protected](@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@lezer/[email protected]))(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])':
dependencies:
- '@codemirror/autocomplete':
6.18.2(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@lezer/[email protected])
+ '@codemirror/autocomplete':
6.18.2(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@lezer/[email protected])
'@codemirror/commands': 6.8.1
'@codemirror/language': 6.11.0
'@codemirror/lint': 6.8.2
@@ -6208,15 +6235,15 @@ snapshots:
'@codemirror/state': 6.5.2
'@codemirror/view': 6.36.4
-
'@uiw/[email protected](@babel/[email protected])(@codemirror/[email protected](@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@lezer/[email protected]))(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])([email protected](@lezer/[email protected]))([email protected]([email protected]))([email protected])':
+
'@uiw/[email protected](@babel/[email protected])(@codemirror/[email protected](@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@lezer/[email protected]))(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])([email protected](@lezer/[email protected]))([email protected]([email protected]))([email protected])':
dependencies:
'@babel/runtime': 7.28.4
'@codemirror/commands': 6.8.1
'@codemirror/state': 6.5.2
'@codemirror/theme-one-dark': 6.1.2
'@codemirror/view': 6.36.4
- '@uiw/codemirror-extensions-basic-setup':
4.23.12(@codemirror/[email protected](@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@lezer/[email protected]))(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])
- codemirror: 6.0.1(@lezer/[email protected])
+ '@uiw/codemirror-extensions-basic-setup':
4.23.12(@codemirror/[email protected](@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@lezer/[email protected]))(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])
+ codemirror: 6.0.1(@lezer/[email protected])
react: 19.1.1
react-dom: 19.1.1([email protected])
transitivePeerDependencies:
@@ -7204,10 +7231,10 @@ snapshots:
[email protected]: {}
- [email protected](@lezer/[email protected]):
+ [email protected](@lezer/[email protected]):
dependencies:
- '@codemirror/autocomplete':
6.18.2(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@lezer/[email protected])
- '@codemirror/commands': 6.8.1
+ '@codemirror/autocomplete':
6.18.2(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@lezer/[email protected])
+ '@codemirror/commands': 6.10.1
'@codemirror/language': 6.11.0
'@codemirror/lint': 6.8.2
'@codemirror/search': 6.5.6
@@ -7252,6 +7279,8 @@ snapshots:
[email protected]: {}
+ [email protected]: {}
+
[email protected]:
dependencies:
browserslist: 4.24.4
@@ -8066,7 +8095,7 @@ snapshots:
minimatch: 10.1.1
minipass: 7.1.2
package-json-from-dist: 1.0.1
- path-scurry: 2.0.0
+ path-scurry: 2.0.1
[email protected]: {}
@@ -8523,7 +8552,7 @@ snapshots:
[email protected]: {}
- [email protected]: {}
+ [email protected]: {}
[email protected]: {}
@@ -9174,9 +9203,9 @@ snapshots:
lru-cache: 10.4.3
minipass: 7.1.2
- [email protected]:
+ [email protected]:
dependencies:
- lru-cache: 11.2.1
+ lru-cache: 11.2.4
minipass: 7.1.2
[email protected]: {}
@@ -9399,17 +9428,19 @@ snapshots:
transitivePeerDependencies:
- react-dom
- [email protected]([email protected]([email protected]))([email protected]):
+ [email protected]([email protected]([email protected]))([email protected]):
dependencies:
- '@remix-run/router': 1.23.0
react: 19.1.1
react-dom: 19.1.1([email protected])
- react-router: 6.30.0([email protected])
+ react-router: 7.12.0([email protected]([email protected]))([email protected])
- [email protected]([email protected]):
+ [email protected]([email protected]([email protected]))([email protected]):
dependencies:
- '@remix-run/router': 1.23.0
+ cookie: 1.1.1
react: 19.1.1
+ set-cookie-parser: 2.7.2
+ optionalDependencies:
+ react-dom: 19.1.1([email protected])
[email protected](@types/[email protected])([email protected]([email protected]))([email protected]):
dependencies:
@@ -9668,6 +9699,8 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ [email protected]: {}
+
[email protected]:
dependencies:
define-data-property: 1.1.4
diff --git
a/airflow-core/src/airflow/ui/src/components/DagActions/DeleteDagButton.tsx
b/airflow-core/src/airflow/ui/src/components/DagActions/DeleteDagButton.tsx
index c3a73ccd096..c895baebc6b 100644
--- a/airflow-core/src/airflow/ui/src/components/DagActions/DeleteDagButton.tsx
+++ b/airflow-core/src/airflow/ui/src/components/DagActions/DeleteDagButton.tsx
@@ -44,7 +44,7 @@ const DeleteDagButton = ({ dagDisplayName, dagId, width,
withText = true }: Dele
onSuccessConfirm: () => {
onClose();
if (isOnDagDetailPage) {
- navigate("/dags");
+ void Promise.resolve(navigate("/dags"));
}
},
});
diff --git a/airflow-core/src/airflow/ui/src/components/DurationChart.tsx
b/airflow-core/src/airflow/ui/src/components/DurationChart.tsx
index 4c440288eef..186ebb5f6f1 100644
--- a/airflow-core/src/airflow/ui/src/components/DurationChart.tsx
+++ b/airflow-core/src/airflow/ui/src/components/DurationChart.tsx
@@ -187,7 +187,7 @@ export const DurationChart = ({
const entry = entries[element.index] as GridRunsResponse |
undefined;
const baseUrl = `/dags/${entry?.dag_id}/runs/${entry?.run_id}`;
- navigate(baseUrl);
+ void Promise.resolve(navigate(baseUrl));
break;
}
case "Task Instance": {
@@ -206,7 +206,7 @@ export const DurationChart = ({
taskId: entry.task_id,
});
- navigate(baseUrl);
+ void Promise.resolve(navigate(baseUrl));
break;
}
default:
diff --git
a/airflow-core/src/airflow/ui/src/components/SearchDags/SearchDags.tsx
b/airflow-core/src/airflow/ui/src/components/SearchDags/SearchDags.tsx
index bb0e0f37659..35f95f6415c 100644
--- a/airflow-core/src/airflow/ui/src/components/SearchDags/SearchDags.tsx
+++ b/airflow-core/src/airflow/ui/src/components/SearchDags/SearchDags.tsx
@@ -45,7 +45,7 @@ export const SearchDags = ({
const onSelect = (selected: SingleValue<Option>) => {
if (selected) {
setIsOpen(false);
- navigate(`/dags/${selected.value}`);
+ void Promise.resolve(navigate(`/dags/${selected.value}`));
}
};
diff --git a/airflow-core/src/airflow/ui/src/hooks/navigation/useNavigation.ts
b/airflow-core/src/airflow/ui/src/hooks/navigation/useNavigation.ts
index cab377b313d..bb2f435dbc6 100644
--- a/airflow-core/src/airflow/ui/src/hooks/navigation/useNavigation.ts
+++ b/airflow-core/src/airflow/ui/src/hooks/navigation/useNavigation.ts
@@ -173,7 +173,7 @@ export const useNavigation = ({ onToggleGroup, runs, tasks
}: UseNavigationProps
if (run && task) {
const path = buildPath({ dagId, mapIndex, mode, pathname:
location.pathname, run, task });
- navigate(path, { replace: true });
+ void Promise.resolve(navigate(path, { replace: true }));
const grid =
document.querySelector(`[id='grid-${run.run_id}-${task.id}']`);
diff --git a/airflow-core/src/airflow/ui/src/hooks/useRequiredActionTabs.ts
b/airflow-core/src/airflow/ui/src/hooks/useRequiredActionTabs.ts
index c187f7b2415..ce8dd8bb2a9 100644
--- a/airflow-core/src/airflow/ui/src/hooks/useRequiredActionTabs.ts
+++ b/airflow-core/src/airflow/ui/src/hooks/useRequiredActionTabs.ts
@@ -113,7 +113,7 @@ export const useRequiredActionTabs = (
useEffect(() => {
if (autoRedirect && !hasHitlData && !isLoadingHitl &&
location.pathname.includes("required_actions")) {
- navigate(redirectPath);
+ void Promise.resolve(navigate(redirectPath));
}
}, [autoRedirect, hasHitlData, isLoadingHitl, location.pathname, navigate,
redirectPath]);
diff --git a/airflow-core/src/airflow/ui/src/layouts/Details/DagRunSelect.tsx
b/airflow-core/src/airflow/ui/src/layouts/Details/DagRunSelect.tsx
index 459a281ae70..f2c395b0dc5 100644
--- a/airflow-core/src/airflow/ui/src/layouts/Details/DagRunSelect.tsx
+++ b/airflow-core/src/airflow/ui/src/layouts/Details/DagRunSelect.tsx
@@ -55,9 +55,11 @@ export const DagRunSelect = forwardRef<HTMLDivElement,
DagRunSelectProps>(({ lim
const selectDagRun = ({ items }: SelectValueChangeDetails<DagRunSelected>)
=> {
const runPartialPath = items.length > 0 ? `/runs/${items[0]?.run.run_id}`
: "";
- navigate({
- pathname: `/dags/${dagId}${runPartialPath}/${taskId === undefined ? "" :
`tasks/${taskId}`}`,
- });
+ void Promise.resolve(
+ navigate({
+ pathname: `/dags/${dagId}${runPartialPath}/${taskId === undefined ? ""
: `tasks/${taskId}`}`,
+ }),
+ );
};
const selectedRun = (gridRuns ?? []).find((dr) => dr.run_id === runId);
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 5cb5c25c660..87757a7fcf9 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
@@ -75,12 +75,14 @@ export const createHandleBarClick =
taskId,
});
- navigate(
- {
- pathname: taskUrl,
- search: location.search,
- },
- { replace: true },
+ void Promise.resolve(
+ navigate(
+ {
+ pathname: taskUrl,
+ search: location.search,
+ },
+ { replace: true },
+ ),
);
}
}
diff --git a/airflow-core/src/airflow/ui/src/pages/Error.tsx
b/airflow-core/src/airflow/ui/src/pages/Error.tsx
index 28fa9ec84af..fb10bdb212a 100644
--- a/airflow-core/src/airflow/ui/src/pages/Error.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Error.tsx
@@ -64,10 +64,23 @@ export const ErrorPage = () => {
</VStack>
<HStack gap={4}>
- <Button colorPalette="brand" onClick={() => navigate(-1)}
size="lg">
+ <Button
+ colorPalette="brand"
+ onClick={() => {
+ void Promise.resolve(navigate(-1));
+ }}
+ size="lg"
+ >
{translate("error.back")}
</Button>
- <Button colorPalette="brand" onClick={() => navigate("/")}
size="lg" variant="outline">
+ <Button
+ colorPalette="brand"
+ onClick={() => {
+ void Promise.resolve(navigate("/"));
+ }}
+ size="lg"
+ variant="outline"
+ >
{translate("error.home")}
</Button>
</HStack>
diff --git a/airflow-core/src/airflow/ui/src/pages/Security.tsx
b/airflow-core/src/airflow/ui/src/pages/Security.tsx
index 67aefc1dd7a..011c1018686 100644
--- a/airflow-core/src/airflow/ui/src/pages/Security.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Security.tsx
@@ -44,7 +44,7 @@ export const Security = () => {
const iframe: HTMLIFrameElement | null =
document.querySelector("#security-iframe");
if (iframe?.contentWindow &&
!iframe.contentWindow.location.pathname.startsWith("/auth/")) {
- navigate("/");
+ void Promise.resolve(navigate("/"));
}
};
diff --git a/airflow-core/src/airflow/ui/src/queries/useTrigger.ts
b/airflow-core/src/airflow/ui/src/queries/useTrigger.ts
index 933f59ad32e..ee6fae94909 100644
--- a/airflow-core/src/airflow/ui/src/queries/useTrigger.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useTrigger.ts
@@ -58,7 +58,7 @@ export const useTrigger = ({ dagId, onSuccessConfirm }: {
dagId: string; onSucce
// Only redirect if we're already on the dag page
if (selectedDagId === dagRun.dag_id) {
- navigate(`/dags/${dagRun.dag_id}/runs/${dagRun.dag_run_id}`);
+ void
Promise.resolve(navigate(`/dags/${dagRun.dag_id}/runs/${dagRun.dag_run_id}`));
}
};