mirror of
https://github.com/facebook/docusaurus.git
synced 2025-12-31 15:42:48 +00:00
* feat(v2): mobile TOC * Bug fixes and various improvements * Redesign * extract TOCCollapsible component * TS improvements * Assign sidebar name directly to the doc route => no need for either permalinkToSidebar or GlobalData * revert changes to useWindowSize, fix FOUC issues * extract DocSidebarDesktop component * remove now useless menu infima classes * TOCHeadings => rename + remove unused onClick prop * Extract DocSidebarItem * minor renaming * replace GlobalData usage by a React teleport system to render in the navbar mobile sidebar menu directly from the DocPage component * useWindowSize => simulate SSR size in dev to make FOUC issues more obvious * fix remaining sidebar layout shift * update docs snapshots * remove unused code translations * remove unused code translations * fix minor update-code-translations bug * Add more build-size paths to watch * Restyle back button * Add missing`menu` class * extract useShallowMemoizedObject * fix routes tests + better routes formatting * use Translate api for labels * use Translate api for labels * Update translations * Improve dark mode support for back button * Merge branch 'master' into lex111/inline-color-code # Conflicts: # packages/core/dist/css/default-dark/default-dark-rtl.min.css # packages/core/dist/css/default-dark/default-dark.min.css # packages/core/dist/css/default/default-rtl.min.css # packages/core/dist/css/default/default.min.css * replace useCollapse by new useCollapsible * Cleanup and use clean-btn for TOCCollapsible button * Make TOC links clickable over full width * Cleanup * fix uncollapsible sidebar that can be collapsed + create <Collapsible> component * dependency array typo * rollback sidebars community commit typo Co-authored-by: slorber <lorber.sebastien@gmail.com>
82 lines
2.1 KiB
TypeScript
82 lines
2.1 KiB
TypeScript
/**
|
|
* 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 {
|
|
LoadedVersion,
|
|
SidebarItemDoc,
|
|
SidebarItemLink,
|
|
SidebarItem,
|
|
} from './types';
|
|
import {
|
|
PropSidebars,
|
|
PropVersionMetadata,
|
|
PropSidebarItem,
|
|
} from '@docusaurus/plugin-content-docs-types';
|
|
import {keyBy, mapValues} from 'lodash';
|
|
|
|
export function toSidebarsProp(loadedVersion: LoadedVersion): PropSidebars {
|
|
const docsById = keyBy(loadedVersion.docs, (doc) => doc.id);
|
|
|
|
const convertDocLink = (item: SidebarItemDoc): SidebarItemLink => {
|
|
const docId = item.id;
|
|
const docMetadata = docsById[docId];
|
|
|
|
if (!docMetadata) {
|
|
throw new Error(
|
|
`Invalid sidebars file. The document with id "${docId}" was used in the sidebar, but no document with this id could be found.
|
|
Available document ids are:
|
|
- ${Object.keys(docsById).sort().join('\n- ')}`,
|
|
);
|
|
}
|
|
|
|
const {
|
|
title,
|
|
permalink,
|
|
frontMatter: {sidebar_label: sidebarLabel},
|
|
} = docMetadata;
|
|
|
|
return {
|
|
type: 'link',
|
|
label: sidebarLabel || item.label || title,
|
|
href: permalink,
|
|
customProps: item.customProps,
|
|
};
|
|
};
|
|
|
|
const normalizeItem = (item: SidebarItem): PropSidebarItem => {
|
|
switch (item.type) {
|
|
case 'category':
|
|
return {...item, items: item.items.map(normalizeItem)};
|
|
case 'ref':
|
|
case 'doc':
|
|
return convertDocLink(item);
|
|
case 'link':
|
|
default:
|
|
return item;
|
|
}
|
|
};
|
|
|
|
// Transform the sidebar so that all sidebar item will be in the
|
|
// form of 'link' or 'category' only.
|
|
// This is what will be passed as props to the UI component.
|
|
return mapValues(loadedVersion.sidebars, (items) => items.map(normalizeItem));
|
|
}
|
|
|
|
export function toVersionMetadataProp(
|
|
pluginId: string,
|
|
loadedVersion: LoadedVersion,
|
|
): PropVersionMetadata {
|
|
return {
|
|
pluginId,
|
|
version: loadedVersion.versionName,
|
|
label: loadedVersion.versionLabel,
|
|
banner: loadedVersion.versionBanner,
|
|
isLast: loadedVersion.isLast,
|
|
docsSidebars: toSidebarsProp(loadedVersion),
|
|
};
|
|
}
|