docusaurus-theme-redoc
Version:
Redoc Component for DocusaurusV2
48 lines (47 loc) • 1.81 kB
JavaScript
import { useMemo } from 'react';
import useIsBrowser from '@docusaurus/useIsBrowser';
import { usePluginData, useAllPluginInstancesData, } from '@docusaurus/useGlobalData';
import { useColorMode } from '@docusaurus/theme-common';
import merge from 'lodash/merge';
import '../global';
/**
* Redocusaurus
* https://redocusaurus.vercel.app/
* (c) 2024 Rohit Gohri
* Released under the MIT License
*/
export function useSpecOptions(themeId = 'theme-redoc', optionsOverrides) {
const isBrowser = useIsBrowser();
const isDarkTheme = useColorMode().colorMode === 'dark';
const defaultThemeOptions = useAllPluginInstancesData('docusaurus-theme-redoc', {
failfast: true,
});
const themeOptions = usePluginData('docusaurus-theme-redoc', themeId) ||
Object.values(defaultThemeOptions)[0];
const result = useMemo(() => {
const { lightTheme, darkTheme, options: redocOptions } = themeOptions;
const commonOptions = {
// Disable offset when server rendering and set to selector
scrollYOffset: !isBrowser && typeof redocOptions.scrollYOffset === 'string'
? 0
: redocOptions.scrollYOffset,
};
const lightThemeOptions = merge({
...redocOptions,
...commonOptions,
theme: lightTheme,
}, optionsOverrides);
const darkThemeOptions = merge({
...redocOptions,
...commonOptions,
theme: darkTheme,
}, optionsOverrides);
const options = isBrowser && isDarkTheme ? darkThemeOptions : lightThemeOptions;
return {
options,
darkThemeOptions,
lightThemeOptions,
};
}, [isBrowser, isDarkTheme, themeOptions, optionsOverrides]);
return result;
}