From 4d2b2642c096decfc69570eec72843648eb12776 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 13 Feb 2026 13:59:04 +0100 Subject: [PATCH] frontend-plugin-api: added noHeader param for page blueprint Signed-off-by: Patrik Oldsberg --- packages/app-example-plugin/report.api.md | 1 + packages/frontend-plugin-api/report.api.md | 3 +++ .../src/blueprints/PageBlueprint.tsx | 12 +++++++++++- .../src/components/PageLayout.tsx | 1 + plugins/api-docs/report-alpha.api.md | 1 + plugins/app-visualizer/report.api.md | 3 ++- plugins/app/src/extensions/components.tsx | 16 +++++++++------- plugins/auth/report.api.md | 1 + plugins/catalog-graph/report-alpha.api.md | 1 + plugins/catalog-import/report-alpha.api.md | 1 + .../report-alpha.api.md | 1 + plugins/catalog/report-alpha.api.md | 2 ++ plugins/devtools/report-alpha.api.md | 1 + plugins/home/report-alpha.api.md | 1 + plugins/home/src/alpha.tsx | 1 + plugins/kubernetes/report-alpha.api.md | 1 + plugins/mui-to-bui/report.api.md | 1 + plugins/notifications/report-alpha.api.md | 1 + plugins/scaffolder/report-alpha.api.md | 1 + plugins/search/report-alpha.api.md | 2 ++ plugins/techdocs/report-alpha.api.md | 2 ++ plugins/user-settings/report-alpha.api.md | 1 + 22 files changed, 46 insertions(+), 9 deletions(-) diff --git a/packages/app-example-plugin/report.api.md b/packages/app-example-plugin/report.api.md index 10b809ea4d..d6059e7d05 100644 --- a/packages/app-example-plugin/report.api.md +++ b/packages/app-example-plugin/report.api.md @@ -93,6 +93,7 @@ const examplePlugin: OverridableFrontendPlugin< icon?: IconElement; loader?: () => Promise; routeRef?: RouteRef; + noHeader?: boolean; }; }>; } diff --git a/packages/frontend-plugin-api/report.api.md b/packages/frontend-plugin-api/report.api.md index 5d1b27c4d3..a014b4a80a 100644 --- a/packages/frontend-plugin-api/report.api.md +++ b/packages/frontend-plugin-api/report.api.md @@ -1757,6 +1757,7 @@ export const PageBlueprint: ExtensionBlueprint_2<{ icon?: IconElement; loader?: () => Promise; routeRef?: RouteRef; + noHeader?: boolean; }; output: | ExtensionDataRef_2 @@ -1840,6 +1841,8 @@ export interface PageLayoutProps { // (undocumented) icon?: IconElement; // (undocumented) + noHeader?: boolean; + // (undocumented) tabs?: PageTab[]; // (undocumented) title?: string; diff --git a/packages/frontend-plugin-api/src/blueprints/PageBlueprint.tsx b/packages/frontend-plugin-api/src/blueprints/PageBlueprint.tsx index 780f7846ae..747d98ddc6 100644 --- a/packages/frontend-plugin-api/src/blueprints/PageBlueprint.tsx +++ b/packages/frontend-plugin-api/src/blueprints/PageBlueprint.tsx @@ -77,6 +77,10 @@ export const PageBlueprint = createExtensionBlueprint({ icon?: IconElement; loader?: () => Promise; routeRef?: RouteRef; + /** + * Hide the default plugin page header, making the page fill up all available space. + */ + noHeader?: boolean; }, { config, node, inputs }, ) { @@ -87,6 +91,7 @@ export const PageBlueprint = createExtensionBlueprint({ node.spec.plugin.pluginId; const icon = params.icon ?? node.spec.plugin.icon; const pluginId = node.spec.plugin.pluginId; + const noHeader = params.noHeader ?? false; yield coreExtensionData.routePath(config.path ?? params.path); if (params.loader) { @@ -94,7 +99,12 @@ export const PageBlueprint = createExtensionBlueprint({ const PageContent = () => { const headerActions = useHeaderActions(pluginId); return ( - + {ExtensionBoundary.lazy(node, loader)} ); diff --git a/packages/frontend-plugin-api/src/components/PageLayout.tsx b/packages/frontend-plugin-api/src/components/PageLayout.tsx index 958738dab9..89bf6670cc 100644 --- a/packages/frontend-plugin-api/src/components/PageLayout.tsx +++ b/packages/frontend-plugin-api/src/components/PageLayout.tsx @@ -37,6 +37,7 @@ export interface PageTab { export interface PageLayoutProps { title?: string; icon?: IconElement; + noHeader?: boolean; headerActions?: ReactNode; tabs?: PageTab[]; children?: ReactNode; diff --git a/plugins/api-docs/report-alpha.api.md b/plugins/api-docs/report-alpha.api.md index 0334ba1e41..97292b10d7 100644 --- a/plugins/api-docs/report-alpha.api.md +++ b/plugins/api-docs/report-alpha.api.md @@ -569,6 +569,7 @@ const _default: OverridableFrontendPlugin< icon?: IconElement; loader?: () => Promise; routeRef?: RouteRef_2; + noHeader?: boolean; }; }>; } diff --git a/plugins/app-visualizer/report.api.md b/plugins/app-visualizer/report.api.md index e6688672d4..92bda66829 100644 --- a/plugins/app-visualizer/report.api.md +++ b/plugins/app-visualizer/report.api.md @@ -130,8 +130,9 @@ const visualizerPlugin: OverridableFrontendPlugin< path: string; title?: string; icon?: IconElement; - loader?: () => Promise; + loader?: () => Promise; routeRef?: RouteRef; + noHeader?: boolean; }; }>; 'sub-page:app-visualizer/details': OverridableExtensionDefinition<{ diff --git a/plugins/app/src/extensions/components.tsx b/plugins/app/src/extensions/components.tsx index ede47a97c0..f17a4149fc 100644 --- a/plugins/app/src/extensions/components.tsx +++ b/plugins/app/src/extensions/components.tsx @@ -73,18 +73,20 @@ export const PageLayout = SwappableComponentBlueprint.make({ define({ component: SwappablePageLayout, loader: () => (props: PageLayoutProps) => { - const { title, icon, headerActions, tabs, children } = props; + const { title, icon, noHeader, headerActions, tabs, children } = props; return ( -
+ {!noHeader && ( +
+ )}
Promise; routeRef?: RouteRef; + noHeader?: boolean; }; }>; } diff --git a/plugins/catalog-graph/report-alpha.api.md b/plugins/catalog-graph/report-alpha.api.md index 0f42ed7f87..5346f83664 100644 --- a/plugins/catalog-graph/report-alpha.api.md +++ b/plugins/catalog-graph/report-alpha.api.md @@ -244,6 +244,7 @@ const _default: OverridableFrontendPlugin< icon?: IconElement; loader?: () => Promise; routeRef?: RouteRef_2; + noHeader?: boolean; }; }>; } diff --git a/plugins/catalog-import/report-alpha.api.md b/plugins/catalog-import/report-alpha.api.md index ed7a58faf9..d51ba2aa29 100644 --- a/plugins/catalog-import/report-alpha.api.md +++ b/plugins/catalog-import/report-alpha.api.md @@ -187,6 +187,7 @@ const _default: OverridableFrontendPlugin< icon?: IconElement; loader?: () => Promise; routeRef?: RouteRef_2; + noHeader?: boolean; }; }>; } diff --git a/plugins/catalog-unprocessed-entities/report-alpha.api.md b/plugins/catalog-unprocessed-entities/report-alpha.api.md index be03461e1c..bbb679db98 100644 --- a/plugins/catalog-unprocessed-entities/report-alpha.api.md +++ b/plugins/catalog-unprocessed-entities/report-alpha.api.md @@ -136,6 +136,7 @@ const _default: OverridableFrontendPlugin< icon?: IconElement; loader?: () => Promise; routeRef?: RouteRef_2; + noHeader?: boolean; }; }>; } diff --git a/plugins/catalog/report-alpha.api.md b/plugins/catalog/report-alpha.api.md index c8f7a54f65..e859896b31 100644 --- a/plugins/catalog/report-alpha.api.md +++ b/plugins/catalog/report-alpha.api.md @@ -1086,6 +1086,7 @@ const _default: OverridableFrontendPlugin< icon?: IconElement; loader?: () => Promise; routeRef?: RouteRef_2; + noHeader?: boolean; }; }>; 'page:catalog/entity': OverridableExtensionDefinition<{ @@ -1267,6 +1268,7 @@ const _default: OverridableFrontendPlugin< icon?: IconElement; loader?: () => Promise; routeRef?: RouteRef_2; + noHeader?: boolean; }; }>; 'search-result-list-item:catalog': OverridableExtensionDefinition<{ diff --git a/plugins/devtools/report-alpha.api.md b/plugins/devtools/report-alpha.api.md index e30f580817..87538d1021 100644 --- a/plugins/devtools/report-alpha.api.md +++ b/plugins/devtools/report-alpha.api.md @@ -152,6 +152,7 @@ const _default: OverridableFrontendPlugin< icon?: IconElement; loader?: () => Promise; routeRef?: RouteRef_2; + noHeader?: boolean; }; }>; } diff --git a/plugins/home/report-alpha.api.md b/plugins/home/report-alpha.api.md index 660ac5b68f..84b60dd7ff 100644 --- a/plugins/home/report-alpha.api.md +++ b/plugins/home/report-alpha.api.md @@ -200,6 +200,7 @@ const _default: OverridableFrontendPlugin< icon?: IconElement; loader?: () => Promise; routeRef?: RouteRef; + noHeader?: boolean; }; }>; } diff --git a/plugins/home/src/alpha.tsx b/plugins/home/src/alpha.tsx index 23e9d0e42b..1b91effa29 100644 --- a/plugins/home/src/alpha.tsx +++ b/plugins/home/src/alpha.tsx @@ -63,6 +63,7 @@ const homePage = PageBlueprint.makeWithOverrides({ factory(originalFactory, { node, inputs }) { return originalFactory({ path: '/home', + noHeader: true, routeRef: rootRouteRef, loader: async () => { const LazyDefaultLayout = reactLazy(() => diff --git a/plugins/kubernetes/report-alpha.api.md b/plugins/kubernetes/report-alpha.api.md index b746d708d7..60f1c2aefa 100644 --- a/plugins/kubernetes/report-alpha.api.md +++ b/plugins/kubernetes/report-alpha.api.md @@ -234,6 +234,7 @@ const _default: OverridableFrontendPlugin< icon?: IconElement; loader?: () => Promise; routeRef?: RouteRef_2; + noHeader?: boolean; }; }>; } diff --git a/plugins/mui-to-bui/report.api.md b/plugins/mui-to-bui/report.api.md index 4db5699c91..bddefc53bc 100644 --- a/plugins/mui-to-bui/report.api.md +++ b/plugins/mui-to-bui/report.api.md @@ -108,6 +108,7 @@ const _default: OverridableFrontendPlugin< icon?: IconElement; loader?: () => Promise; routeRef?: RouteRef_2; + noHeader?: boolean; }; }>; } diff --git a/plugins/notifications/report-alpha.api.md b/plugins/notifications/report-alpha.api.md index f2268743e9..aad05cac8f 100644 --- a/plugins/notifications/report-alpha.api.md +++ b/plugins/notifications/report-alpha.api.md @@ -114,6 +114,7 @@ const _default: OverridableFrontendPlugin< icon?: IconElement; loader?: () => Promise; routeRef?: RouteRef_2; + noHeader?: boolean; }; }>; } diff --git a/plugins/scaffolder/report-alpha.api.md b/plugins/scaffolder/report-alpha.api.md index 037dc16491..a3e19502fa 100644 --- a/plugins/scaffolder/report-alpha.api.md +++ b/plugins/scaffolder/report-alpha.api.md @@ -278,6 +278,7 @@ const _default: OverridableFrontendPlugin< icon?: IconElement; loader?: () => Promise; routeRef?: RouteRef_2; + noHeader?: boolean; }; }>; 'scaffolder-form-field:scaffolder/entity-name-picker': OverridableExtensionDefinition<{ diff --git a/plugins/search/report-alpha.api.md b/plugins/search/report-alpha.api.md index ad25c25a26..55e8ca58ce 100644 --- a/plugins/search/report-alpha.api.md +++ b/plugins/search/report-alpha.api.md @@ -187,6 +187,7 @@ const _default: OverridableFrontendPlugin< icon?: IconElement; loader?: () => Promise; routeRef?: RouteRef; + noHeader?: boolean; }; }>; } @@ -356,6 +357,7 @@ export const searchPage: OverridableExtensionDefinition<{ icon?: IconElement; loader?: () => Promise; routeRef?: RouteRef; + noHeader?: boolean; }; }>; diff --git a/plugins/techdocs/report-alpha.api.md b/plugins/techdocs/report-alpha.api.md index 849873df02..db59166f54 100644 --- a/plugins/techdocs/report-alpha.api.md +++ b/plugins/techdocs/report-alpha.api.md @@ -354,6 +354,7 @@ const _default: OverridableFrontendPlugin< icon?: IconElement; loader?: () => Promise; routeRef?: RouteRef_2; + noHeader?: boolean; }; }>; 'page:techdocs/reader': OverridableExtensionDefinition<{ @@ -446,6 +447,7 @@ const _default: OverridableFrontendPlugin< icon?: IconElement; loader?: () => Promise; routeRef?: RouteRef_2; + noHeader?: boolean; }; }>; 'search-result-list-item:techdocs': OverridableExtensionDefinition<{ diff --git a/plugins/user-settings/report-alpha.api.md b/plugins/user-settings/report-alpha.api.md index 4c25459295..f26414fd75 100644 --- a/plugins/user-settings/report-alpha.api.md +++ b/plugins/user-settings/report-alpha.api.md @@ -126,6 +126,7 @@ const _default: OverridableFrontendPlugin< icon?: IconElement; loader?: () => Promise; routeRef?: RouteRef; + noHeader?: boolean; }; }>; }