@chargeover/docusaurus-theme-redoc
Version:
Redoc Component for DocusaurusV2
65 lines • 2.74 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.useSpec = void 0;
const react_1 = require("react");
const useBaseUrl_1 = __importDefault(require("@docusaurus/useBaseUrl"));
const useIsBrowser_1 = __importDefault(require("@docusaurus/useIsBrowser"));
const useGlobalData_1 = require("@docusaurus/useGlobalData");
const theme_common_1 = require("@docusaurus/theme-common");
const merge_1 = __importDefault(require("lodash/merge"));
require("../global");
const redoc_1 = require("@chargeover/redoc");
/**
* Redocusaurus
* https://rohit-gohri.github.io/redocusaurus/
* (c) 2022 Rohit Gohri
* Released under the MIT License
*/
function useSpec({ spec, url, themeId }, optionsOverrides) {
const fullUrl = (0, useBaseUrl_1.default)(url, { absolute: true });
const isBrowser = (0, useIsBrowser_1.default)();
const isDarkTheme = (0, theme_common_1.useColorMode)().colorMode === 'dark';
const themeOptions = (0, useGlobalData_1.usePluginData)('docusaurus-theme-redoc', themeId);
const stores = (0, react_1.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 darkStore = new redoc_1.AppStore(
// eslint-disable-next-line @typescript-eslint/no-explicit-any
spec, fullUrl, (0, merge_1.default)({
...redocOptions,
...commonOptions,
theme: darkTheme,
}, optionsOverrides));
const lightStore = new redoc_1.AppStore(
// eslint-disable-next-line @typescript-eslint/no-explicit-any
spec, fullUrl, (0, merge_1.default)({
...redocOptions,
...commonOptions,
theme: lightTheme,
}, optionsOverrides));
return {
darkStore,
lightStore,
};
}, [isBrowser, spec, fullUrl, themeOptions, optionsOverrides]);
const result = (0, react_1.useMemo)(() => {
var _a;
return {
...stores,
// @ts-expect-error extra prop
hasLogo: !!((_a = spec.info) === null || _a === void 0 ? void 0 : _a['x-logo']),
store: isBrowser && isDarkTheme ? stores.darkStore : stores.lightStore,
};
}, [isBrowser, isDarkTheme, spec, stores]);
return result;
}
exports.useSpec = useSpec;
//# sourceMappingURL=useSpec.js.map