docusaurus-theme-openapi-docs 0.0.0-1258 → 0.0.0-1268
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -69,6 +69,7 @@ var __importDefault =
|
|
|
69
69
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
70
70
|
exports.languageSet = void 0;
|
|
71
71
|
const react_1 = __importStar(require("react"));
|
|
72
|
+
const theme_common_1 = require("@docusaurus/theme-common");
|
|
72
73
|
const useDocusaurusContext_1 = __importDefault(
|
|
73
74
|
require("@docusaurus/useDocusaurusContext")
|
|
74
75
|
);
|
|
@@ -94,6 +95,17 @@ function CodeTab({ children, hidden, className }) {
|
|
|
94
95
|
children
|
|
95
96
|
);
|
|
96
97
|
}
|
|
98
|
+
/** Align with Docusaurus `<Tabs groupId="code-samples">` persisted tab value. */
|
|
99
|
+
function resolveOuterLanguageFromPersistedTab(persistedTab, langs) {
|
|
100
|
+
if (langs.length === 1) {
|
|
101
|
+
return langs[0];
|
|
102
|
+
}
|
|
103
|
+
const matched = langs.find((lang) => lang.language === persistedTab);
|
|
104
|
+
if (matched) {
|
|
105
|
+
return matched;
|
|
106
|
+
}
|
|
107
|
+
return langs[0];
|
|
108
|
+
}
|
|
97
109
|
function CodeSnippets({
|
|
98
110
|
postman,
|
|
99
111
|
codeSamples,
|
|
@@ -170,35 +182,44 @@ function CodeSnippets({
|
|
|
170
182
|
// Can override languageSet, change order of langs, override options and variants
|
|
171
183
|
const userDefinedLanguageSet =
|
|
172
184
|
siteConfig?.themeConfig?.languageTabs ?? exports.languageSet;
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
185
|
+
const mergedLangs = (0, react_1.useMemo)(() => {
|
|
186
|
+
const filteredLanguageSet = exports.languageSet.filter((ls) => {
|
|
187
|
+
return userDefinedLanguageSet?.some((lang) => {
|
|
188
|
+
return lang.language === ls.language;
|
|
189
|
+
});
|
|
177
190
|
});
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
)
|
|
185
|
-
|
|
191
|
+
return (0, languages_1.mergeCodeSampleLanguage)(
|
|
192
|
+
(0, languages_1.mergeArraysbyLanguage)(
|
|
193
|
+
userDefinedLanguageSet,
|
|
194
|
+
filteredLanguageSet
|
|
195
|
+
),
|
|
196
|
+
codeSamples
|
|
197
|
+
);
|
|
198
|
+
}, [userDefinedLanguageSet, codeSamples]);
|
|
199
|
+
const [persistedOuterTab] = (0, theme_common_1.useStorageSlot)(
|
|
200
|
+
"docusaurus.tab.code-samples"
|
|
186
201
|
);
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
lang.language === localStorage.getItem("docusaurus.tab.code-samples")
|
|
202
|
+
const initialOuterLanguage = (0, react_1.useMemo)(
|
|
203
|
+
() => resolveOuterLanguageFromPersistedTab(persistedOuterTab, mergedLangs),
|
|
204
|
+
[persistedOuterTab, mergedLangs]
|
|
191
205
|
);
|
|
192
206
|
const [selectedVariant, setSelectedVariant] = (0, react_1.useState)();
|
|
193
207
|
const [selectedSample, setSelectedSample] = (0, react_1.useState)();
|
|
194
|
-
const [language, setLanguage] = (0, react_1.useState)(() =>
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
208
|
+
const [language, setLanguage] = (0, react_1.useState)(() =>
|
|
209
|
+
resolveOuterLanguageFromPersistedTab(persistedOuterTab, mergedLangs)
|
|
210
|
+
);
|
|
211
|
+
(0, react_1.useEffect)(() => {
|
|
212
|
+
const next = resolveOuterLanguageFromPersistedTab(
|
|
213
|
+
persistedOuterTab,
|
|
214
|
+
mergedLangs
|
|
215
|
+
);
|
|
216
|
+
setLanguage((prev) => {
|
|
217
|
+
if (prev?.language !== next.language) {
|
|
218
|
+
return next;
|
|
219
|
+
}
|
|
220
|
+
return mergedLangs.find((l) => l.language === next.language) ?? next;
|
|
221
|
+
});
|
|
222
|
+
}, [persistedOuterTab, mergedLangs]);
|
|
202
223
|
const [codeText, setCodeText] = (0, react_1.useState)("");
|
|
203
224
|
const [codeSampleCodeText, setCodeSampleCodeText] = (0, react_1.useState)(
|
|
204
225
|
() => (0, languages_1.getCodeSampleSourceFromLanguage)(language)
|
|
@@ -315,7 +336,7 @@ function CodeSnippets({
|
|
|
315
336
|
setSelectedSample: setSelectedSample,
|
|
316
337
|
},
|
|
317
338
|
languageSet: mergedLangs,
|
|
318
|
-
defaultValue:
|
|
339
|
+
defaultValue: initialOuterLanguage.language,
|
|
319
340
|
lazy: true,
|
|
320
341
|
},
|
|
321
342
|
mergedLangs.map((lang) => {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "docusaurus-theme-openapi-docs",
|
|
3
3
|
"description": "OpenAPI theme for Docusaurus.",
|
|
4
|
-
"version": "0.0.0-
|
|
4
|
+
"version": "0.0.0-1268",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"openapi",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"@types/postman-collection": "^3.5.11",
|
|
39
39
|
"@types/react-modal": "^3.16.3",
|
|
40
40
|
"concurrently": "^9.2.0",
|
|
41
|
-
"docusaurus-plugin-openapi-docs": "0.0.0-
|
|
41
|
+
"docusaurus-plugin-openapi-docs": "0.0.0-1268",
|
|
42
42
|
"docusaurus-plugin-sass": "^0.2.6",
|
|
43
43
|
"eslint-plugin-prettier": "^5.5.1"
|
|
44
44
|
},
|
|
@@ -82,5 +82,5 @@
|
|
|
82
82
|
"engines": {
|
|
83
83
|
"node": ">=14"
|
|
84
84
|
},
|
|
85
|
-
"gitHead": "
|
|
85
|
+
"gitHead": "27848b60d7a6efd00d8a202a554b81152e24408e"
|
|
86
86
|
}
|
|
@@ -5,20 +5,20 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
* ========================================================================== */
|
|
7
7
|
|
|
8
|
-
import React, {
|
|
8
|
+
import React, { useEffect, useMemo, useState } from "react";
|
|
9
9
|
|
|
10
|
+
import { useStorageSlot } from "@docusaurus/theme-common";
|
|
10
11
|
import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
|
|
11
12
|
import ApiCodeBlock from "@theme/ApiExplorer/ApiCodeBlock";
|
|
12
13
|
import buildPostmanRequest from "@theme/ApiExplorer/buildPostmanRequest";
|
|
13
14
|
import CodeTabs from "@theme/ApiExplorer/CodeTabs";
|
|
14
15
|
import { useResolvedEncoding } from "@theme/ApiExplorer/EncodingSelection/useResolvedEncoding";
|
|
15
16
|
import { useTypedSelector } from "@theme/ApiItem/hooks";
|
|
17
|
+
import type { ThemeConfig } from "docusaurus-theme-openapi-docs/src/types";
|
|
16
18
|
import cloneDeep from "lodash/cloneDeep";
|
|
17
19
|
import codegen from "postman-code-generators";
|
|
18
20
|
import * as sdk from "postman-collection";
|
|
19
21
|
|
|
20
|
-
import type { ThemeConfig } from "docusaurus-theme-openapi-docs/src/types";
|
|
21
|
-
|
|
22
22
|
import { CodeSample, Language } from "./code-snippets-types";
|
|
23
23
|
import {
|
|
24
24
|
getCodeSampleSourceFromLanguage,
|
|
@@ -44,6 +44,21 @@ function CodeTab({ children, hidden, className }: any): React.JSX.Element {
|
|
|
44
44
|
);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
/** Align with Docusaurus `<Tabs groupId="code-samples">` persisted tab value. */
|
|
48
|
+
function resolveOuterLanguageFromPersistedTab(
|
|
49
|
+
persistedTab: string | null,
|
|
50
|
+
langs: Language[]
|
|
51
|
+
): Language {
|
|
52
|
+
if (langs.length === 1) {
|
|
53
|
+
return langs[0];
|
|
54
|
+
}
|
|
55
|
+
const matched = langs.find((lang) => lang.language === persistedTab);
|
|
56
|
+
if (matched) {
|
|
57
|
+
return matched;
|
|
58
|
+
}
|
|
59
|
+
return langs[0];
|
|
60
|
+
}
|
|
61
|
+
|
|
47
62
|
function CodeSnippets({
|
|
48
63
|
postman,
|
|
49
64
|
codeSamples,
|
|
@@ -126,34 +141,43 @@ function CodeSnippets({
|
|
|
126
141
|
(siteConfig?.themeConfig?.languageTabs as Language[] | undefined) ??
|
|
127
142
|
languageSet;
|
|
128
143
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
144
|
+
const mergedLangs = useMemo(() => {
|
|
145
|
+
const filteredLanguageSet = languageSet.filter((ls) => {
|
|
146
|
+
return userDefinedLanguageSet?.some((lang) => {
|
|
147
|
+
return lang.language === ls.language;
|
|
148
|
+
});
|
|
133
149
|
});
|
|
134
|
-
|
|
150
|
+
return mergeCodeSampleLanguage(
|
|
151
|
+
mergeArraysbyLanguage(userDefinedLanguageSet, filteredLanguageSet),
|
|
152
|
+
codeSamples
|
|
153
|
+
);
|
|
154
|
+
}, [userDefinedLanguageSet, codeSamples]);
|
|
135
155
|
|
|
136
|
-
|
|
137
|
-
const mergedLangs = mergeCodeSampleLanguage(
|
|
138
|
-
mergeArraysbyLanguage(userDefinedLanguageSet, filteredLanguageSet),
|
|
139
|
-
codeSamples
|
|
140
|
-
);
|
|
156
|
+
const [persistedOuterTab] = useStorageSlot("docusaurus.tab.code-samples");
|
|
141
157
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
lang.language === localStorage.getItem("docusaurus.tab.code-samples")
|
|
158
|
+
const initialOuterLanguage = useMemo(
|
|
159
|
+
() => resolveOuterLanguageFromPersistedTab(persistedOuterTab, mergedLangs),
|
|
160
|
+
[persistedOuterTab, mergedLangs]
|
|
146
161
|
);
|
|
162
|
+
|
|
147
163
|
const [selectedVariant, setSelectedVariant] = useState<string | undefined>();
|
|
148
164
|
const [selectedSample, setSelectedSample] = useState<string | undefined>();
|
|
149
|
-
const [language, setLanguage] = useState(() =>
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
165
|
+
const [language, setLanguage] = useState(() =>
|
|
166
|
+
resolveOuterLanguageFromPersistedTab(persistedOuterTab, mergedLangs)
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
useEffect(() => {
|
|
170
|
+
const next = resolveOuterLanguageFromPersistedTab(
|
|
171
|
+
persistedOuterTab,
|
|
172
|
+
mergedLangs
|
|
173
|
+
);
|
|
174
|
+
setLanguage((prev) => {
|
|
175
|
+
if (prev?.language !== next.language) {
|
|
176
|
+
return next;
|
|
177
|
+
}
|
|
178
|
+
return mergedLangs.find((l) => l.language === next.language) ?? next;
|
|
179
|
+
});
|
|
180
|
+
}, [persistedOuterTab, mergedLangs]);
|
|
157
181
|
const [codeText, setCodeText] = useState<string>("");
|
|
158
182
|
const [codeSampleCodeText, setCodeSampleCodeText] = useState<string>(() =>
|
|
159
183
|
getCodeSampleSourceFromLanguage(language)
|
|
@@ -273,7 +297,7 @@ function CodeSnippets({
|
|
|
273
297
|
setSelectedSample: setSelectedSample,
|
|
274
298
|
}}
|
|
275
299
|
languageSet={mergedLangs}
|
|
276
|
-
defaultValue={
|
|
300
|
+
defaultValue={initialOuterLanguage.language}
|
|
277
301
|
lazy
|
|
278
302
|
>
|
|
279
303
|
{mergedLangs.map((lang) => {
|