mirror of
https://github.com/Snigdha-OS/documentation.git
synced 2025-09-09 19:44:56 +02:00
68 lines
2.6 KiB
JavaScript
68 lines
2.6 KiB
JavaScript
/**
|
|
* 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 { useLocation } from '@docusaurus/router';
|
|
import { useAllPluginInstancesData, usePluginData, } from '@docusaurus/useGlobalData';
|
|
import { getActivePlugin, getLatestVersion, getActiveVersion, getActiveDocContext, getDocVersionSuggestions, } from './docsClientUtils';
|
|
// Important to use a constant object to avoid React useEffect executions etc.
|
|
// see https://github.com/facebook/docusaurus/issues/5089
|
|
const StableEmptyObject = {};
|
|
// In blog-only mode, docs hooks are still used by the theme. We need a fail-
|
|
// safe fallback when the docs plugin is not in use
|
|
export const useAllDocsData = () => useAllPluginInstancesData('docusaurus-plugin-content-docs') ?? StableEmptyObject;
|
|
export const useDocsData = (pluginId) => usePluginData('docusaurus-plugin-content-docs', pluginId, {
|
|
failfast: true,
|
|
});
|
|
// TODO this feature should be provided by docusaurus core
|
|
export function useActivePlugin(options = {}) {
|
|
const data = useAllDocsData();
|
|
const { pathname } = useLocation();
|
|
return getActivePlugin(data, pathname, options);
|
|
}
|
|
export function useActivePluginAndVersion(options = {}) {
|
|
const activePlugin = useActivePlugin(options);
|
|
const { pathname } = useLocation();
|
|
if (!activePlugin) {
|
|
return undefined;
|
|
}
|
|
const activeVersion = getActiveVersion(activePlugin.pluginData, pathname);
|
|
return {
|
|
activePlugin,
|
|
activeVersion,
|
|
};
|
|
}
|
|
/** Versions are returned ordered (most recent first). */
|
|
export function useVersions(pluginId) {
|
|
const data = useDocsData(pluginId);
|
|
return data.versions;
|
|
}
|
|
export function useLatestVersion(pluginId) {
|
|
const data = useDocsData(pluginId);
|
|
return getLatestVersion(data);
|
|
}
|
|
/**
|
|
* Returns `undefined` on doc-unrelated pages, because there's no version
|
|
* currently considered as active.
|
|
*/
|
|
export function useActiveVersion(pluginId) {
|
|
const data = useDocsData(pluginId);
|
|
const { pathname } = useLocation();
|
|
return getActiveVersion(data, pathname);
|
|
}
|
|
export function useActiveDocContext(pluginId) {
|
|
const data = useDocsData(pluginId);
|
|
const { pathname } = useLocation();
|
|
return getActiveDocContext(data, pathname);
|
|
}
|
|
/**
|
|
* Useful to say "hey, you are not on the latest docs version, please switch"
|
|
*/
|
|
export function useDocVersionSuggestions(pluginId) {
|
|
const data = useDocsData(pluginId);
|
|
const { pathname } = useLocation();
|
|
return getDocVersionSuggestions(data, pathname);
|
|
}
|