docusaurus-theme-redoc
Version:
Redoc Component for DocusaurusV2
48 lines • 2.01 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.useSpec = useSpec;
const react_1 = require("react");
const useBaseUrl_1 = __importDefault(require("@docusaurus/useBaseUrl"));
const useIsBrowser_1 = __importDefault(require("@docusaurus/useIsBrowser"));
const theme_common_1 = require("@docusaurus/theme-common");
require("../global");
const redoc_1 = require("redoc");
const useSpecOptions_1 = require("./useSpecOptions");
// the current store singleton in the app's instance
let currentStore = null;
/**
* Redocusaurus
* https://redocusaurus.vercel.app/
* (c) 2024 Rohit Gohri
* Released under the MIT License
*/
function useSpec({ spec, url, themeId, normalizeUrl }, optionsOverrides) {
const specOptions = (0, useSpecOptions_1.useSpecOptions)(themeId, optionsOverrides);
const absoluteUrl = (0, useBaseUrl_1.default)(url, { absolute: true });
const fullUrl = normalizeUrl ? absoluteUrl : url;
const isBrowser = (0, useIsBrowser_1.default)();
const isDarkTheme = (0, theme_common_1.useColorMode)().colorMode === 'dark';
const result = (0, react_1.useMemo)(() => {
var _a;
if (currentStore !== null && isBrowser) {
currentStore.dispose();
}
currentStore = new redoc_1.AppStore(spec, fullUrl, specOptions.options);
return {
...specOptions,
// @ts-expect-error extra prop
hasLogo: !!((_a = spec.info) === null || _a === void 0 ? void 0 : _a['x-logo']),
store: currentStore,
};
}, [isBrowser, spec, fullUrl, specOptions]);
(0, react_1.useEffect)(() => {
// to ensure that menu is properly loaded when theme gets changed
// or when first load
result.store.onDidMount();
}, [result, isBrowser, isDarkTheme]);
return result;
}
//# sourceMappingURL=useSpec.js.map