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} );