This is an automated email from the ASF dual-hosted git repository. ephraimanierobi pushed a commit to branch v3-1-test in repository https://gitbox.apache.org/repos/asf/airflow.git
commit 503611e4fbc9330570a40ee4dc8b7c595c80452a 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}`)); } };
