Add support for rendering React components in legacy views

Add name to Contributors
This commit is contained in:
Nathan Kerr
2025-05-06 09:50:11 -07:00
committed by Bill Thornton
parent e852931968
commit a938650ded
2 changed files with 42 additions and 0 deletions

View File

@@ -100,6 +100,7 @@
- [StableCrimson](https://github.com/StableCrimson)
- [diegoeche](https://github.com/diegoeche)
- [Free O'Toole](https://github.com/freeotoole)
- [TheBosZ](https://github.com/thebosz)
## Emby Contributors

41
src/utils/reactUtils.tsx Normal file
View File

@@ -0,0 +1,41 @@
import { createRoot } from 'react-dom/client';
import * as React from 'react';
import { QueryClientProvider } from '@tanstack/react-query';
import { ApiProvider } from 'hooks/useApi';
import { UserSettingsProvider } from 'hooks/useUserSettings';
import { WebConfigProvider } from 'hooks/useWebConfig';
import { queryClient } from 'utils/query/queryClient';
import { useUserTheme } from 'hooks/useUserTheme';
import { ThemeProvider } from '@mui/material/styles';
import { getTheme } from 'themes/themes';
export const attachReactElement = (Element: (props: object) => React.ReactNode, props: object, element: HTMLElement, replace = false) => {
const domNode = document.createElement('div');
const root = createRoot(replace ? domNode : element);
root.render(
<RootContext>
<Element {...props} />
</RootContext>
);
if (replace) {
element.replaceWith(domNode);
}
};
const RootContext: React.FC<React.PropsWithChildren> = ({ children }) => {
const { theme } = useUserTheme();
return (
<QueryClientProvider client={queryClient}>
<ApiProvider>
<UserSettingsProvider>
<WebConfigProvider>
<ThemeProvider theme={getTheme(theme)}>
{children}
</ThemeProvider>
</WebConfigProvider>
</UserSettingsProvider>
</ApiProvider>
</QueryClientProvider>
);
};