From e220589506824d48b82103ccd3856dfb895880fd Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 19 Mar 2026 13:43:08 +0100 Subject: [PATCH] frontend-plugin-api: remove defineParams from PluginHeaderActionBlueprint Replace the defineParams + createExtensionBlueprintParams pattern with inline param types on the factory, matching PageBlueprint, SubPageBlueprint, and other blueprints. Update the app-visualizer usage accordingly. Signed-off-by: Patrik Oldsberg Made-with: Cursor --- .../remove-plugin-header-action-define-params.md | 5 +++++ .changeset/update-app-visualizer-header-action.md | 5 +++++ packages/frontend-plugin-api/report.api.md | 6 ++---- .../src/blueprints/PluginHeaderActionBlueprint.tsx | 11 ++--------- plugins/app-visualizer/report.api.md | 7 ++----- plugins/app-visualizer/src/plugin.tsx | 9 ++++----- 6 files changed, 20 insertions(+), 23 deletions(-) create mode 100644 .changeset/remove-plugin-header-action-define-params.md create mode 100644 .changeset/update-app-visualizer-header-action.md diff --git a/.changeset/remove-plugin-header-action-define-params.md b/.changeset/remove-plugin-header-action-define-params.md new file mode 100644 index 0000000000..8bbdf99466 --- /dev/null +++ b/.changeset/remove-plugin-header-action-define-params.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-plugin-api': minor +--- + +**BREAKING**: Removed the `defineParams` callback from `PluginHeaderActionBlueprint`. Params are now typed inline on the factory, matching the pattern used by `PageBlueprint`, `SubPageBlueprint`, and others. To migrate, change `params: defineParams => defineParams({ ... })` to `params: { ... }` when calling `PluginHeaderActionBlueprint.make(...)`. diff --git a/.changeset/update-app-visualizer-header-action.md b/.changeset/update-app-visualizer-header-action.md new file mode 100644 index 0000000000..e95e84eb43 --- /dev/null +++ b/.changeset/update-app-visualizer-header-action.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-app-visualizer': patch +--- + +Updated `PluginHeaderActionBlueprint` usage to pass params as a plain object. diff --git a/packages/frontend-plugin-api/report.api.md b/packages/frontend-plugin-api/report.api.md index c3936ba0da..7008aae801 100644 --- a/packages/frontend-plugin-api/report.api.md +++ b/packages/frontend-plugin-api/report.api.md @@ -1951,11 +1951,9 @@ export type PendingOAuthRequest = { // @public export const PluginHeaderActionBlueprint: ExtensionBlueprint_2<{ kind: 'plugin-header-action'; - params: (params: { + params: { loader: () => Promise; - }) => ExtensionBlueprintParams_2<{ - loader: () => Promise; - }>; + }; output: ExtensionDataRef_2; inputs: {}; config: {}; diff --git a/packages/frontend-plugin-api/src/blueprints/PluginHeaderActionBlueprint.tsx b/packages/frontend-plugin-api/src/blueprints/PluginHeaderActionBlueprint.tsx index 84ed9da7ff..eb0c24420d 100644 --- a/packages/frontend-plugin-api/src/blueprints/PluginHeaderActionBlueprint.tsx +++ b/packages/frontend-plugin-api/src/blueprints/PluginHeaderActionBlueprint.tsx @@ -16,11 +16,7 @@ import { lazy as reactLazy } from 'react'; import { ExtensionBoundary } from '../components'; -import { - coreExtensionData, - createExtensionBlueprint, - createExtensionBlueprintParams, -} from '../wiring'; +import { coreExtensionData, createExtensionBlueprint } from '../wiring'; /** * Creates extensions that provide plugin-scoped header actions. @@ -36,10 +32,7 @@ export const PluginHeaderActionBlueprint = createExtensionBlueprint({ kind: 'plugin-header-action', attachTo: { id: 'api:app/plugin-header-actions', input: 'actions' }, output: [coreExtensionData.reactElement], - defineParams(params: { loader: () => Promise }) { - return createExtensionBlueprintParams(params); - }, - *factory(params, { node }) { + *factory(params: { loader: () => Promise }, { node }) { const LazyAction = reactLazy(() => params.loader().then(element => ({ default: () => element })), ); diff --git a/plugins/app-visualizer/report.api.md b/plugins/app-visualizer/report.api.md index 9ee06eccb0..ba29cb92dc 100644 --- a/plugins/app-visualizer/report.api.md +++ b/plugins/app-visualizer/report.api.md @@ -5,7 +5,6 @@ ```ts import { AnyRouteRefParams } from '@backstage/frontend-plugin-api'; import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api'; -import { ExtensionBlueprintParams } from '@backstage/frontend-plugin-api'; import { ExtensionDataRef } from '@backstage/frontend-plugin-api'; import { ExtensionInput } from '@backstage/frontend-plugin-api'; import { IconComponent } from '@backstage/frontend-plugin-api'; @@ -124,11 +123,9 @@ const visualizerPlugin: OverridableFrontendPlugin< configInput: {}; output: ExtensionDataRef; inputs: {}; - params: (params: { + params: { loader: () => Promise; - }) => ExtensionBlueprintParams<{ - loader: () => Promise; - }>; + }; }>; 'sub-page:app-visualizer/details': OverridableExtensionDefinition<{ kind: 'sub-page'; diff --git a/plugins/app-visualizer/src/plugin.tsx b/plugins/app-visualizer/src/plugin.tsx index 9fa7b2cd72..fab8479c54 100644 --- a/plugins/app-visualizer/src/plugin.tsx +++ b/plugins/app-visualizer/src/plugin.tsx @@ -76,11 +76,10 @@ const appVisualizerTextPage = SubPageBlueprint.make({ }); const copyTreeAsJson = PluginHeaderActionBlueprint.make({ - params: defineParams => - defineParams({ - loader: () => - import('./components/CopyTreeButton').then(m => ), - }), + params: { + loader: () => + import('./components/CopyTreeButton').then(m => ), + }, }); export const appVisualizerNavItem = NavItemBlueprint.make({