diff --git a/.changeset/techdocs-back-once-again.md b/.changeset/techdocs-back-once-again.md
new file mode 100644
index 0000000000..bf99f2d509
--- /dev/null
+++ b/.changeset/techdocs-back-once-again.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-techdocs': patch
+---
+
+Fixed a bug preventing custom TechDocs reader page implementations from rendering without being double-wrapped in the `` component.
diff --git a/.changeset/techdocs-renegade-master.md b/.changeset/techdocs-renegade-master.md
new file mode 100644
index 0000000000..9185faabfc
--- /dev/null
+++ b/.changeset/techdocs-renegade-master.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-techdocs': patch
+---
+
+Fixed a bug that caused addons in the `Subheader` location to break the default TechDocs reader page layout.
diff --git a/docs/features/techdocs/how-to-guides.md b/docs/features/techdocs/how-to-guides.md
index 45929dfd20..0c3bc98c09 100644
--- a/docs/features/techdocs/how-to-guides.md
+++ b/docs/features/techdocs/how-to-guides.md
@@ -162,11 +162,11 @@ The `techDocsPage` is a default techdocs reader page which lives in
having to set anything up.
```tsx
-
+
-
+
```
If you would like to compose your own `techDocsPage`, you can do so by replacing
@@ -174,30 +174,30 @@ the children of TechDocsPage with something else. Maybe you are _just_
interested in replacing the Header:
```tsx
-
+
-
+
```
Or maybe you want to disable the in-context search
```tsx
-
+
-
+
```
Or maybe you want to replace the entire TechDocs Page.
```tsx
-
+
my own content
-
+
```
## How to migrate from TechDocs Alpha to Beta
diff --git a/packages/app/src/components/techdocs/TechDocsPage.tsx b/packages/app/src/components/techdocs/TechDocsPage.tsx
index 48a9812160..d79acbe0a7 100644
--- a/packages/app/src/components/techdocs/TechDocsPage.tsx
+++ b/packages/app/src/components/techdocs/TechDocsPage.tsx
@@ -14,21 +14,21 @@
* limitations under the License.
*/
+import React from 'react';
+import { Page } from '@backstage/core-components';
import {
- TechDocsReaderPage,
TechDocsReaderPageHeader,
TechDocsReaderPageSubheader,
TechDocsReaderPageContent,
} from '@backstage/plugin-techdocs';
-import React from 'react';
const DefaultTechDocsPage = () => {
return (
-
+
-
+
);
};
diff --git a/plugins/techdocs/api-report.md b/plugins/techdocs/api-report.md
index 4575ef7b28..936df8991c 100644
--- a/plugins/techdocs/api-report.md
+++ b/plugins/techdocs/api-report.md
@@ -18,7 +18,6 @@ import { PropsWithChildren } from 'react';
import { default as React_2 } from 'react';
import { ReactNode } from 'react';
import { RouteRef } from '@backstage/core-plugin-api';
-import { StyledComponentProps } from '@material-ui/core';
import { TableColumn } from '@backstage/core-components';
import { TableProps } from '@backstage/core-components';
import { TechDocsEntityMetadata as TechDocsEntityMetadata_2 } from '@backstage/plugin-techdocs-react';
@@ -351,15 +350,11 @@ export type TechDocsReaderPageRenderFunction = ({
}) => JSX.Element;
// @public
-export const TechDocsReaderPageSubheader: React_2.ComponentType<
- Pick<
- {
- toolbarProps?: ToolbarProps<'div', {}> | undefined;
- },
- 'toolbarProps'
- > &
- StyledComponentProps<'root'>
->;
+export const TechDocsReaderPageSubheader: ({
+ toolbarProps,
+}: {
+ toolbarProps?: ToolbarProps<'div', {}> | undefined;
+}) => JSX.Element | null;
// @public
export const TechDocsReaderProvider: ({
diff --git a/plugins/techdocs/src/reader/components/TechDocsReaderPage/TechDocsReaderPage.tsx b/plugins/techdocs/src/reader/components/TechDocsReaderPage/TechDocsReaderPage.tsx
index a84c0a8122..6885957002 100644
--- a/plugins/techdocs/src/reader/components/TechDocsReaderPage/TechDocsReaderPage.tsx
+++ b/plugins/techdocs/src/reader/components/TechDocsReaderPage/TechDocsReaderPage.tsx
@@ -97,11 +97,9 @@ export const TechDocsReaderPage = (props: TechDocsReaderPageProps) => {
});
return (
- (page as JSX.Element) || (
-
-
-
- )
+
+ {(page as JSX.Element) || }
+
);
}
diff --git a/plugins/techdocs/src/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx b/plugins/techdocs/src/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx
index 62d64fa858..1eeb713ed9 100644
--- a/plugins/techdocs/src/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx
+++ b/plugins/techdocs/src/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx
@@ -16,26 +16,33 @@
import React from 'react';
-import { Box, Toolbar, ToolbarProps, withStyles } from '@material-ui/core';
+import { Box, makeStyles, Toolbar, ToolbarProps } from '@material-ui/core';
import {
TechDocsAddonLocations as locations,
useTechDocsAddons,
} from '@backstage/plugin-techdocs-react';
-/**
- * Renders the reader page subheader.
- * Please use the Tech Docs add-ons to customize it
- * @public
- */
-export const TechDocsReaderPageSubheader = withStyles(theme => ({
+const useStyles = makeStyles(theme => ({
root: {
gridArea: 'pageSubheader',
flexDirection: 'column',
minHeight: 'auto',
padding: theme.spacing(3, 3, 0),
},
-}))(({ toolbarProps }: { toolbarProps?: ToolbarProps }) => {
+}));
+
+/**
+ * Renders the reader page subheader.
+ * Please use the Tech Docs add-ons to customize it
+ * @public
+ */
+export const TechDocsReaderPageSubheader = ({
+ toolbarProps,
+}: {
+ toolbarProps?: ToolbarProps;
+}) => {
+ const classes = useStyles();
const addons = useTechDocsAddons();
const subheaderAddons = addons.renderComponentsByLocation(
locations.Subheader,
@@ -44,7 +51,7 @@ export const TechDocsReaderPageSubheader = withStyles(theme => ({
if (!subheaderAddons) return null;
return (
-
+
{subheaderAddons && (
({
)}
);
-});
+};