mirror of
https://github.com/facebook/docusaurus.git
synced 2025-06-15 09:12:24 +02:00
doc components initial simplification
This commit is contained in:
parent
4aa77651d3
commit
ad5918eb5c
2 changed files with 32 additions and 45 deletions
|
@ -18,47 +18,53 @@ import {matchPath} from '@docusaurus/router';
|
||||||
|
|
||||||
import styles from './styles.module.css';
|
import styles from './styles.module.css';
|
||||||
|
|
||||||
function DocPage(props) {
|
function DocPageContent({currentDocRoute, docsMetadata, children}) {
|
||||||
const {route: baseRoute, docsMetadata, location} = props;
|
|
||||||
// case-sensitive route such as it is defined in the sidebar
|
|
||||||
const currentRoute =
|
|
||||||
baseRoute.routes.find((route) => {
|
|
||||||
return matchPath(location.pathname, route);
|
|
||||||
}) || {};
|
|
||||||
const {permalinkToSidebar, docsSidebars, version} = docsMetadata;
|
|
||||||
const sidebar = permalinkToSidebar[currentRoute.path];
|
|
||||||
const {
|
const {
|
||||||
siteConfig: {themeConfig = {}} = {},
|
siteConfig: {themeConfig = {}} = {},
|
||||||
isClient,
|
isClient,
|
||||||
} = useDocusaurusContext();
|
} = useDocusaurusContext();
|
||||||
|
const {permalinkToSidebar, docsSidebars, version} = docsMetadata;
|
||||||
const {sidebarCollapsible = true} = themeConfig;
|
const sidebarName = permalinkToSidebar[currentDocRoute.path];
|
||||||
|
const sidebar = docsSidebars[sidebarName];
|
||||||
if (Object.keys(currentRoute).length === 0) {
|
|
||||||
return <NotFound {...props} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Layout version={version} key={isClient}>
|
<Layout version={version} key={isClient}>
|
||||||
<div className={styles.docPage}>
|
<div className={styles.docPage}>
|
||||||
{sidebar && (
|
{sidebar && (
|
||||||
<div className={styles.docSidebarContainer} role="complementary">
|
<div className={styles.docSidebarContainer} role="complementary">
|
||||||
<DocSidebar
|
<DocSidebar
|
||||||
docsSidebars={docsSidebars}
|
|
||||||
path={currentRoute.path}
|
|
||||||
sidebar={sidebar}
|
sidebar={sidebar}
|
||||||
sidebarCollapsible={sidebarCollapsible}
|
path={currentDocRoute.path}
|
||||||
|
sidebarCollapsible={themeConfig.sidebarCollapsible}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
<main className={styles.docMainContainer}>
|
<main className={styles.docMainContainer}>{children}</main>
|
||||||
<MDXProvider components={MDXComponents}>
|
|
||||||
{renderRoutes(baseRoute.routes)}
|
|
||||||
</MDXProvider>
|
|
||||||
</main>
|
|
||||||
</div>
|
</div>
|
||||||
</Layout>
|
</Layout>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function DocPage(props) {
|
||||||
|
const {
|
||||||
|
route: {routes: subroutes},
|
||||||
|
docsMetadata,
|
||||||
|
location,
|
||||||
|
} = props;
|
||||||
|
const currentDocRoute = subroutes.find((subroute) =>
|
||||||
|
matchPath(location.pathname, subroute),
|
||||||
|
);
|
||||||
|
if (!currentDocRoute) {
|
||||||
|
return <NotFound {...props} />;
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
<MDXProvider components={MDXComponents}>
|
||||||
|
<DocPageContent
|
||||||
|
currentDocRoute={currentDocRoute}
|
||||||
|
docsMetadata={docsMetadata}>
|
||||||
|
{renderRoutes(subroutes)}
|
||||||
|
</DocPageContent>
|
||||||
|
</MDXProvider>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
export default DocPage;
|
export default DocPage;
|
||||||
|
|
|
@ -163,7 +163,7 @@ function DocSidebarItem(props) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function DocSidebar(props) {
|
function DocSidebar({path, sidebar, sidebarCollapsible = true}) {
|
||||||
const [showResponsiveSidebar, setShowResponsiveSidebar] = useState(false);
|
const [showResponsiveSidebar, setShowResponsiveSidebar] = useState(false);
|
||||||
const {
|
const {
|
||||||
siteConfig: {
|
siteConfig: {
|
||||||
|
@ -175,13 +175,6 @@ function DocSidebar(props) {
|
||||||
const {isAnnouncementBarClosed} = useUserPreferencesContext();
|
const {isAnnouncementBarClosed} = useUserPreferencesContext();
|
||||||
const {scrollY} = useScrollPosition();
|
const {scrollY} = useScrollPosition();
|
||||||
|
|
||||||
const {
|
|
||||||
docsSidebars,
|
|
||||||
path,
|
|
||||||
sidebar: currentSidebar,
|
|
||||||
sidebarCollapsible,
|
|
||||||
} = props;
|
|
||||||
|
|
||||||
useLockBodyScroll(showResponsiveSidebar);
|
useLockBodyScroll(showResponsiveSidebar);
|
||||||
const windowSize = useWindowSize();
|
const windowSize = useWindowSize();
|
||||||
|
|
||||||
|
@ -191,18 +184,6 @@ function DocSidebar(props) {
|
||||||
}
|
}
|
||||||
}, [windowSize]);
|
}, [windowSize]);
|
||||||
|
|
||||||
if (!currentSidebar) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
const sidebarData = docsSidebars[currentSidebar];
|
|
||||||
|
|
||||||
if (!sidebarData) {
|
|
||||||
throw new Error(
|
|
||||||
`Cannot find the sidebar "${currentSidebar}" in the sidebar config!`,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className={clsx(styles.sidebar, {
|
className={clsx(styles.sidebar, {
|
||||||
|
@ -264,7 +245,7 @@ function DocSidebar(props) {
|
||||||
)}
|
)}
|
||||||
</button>
|
</button>
|
||||||
<ul className="menu__list">
|
<ul className="menu__list">
|
||||||
{sidebarData.map((item) => (
|
{sidebar.map((item) => (
|
||||||
<DocSidebarItem
|
<DocSidebarItem
|
||||||
key={item.label}
|
key={item.label}
|
||||||
item={item}
|
item={item}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue