|
1 | 1 | import { useMemo, useEffect } from 'react';
|
2 | 2 | import useBaseUrl from '@docusaurus/useBaseUrl';
|
3 | 3 | import useIsBrowser from '@docusaurus/useIsBrowser';
|
4 |
| -import { usePluginData } from '@docusaurus/useGlobalData'; |
5 | 4 | import { useColorMode } from '@docusaurus/theme-common';
|
6 |
| -import merge from 'lodash/merge'; |
7 | 5 | import '../global';
|
8 | 6 | import { AppStore, RedocRawOptions } from 'redoc';
|
9 | 7 | import { SpecProps } from '../types/common';
|
10 |
| -import { GlobalData } from '../types/options'; |
| 8 | +import { useSpecOptions } from './useSpecOptions'; |
11 | 9 |
|
12 | 10 | // the current store singleton in the app's instance
|
13 | 11 | let currentStore: AppStore | null = null;
|
14 | 12 |
|
15 | 13 | /**
|
16 | 14 | * Redocusaurus
|
17 |
| - * https://rohit-gohri.github.io/redocusaurus/ |
18 |
| - * (c) 2022 Rohit Gohri |
| 15 | + * https://redocusaurus.vercel.app/ |
| 16 | + * (c) 2023 Rohit Gohri |
19 | 17 | * Released under the MIT License
|
20 | 18 | */
|
21 | 19 | export function useSpec(
|
22 | 20 | { spec, url, themeId }: SpecProps,
|
23 | 21 | optionsOverrides?: RedocRawOptions,
|
24 | 22 | ) {
|
| 23 | + const specOptions = useSpecOptions(themeId, optionsOverrides); |
25 | 24 | const fullUrl = useBaseUrl(url, { absolute: true });
|
26 | 25 | const isBrowser = useIsBrowser();
|
27 | 26 | const isDarkTheme = useColorMode().colorMode === 'dark';
|
28 |
| - const themeOptions = usePluginData( |
29 |
| - 'docusaurus-theme-redoc', |
30 |
| - themeId, |
31 |
| - ) as GlobalData; |
32 | 27 |
|
33 | 28 | const result = useMemo(() => {
|
34 |
| - const { lightTheme, darkTheme, options: redocOptions } = themeOptions; |
35 |
| - |
36 |
| - const commonOptions: Partial<RedocRawOptions> = { |
37 |
| - // Disable offset when server rendering and set to selector |
38 |
| - scrollYOffset: |
39 |
| - !isBrowser && typeof redocOptions.scrollYOffset === 'string' |
40 |
| - ? 0 |
41 |
| - : redocOptions.scrollYOffset, |
42 |
| - }; |
43 |
| - |
44 |
| - const lightThemeOptions: RedocRawOptions = merge( |
45 |
| - { |
46 |
| - ...redocOptions, |
47 |
| - ...commonOptions, |
48 |
| - theme: lightTheme, |
49 |
| - }, |
50 |
| - optionsOverrides, |
51 |
| - ); |
52 |
| - |
53 |
| - const darkThemeOptions: RedocRawOptions = merge( |
54 |
| - { |
55 |
| - ...redocOptions, |
56 |
| - ...commonOptions, |
57 |
| - theme: darkTheme, |
58 |
| - }, |
59 |
| - optionsOverrides, |
60 |
| - ); |
61 |
| - |
62 | 29 | if (currentStore !== null && isBrowser) {
|
63 | 30 | currentStore.dispose();
|
64 | 31 | }
|
65 |
| - |
66 |
| - currentStore = new AppStore( |
67 |
| - // eslint-disable-next-line @typescript-eslint/no-explicit-any |
68 |
| - spec as any, |
69 |
| - fullUrl, |
70 |
| - isBrowser && isDarkTheme ? darkThemeOptions : lightThemeOptions, |
71 |
| - ); |
| 32 | + currentStore = new AppStore(spec, fullUrl, specOptions.options); |
72 | 33 |
|
73 | 34 | return {
|
74 |
| - darkThemeOptions, |
75 |
| - lightThemeOptions, |
| 35 | + ...specOptions, |
76 | 36 | // @ts-expect-error extra prop
|
77 | 37 | hasLogo: !!spec.info?.['x-logo'],
|
78 | 38 | store: currentStore,
|
79 | 39 | };
|
80 |
| - }, [isBrowser, spec, fullUrl, isDarkTheme, themeOptions, optionsOverrides]); |
| 40 | + }, [isBrowser, spec, fullUrl, specOptions]); |
81 | 41 |
|
82 | 42 | useEffect(() => {
|
83 | 43 | // to ensure that menu is properly loaded when theme gets changed
|
|
0 commit comments