From 9b7dcfffbe78f4ecc28f50301567004b973d1530 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 19 Mar 2020 15:24:10 +0100 Subject: [PATCH] core,app: add a method for registering APIs --- packages/app/src/App.tsx | 2 ++ packages/app/src/apis.ts | 21 +++++++++++++++++++++ packages/core/src/api/app/AppBuilder.tsx | 24 +++++++++++++++++------- 3 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 packages/app/src/apis.ts diff --git a/packages/app/src/App.tsx b/packages/app/src/App.tsx index cb4c4470ba..9bb5eec4e3 100644 --- a/packages/app/src/App.tsx +++ b/packages/app/src/App.tsx @@ -20,6 +20,7 @@ import React, { FC } from 'react'; import { BrowserRouter as Router } from 'react-router-dom'; import Root from './components/Root'; import * as plugins from './plugins'; +import apis from './apis'; const useStyles = makeStyles(theme => ({ '@global': { @@ -40,6 +41,7 @@ const useStyles = makeStyles(theme => ({ })); const app = createApp(); +app.registerApis(apis); app.registerPlugin(...Object.values(plugins)); const AppComponent = app.build(); diff --git a/packages/app/src/apis.ts b/packages/app/src/apis.ts new file mode 100644 index 0000000000..1c41e306a0 --- /dev/null +++ b/packages/app/src/apis.ts @@ -0,0 +1,21 @@ +/* + * Copyright 2020 Spotify AB + * + * 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 { ApiHolder, ApiRegistry } from '@spotify-backstage/core'; + +const builder = ApiRegistry.builder(); + +export default builder.build() as ApiHolder; diff --git a/packages/core/src/api/app/AppBuilder.tsx b/packages/core/src/api/app/AppBuilder.tsx index 393388cc38..ab6f60a293 100644 --- a/packages/core/src/api/app/AppBuilder.tsx +++ b/packages/core/src/api/app/AppBuilder.tsx @@ -25,6 +25,7 @@ import { SystemIconKey, defaultSystemIcons, } from '../../icons'; +import { ApiHolder, ApiProvider } from '../apis'; import LoginPage from './LoginPage'; class AppImpl implements App { @@ -36,9 +37,14 @@ class AppImpl implements App { } export default class AppBuilder { + private apis?: ApiHolder; private systemIcons = { ...defaultSystemIcons }; private readonly plugins = new Set(); + registerApis(apis: ApiHolder) { + this.apis = apis; + } + registerIcons(icons: Partial) { this.systemIcons = { ...this.systemIcons, ...icons }; } @@ -91,13 +97,17 @@ export default class AppBuilder { , ); - return () => ( - - - {routes} - 404 Not Found} /> - - + let rendered = ( + + {routes} + 404 Not Found} /> + ); + + if (this.apis) { + rendered = ; + } + + return () => ; } }