diff --git a/packages/app-next/package.json b/packages/app-next/package.json index 635a513c0f..71d888ee50 100644 --- a/packages/app-next/package.json +++ b/packages/app-next/package.json @@ -12,6 +12,7 @@ "@backstage/cli": "workspace:^", "@backstage/config": "workspace:^", "@backstage/core-app-api": "workspace:^", + "@backstage/core-compat-api": "workspace:^", "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", "@backstage/frontend-app-api": "workspace:^", diff --git a/packages/app-next/src/App.tsx b/packages/app-next/src/App.tsx index d64c4dbb15..5e9205e2c4 100644 --- a/packages/app-next/src/App.tsx +++ b/packages/app-next/src/App.tsx @@ -27,6 +27,7 @@ import homePlugin, { import { coreExtensionData, createExtension, + createApiExtension, createExtensionOverrides, createPageExtension, } from '@backstage/frontend-plugin-api'; @@ -34,6 +35,16 @@ import { entityRouteRef } from '@backstage/plugin-catalog-react'; import techdocsPlugin from '@backstage/plugin-techdocs/alpha'; import { convertLegacyRouteRef } from '@backstage/core-plugin-api/alpha'; import { homePage } from './HomePage'; +import { collectLegacyRoutes } from '@backstage/core-compat-api'; +import { FlatRoutes } from '@backstage/core-app-api'; +import { Route } from 'react-router'; +import { CatalogImportPage } from '@backstage/plugin-catalog-import'; +import { createApiFactory, configApiRef } from '@backstage/core-plugin-api'; +import { + ScmAuth, + ScmIntegrationsApi, + scmIntegrationsApiRef, +} from '@backstage/integration-react'; /* @@ -83,6 +94,24 @@ const homePageExtension = createExtension({ }, }); +const scmAuthExtension = createApiExtension({ + factory: ScmAuth.createDefaultApiFactory(), +}); + +const scmIntegrationApi = createApiExtension({ + factory: createApiFactory({ + api: scmIntegrationsApiRef, + deps: { configApi: configApiRef }, + factory: ({ configApi }) => ScmIntegrationsApi.fromConfig(configApi), + }), +}); + +const collectedLegacyRoutes = collectLegacyRoutes( + + } /> + , +); + const app = createApp({ features: [ graphiqlPlugin, @@ -92,7 +121,13 @@ const app = createApp({ userSettingsPlugin, homePlugin, createExtensionOverrides({ - extensions: [entityPageExtension, homePageExtension], + extensions: [ + entityPageExtension, + homePageExtension, + scmAuthExtension, + scmIntegrationApi, + ...collectedLegacyRoutes, + ], }), ], /* Handled through config instead */ diff --git a/packages/core-compat-api/src/collectLegacyRoutes.tsx b/packages/core-compat-api/src/collectLegacyRoutes.tsx index b40ae78439..ea235d57a6 100644 --- a/packages/core-compat-api/src/collectLegacyRoutes.tsx +++ b/packages/core-compat-api/src/collectLegacyRoutes.tsx @@ -15,13 +15,18 @@ */ import React, { ReactNode } from 'react'; -import { Extension, createPageExtension } from '@backstage/frontend-plugin-api'; +import { + Extension, + createApiExtension, + createPageExtension, +} from '@backstage/frontend-plugin-api'; import { Route, Routes } from 'react-router-dom'; import { BackstagePlugin, RouteRef, getComponentData, } from '@backstage/core-plugin-api'; +import { convertLegacyRouteRef } from '@backstage/core-plugin-api/alpha'; export function collectLegacyRoutes( flatRoutesElement: JSX.Element, @@ -77,7 +82,7 @@ export function collectLegacyRoutes( const detectedExtension = createPageExtension({ id: `plugin.${pluginId}.page`, defaultPath: path[0] === '/' ? path.slice(1) : path, - routeRef, + routeRef: routeRef ? convertLegacyRouteRef(routeRef) : undefined, loader: async () => route.props.children ? ( @@ -91,7 +96,13 @@ export function collectLegacyRoutes( ), }); - plugin.getApis(); // Create DI API extensions from these + results.push( + ...Array.from(plugin.getApis()).map(factory => + createApiExtension({ + factory, + }), + ), + ); // TODO: Create converted plugin instance instead. We need to move over APIs etc. results.push(detectedExtension); diff --git a/packages/core-compat-api/src/index.ts b/packages/core-compat-api/src/index.ts index 4b9026cde5..2181b2fa9a 100644 --- a/packages/core-compat-api/src/index.ts +++ b/packages/core-compat-api/src/index.ts @@ -13,4 +13,4 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export {}; +export { collectLegacyRoutes } from './collectLegacyRoutes'; diff --git a/yarn.lock b/yarn.lock index 1c101630dc..f06b7b486d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3952,7 +3952,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-compat-api@workspace:packages/core-compat-api": +"@backstage/core-compat-api@workspace:^, @backstage/core-compat-api@workspace:packages/core-compat-api": version: 0.0.0-use.local resolution: "@backstage/core-compat-api@workspace:packages/core-compat-api" dependencies: @@ -25274,6 +25274,7 @@ __metadata: "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/core-app-api": "workspace:^" + "@backstage/core-compat-api": "workspace:^" "@backstage/core-components": "workspace:^" "@backstage/core-plugin-api": "workspace:^" "@backstage/frontend-app-api": "workspace:^"