Skip to content

Commit 9fa5b05

Browse files
set code sample text on initial state load
1 parent a06cbab commit 9fa5b05

File tree

2 files changed

+35
-23
lines changed

2 files changed

+35
-23
lines changed

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

+16-20
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
{
@@ -179,13 +182,13 @@ function CodeSnippets({ postman, codeSamples }: Props) {
179182
// Merge user-defined langs into languageSet
180183
const mergedLangs = mergeCodeSampleLanguage(
181184
merge(filteredLanguageSet, langs),
182-
codeSamples
185+
codeSamples,
183186
);
184187

185188
// Read defaultLang from localStorage
186189
const defaultLang: Language[] = mergedLangs.filter(
187190
(lang) =>
188-
lang.language === localStorage.getItem("docusaurus.tab.code-samples")
191+
lang.language === localStorage.getItem("docusaurus.tab.code-samples"),
189192
);
190193
const [selectedVariant, setSelectedVariant] = useState<string | undefined>();
191194
const [selectedSample, setSelectedSample] = useState<string | undefined>();
@@ -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) {
@@ -236,11 +232,11 @@ function CodeSnippets({ postman, codeSamples }: Props) {
236232
return;
237233
}
238234
setCodeText(snippet);
239-
}
235+
},
240236
);
241237
} else if (language && !language.options) {
242238
const langSource = mergedLangs.filter(
243-
(lang) => lang.language === language.language
239+
(lang) => lang.language === language.language,
244240
);
245241

246242
// Merges user-defined language with default languageSet
@@ -269,7 +265,7 @@ function CodeSnippets({ postman, codeSamples }: Props) {
269265
return;
270266
}
271267
setCodeText(snippet);
272-
}
268+
},
273269
);
274270
} else {
275271
setCodeText("");
@@ -312,7 +308,7 @@ function CodeSnippets({ postman, codeSamples }: Props) {
312308
return;
313309
}
314310
setCodeText(snippet);
315-
}
311+
},
316312
);
317313
}
318314
});
@@ -327,7 +323,7 @@ function CodeSnippets({ postman, codeSamples }: Props) {
327323
selectedSample !== language.sample
328324
) {
329325
const sampleIndex = language.samples.findIndex(
330-
(smp) => smp === selectedSample
326+
(smp) => smp === selectedSample,
331327
);
332328
setCodeSampleCodeText(language.samplesSources[sampleIndex]);
333329
}

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

+19-3
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,17 @@ import { CodeSample, Language } from "./code-snippets-types";
99

1010
export function mergeCodeSampleLanguage(
1111
languages: Language[],
12-
codeSamples: CodeSample[]
12+
codeSamples: CodeSample[],
1313
): Language[] {
1414
return languages.map((language) => {
1515
const languageCodeSamples = codeSamples.filter(
16-
({ lang }) => lang === language.codeSampleLanguage
16+
({ lang }) => lang === language.codeSampleLanguage,
1717
);
1818

1919
if (languageCodeSamples.length) {
2020
const samples = languageCodeSamples.map(({ lang }) => lang);
2121
const samplesLabels = languageCodeSamples.map(
22-
({ label, lang }) => label || lang
22+
({ label, lang }) => label || lang,
2323
);
2424
const samplesSources = languageCodeSamples.map(({ source }) => source);
2525

@@ -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+
}

0 commit comments

Comments
 (0)