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:
Sébastien Lorber 2020-09-03 14:35:46 +02:00 committed by GitHub
parent 3ace60043b
commit 9c34f68a7a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 57 additions and 22 deletions

View file

@ -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\\": [
{ {

View file

@ -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;
}; };

View file

@ -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,
}; };

View file

@ -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>
</>
); );
} }

View file

@ -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(',')} />
)} )}

View file

@ -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;

View file

@ -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]}`],
}, },
}, },