mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-16 07:35:16 +00:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1e1d75c55c | |||
| 818166b16c | |||
| 02342749ca | |||
| 303432ef9d |
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'gitbook': patch
|
||||
---
|
||||
|
||||
Resolve sections in reusable content blocks
|
||||
@@ -252,7 +252,9 @@ export async function PageAside(props: {
|
||||
async function PageAsideSections(props: { document: JSONDocument; context: ContentRefContext }) {
|
||||
const { document, context } = props;
|
||||
|
||||
const sections = await getDocumentSections(document, (ref) => resolveContentRef(ref, context));
|
||||
const sections = await getDocumentSections(context.space, document, (ref) =>
|
||||
resolveContentRef(ref, context),
|
||||
);
|
||||
|
||||
return sections.length > 1 ? <ScrollSectionsList sections={sections} /> : null;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { JSONDocument, ContentRef } from '@gitbook/api';
|
||||
import { JSONDocument, ContentRef, Space } from '@gitbook/api';
|
||||
|
||||
import { getDocument } from './api';
|
||||
import { getNodeText } from './document';
|
||||
import { resolveOpenAPIBlock } from './openapi/fetch';
|
||||
import { ResolvedContentRef } from './references';
|
||||
@@ -16,6 +17,7 @@ export interface DocumentSection {
|
||||
* Extract a list of sections from a document.
|
||||
*/
|
||||
export async function getDocumentSections(
|
||||
space: Space,
|
||||
document: JSONDocument,
|
||||
resolveContentRef: (ref: ContentRef) => Promise<ResolvedContentRef | null>,
|
||||
): Promise<DocumentSection[]> {
|
||||
@@ -52,6 +54,31 @@ export async function getDocumentSections(
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (block.type === 'reusable-content') {
|
||||
const resolved = await resolveContentRef(block.data.ref);
|
||||
const documentId = resolved?.reusableContent?.document;
|
||||
if (!documentId) {
|
||||
throw new Error(`Expected a document ID for reusable content block`);
|
||||
}
|
||||
|
||||
const document = await getDocument(space.id, documentId);
|
||||
if (!document) {
|
||||
throw new Error(`Document not found for reusable content block`);
|
||||
}
|
||||
|
||||
const resuableContentSections = await getDocumentSections(
|
||||
space,
|
||||
document,
|
||||
resolveContentRef,
|
||||
);
|
||||
sections.push(
|
||||
...resuableContentSections.map((section) => ({
|
||||
...section,
|
||||
depth: section.depth + depth,
|
||||
})),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return sections;
|
||||
|
||||
Reference in New Issue
Block a user