/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React from 'react'; import renderRoutes from '@docusaurus/renderRoutes'; import type {PropSidebar} from '@docusaurus/plugin-content-docs'; import NotFound from '@theme/NotFound'; import type {Props} from '@theme/DocPage'; import DocPageLayout from '@theme/DocPage/Layout'; import {matchPath} from '@docusaurus/router'; import clsx from 'clsx'; import { HtmlClassNameProvider, ThemeClassNames, docVersionSearchTag, DocsSidebarProvider, DocsVersionProvider, } from '@docusaurus/theme-common'; import SearchMetadata from '@theme/SearchMetadata'; function extractDocRouteMetadata(props: Props): null | { docElement: JSX.Element; sidebarName: string | undefined; sidebarItems: PropSidebar | undefined; } { const { route: {routes: docRoutes}, versionMetadata, location, } = props; const currentDocRoute = docRoutes.find((docRoute) => matchPath(location.pathname, docRoute), ); if (!currentDocRoute) { return null; } // For now, the sidebarName is added as route config: not ideal! const sidebarName = currentDocRoute.sidebar; const sidebarItems = sidebarName ? versionMetadata.docsSidebars[sidebarName] : undefined; const docElement = renderRoutes(props.route.routes, { versionMetadata, }); return { docElement, sidebarName, sidebarItems, }; } export default function DocPage(props: Props): JSX.Element { const {versionMetadata} = props; const currentDocRouteMetadata = extractDocRouteMetadata(props); if (!currentDocRouteMetadata) { return ; } const {docElement, sidebarName, sidebarItems} = currentDocRouteMetadata; return ( <> {docElement} ); }