frontend-*-api: add support for theme extensions

Co-authored-by: Camila Belo <camilaibs@gmail.com>
Co-authored-by: Vincenzo Scamporlino <vincenzos@spotify.com>
Co-authored-by: Philipp Hugenroth <philipph@spotify.com>
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
Patrik Oldsberg
2023-09-29 15:31:52 +02:00
parent a1ac0ed0fa
commit 52366db5b3
11 changed files with 152 additions and 7 deletions
@@ -0,0 +1,32 @@
/*
* Copyright 2023 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { createExtension, coreExtensionData } from '../wiring';
import { AppTheme } from '@backstage/core-plugin-api';
/** @public */
export function createThemeExtension(theme: AppTheme) {
return createExtension({
id: `themes.${theme.id}`,
at: 'core/themes',
output: {
theme: coreExtensionData.theme,
},
factory({ bind }) {
bind({ theme });
},
});
}
@@ -17,3 +17,4 @@
export { createApiExtension } from './createApiExtension';
export { createPageExtension } from './createPageExtension';
export { createNavItemExtension } from './createNavItemExtension';
export { createThemeExtension } from './createThemeExtension';
@@ -17,6 +17,7 @@
import { JSX } from 'react';
import {
AnyApiFactory,
AppTheme,
IconComponent,
RouteRef,
} from '@backstage/core-plugin-api';
@@ -36,4 +37,5 @@ export const coreExtensionData = {
apiFactory: createExtensionDataRef<AnyApiFactory>('core.api.factory'),
routeRef: createExtensionDataRef<RouteRef>('core.routing.ref'),
navTarget: createExtensionDataRef<NavTarget>('core.nav.target'),
theme: createExtensionDataRef<AppTheme>('core.theme'),
};