From 4ac7097a6b7c18eaec315bac5f8d5e746ef17381 Mon Sep 17 00:00:00 2001 From: Steven Serrata Date: Tue, 2 Jul 2024 12:49:12 -0500 Subject: [PATCH 1/7] add function for merging user and predefined language sets --- .../ApiExplorer/CodeSnippets/languages.ts | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/CodeSnippets/languages.ts b/packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/CodeSnippets/languages.ts index 61ad2d9ee..17816ab41 100644 --- a/packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/CodeSnippets/languages.ts +++ b/packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/CodeSnippets/languages.ts @@ -5,6 +5,11 @@ * LICENSE file in the root directory of this source tree. * ========================================================================== */ +import find from "lodash/find"; +import isArray from "lodash/isArray"; +import mergeWith from "lodash/mergeWith"; +import unionBy from "lodash/unionBy"; + import { CodeSample, Language } from "./code-snippets-types"; export function mergeCodeSampleLanguage( @@ -36,6 +41,23 @@ export function mergeCodeSampleLanguage( }); } +export const mergeArraysbyLanguage = (arr1: any, arr2: any) => { + const mergedArray = unionBy(arr1, arr2, "language"); + + return mergedArray.map((item: any) => { + const matchingItems = [ + find(arr1, ["language", item["language"]]), + find(arr2, ["language", item["language"]]), + ]; + return mergeWith({}, ...matchingItems, (objValue: any, srcValue: any) => { + if (isArray(objValue)) { + return objValue.concat(srcValue); + } + return undefined; + }); + }); +}; + export function getCodeSampleSourceFromLanguage(language: Language) { if ( language && From 7f019c02c2bfc18e79ca4c0cae03fb49a52dc9e7 Mon Sep 17 00:00:00 2001 From: Steven Serrata Date: Tue, 2 Jul 2024 12:50:06 -0500 Subject: [PATCH 2/7] cleanup and implement new merge function --- .../theme/ApiExplorer/CodeSnippets/index.tsx | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/CodeSnippets/index.tsx b/packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/CodeSnippets/index.tsx index 1d158efb4..2e2aeb285 100644 --- a/packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/CodeSnippets/index.tsx +++ b/packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/CodeSnippets/index.tsx @@ -5,6 +5,13 @@ * LICENSE file in the root directory of this source tree. * ========================================================================== */ +/* ============================================================================ + * Copyright (c) Palo Alto Networks + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * ========================================================================== */ + import React, { useState, useEffect } from "react"; import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; @@ -12,13 +19,13 @@ import ApiCodeBlock from "@theme/ApiExplorer/ApiCodeBlock"; import buildPostmanRequest from "@theme/ApiExplorer/buildPostmanRequest"; import CodeTabs from "@theme/ApiExplorer/CodeTabs"; import { useTypedSelector } from "@theme/ApiItem/hooks"; -import merge from "lodash/merge"; import codegen from "postman-code-generators"; import sdk from "postman-collection"; import { CodeSample, Language } from "./code-snippets-types"; import { getCodeSampleSourceFromLanguage, + mergeArraysbyLanguage, mergeCodeSampleLanguage, } from "./languages"; @@ -149,8 +156,6 @@ function CodeTab({ children, hidden, className }: any): JSX.Element { } function CodeSnippets({ postman, codeSamples }: Props) { - // TODO: match theme for vscode. - const { siteConfig } = useDocusaurusContext(); const contentType = useTypedSelector((state: any) => state.contentType.value); @@ -167,21 +172,20 @@ function CodeSnippets({ postman, codeSamples }: Props) { // User-defined languages array // Can override languageSet, change order of langs, override options and variants - const langs = [ - ...((siteConfig?.themeConfig?.languageTabs as Language[] | undefined) ?? - languageSet), - ]; + const userDefinedLanguageSet = siteConfig?.themeConfig?.languageTabs as + | Language[] + | undefined; // Filter languageSet by user-defined langs const filteredLanguageSet = languageSet.filter((ls) => { - return langs.some((lang) => { + return userDefinedLanguageSet?.some((lang) => { return lang.language === ls.language; }); }); // Merge user-defined langs into languageSet const mergedLangs = mergeCodeSampleLanguage( - merge(filteredLanguageSet, langs), + mergeArraysbyLanguage(userDefinedLanguageSet, filteredLanguageSet), codeSamples ); From df131df73c91990106af0b91bce468e79b093049 Mon Sep 17 00:00:00 2001 From: Steven Serrata Date: Tue, 2 Jul 2024 12:57:34 -0500 Subject: [PATCH 3/7] cleanup console logging --- .../src/theme/ApiExplorer/persistanceMiddleware.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/persistanceMiddleware.ts b/packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/persistanceMiddleware.ts index 84ba4758a..e024a8c73 100644 --- a/packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/persistanceMiddleware.ts +++ b/packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/persistanceMiddleware.ts @@ -19,7 +19,6 @@ import { createStorage, hashArray } from "./storage-utils"; export function createPersistanceMiddleware(options: ThemeConfig["api"]) { const persistanceMiddleware: Middleware<{}, RootState, AppDispatch> = (storeAPI) => (next) => (action) => { - console.log(action); const result = next(action); const state = storeAPI.getState(); From 4551de64f1f3c3afd7bfa93374d12bb26f505bde Mon Sep 17 00:00:00 2001 From: Steven Serrata Date: Tue, 2 Jul 2024 14:13:49 -0500 Subject: [PATCH 4/7] formatting cleanup --- .../src/theme/ApiExplorer/CodeSnippets/index.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/CodeSnippets/index.tsx b/packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/CodeSnippets/index.tsx index 2e2aeb285..0dfd13aa0 100644 --- a/packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/CodeSnippets/index.tsx +++ b/packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/CodeSnippets/index.tsx @@ -189,6 +189,8 @@ function CodeSnippets({ postman, codeSamples }: Props) { codeSamples ); + console.log("merged", mergedLangs); + // Read defaultLang from localStorage const defaultLang: Language[] = mergedLangs.filter( (lang) => From e3265473e81a94c70fc05a7d6893fb41dc927ab3 Mon Sep 17 00:00:00 2001 From: Steven Serrata Date: Tue, 2 Jul 2024 14:14:14 -0500 Subject: [PATCH 5/7] allow overriding variants --- .../src/theme/ApiExplorer/CodeSnippets/languages.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/CodeSnippets/languages.ts b/packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/CodeSnippets/languages.ts index 17816ab41..71346684e 100644 --- a/packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/CodeSnippets/languages.ts +++ b/packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/CodeSnippets/languages.ts @@ -49,9 +49,9 @@ export const mergeArraysbyLanguage = (arr1: any, arr2: any) => { find(arr1, ["language", item["language"]]), find(arr2, ["language", item["language"]]), ]; - return mergeWith({}, ...matchingItems, (objValue: any, srcValue: any) => { + return mergeWith({}, ...matchingItems, (objValue: any) => { if (isArray(objValue)) { - return objValue.concat(srcValue); + return objValue; } return undefined; }); From 968a47a7443ab6e35ab659cdcc3d618a57fdc680 Mon Sep 17 00:00:00 2001 From: Steven Serrata Date: Tue, 2 Jul 2024 14:14:30 -0500 Subject: [PATCH 6/7] limit python variants to requests --- demo/docusaurus.config.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/demo/docusaurus.config.ts b/demo/docusaurus.config.ts index 95e7f3301..161d8c296 100644 --- a/demo/docusaurus.config.ts +++ b/demo/docusaurus.config.ts @@ -153,7 +153,7 @@ const config: Config = { highlight: "python", language: "python", logoClass: "python", - variant: "requests", + variants: ["requests"], }, { highlight: "go", @@ -164,7 +164,6 @@ const config: Config = { highlight: "javascript", language: "nodejs", logoClass: "nodejs", - variant: "axios", }, { highlight: "ruby", From 3dae27619a23921abdf9d1e8cf6a2d5981820b3f Mon Sep 17 00:00:00 2001 From: Steven Serrata Date: Tue, 2 Jul 2024 14:23:10 -0500 Subject: [PATCH 7/7] reorder language tabs --- demo/docusaurus.config.ts | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/demo/docusaurus.config.ts b/demo/docusaurus.config.ts index 161d8c296..f3085d075 100644 --- a/demo/docusaurus.config.ts +++ b/demo/docusaurus.config.ts @@ -144,16 +144,20 @@ const config: Config = { ], }, languageTabs: [ + { + highlight: "python", + language: "python", + logoClass: "python", + }, { highlight: "bash", language: "curl", logoClass: "bash", }, { - highlight: "python", - language: "python", - logoClass: "python", - variants: ["requests"], + highlight: "csharp", + language: "csharp", + logoClass: "csharp", }, { highlight: "go", @@ -170,12 +174,6 @@ const config: Config = { language: "ruby", logoClass: "ruby", }, - { - highlight: "csharp", - language: "csharp", - logoClass: "csharp", - variant: "httpclient", - }, { highlight: "php", language: "php",