plugins/{notifications,signals}: add support for new frontend system

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
Patrik Oldsberg
2025-02-13 17:06:24 +01:00
parent 97f78162c6
commit 005d24142d
8 changed files with 263 additions and 6 deletions
+63
View File
@@ -0,0 +1,63 @@
/*
* Copyright 2025 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 React from 'react';
import {
ApiBlueprint,
PageBlueprint,
createApiFactory,
createFrontendPlugin,
discoveryApiRef,
fetchApiRef,
} from '@backstage/frontend-plugin-api';
import { rootRouteRef } from './routes';
import {
convertLegacyRouteRef,
convertLegacyRouteRefs,
} from '@backstage/core-compat-api';
import { NotificationsClient, notificationsApiRef } from './api';
const page = PageBlueprint.make({
params: {
defaultPath: '/notifications',
routeRef: convertLegacyRouteRef(rootRouteRef),
loader: () =>
import('./components/NotificationsPage').then(m => (
<m.NotificationsPage />
)),
},
});
const api = ApiBlueprint.make({
params: {
factory: createApiFactory({
api: notificationsApiRef,
deps: { discoveryApi: discoveryApiRef, fetchApi: fetchApiRef },
factory: ({ discoveryApi, fetchApi }) =>
new NotificationsClient({ discoveryApi, fetchApi }),
}),
},
});
/** @alpha */
export default createFrontendPlugin({
id: 'notifications',
routes: convertLegacyRouteRefs({
root: rootRouteRef,
}),
// TODO(Rugvip): Nav item (i.e. NotificationsSidebarItem) currently needs to be installed manually
extensions: [page, api],
});