Skip to content

Commit a3b467c

Browse files
Fix x-codeSamples load when switching language tabs (#707)
* fix x-codeSamples load when switch language tabs * remove irrelevant changes * set code sample text on initial state load * add missing eol
1 parent 71012fa commit a3b467c

File tree

3 files changed

+37
-19
lines changed

3 files changed

+37
-19
lines changed

packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/CodeSnippets/index.tsx

+13-13
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ import { useTypedSelector } from "@theme/ApiItem/hooks";
1717
import merge from "lodash/merge";
1818

1919
import { CodeSample, Language } from "./code-snippets-types";
20-
import { mergeCodeSampleLanguage } from "./languages";
20+
import {
21+
getCodeSampleSourceFromLanguage,
22+
mergeCodeSampleLanguage,
23+
} from "./languages";
2124

2225
export const languageSet: Language[] = [
2326
{
@@ -198,20 +201,13 @@ function CodeSnippets({ postman, codeSamples }: Props) {
198201
return defaultLang[0] ?? mergedLangs[0];
199202
});
200203
const [codeText, setCodeText] = useState<string>("");
201-
const [codeSampleCodeText, setCodeSampleCodeText] = useState<string>("");
204+
const [codeSampleCodeText, setCodeSampleCodeText] = useState<
205+
string | (() => string)
206+
>(() => getCodeSampleSourceFromLanguage(language));
202207

203208
useEffect(() => {
204-
// initial active language is custom code sample
205-
if (
206-
language &&
207-
language.sample &&
208-
language.samples &&
209-
language.samplesSources
210-
) {
211-
const sampleIndex = language.samples.findIndex(
212-
(smp) => smp === language.sample
213-
);
214-
setCodeSampleCodeText(language.samplesSources[sampleIndex]);
209+
if (language && !!language.sample) {
210+
setCodeSampleCodeText(getCodeSampleSourceFromLanguage(language));
215211
}
216212

217213
if (language && !!language.options) {
@@ -344,7 +340,9 @@ function CodeSnippets({ postman, codeSamples }: Props) {
344340
action={{
345341
setLanguage: setLanguage,
346342
setSelectedVariant: setSelectedVariant,
343+
setSelectedSample: setSelectedSample,
347344
}}
345+
languageSet={mergedLangs}
348346
lazy
349347
>
350348
{mergedLangs.map((lang) => {
@@ -367,6 +365,7 @@ function CodeSnippets({ postman, codeSamples }: Props) {
367365
includeSample={true}
368366
currentLanguage={lang.language}
369367
defaultValue={selectedSample}
368+
languageSet={mergedLangs}
370369
lazy
371370
>
372371
{lang.samples.map((sample, index) => {
@@ -406,6 +405,7 @@ function CodeSnippets({ postman, codeSamples }: Props) {
406405
includeVariant={true}
407406
currentLanguage={lang.language}
408407
defaultValue={selectedVariant}
408+
languageSet={mergedLangs}
409409
lazy
410410
>
411411
{lang.variants.map((variant, index) => {

packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/CodeSnippets/languages.ts

+16
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,19 @@ export function mergeCodeSampleLanguage(
3535
return language;
3636
});
3737
}
38+
39+
export function getCodeSampleSourceFromLanguage(language: Language) {
40+
if (
41+
language &&
42+
language.sample &&
43+
language.samples &&
44+
language.samplesSources
45+
) {
46+
const sampleIndex = language.samples.findIndex(
47+
(smp) => smp === language.sample
48+
);
49+
return language.samplesSources[sampleIndex];
50+
}
51+
52+
return "";
53+
}

packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/CodeTabs/index.js

+8-6
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ import {
1212
useTabs,
1313
} from "@docusaurus/theme-common/internal";
1414
import useIsBrowser from "@docusaurus/useIsBrowser";
15-
import { languageSet } from "@theme/ApiExplorer/CodeSnippets";
1615
import clsx from "clsx";
1716

1817
function TabList({
1918
action,
2019
currentLanguage,
20+
languageSet,
2121
includeVariant,
2222
includeSample,
2323
className,
@@ -48,16 +48,18 @@ function TabList({
4848
)[0];
4949
newLanguage.variant = newTabValue;
5050
action.setSelectedVariant(newTabValue.toLowerCase());
51+
} else if (currentLanguage && includeSample) {
52+
newLanguage = languageSet.filter(
53+
(lang) => lang.language === currentLanguage
54+
)[0];
55+
newLanguage.sample = newTabValue;
56+
action.setSelectedSample(newTabValue);
5157
} else {
5258
newLanguage = languageSet.filter(
5359
(lang) => lang.language === newTabValue
5460
)[0];
5561
action.setSelectedVariant(newLanguage.variant.toLowerCase());
56-
}
57-
58-
if (currentLanguage && includeSample) {
59-
newLanguage.sample = newTabValue;
60-
action.setSelectedSample(newTabValue.toLowerCase());
62+
action.setSelectedSample(newLanguage.sample);
6163
}
6264

6365
action.setLanguage(newLanguage);

0 commit comments

Comments
 (0)