Skip to content

Commit 9367911

Browse files
committed
cleanup ts config
1 parent 45e9834 commit 9367911

File tree

2 files changed

+48
-20
lines changed

2 files changed

+48
-20
lines changed

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

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,27 @@
55
* LICENSE file in the root directory of this source tree.
66
* ========================================================================== */
77

8+
/* ============================================================================
9+
* Copyright (c) Palo Alto Networks
10+
*
11+
* This source code is licensed under the MIT license found in the
12+
* LICENSE file in the root directory of this source tree.
13+
* ========================================================================== */
14+
815
import React, { useState, useEffect } from "react";
916

1017
import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
1118
import ApiCodeBlock from "@theme/ApiExplorer/ApiCodeBlock";
1219
import buildPostmanRequest from "@theme/ApiExplorer/buildPostmanRequest";
1320
import CodeTabs from "@theme/ApiExplorer/CodeTabs";
1421
import { useTypedSelector } from "@theme/ApiItem/hooks";
15-
import merge from "lodash/merge";
1622
import codegen from "postman-code-generators";
1723
import sdk from "postman-collection";
1824

1925
import { CodeSample, Language } from "./code-snippets-types";
2026
import {
2127
getCodeSampleSourceFromLanguage,
28+
mergeArraysbyLanguage,
2229
mergeCodeSampleLanguage,
2330
} from "./languages";
2431

@@ -149,8 +156,6 @@ function CodeTab({ children, hidden, className }: any): JSX.Element {
149156
}
150157

151158
function CodeSnippets({ postman, codeSamples }: Props) {
152-
// TODO: match theme for vscode.
153-
154159
const { siteConfig } = useDocusaurusContext();
155160

156161
const contentType = useTypedSelector((state: any) => state.contentType.value);
@@ -167,28 +172,29 @@ function CodeSnippets({ postman, codeSamples }: Props) {
167172

168173
// User-defined languages array
169174
// Can override languageSet, change order of langs, override options and variants
170-
const langs = [
171-
...((siteConfig?.themeConfig?.languageTabs as Language[] | undefined) ??
172-
languageSet),
173-
];
175+
const userDefinedLanguageSet = siteConfig?.themeConfig?.languageTabs as
176+
| Language[]
177+
| undefined;
174178

175179
// Filter languageSet by user-defined langs
176180
const filteredLanguageSet = languageSet.filter((ls) => {
177-
return langs.some((lang) => {
181+
return userDefinedLanguageSet?.some((lang) => {
178182
return lang.language === ls.language;
179183
});
180184
});
181185

182186
// Merge user-defined langs into languageSet
183187
const mergedLangs = mergeCodeSampleLanguage(
184-
merge(filteredLanguageSet, langs),
185-
codeSamples
188+
mergeArraysbyLanguage(userDefinedLanguageSet, filteredLanguageSet),
189+
codeSamples,
186190
);
187191

192+
console.log("merged", mergedLangs);
193+
188194
// Read defaultLang from localStorage
189195
const defaultLang: Language[] = mergedLangs.filter(
190196
(lang) =>
191-
lang.language === localStorage.getItem("docusaurus.tab.code-samples")
197+
lang.language === localStorage.getItem("docusaurus.tab.code-samples"),
192198
);
193199
const [selectedVariant, setSelectedVariant] = useState<string | undefined>();
194200
const [selectedSample, setSelectedSample] = useState<string | undefined>();
@@ -232,11 +238,11 @@ function CodeSnippets({ postman, codeSamples }: Props) {
232238
return;
233239
}
234240
setCodeText(snippet);
235-
}
241+
},
236242
);
237243
} else if (language && !language.options) {
238244
const langSource = mergedLangs.filter(
239-
(lang) => lang.language === language.language
245+
(lang) => lang.language === language.language,
240246
);
241247

242248
// Merges user-defined language with default languageSet
@@ -265,7 +271,7 @@ function CodeSnippets({ postman, codeSamples }: Props) {
265271
return;
266272
}
267273
setCodeText(snippet);
268-
}
274+
},
269275
);
270276
} else {
271277
setCodeText("");
@@ -308,7 +314,7 @@ function CodeSnippets({ postman, codeSamples }: Props) {
308314
return;
309315
}
310316
setCodeText(snippet);
311-
}
317+
},
312318
);
313319
}
314320
});
@@ -323,7 +329,7 @@ function CodeSnippets({ postman, codeSamples }: Props) {
323329
selectedSample !== language.sample
324330
) {
325331
const sampleIndex = language.samples.findIndex(
326-
(smp) => smp === selectedSample
332+
(smp) => smp === selectedSample,
327333
);
328334
setCodeSampleCodeText(language.samplesSources[sampleIndex]);
329335
}

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

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,26 @@
55
* LICENSE file in the root directory of this source tree.
66
* ========================================================================== */
77

8+
import find from "lodash/find";
9+
import isArray from "lodash/isArray";
10+
import mergeWith from "lodash/mergeWith";
11+
import unionBy from "lodash/unionBy";
12+
813
import { CodeSample, Language } from "./code-snippets-types";
914

1015
export function mergeCodeSampleLanguage(
1116
languages: Language[],
12-
codeSamples: CodeSample[]
17+
codeSamples: CodeSample[],
1318
): Language[] {
1419
return languages.map((language) => {
1520
const languageCodeSamples = codeSamples.filter(
16-
({ lang }) => lang === language.codeSampleLanguage
21+
({ lang }) => lang === language.codeSampleLanguage,
1722
);
1823

1924
if (languageCodeSamples.length) {
2025
const samples = languageCodeSamples.map(({ lang }) => lang);
2126
const samplesLabels = languageCodeSamples.map(
22-
({ label, lang }) => label || lang
27+
({ label, lang }) => label || lang,
2328
);
2429
const samplesSources = languageCodeSamples.map(({ source }) => source);
2530

@@ -36,6 +41,23 @@ export function mergeCodeSampleLanguage(
3641
});
3742
}
3843

44+
export const mergeArraysbyLanguage = (arr1: any, arr2: any) => {
45+
const mergedArray = unionBy(arr1, arr2, "language");
46+
47+
return mergedArray.map((item: any) => {
48+
const matchingItems = [
49+
find(arr1, ["language", item["language"]]),
50+
find(arr2, ["language", item["language"]]),
51+
];
52+
return mergeWith({}, ...matchingItems, (objValue: any) => {
53+
if (isArray(objValue)) {
54+
return objValue;
55+
}
56+
return undefined;
57+
});
58+
});
59+
};
60+
3961
export function getCodeSampleSourceFromLanguage(language: Language) {
4062
if (
4163
language &&
@@ -44,7 +66,7 @@ export function getCodeSampleSourceFromLanguage(language: Language) {
4466
language.samplesSources
4567
) {
4668
const sampleIndex = language.samples.findIndex(
47-
(smp) => smp === language.sample
69+
(smp) => smp === language.sample,
4870
);
4971
return language.samplesSources[sampleIndex];
5072
}

0 commit comments

Comments
 (0)