mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-11 08:07:26 +02:00
fix(v2): DocSearch should keep working after a new release (#3393)
* We should create an alias for searching last version of docs on DocSearch/Algolia, so that on new version publish, search still works even if new version is not already indexed (https://github.com/facebook/docusaurus/issues/3391) * commit missing snapshot * update after algolia changes * put back facetFilters: [`version:${versions[0]}`] until latest facet is indexed
This commit is contained in:
parent
3ace60043b
commit
9c34f68a7a
7 changed files with 57 additions and 22 deletions
|
@ -291,6 +291,7 @@ Object {
|
||||||
"version-current-metadata-prop-751.json": "{
|
"version-current-metadata-prop-751.json": "{
|
||||||
\\"version\\": \\"current\\",
|
\\"version\\": \\"current\\",
|
||||||
\\"label\\": \\"Next\\",
|
\\"label\\": \\"Next\\",
|
||||||
|
\\"isLast\\": true,
|
||||||
\\"docsSidebars\\": {
|
\\"docsSidebars\\": {
|
||||||
\\"docs\\": [
|
\\"docs\\": [
|
||||||
{
|
{
|
||||||
|
@ -615,6 +616,7 @@ Object {
|
||||||
"version-1-0-0-metadata-prop-608.json": "{
|
"version-1-0-0-metadata-prop-608.json": "{
|
||||||
\\"version\\": \\"1.0.0\\",
|
\\"version\\": \\"1.0.0\\",
|
||||||
\\"label\\": \\"1.0.0\\",
|
\\"label\\": \\"1.0.0\\",
|
||||||
|
\\"isLast\\": true,
|
||||||
\\"docsSidebars\\": {
|
\\"docsSidebars\\": {
|
||||||
\\"version-1.0.0/community\\": [
|
\\"version-1.0.0/community\\": [
|
||||||
{
|
{
|
||||||
|
@ -631,6 +633,7 @@ Object {
|
||||||
"version-current-metadata-prop-751.json": "{
|
"version-current-metadata-prop-751.json": "{
|
||||||
\\"version\\": \\"current\\",
|
\\"version\\": \\"current\\",
|
||||||
\\"label\\": \\"Next\\",
|
\\"label\\": \\"Next\\",
|
||||||
|
\\"isLast\\": false,
|
||||||
\\"docsSidebars\\": {
|
\\"docsSidebars\\": {
|
||||||
\\"community\\": [
|
\\"community\\": [
|
||||||
{
|
{
|
||||||
|
@ -1073,6 +1076,7 @@ Object {
|
||||||
"version-1-0-0-metadata-prop-608.json": "{
|
"version-1-0-0-metadata-prop-608.json": "{
|
||||||
\\"version\\": \\"1.0.0\\",
|
\\"version\\": \\"1.0.0\\",
|
||||||
\\"label\\": \\"1.0.0\\",
|
\\"label\\": \\"1.0.0\\",
|
||||||
|
\\"isLast\\": false,
|
||||||
\\"docsSidebars\\": {
|
\\"docsSidebars\\": {
|
||||||
\\"version-1.0.0/docs\\": [
|
\\"version-1.0.0/docs\\": [
|
||||||
{
|
{
|
||||||
|
@ -1115,6 +1119,7 @@ Object {
|
||||||
"version-1-0-1-metadata-prop-e87.json": "{
|
"version-1-0-1-metadata-prop-e87.json": "{
|
||||||
\\"version\\": \\"1.0.1\\",
|
\\"version\\": \\"1.0.1\\",
|
||||||
\\"label\\": \\"1.0.1\\",
|
\\"label\\": \\"1.0.1\\",
|
||||||
|
\\"isLast\\": true,
|
||||||
\\"docsSidebars\\": {
|
\\"docsSidebars\\": {
|
||||||
\\"version-1.0.1/docs\\": [
|
\\"version-1.0.1/docs\\": [
|
||||||
{
|
{
|
||||||
|
@ -1151,6 +1156,7 @@ Object {
|
||||||
"version-current-metadata-prop-751.json": "{
|
"version-current-metadata-prop-751.json": "{
|
||||||
\\"version\\": \\"current\\",
|
\\"version\\": \\"current\\",
|
||||||
\\"label\\": \\"Next\\",
|
\\"label\\": \\"Next\\",
|
||||||
|
\\"isLast\\": false,
|
||||||
\\"docsSidebars\\": {
|
\\"docsSidebars\\": {
|
||||||
\\"docs\\": [
|
\\"docs\\": [
|
||||||
{
|
{
|
||||||
|
@ -1187,6 +1193,7 @@ Object {
|
||||||
"version-with-slugs-metadata-prop-2bf.json": "{
|
"version-with-slugs-metadata-prop-2bf.json": "{
|
||||||
\\"version\\": \\"withSlugs\\",
|
\\"version\\": \\"withSlugs\\",
|
||||||
\\"label\\": \\"withSlugs\\",
|
\\"label\\": \\"withSlugs\\",
|
||||||
|
\\"isLast\\": false,
|
||||||
\\"docsSidebars\\": {
|
\\"docsSidebars\\": {
|
||||||
\\"version-1.0.1/docs\\": [
|
\\"version-1.0.1/docs\\": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -15,6 +15,7 @@ declare module '@docusaurus/plugin-content-docs-types' {
|
||||||
export type PropVersionMetadata = {
|
export type PropVersionMetadata = {
|
||||||
version: string;
|
version: string;
|
||||||
label: string;
|
label: string;
|
||||||
|
isLast: boolean;
|
||||||
docsSidebars: PropSidebars;
|
docsSidebars: PropSidebars;
|
||||||
permalinkToSidebar: PermalinkToSidebar;
|
permalinkToSidebar: PermalinkToSidebar;
|
||||||
};
|
};
|
||||||
|
|
|
@ -67,6 +67,7 @@ export function toVersionMetadataProp(
|
||||||
return {
|
return {
|
||||||
version: loadedVersion.versionName,
|
version: loadedVersion.versionName,
|
||||||
label: loadedVersion.versionLabel,
|
label: loadedVersion.versionLabel,
|
||||||
|
isLast: loadedVersion.isLast,
|
||||||
docsSidebars: toSidebarsProp(loadedVersion),
|
docsSidebars: toSidebarsProp(loadedVersion),
|
||||||
permalinkToSidebar: loadedVersion.permalinkToSidebar,
|
permalinkToSidebar: loadedVersion.permalinkToSidebar,
|
||||||
};
|
};
|
||||||
|
|
|
@ -18,6 +18,7 @@ import NotFound from '@theme/NotFound';
|
||||||
import type {DocumentRoute} from '@theme/DocItem';
|
import type {DocumentRoute} from '@theme/DocItem';
|
||||||
import type {Props} from '@theme/DocPage';
|
import type {Props} from '@theme/DocPage';
|
||||||
import {matchPath} from '@docusaurus/router';
|
import {matchPath} from '@docusaurus/router';
|
||||||
|
import Head from '@docusaurus/Head';
|
||||||
|
|
||||||
import styles from './styles.module.css';
|
import styles from './styles.module.css';
|
||||||
|
|
||||||
|
@ -27,34 +28,61 @@ type DocPageContentProps = {
|
||||||
readonly children: ReactNode;
|
readonly children: ReactNode;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// This theme is not coupled to Algolia, but can we do something else?
|
||||||
|
// Note the last version is also indexed with "last", to avoid breaking search on new releases
|
||||||
|
// See https://github.com/facebook/docusaurus/issues/3391
|
||||||
|
function DocSearchVersionHeader({
|
||||||
|
version,
|
||||||
|
isLast,
|
||||||
|
}: {
|
||||||
|
version: string;
|
||||||
|
isLast: boolean;
|
||||||
|
}) {
|
||||||
|
const versions = isLast ? [version, 'latest'] : [version];
|
||||||
|
return (
|
||||||
|
<Head>
|
||||||
|
<meta
|
||||||
|
name="docsearch:version"
|
||||||
|
content={
|
||||||
|
// See https://github.com/facebook/docusaurus/issues/3391#issuecomment-685594160
|
||||||
|
versions.join(',')
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</Head>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function DocPageContent({
|
function DocPageContent({
|
||||||
currentDocRoute,
|
currentDocRoute,
|
||||||
versionMetadata,
|
versionMetadata,
|
||||||
children,
|
children,
|
||||||
}: DocPageContentProps): JSX.Element {
|
}: DocPageContentProps): JSX.Element {
|
||||||
const {siteConfig, isClient} = useDocusaurusContext();
|
const {siteConfig, isClient} = useDocusaurusContext();
|
||||||
const {permalinkToSidebar, docsSidebars, version} = versionMetadata;
|
const {permalinkToSidebar, docsSidebars, version, isLast} = versionMetadata;
|
||||||
const sidebarName = permalinkToSidebar[currentDocRoute.path];
|
const sidebarName = permalinkToSidebar[currentDocRoute.path];
|
||||||
const sidebar = docsSidebars[sidebarName];
|
const sidebar = docsSidebars[sidebarName];
|
||||||
return (
|
return (
|
||||||
<Layout version={version} key={isClient}>
|
<>
|
||||||
<div className={styles.docPage}>
|
<DocSearchVersionHeader version={version} isLast={isLast} />
|
||||||
{sidebar && (
|
<Layout key={isClient}>
|
||||||
<div className={styles.docSidebarContainer} role="complementary">
|
<div className={styles.docPage}>
|
||||||
<DocSidebar
|
{sidebar && (
|
||||||
sidebar={sidebar}
|
<div className={styles.docSidebarContainer} role="complementary">
|
||||||
path={currentDocRoute.path}
|
<DocSidebar
|
||||||
sidebarCollapsible={
|
sidebar={sidebar}
|
||||||
siteConfig.themeConfig?.sidebarCollapsible ?? true
|
path={currentDocRoute.path}
|
||||||
}
|
sidebarCollapsible={
|
||||||
/>
|
siteConfig.themeConfig?.sidebarCollapsible ?? true
|
||||||
</div>
|
}
|
||||||
)}
|
/>
|
||||||
<main className={styles.docMainContainer}>
|
</div>
|
||||||
<MDXProvider components={MDXComponents}>{children}</MDXProvider>
|
)}
|
||||||
</main>
|
<main className={styles.docMainContainer}>
|
||||||
</div>
|
<MDXProvider components={MDXComponents}>{children}</MDXProvider>
|
||||||
</Layout>
|
</main>
|
||||||
|
</div>
|
||||||
|
</Layout>
|
||||||
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,6 @@ function Layout(props: Props): JSX.Element {
|
||||||
image,
|
image,
|
||||||
keywords,
|
keywords,
|
||||||
permalink,
|
permalink,
|
||||||
version,
|
|
||||||
} = props;
|
} = props;
|
||||||
const metaTitle = title ? `${title} | ${siteTitle}` : siteTitle;
|
const metaTitle = title ? `${title} | ${siteTitle}` : siteTitle;
|
||||||
const metaImage = image || defaultImage;
|
const metaImage = image || defaultImage;
|
||||||
|
@ -63,7 +62,6 @@ function Layout(props: Props): JSX.Element {
|
||||||
{description && (
|
{description && (
|
||||||
<meta property="og:description" content={description} />
|
<meta property="og:description" content={description} />
|
||||||
)}
|
)}
|
||||||
{version && <meta name="docsearch:version" content={version} />}
|
|
||||||
{keywords && keywords.length && (
|
{keywords && keywords.length && (
|
||||||
<meta name="keywords" content={keywords.join(',')} />
|
<meta name="keywords" content={keywords.join(',')} />
|
||||||
)}
|
)}
|
||||||
|
|
|
@ -245,7 +245,6 @@ declare module '@theme/Layout' {
|
||||||
image?: string;
|
image?: string;
|
||||||
keywords?: string[];
|
keywords?: string[];
|
||||||
permalink?: string;
|
permalink?: string;
|
||||||
version?: string;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const Layout: (props: Props) => JSX.Element;
|
const Layout: (props: Props) => JSX.Element;
|
||||||
|
|
|
@ -235,6 +235,7 @@ module.exports = {
|
||||||
apiKey: '47ecd3b21be71c5822571b9f59e52544',
|
apiKey: '47ecd3b21be71c5822571b9f59e52544',
|
||||||
indexName: 'docusaurus-2',
|
indexName: 'docusaurus-2',
|
||||||
searchParameters: {
|
searchParameters: {
|
||||||
|
// facetFilters: [`version:latest`],
|
||||||
facetFilters: [`version:${versions[0]}`],
|
facetFilters: [`version:${versions[0]}`],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue