fix(v2): fix docs homepage permalink issues (#2905)

* better fixes for docs homepage

* fix tests

* create special route for docs homepage + cleanup existing code

* no need to create multiple docs parent paths

* useful comment

* add test for slug + doc home usage at the same time error

* remove confusing variable name

* fix tests by using same suffix as before for docs base metadata path

* metadata: use homePageId correctly for nested docs: the full docId (including /) should be used to compare against homePageId

* add folder/testNested test doc

* refactor a bit processMetadata, the home should be handled correctly for all versions

* Workaround to fix issue when parent layout route (DocPage) has same path as the child route (DocItem): see https://github.com/facebook/docusaurus/issues/2917

* revert homePageId

* remove test doc

* remove test doc

* add useful comment
This commit is contained in:
Sébastien Lorber 2020-06-17 14:54:08 +02:00 committed by GitHub
parent a3f54d747d
commit f6b1c85b01
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 264 additions and 218 deletions

View file

@ -8,7 +8,6 @@
import React from 'react';
import renderRoutes from '@docusaurus/renderRoutes';
import NotFound from '@theme/NotFound';
import DocItem from '@theme/DocItem';
import DocSidebar from '@theme/DocSidebar';
import MDXComponents from '@theme/MDXComponents';
import Layout from '@theme/Layout';
@ -16,24 +15,16 @@ import {MDXProvider} from '@mdx-js/react';
import {matchPath} from '@docusaurus/router';
function DocPage(props) {
const {route: baseRoute, docsMetadata, location, content} = props;
const {
permalinkToSidebar,
docsSidebars,
isHomePage,
homePagePath,
} = docsMetadata;
const {route: baseRoute, docsMetadata, location} = props;
// case-sensitive route such as it is defined in the sidebar
const currentRoute = !isHomePage
? baseRoute.routes.find((route) => {
return matchPath(location.pathname, route);
}) || {}
: {};
const sidebar = isHomePage
? content.metadata.sidebar
: permalinkToSidebar[currentRoute.path];
const currentRoute =
baseRoute.routes.find((route) => {
return matchPath(location.pathname, route);
}) || {};
const {permalinkToSidebar, docsSidebars} = docsMetadata;
const sidebar = permalinkToSidebar[currentRoute.path];
if (!isHomePage && Object.keys(currentRoute).length === 0) {
if (Object.keys(currentRoute).length === 0) {
return <NotFound {...props} />;
}
@ -41,16 +32,12 @@ function DocPage(props) {
<Layout title="Doc page" description="My Doc page">
<DocSidebar
docsSidebars={docsSidebars}
path={isHomePage ? homePagePath : currentRoute.path}
path={currentRoute.path}
sidebar={sidebar}
/>
<section className="offset-1 mr-4 mt-4 col-xl-6 offset-xl-4 p-0 justify-content-center align-self-center overflow-hidden">
<MDXProvider components={MDXComponents}>
{isHomePage ? (
<DocItem content={content} />
) : (
renderRoutes(baseRoute.routes)
)}
{renderRoutes(baseRoute.routes)}
</MDXProvider>
</section>
</Layout>