1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-06-27 01:19:00 +02:00
unleash.unleash/frontend/src/index.tsx
Ivar Conradi Østhus e63b28c1b8
feat: use Unleash React SDK in Admin UI (#9723)
In this PR I integrate the Unleash React SDK with the Admin UI. 

We also take advantage of Unleash Hosted Edge behind the scenes with
multiple regions to get the evaluations close to the end user.
2025-04-10 08:26:30 +02:00

85 lines
4.0 KiB
TypeScript

import 'whatwg-fetch';
import 'themes/app.css';
import 'regenerator-runtime/runtime';
import ReactDOM from 'react-dom/client';
import { BrowserRouter } from 'react-router-dom';
import { QueryParamProvider } from 'use-query-params';
import { ReactRouter6Adapter } from 'use-query-params/adapters/react-router-6';
import { ThemeProvider } from 'themes/ThemeProvider';
import { App } from 'component/App';
import { ScrollTop } from 'component/common/ScrollTop/ScrollTop';
import { AccessProvider } from 'component/providers/AccessProvider/AccessProvider';
import { basePath } from 'utils/formatPath';
import { FeedbackCESProvider } from 'component/feedback/FeedbackCESContext/FeedbackCESProvider';
import { AnnouncerProvider } from 'component/common/Announcer/AnnouncerProvider/AnnouncerProvider';
import { InstanceStatus } from 'component/common/InstanceStatus/InstanceStatus';
import { UIProviderContainer } from 'component/providers/UIProvider/UIProviderContainer';
import { StickyProvider } from 'component/common/Sticky/StickyProvider';
import { FeedbackProvider } from 'component/feedbackNew/FeedbackProvider';
import { PlausibleProvider } from 'component/providers/PlausibleProvider/PlausibleProvider';
import { Error as LayoutError } from './component/layout/Error/Error';
import { ErrorBoundary } from 'react-error-boundary';
import { useRecordUIErrorApi } from 'hooks/api/actions/useRecordUIErrorApi/useRecordUiErrorApi';
import { HighlightProvider } from 'component/common/Highlight/HighlightProvider';
import { UnleashFlagProvider } from 'component/providers/UnleashFlagProvider/UnleashFlagProvider';
window.global ||= window;
const ApplicationRoot = () => {
const { recordUiError } = useRecordUIErrorApi();
const sendErrorToApi = async (
error: Error,
info: { componentStack: string },
) => {
try {
await recordUiError({
errorMessage: error.message,
errorStack: error.stack || '',
});
} catch (e) {
console.error('Unable to log error');
}
};
return (
<UIProviderContainer>
<AccessProvider>
<BrowserRouter basename={basePath}>
<QueryParamProvider adapter={ReactRouter6Adapter}>
<ThemeProvider>
<AnnouncerProvider>
<PlausibleProvider>
<UnleashFlagProvider>
<ErrorBoundary
FallbackComponent={LayoutError}
onError={sendErrorToApi}
>
<FeedbackProvider>
<FeedbackCESProvider>
<StickyProvider>
<HighlightProvider>
<InstanceStatus>
<ScrollTop />
<App />
</InstanceStatus>
</HighlightProvider>
</StickyProvider>
</FeedbackCESProvider>
</FeedbackProvider>
</ErrorBoundary>
</UnleashFlagProvider>
</PlausibleProvider>
</AnnouncerProvider>
</ThemeProvider>
</QueryParamProvider>
</BrowserRouter>
</AccessProvider>
</UIProviderContainer>
);
};
const root = ReactDOM.createRoot(document.getElementById('app')!);
root.render(<ApplicationRoot />);