mirror of
https://github.com/facebook/docusaurus.git
synced 2025-06-02 19:03:38 +02:00
* safe refactorings * safe refactors * add code to read versions more generically * refactor docs plugin * refactors * stable docs refactor * progress on refactor * stable docs refactor * stable docs refactor * stable docs refactor * attempt to fix admonition :( * configureWebpack docs: better typing * more refactors * rename cli * refactor docs metadata processing => move to pure function * stable docs refactor * stable docs refactor * named exports * basic sidebars refactor * add getElementsAround utils * refactor sidebar + ordering/navigation logic * stable retrocompatible refactor * add proper versions metadata tests * fix docs metadata tests * fix docs tests * fix test due to absolute path * fix webpack tests * refactor linkify + add broken markdown links warning * fix DOM warning due to forwarding legacy prop to div element * add todo
60 lines
1.6 KiB
TypeScript
60 lines
1.6 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 React from 'react';
|
|
import DefaultNavbarItem from './DefaultNavbarItem';
|
|
import {
|
|
useVersions,
|
|
useLatestVersion,
|
|
useActiveDocContext,
|
|
} from '@theme/hooks/useDocs';
|
|
|
|
const getVersionMainDoc = (version) =>
|
|
version.docs.find((doc) => doc.id === version.mainDocId);
|
|
|
|
export default function DocsVersionDropdownNavbarItem({
|
|
mobile,
|
|
docsPluginId,
|
|
nextVersionLabel: _unused, // TODO legacy, remove asap
|
|
...props
|
|
}) {
|
|
const activeDocContext = useActiveDocContext(docsPluginId);
|
|
const versions = useVersions(docsPluginId);
|
|
const latestVersion = useLatestVersion(docsPluginId);
|
|
|
|
const items = versions.map((version) => {
|
|
// We try to link to the same doc, in another version
|
|
// When not possible, fallback to the "main doc" of the version
|
|
const versionDoc =
|
|
activeDocContext?.alternateDocVersions[version.name] ||
|
|
getVersionMainDoc(version);
|
|
return {
|
|
isNavLink: true,
|
|
label: version.label,
|
|
to: versionDoc.path,
|
|
isActive: () => version === activeDocContext?.activeVersion,
|
|
};
|
|
});
|
|
|
|
const dropdownVersion = activeDocContext.activeVersion ?? latestVersion;
|
|
|
|
// Mobile is handled a bit differently
|
|
const dropdownLabel = mobile ? 'Versions' : dropdownVersion.label;
|
|
const dropdownTo = mobile
|
|
? undefined
|
|
: getVersionMainDoc(dropdownVersion).path;
|
|
|
|
return (
|
|
<DefaultNavbarItem
|
|
{...props}
|
|
mobile={mobile}
|
|
label={dropdownLabel}
|
|
to={dropdownTo}
|
|
items={items}
|
|
/>
|
|
);
|
|
}
|