Skip to content

Commit 428988d

Browse files
committed
extract useBreadcrumbsStructuredData() helper + add schema-dts deps
1 parent d67933c commit 428988d

File tree

7 files changed

+42
-17
lines changed

7 files changed

+42
-17
lines changed

packages/docusaurus-plugin-content-blog/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
"fs-extra": "^11.1.1",
4545
"lodash": "^4.17.21",
4646
"reading-time": "^1.5.0",
47+
"schema-dts": "^1.1.2",
4748
"srcset": "^4.0.0",
4849
"tslib": "^2.6.0",
4950
"unist-util-visit": "^5.0.0",

packages/docusaurus-plugin-content-docs/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
"fs-extra": "^11.1.1",
5050
"js-yaml": "^4.1.0",
5151
"lodash": "^4.17.21",
52+
"schema-dts": "^1.1.2",
5253
"tslib": "^2.6.0",
5354
"utility-types": "^3.10.0",
5455
"webpack": "^5.88.1"

packages/docusaurus-plugin-content-docs/src/client/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ export {
6060
getDocsVersionSearchTag,
6161
} from './docsSearch';
6262

63+
export {useBreadcrumbsStructuredData} from './structuredDataUtils';
64+
6365
export type ActivePlugin = {
6466
pluginId: string;
6567
pluginData: GlobalPluginData;
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**
2+
* Copyright (c) Facebook, Inc. and its affiliates.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*/
7+
8+
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
9+
import type {PropSidebarBreadcrumbsItem} from '@docusaurus/plugin-content-docs';
10+
import type {WithContext, BreadcrumbList} from 'schema-dts';
11+
12+
export function useBreadcrumbsStructuredData({
13+
breadcrumbs,
14+
}: {
15+
breadcrumbs: PropSidebarBreadcrumbsItem[];
16+
}): WithContext<BreadcrumbList> {
17+
const {siteConfig} = useDocusaurusContext();
18+
return {
19+
'@context': 'https://schema.org',
20+
'@type': 'BreadcrumbList',
21+
itemListElement: breadcrumbs
22+
// We filter breadcrumb items without links, they are not allowed
23+
// See also https://github.com/facebook/docusaurus/issues/9319#issuecomment-2643560845
24+
.filter((breadcrumb) => breadcrumb.href)
25+
.map((breadcrumb, index) => ({
26+
'@type': 'ListItem',
27+
position: index + 1,
28+
name: breadcrumb.label,
29+
item: `${siteConfig.url}${breadcrumb.href}`,
30+
})),
31+
};
32+
}

packages/docusaurus-theme-classic/src/theme/DocBreadcrumbs/StructuredData/index.tsx

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,13 @@
77

88
import React, {type ReactNode} from 'react';
99
import Head from '@docusaurus/Head';
10-
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
10+
import {useBreadcrumbsStructuredData} from '@docusaurus/plugin-content-docs/client';
1111
import type {Props} from '@theme/DocBreadcrumbs/StructuredData';
1212

1313
export default function DocBreadcrumbsStructuredData(props: Props): ReactNode {
14-
const {siteConfig} = useDocusaurusContext();
15-
const structuredData = {
16-
'@context': 'https://schema.org',
17-
'@type': 'BreadcrumbList',
18-
itemListElement: props.breadcrumbs
19-
.filter((breadcrumb) => breadcrumb.href)
20-
.map((breadcrumb, index) => ({
21-
'@type': 'ListItem',
22-
position: index + 1,
23-
name: breadcrumb.label,
24-
item: `${siteConfig.url}${breadcrumb.href}`,
25-
})),
26-
};
14+
const structuredData = useBreadcrumbsStructuredData({
15+
breadcrumbs: props.breadcrumbs,
16+
});
2717
return (
2818
<Head>
2919
<script type="application/ld+json">

packages/docusaurus-theme-classic/src/theme/DocBreadcrumbs/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ export default function DocBreadcrumbs(): ReactNode {
6868

6969
return (
7070
<>
71+
<DocBreadcrumbsStructuredData breadcrumbs={breadcrumbs} />
7172
<nav
7273
className={clsx(
7374
ThemeClassNames.docs.docBreadcrumbs,
@@ -96,7 +97,6 @@ export default function DocBreadcrumbs(): ReactNode {
9697
})}
9798
</ul>
9899
</nav>
99-
<DocBreadcrumbsStructuredData breadcrumbs={breadcrumbs} />
100100
</>
101101
);
102102
}

packages/docusaurus-theme-common/package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,7 @@
4747
"@docusaurus/core": "3.7.0",
4848
"@docusaurus/types": "3.7.0",
4949
"fs-extra": "^11.1.1",
50-
"lodash": "^4.17.21",
51-
"schema-dts": "^1.1.2"
50+
"lodash": "^4.17.21"
5251
},
5352
"peerDependencies": {
5453
"@docusaurus/plugin-content-docs": "*",

0 commit comments

Comments
 (0)