From 5408b0dd264d2d905d0d4278bbf23af964b8de1b Mon Sep 17 00:00:00 2001 From: secustor Date: Fri, 2 Jan 2026 22:12:26 +0100 Subject: [PATCH] implement Contents interface Signed-off-by: secustor --- .changeset/slimy-ghosts-rescue.md | 2 +- .../report-alpha.api.md | 4 ++-- plugins/devtools/report-alpha.api.md | 19 +------------------ plugins/devtools/report.api.md | 15 +++++++++++++-- plugins/devtools/src/alpha/plugin.tsx | 4 ++-- .../DefaultDevToolsPage.tsx | 12 ++++++------ .../components/DevToolsPage/DevToolsPage.tsx | 16 +++++++++++++--- .../src/components/DevToolsPage/index.ts | 6 +++++- plugins/devtools/src/components/index.ts | 5 ++++- 9 files changed, 47 insertions(+), 36 deletions(-) diff --git a/.changeset/slimy-ghosts-rescue.md b/.changeset/slimy-ghosts-rescue.md index 620214e0a6..ae01e3f718 100644 --- a/.changeset/slimy-ghosts-rescue.md +++ b/.changeset/slimy-ghosts-rescue.md @@ -6,4 +6,4 @@ '@backstage/plugin-devtools-common': patch --- -Add support for adding `unprocessed-entities` and other tabs to `devtools` +Add support for adding `unprocessed-entities` and other tabs to `devtools` when using the New Frontend system diff --git a/plugins/catalog-unprocessed-entities/report-alpha.api.md b/plugins/catalog-unprocessed-entities/report-alpha.api.md index 53e721899e..d3bd6dd28f 100644 --- a/plugins/catalog-unprocessed-entities/report-alpha.api.md +++ b/plugins/catalog-unprocessed-entities/report-alpha.api.md @@ -91,7 +91,7 @@ const _default: OverridableFrontendPlugin< export default _default; // @alpha -export const unprocessedEntitiesDevToolsContent: ExtensionDefinition<{ +export const unprocessedEntitiesDevToolsContent: OverridableExtensionDefinition<{ kind: 'devtools-content'; name: undefined; config: { @@ -106,7 +106,7 @@ export const unprocessedEntitiesDevToolsContent: ExtensionDefinition<{ | ExtensionDataRef | ExtensionDataRef | ExtensionDataRef< - RouteRef, + RouteRef_2, 'core.routing.ref', { optional: true; diff --git a/plugins/devtools/report-alpha.api.md b/plugins/devtools/report-alpha.api.md index 1789cc7f34..3f78a90587 100644 --- a/plugins/devtools/report-alpha.api.md +++ b/plugins/devtools/report-alpha.api.md @@ -9,13 +9,8 @@ import { ApiFactory } 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'; -<<<<<<< HEAD -import { ExtensionDefinition } from '@backstage/frontend-plugin-api'; import { ExtensionInput } from '@backstage/frontend-plugin-api'; -import { IconComponent } from '@backstage/core-plugin-api'; -======= import { IconComponent } from '@backstage/frontend-plugin-api'; ->>>>>>> master import { JSX as JSX_2 } from 'react'; import { OverridableExtensionDefinition } from '@backstage/frontend-plugin-api'; import { OverridableFrontendPlugin } from '@backstage/frontend-plugin-api'; @@ -65,13 +60,7 @@ const _default: OverridableFrontendPlugin< routeRef: RouteRef_2; }; }>; -<<<<<<< HEAD - 'page:devtools': ExtensionDefinition<{ -======= 'page:devtools': OverridableExtensionDefinition<{ - kind: 'page'; - name: undefined; ->>>>>>> master config: { path: string | undefined; }; @@ -94,7 +83,7 @@ const _default: OverridableFrontendPlugin< | ConfigurableExtensionDataRef | ConfigurableExtensionDataRef | ConfigurableExtensionDataRef< - RouteRef, + RouteRef_2, 'core.routing.ref', { optional: true; @@ -111,14 +100,8 @@ const _default: OverridableFrontendPlugin< params: { defaultPath?: [Error: `Use the 'path' param instead`]; path: string; -<<<<<<< HEAD - loader: () => Promise; - routeRef?: RouteRef; -======= loader: () => Promise; routeRef?: RouteRef_2; ->>>>>>> master }; }>; } diff --git a/plugins/devtools/report.api.md b/plugins/devtools/report.api.md index 5f9a46016d..804e678e89 100644 --- a/plugins/devtools/report.api.md +++ b/plugins/devtools/report.api.md @@ -6,6 +6,7 @@ import { BackstagePlugin } from '@backstage/core-plugin-api'; import { ElementType } from 'react'; import { JSX as JSX_2 } from 'react/jsx-runtime'; +import { ReactElement } from 'react'; import { ReactNode } from 'react'; import { RouteRef } from '@backstage/core-plugin-api'; import { TabProps } from '@material-ui/core/Tab'; @@ -28,12 +29,22 @@ export type DevToolsLayoutProps = { }; // @public (undocumented) -export const DevToolsPage: ({ extensions }: DevToolsPageProps) => JSX_2.Element; +export const DevToolsPage: ({ contents }: DevToolsPageProps) => JSX_2.Element; + +// @public (undocumented) +export interface DevToolsPageContent { + // (undocumented) + children: ReactElement; + // (undocumented) + path: string; + // (undocumented) + title: string; +} // @public (undocumented) export interface DevToolsPageProps { // (undocumented) - extensions?: any[]; + contents?: DevToolsPageContent[]; } // @public (undocumented) diff --git a/plugins/devtools/src/alpha/plugin.tsx b/plugins/devtools/src/alpha/plugin.tsx index 9a1b4b0af0..edeaae5723 100644 --- a/plugins/devtools/src/alpha/plugin.tsx +++ b/plugins/devtools/src/alpha/plugin.tsx @@ -63,13 +63,13 @@ export const devToolsPage = PageBlueprint.makeWithOverrides({ path: '/devtools', routeRef: rootRouteRef, loader: () => { - const extensions = inputs.contents.map(content => ({ + const contents = inputs.contents.map(content => ({ path: content.get(coreExtensionData.routePath), title: content.get(coreExtensionData.title), children: content.get(coreExtensionData.reactElement), })); return import('../components/DevToolsPage').then(m => ( - + )); }, }); diff --git a/plugins/devtools/src/components/DefaultDevToolsPage/DefaultDevToolsPage.tsx b/plugins/devtools/src/components/DefaultDevToolsPage/DefaultDevToolsPage.tsx index 36393db3b0..a3830ae8bd 100644 --- a/plugins/devtools/src/components/DefaultDevToolsPage/DefaultDevToolsPage.tsx +++ b/plugins/devtools/src/components/DefaultDevToolsPage/DefaultDevToolsPage.tsx @@ -28,7 +28,7 @@ import { ScheduledTasksContent } from '../Content/ScheduledTasksContent'; import { DevToolsPageProps } from '../DevToolsPage'; /** @public */ -export const DefaultDevToolsPage = ({ extensions }: DevToolsPageProps) => ( +export const DefaultDevToolsPage = ({ contents }: DevToolsPageProps) => ( @@ -45,13 +45,13 @@ export const DefaultDevToolsPage = ({ extensions }: DevToolsPageProps) => ( - {extensions?.map((extension, index) => ( + {contents?.map((content, index) => ( - {extension.children} + {content.children} ))} diff --git a/plugins/devtools/src/components/DevToolsPage/DevToolsPage.tsx b/plugins/devtools/src/components/DevToolsPage/DevToolsPage.tsx index 8f84ed4a9b..89305b2c1a 100644 --- a/plugins/devtools/src/components/DevToolsPage/DevToolsPage.tsx +++ b/plugins/devtools/src/components/DevToolsPage/DevToolsPage.tsx @@ -16,16 +16,26 @@ import { useOutlet } from 'react-router-dom'; import { DefaultDevToolsPage } from '../DefaultDevToolsPage'; +import { ReactElement } from 'react'; /** @public */ export interface DevToolsPageProps { - extensions?: any[]; + contents?: DevToolsPageContent[]; } -export const DevToolsPage = ({ extensions }: DevToolsPageProps) => { +/** + @public + */ +export interface DevToolsPageContent { + title: string; + path: string; + children: ReactElement; +} + +export const DevToolsPage = ({ contents }: DevToolsPageProps) => { const outlet = useOutlet(); - return <>{outlet || }; + return <>{outlet || }; }; diff --git a/plugins/devtools/src/components/DevToolsPage/index.ts b/plugins/devtools/src/components/DevToolsPage/index.ts index 743559f282..a0a4028d10 100644 --- a/plugins/devtools/src/components/DevToolsPage/index.ts +++ b/plugins/devtools/src/components/DevToolsPage/index.ts @@ -14,4 +14,8 @@ * limitations under the License. */ -export { DevToolsPage, type DevToolsPageProps } from './DevToolsPage'; +export { + DevToolsPage, + type DevToolsPageProps, + type DevToolsPageContent, +} from './DevToolsPage'; diff --git a/plugins/devtools/src/components/index.ts b/plugins/devtools/src/components/index.ts index f79797d65a..9744a4b801 100644 --- a/plugins/devtools/src/components/index.ts +++ b/plugins/devtools/src/components/index.ts @@ -16,4 +16,7 @@ export * from './Content'; export * from './DevToolsLayout'; -export { type DevToolsPageProps } from './DevToolsPage'; +export { + type DevToolsPageProps, + type DevToolsPageContent, +} from './DevToolsPage';