diff --git a/packages/docusaurus-plugin-content-docs/src/theme/hooks/useVersioning.ts b/packages/docusaurus-plugin-content-docs/src/theme/hooks/useVersioning.ts deleted file mode 100644 index afc278336c..0000000000 --- a/packages/docusaurus-plugin-content-docs/src/theme/hooks/useVersioning.ts +++ /dev/null @@ -1,30 +0,0 @@ -/** - * 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. - */ - -let versions: string[]; - -try { - // eslint-disable-next-line global-require - versions = require('@site/versions.json'); -} catch { - versions = []; -} - -// TODO deprecate in favor of useDocs.ts instead -function useVersioning(): { - versioningEnabled: boolean; - versions: string[]; - latestVersion: string; -} { - return { - versioningEnabled: versions.length > 0, - versions, - latestVersion: versions[0], - }; -} - -export default useVersioning; diff --git a/packages/docusaurus-theme-search-algolia/src/theme/SearchPage/index.js b/packages/docusaurus-theme-search-algolia/src/theme/SearchPage/index.js index aca8ef5d51..841167a457 100644 --- a/packages/docusaurus-theme-search-algolia/src/theme/SearchPage/index.js +++ b/packages/docusaurus-theme-search-algolia/src/theme/SearchPage/index.js @@ -16,7 +16,7 @@ import clsx from 'clsx'; import Head from '@docusaurus/Head'; import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; -import useVersioning from '@theme/hooks/useVersioning'; +import {useAllDocsData} from '@theme/hooks/useDocs'; import useSearchQuery from '@theme/hooks/useSearchQuery'; import Link from '@docusaurus/Link'; import Layout from '@theme/Layout'; @@ -27,15 +27,85 @@ function pluralize(count, word) { return count > 1 ? `${word}s` : word; } +function useDocsSearchVersionsHelpers() { + const allDocsData = useAllDocsData(); + + // State of the version select menus / algolia facet filters + // docsPluginId -> versionName map + const [searchVersions, setSearchVersions] = useState(() => { + return Object.entries(allDocsData).reduce((acc, [pluginId, pluginData]) => { + return {...acc, [pluginId]: pluginData.versions[0].name}; + }, {}); + }); + + // Set the value of a single select menu + const setSearchVersion = (pluginId, searchVersion) => + setSearchVersions((s) => ({...s, [pluginId]: searchVersion})); + + const versioningEnabled = Object.values(allDocsData).some( + (docsData) => docsData.versions.length > 1, + ); + + return { + allDocsData, + versioningEnabled, + searchVersions, + setSearchVersion, + }; +} + +// We want to display one select per versioned docs plugin instance +const SearchVersionSelectList = ({docsSearchVersionsHelpers}) => { + const versionedPluginEntries = Object.entries( + docsSearchVersionsHelpers.allDocsData, + ) + // Do not show a version select for unversioned docs plugin instances + .filter(([, docsData]) => docsData.versions.length > 1); + + return ( +