diff --git a/packages/core-components/src/components/MarkdownContent/MarkdownContent.tsx b/packages/core-components/src/components/MarkdownContent/MarkdownContent.tsx index e2ee460a1f..d97172bf75 100644 --- a/packages/core-components/src/components/MarkdownContent/MarkdownContent.tsx +++ b/packages/core-components/src/components/MarkdownContent/MarkdownContent.tsx @@ -20,6 +20,7 @@ import gfm from 'remark-gfm'; import React from 'react'; import { BackstageTheme } from '@backstage/theme'; import { CodeSnippet } from '../CodeSnippet'; +import { HeadingProps } from 'react-markdown/lib/ast-to-react'; export type MarkdownContentClassKey = 'markdown'; @@ -73,13 +74,15 @@ type Props = { className?: string; }; -const flatten = (text, child) => { +const flatten = (text: string, child: any): string => { + if (!child) return text; + return typeof child === 'string' ? text + child : React.Children.toArray(child.props.children).reduce(flatten, text); }; -const headingRenderer = ({ level, children }) => { +const headingRenderer = ({ level, children }: HeadingProps) => { const childrenArray = React.Children.toArray(children); const text = childrenArray.reduce(flatten, ''); const slug = text.toLocaleLowerCase('en-US').replace(/\W/g, '-');