From 71f5f4c5597c0dc9d7d22dcc919bc71cc58e0326 Mon Sep 17 00:00:00 2001 From: bnechyporenko Date: Fri, 20 May 2022 20:26:48 +0200 Subject: [PATCH] A bit changed the structure Signed-off-by: bnechyporenko --- packages/app/src/App.tsx | 10 ++++++---- .../src/extensions/extensions.tsx | 4 ++-- packages/core-plugin-api/src/plugin/Plugin.tsx | 7 +++++-- packages/core-plugin-api/src/plugin/types.ts | 16 ++++++---------- plugins/catalog/src/plugin.ts | 8 +++----- 5 files changed, 22 insertions(+), 23 deletions(-) diff --git a/packages/app/src/App.tsx b/packages/app/src/App.tsx index aa3cafc2c9..d55b3afca7 100644 --- a/packages/app/src/App.tsx +++ b/packages/app/src/App.tsx @@ -97,6 +97,7 @@ import * as plugins from './plugins'; import { techDocsPage } from './components/techdocs/TechDocsPage'; import { ApacheAirflowPage } from '@backstage/plugin-apache-airflow'; import { PermissionedRoute } from '@backstage/plugin-permission-react'; +import { AnyPluginOptions } from '@backstage/core-plugin-api'; import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common'; const app = createApp({ @@ -138,10 +139,11 @@ const app = createApp({ const AppProvider = app.getProvider(); const AppRouter = app.getRouter(); -catalogPlugin.reconfigure({ - // TODO: remove it, only for testing here - createButtonTitle: 'Maybe Create Component', -}); +// TODO: remove it, only for testing here +catalogPlugin.reconfigure((options: AnyPluginOptions) => ({ + ...options, + createButtonTitle: 'Maybe Create', +})); const routes = ( diff --git a/packages/core-plugin-api/src/extensions/extensions.tsx b/packages/core-plugin-api/src/extensions/extensions.tsx index c648214c22..654ec8f710 100644 --- a/packages/core-plugin-api/src/extensions/extensions.tsx +++ b/packages/core-plugin-api/src/extensions/extensions.tsx @@ -15,11 +15,11 @@ */ import React, { lazy, Suspense } from 'react'; -import { AnalyticsContext } from '../analytics/AnalyticsContext'; +import { AnalyticsContext } from '../analytics'; import { useApp } from '../app'; import { RouteRef, useRouteRef } from '../routing'; import { attachComponentData } from './componentData'; -import { Extension, BackstagePlugin } from '../plugin/types'; +import { Extension, BackstagePlugin } from '../plugin'; import { PluginErrorBoundary } from './PluginErrorBoundary'; import { PluginOptionsProvider } from '../plugin-options'; diff --git a/packages/core-plugin-api/src/plugin/Plugin.tsx b/packages/core-plugin-api/src/plugin/Plugin.tsx index 6565289542..07d3cf64cd 100644 --- a/packages/core-plugin-api/src/plugin/Plugin.tsx +++ b/packages/core-plugin-api/src/plugin/Plugin.tsx @@ -22,6 +22,7 @@ import { AnyExternalRoutes, AnyPluginOptions, PluginFeatureFlagConfig, + ReconfigureFunction, } from './types'; import { AnyApiFactory } from '../apis'; @@ -66,8 +67,10 @@ export class PluginImpl< return extension.expose(this); } - reconfigure(pluginOptions: PluginOptions): void { - this.config.options = pluginOptions; + reconfigure(fn: ReconfigureFunction): void { + if (this.config.options) { + this.config.options = fn(this.config.options) as PluginOptions; + } } getPluginOptions(): PluginOptions { diff --git a/packages/core-plugin-api/src/plugin/types.ts b/packages/core-plugin-api/src/plugin/types.ts index 953a55a9ee..8b6573c17b 100644 --- a/packages/core-plugin-api/src/plugin/types.ts +++ b/packages/core-plugin-api/src/plugin/types.ts @@ -15,7 +15,7 @@ */ import { RouteRef, SubRouteRef, ExternalRouteRef } from '../routing'; -import { AnyApiFactory } from '../apis/system'; +import { AnyApiFactory } from '../apis'; /** * Plugin extension type. @@ -51,6 +51,10 @@ export type AnyExternalRoutes = { [name: string]: ExternalRouteRef }; */ export type AnyPluginOptions = { [name: string]: any }; +export type ReconfigureFunction = ( + options: AnyPluginOptions, +) => AnyPluginOptions; + /** * Plugin type. * @@ -69,7 +73,7 @@ export type BackstagePlugin< getFeatureFlags(): Iterable; provide(extension: Extension): T; getPluginOptions(): PluginOptions; - reconfigure(pluginOptions: PluginOptions): void; + reconfigure(fn: ReconfigureFunction): void; routes: Routes; externalRoutes: ExternalRoutes; }; @@ -100,14 +104,6 @@ export type PluginConfig< externalRoutes?: ExternalRoutes; featureFlags?: PluginFeatureFlagConfig[]; options?: PluginOptions; - /** - * TODO: Not clear yet does it make sense to do it as a function. - * As for me it makes more sense to provide it as an object with default values. - * And keep only reconfigure as a function to update default values. - * Otherwise it looks like we have 2 places where it is possible to override default values. - * @param inputOptions - */ - pluginOptions(inputOptions: AnyPluginOptions): PluginOptions; }; /** diff --git a/plugins/catalog/src/plugin.ts b/plugins/catalog/src/plugin.ts index e1bf10e186..6b441acbdc 100644 --- a/plugins/catalog/src/plugin.ts +++ b/plugins/catalog/src/plugin.ts @@ -23,7 +23,6 @@ import { } from '@backstage/plugin-catalog-react'; import { createComponentRouteRef, viewTechDocRouteRef } from './routes'; import { - AnyPluginOptions, createApiFactory, createComponentExtension, createPlugin, @@ -73,10 +72,9 @@ export const catalogPlugin = createPlugin({ createComponent: createComponentRouteRef, viewTechDoc: viewTechDocRouteRef, }, - pluginOptions: (inputOptions: AnyPluginOptions) => ({ - // TODO: remove it, only for testing here - createButtonTitle: inputOptions.createButtonTitle || 'Create', - }), + options: { + createButtonTitle: 'Create', + }, }); /** @public */