diff --git a/airflow-core/src/airflow/ui/package.json b/airflow-core/src/airflow/ui/package.json index f6609506dc2d2..665b3434348b6 100644 --- a/airflow-core/src/airflow/ui/package.json +++ b/airflow-core/src/airflow/ui/package.json @@ -65,7 +65,7 @@ "react-markdown": "^9.1.0", "react-resizable": "^3.0.5", "react-resizable-panels": "^3.0.6", - "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", diff --git a/airflow-core/src/airflow/ui/pnpm-lock.yaml b/airflow-core/src/airflow/ui/pnpm-lock.yaml index 81b85cf00fc29..26557be85e643 100644 --- a/airflow-core/src/airflow/ui/pnpm-lock.yaml +++ b/airflow-core/src/airflow/ui/pnpm-lock.yaml @@ -129,8 +129,8 @@ importers: specifier: ^3.0.6 version: 3.0.6(react-dom@19.2.1(react@19.2.1))(react@19.2.1) react-router-dom: - specifier: ^6.30.0 - version: 6.30.0(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + specifier: ^7.12.0 + version: 7.12.0(react-dom@19.2.1(react@19.2.1))(react@19.2.1) react-syntax-highlighter: specifier: ^15.6.1 version: 15.6.1(react@19.2.1) @@ -956,10 +956,6 @@ packages: engines: {node: '>=18'} hasBin: true - '@remix-run/router@1.23.0': - resolution: {integrity: sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==} - engines: {node: '>=14.0.0'} - '@rolldown/pluginutils@1.0.0-beta.47': resolution: {integrity: sha512-8QagwMH3kNCuzD8EWL8R2YPW5e4OrHNSAHRFDdmFqEwEaD/KcNKjVoumo+gP2vW5eKB2UPbM6vTYiGZX0ixLnw==} @@ -3937,18 +3933,22 @@ packages: peerDependencies: react: '>= 16.3' - react-router-dom@6.30.0: - resolution: {integrity: sha512-x30B78HV5tFk8ex0ITwzC9TTZMua4jGyA9IUlH1JLQYQTFyxr/ZxwOJq7evg1JX1qGVUcvhsmQSKdPncQrjTgA==} - engines: {node: '>=14.0.0'} + react-router-dom@7.12.0: + 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' - react-router@6.30.0: - resolution: {integrity: sha512-D3X8FyH9nBcTSHGdEKurK7r8OYE1kKFn3d/CF+CoxbSHkxU7o37+Uh7eAHRXr6k2tSExXYO++07PeXJtA/dEhQ==} - engines: {node: '>=14.0.0'} + react-router@7.12.0: + 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 react-select@5.10.1: resolution: {integrity: sha512-roPEZUL4aRZDx6DcsD+ZNreVl+fM8VsKn0Wtex1v4IazH60ILp5xhdlp464IsEAlJdXeD+BhDAFsBVMfvLQueA==} @@ -4087,6 +4087,9 @@ packages: engines: {node: '>=10'} hasBin: true + set-cookie-parser@2.7.2: + resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -5486,8 +5489,6 @@ snapshots: dependencies: playwright: 1.57.0 - '@remix-run/router@1.23.0': {} - '@rolldown/pluginutils@1.0.0-beta.47': {} '@rolldown/pluginutils@1.0.0-beta.53': {} @@ -9476,17 +9477,19 @@ snapshots: transitivePeerDependencies: - react-dom - react-router-dom@6.30.0(react-dom@19.2.1(react@19.2.1))(react@19.2.1): + react-router-dom@7.12.0(react-dom@19.2.1(react@19.2.1))(react@19.2.1): dependencies: - '@remix-run/router': 1.23.0 react: 19.2.1 react-dom: 19.2.1(react@19.2.1) - react-router: 6.30.0(react@19.2.1) + react-router: 7.12.0(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - react-router@6.30.0(react@19.2.1): + react-router@7.12.0(react-dom@19.2.1(react@19.2.1))(react@19.2.1): dependencies: - '@remix-run/router': 1.23.0 + cookie: 1.1.1 react: 19.2.1 + set-cookie-parser: 2.7.2 + optionalDependencies: + react-dom: 19.2.1(react@19.2.1) react-select@5.10.1(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1): dependencies: @@ -9702,6 +9705,8 @@ snapshots: semver@7.7.1: {} + set-cookie-parser@2.7.2: {} + set-function-length@1.2.2: 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 c3a73ccd0960b..c895baebc6bb2 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 4c440288eefe4..186ebb5f6f19e 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 bb0e0f3765902..35f95f6415c54 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