diff --git a/airflow-core/src/airflow/ui/src/main.tsx b/airflow-core/src/airflow/ui/src/main.tsx index 453e7e05199a5..6f98890f0e3c3 100644 --- a/airflow-core/src/airflow/ui/src/main.tsx +++ b/airflow-core/src/airflow/ui/src/main.tsx @@ -25,6 +25,7 @@ import * as ReactDOM from "react-dom"; import { createRoot } from "react-dom/client"; import { I18nextProvider } from "react-i18next"; import { RouterProvider } from "react-router-dom"; +import * as ReactRouterDOM from "react-router-dom"; import * as ReactJSXRuntime from "react/jsx-runtime"; import type { HTTPExceptionResponse } from "openapi/requests/types.gen"; @@ -44,6 +45,7 @@ import { clearToken, tokenHandler } from "./utils/tokenHandler"; Reflect.set(globalThis, "React", React); Reflect.set(globalThis, "ReactDOM", ReactDOM); Reflect.set(globalThis, "ReactJSXRuntime", ReactJSXRuntime); +Reflect.set(globalThis, "ReactRouterDOM", ReactRouterDOM); // redirect to login page if the API responds with unauthorized or forbidden errors axios.interceptors.response.use( diff --git a/dev/react-plugin-tools/react_plugin_template/vite.config.ts b/dev/react-plugin-tools/react_plugin_template/vite.config.ts index 7c3dd86fc585a..d610e0c173c54 100644 --- a/dev/react-plugin-tools/react_plugin_template/vite.config.ts +++ b/dev/react-plugin-tools/react_plugin_template/vite.config.ts @@ -38,11 +38,12 @@ export default defineConfig(({ command }) => { name: 'AirflowPlugin', }, rollupOptions: { - external: ["react", "react-dom"], + external: ["react", "react-dom", "react-router-dom", "react/jsx-runtime"], output: { globals: { react: "React", "react-dom": "ReactDOM", + "react-router-dom": "ReactRouterDOM", "react/jsx-runtime": "ReactJSXRuntime", }, },