diff --git a/src/components/ContentItems/ContentItems.tsx b/src/components/ContentItems/ContentItems.tsx index 2766887a..8194da2f 100644 --- a/src/components/ContentItems/ContentItems.tsx +++ b/src/components/ContentItems/ContentItems.tsx @@ -79,7 +79,11 @@ export class SectionItem extends React.Component { - + {externalDocs && ( diff --git a/src/components/Markdown/AdvancedMarkdown.tsx b/src/components/Markdown/AdvancedMarkdown.tsx index 18bc3f33..790e30d0 100644 --- a/src/components/Markdown/AdvancedMarkdown.tsx +++ b/src/components/Markdown/AdvancedMarkdown.tsx @@ -9,6 +9,7 @@ import { StoreConsumer } from '../StoreBuilder'; export interface AdvancedMarkdownProps extends BaseMarkdownProps { htmlWrap?: (part: JSX.Element) => JSX.Element; + parentId?: string; } export class AdvancedMarkdown extends React.Component { @@ -28,7 +29,7 @@ export class AdvancedMarkdown extends React.Component { throw new Error('When using components in markdown, store prop must be provided'); } - const renderer = new MarkdownRenderer(options); + const renderer = new MarkdownRenderer(options, this.props.parentId); const parts = renderer.renderMdWithComponents(source); if (!parts.length) { diff --git a/src/services/MarkdownRenderer.ts b/src/services/MarkdownRenderer.ts index 08b5e692..80408ab7 100644 --- a/src/services/MarkdownRenderer.ts +++ b/src/services/MarkdownRenderer.ts @@ -61,7 +61,8 @@ export class MarkdownRenderer { private headingEnhanceRenderer: marked.Renderer; private originalHeadingRule: typeof marked.Renderer.prototype.heading; - constructor(public options?: RedocNormalizedOptions) { + constructor(public options?: RedocNormalizedOptions, public parentId?: string) { + this.parentId = parentId; this.parser = new marked.Parser(); this.headingEnhanceRenderer = new marked.Renderer(); this.originalHeadingRule = this.headingEnhanceRenderer.heading.bind( @@ -78,7 +79,9 @@ export class MarkdownRenderer { ): MarkdownHeading { name = unescapeHTMLChars(name); const item = { - id: parentId ? `${parentId}/${safeSlugify(name)}` : `section/${safeSlugify(name)}`, + id: parentId + ? `${parentId}/${safeSlugify(name)}` + : `${this.parentId || 'section'}/${safeSlugify(name)}`, name, level, items: [], diff --git a/src/services/MenuBuilder.ts b/src/services/MenuBuilder.ts index 56c4ad70..cc428c07 100644 --- a/src/services/MenuBuilder.ts +++ b/src/services/MenuBuilder.ts @@ -70,7 +70,7 @@ export class MenuBuilder { initialDepth: number, options: RedocNormalizedOptions, ): ContentItemModel[] { - const renderer = new MarkdownRenderer(options); + const renderer = new MarkdownRenderer(options, parent?.id); const headings = renderer.extractHeadings(description || ''); if (headings.length && parent && parent.description) {