diff --git a/packages/core/src/api/app/App.tsx b/packages/core/src/api/app/App.tsx
index 50eaac6a2c..128f978139 100644
--- a/packages/core/src/api/app/App.tsx
+++ b/packages/core/src/api/app/App.tsx
@@ -22,6 +22,7 @@ import { BackstagePlugin } from '../plugin';
import { FeatureFlagsRegistryItem } from './FeatureFlags';
import { featureFlagsApiRef } from '../apis/definitions';
import ErrorPage from '../../layout/ErrorPage';
+import { AppThemeProvider } from './AppThemeProvider';
import {
IconComponent,
@@ -29,9 +30,17 @@ import {
SystemIconKey,
defaultSystemIcons,
} from '../../icons';
-import { ApiHolder, ApiProvider, ApiRegistry, AppTheme } from '../apis';
+import {
+ ApiHolder,
+ ApiProvider,
+ ApiRegistry,
+ AppTheme,
+ AppThemeSelector,
+ appThemeApiRef,
+} from '../apis';
import LoginPage from './LoginPage';
-import { lightTheme } from '@backstage/theme';
+import { lightTheme, darkTheme } from '@backstage/theme';
+import { ApiAggregator } from '../apis/ApiAggregator';
type FullAppOptions = {
apis: ApiHolder;
@@ -133,23 +142,28 @@ class AppImpl implements BackstageApp {
,
);
- let rendered = (
+ const rendered = (
{routes}
);
- if (this.apis) {
- rendered = ;
- }
-
return () => rendered;
}
getProvider(): ComponentType<{}> {
+ const appApis = ApiRegistry.from([
+ [appThemeApiRef, AppThemeSelector.createWithStorage(this.themes)],
+ ]);
+ const apis = new ApiAggregator(this.apis, appApis);
+
const Provider: FC<{}> = ({ children }) => (
- {children}
+
+
+ {children}
+
+
);
return Provider;
}
diff --git a/packages/core/src/api/app/AppThemeProvider.tsx b/packages/core/src/api/app/AppThemeProvider.tsx
index 07de903dd5..cd58c70d9c 100644
--- a/packages/core/src/api/app/AppThemeProvider.tsx
+++ b/packages/core/src/api/app/AppThemeProvider.tsx
@@ -80,17 +80,17 @@ export const AppThemeProvider: FC<{}> = ({ children }) => {
appThemeApi.getActiveThemeId(),
);
- const theme = resolveTheme(
+ const appTheme = resolveTheme(
themeId,
preferDark,
appThemeApi.getInstalledThemes(),
);
- if (!theme) {
+ if (!appTheme) {
throw new Error('App has no themes');
}
return (
-
+
{children}
);