docusaurus-theme-openapi-docs 0.0.0-780 → 0.0.0-797
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.
- package/lib/theme/ApiExplorer/CodeSnippets/code-snippets-types.d.ts +1 -1
- package/lib/theme/ApiExplorer/CodeSnippets/index.js +2 -112
- package/lib/theme/ApiExplorer/CodeSnippets/languages.d.ts +1 -0
- package/lib/theme/ApiExplorer/CodeSnippets/languages.js +29 -1
- package/lib/theme/ApiExplorer/CodeTabs/_CodeTabs.scss +146 -2
- package/lib/theme/ApiExplorer/CodeTabs/index.js +22 -8
- package/lib/theme/ApiExplorer/MethodEndpoint/index.d.ts +2 -1
- package/lib/theme/ApiExplorer/MethodEndpoint/index.js +4 -1
- package/package.json +3 -3
- package/src/theme/ApiExplorer/CodeSnippets/code-snippets-types.ts +2 -0
- package/src/theme/ApiExplorer/CodeSnippets/index.tsx +6 -112
- package/src/theme/ApiExplorer/CodeSnippets/languages.ts +25 -0
- package/src/theme/ApiExplorer/CodeTabs/_CodeTabs.scss +146 -2
- package/src/theme/ApiExplorer/CodeTabs/index.tsx +24 -9
- package/src/theme/ApiExplorer/MethodEndpoint/index.tsx +6 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type CodeSampleLanguage = "C" | "C#" | "C++" | "CoffeeScript" | "CSS" | "Dart" | "DM" | "Elixir" | "Go" | "Groovy" | "HTML" | "Java" | "JavaScript" | "Kotlin" | "Objective-C" | "Perl" | "PHP" | "PowerShell" | "Python" | "Ruby" | "Rust" | "Scala" | "Shell" | "Swift" | "TypeScript";
|
|
1
|
+
export type CodeSampleLanguage = "C" | "C#" | "C++" | "CoffeeScript" | "CSS" | "Dart" | "DM" | "Elixir" | "Go" | "Groovy" | "HTML" | "Java" | "JavaScript" | "Kotlin" | "Objective-C" | "OCaml" | "Perl" | "PHP" | "PowerShell" | "Python" | "R" | "Ruby" | "Rust" | "Scala" | "Shell" | "Swift" | "TypeScript";
|
|
2
2
|
export interface Language {
|
|
3
3
|
highlight: string;
|
|
4
4
|
language: string;
|
|
@@ -78,118 +78,7 @@ const postman_code_generators_1 = __importDefault(
|
|
|
78
78
|
require("postman-code-generators")
|
|
79
79
|
);
|
|
80
80
|
const languages_1 = require("./languages");
|
|
81
|
-
exports.languageSet =
|
|
82
|
-
{
|
|
83
|
-
highlight: "bash",
|
|
84
|
-
language: "curl",
|
|
85
|
-
codeSampleLanguage: "Shell",
|
|
86
|
-
logoClass: "bash",
|
|
87
|
-
options: {
|
|
88
|
-
longFormat: false,
|
|
89
|
-
followRedirect: true,
|
|
90
|
-
trimRequestBody: true,
|
|
91
|
-
},
|
|
92
|
-
variant: "cURL",
|
|
93
|
-
variants: ["curl"],
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
highlight: "python",
|
|
97
|
-
language: "python",
|
|
98
|
-
codeSampleLanguage: "Python",
|
|
99
|
-
logoClass: "python",
|
|
100
|
-
options: {
|
|
101
|
-
followRedirect: true,
|
|
102
|
-
trimRequestBody: true,
|
|
103
|
-
},
|
|
104
|
-
variant: "requests",
|
|
105
|
-
variants: ["requests", "http.client"],
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
highlight: "go",
|
|
109
|
-
language: "go",
|
|
110
|
-
codeSampleLanguage: "Go",
|
|
111
|
-
logoClass: "go",
|
|
112
|
-
options: {
|
|
113
|
-
followRedirect: true,
|
|
114
|
-
trimRequestBody: true,
|
|
115
|
-
},
|
|
116
|
-
variant: "native",
|
|
117
|
-
variants: ["native"],
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
highlight: "javascript",
|
|
121
|
-
language: "nodejs",
|
|
122
|
-
codeSampleLanguage: "JavaScript",
|
|
123
|
-
logoClass: "nodejs",
|
|
124
|
-
options: {
|
|
125
|
-
ES6_enabled: true,
|
|
126
|
-
followRedirect: true,
|
|
127
|
-
trimRequestBody: true,
|
|
128
|
-
},
|
|
129
|
-
variant: "axios",
|
|
130
|
-
variants: ["axios", "native"],
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
highlight: "ruby",
|
|
134
|
-
language: "ruby",
|
|
135
|
-
codeSampleLanguage: "Ruby",
|
|
136
|
-
logoClass: "ruby",
|
|
137
|
-
options: {
|
|
138
|
-
followRedirect: true,
|
|
139
|
-
trimRequestBody: true,
|
|
140
|
-
},
|
|
141
|
-
variant: "Net::HTTP",
|
|
142
|
-
variants: ["net::http"],
|
|
143
|
-
},
|
|
144
|
-
{
|
|
145
|
-
highlight: "csharp",
|
|
146
|
-
language: "csharp",
|
|
147
|
-
codeSampleLanguage: "C#",
|
|
148
|
-
logoClass: "csharp",
|
|
149
|
-
options: {
|
|
150
|
-
followRedirect: true,
|
|
151
|
-
trimRequestBody: true,
|
|
152
|
-
},
|
|
153
|
-
variant: "RestSharp",
|
|
154
|
-
variants: ["restsharp", "httpclient"],
|
|
155
|
-
},
|
|
156
|
-
{
|
|
157
|
-
highlight: "php",
|
|
158
|
-
language: "php",
|
|
159
|
-
codeSampleLanguage: "PHP",
|
|
160
|
-
logoClass: "php",
|
|
161
|
-
options: {
|
|
162
|
-
followRedirect: true,
|
|
163
|
-
trimRequestBody: true,
|
|
164
|
-
},
|
|
165
|
-
variant: "cURL",
|
|
166
|
-
variants: ["curl", "guzzle", "pecl_http", "http_request2"],
|
|
167
|
-
},
|
|
168
|
-
{
|
|
169
|
-
highlight: "java",
|
|
170
|
-
language: "java",
|
|
171
|
-
codeSampleLanguage: "Java",
|
|
172
|
-
logoClass: "java",
|
|
173
|
-
options: {
|
|
174
|
-
followRedirect: true,
|
|
175
|
-
trimRequestBody: true,
|
|
176
|
-
},
|
|
177
|
-
variant: "OkHttp",
|
|
178
|
-
variants: ["okhttp", "unirest"],
|
|
179
|
-
},
|
|
180
|
-
{
|
|
181
|
-
highlight: "powershell",
|
|
182
|
-
language: "powershell",
|
|
183
|
-
codeSampleLanguage: "PowerShell",
|
|
184
|
-
logoClass: "powershell",
|
|
185
|
-
options: {
|
|
186
|
-
followRedirect: true,
|
|
187
|
-
trimRequestBody: true,
|
|
188
|
-
},
|
|
189
|
-
variant: "RestMethod",
|
|
190
|
-
variants: ["restmethod"],
|
|
191
|
-
},
|
|
192
|
-
];
|
|
81
|
+
exports.languageSet = (0, languages_1.generateLanguageSet)();
|
|
193
82
|
function CodeTab({ children, hidden, className }) {
|
|
194
83
|
return react_1.default.createElement(
|
|
195
84
|
"div",
|
|
@@ -392,6 +281,7 @@ function CodeSnippets({ postman, codeSamples }) {
|
|
|
392
281
|
setSelectedSample: setSelectedSample,
|
|
393
282
|
},
|
|
394
283
|
languageSet: mergedLangs,
|
|
284
|
+
defaultValue: defaultLang[0]?.language ?? mergedLangs[0].language,
|
|
395
285
|
lazy: true,
|
|
396
286
|
},
|
|
397
287
|
mergedLangs.map((lang) => {
|
|
@@ -2,3 +2,4 @@ import { CodeSample, Language } from "./code-snippets-types";
|
|
|
2
2
|
export declare function mergeCodeSampleLanguage(languages: Language[], codeSamples: CodeSample[]): Language[];
|
|
3
3
|
export declare const mergeArraysbyLanguage: (arr1: any, arr2: any) => any[];
|
|
4
4
|
export declare function getCodeSampleSourceFromLanguage(language: Language): string;
|
|
5
|
+
export declare function generateLanguageSet(): Language[];
|
|
@@ -11,7 +11,8 @@ var __importDefault =
|
|
|
11
11
|
return mod && mod.__esModule ? mod : { default: mod };
|
|
12
12
|
};
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.
|
|
14
|
+
exports.generateLanguageSet =
|
|
15
|
+
exports.getCodeSampleSourceFromLanguage =
|
|
15
16
|
exports.mergeArraysbyLanguage =
|
|
16
17
|
exports.mergeCodeSampleLanguage =
|
|
17
18
|
void 0;
|
|
@@ -19,6 +20,9 @@ const find_1 = __importDefault(require("lodash/find"));
|
|
|
19
20
|
const isArray_1 = __importDefault(require("lodash/isArray"));
|
|
20
21
|
const mergeWith_1 = __importDefault(require("lodash/mergeWith"));
|
|
21
22
|
const unionBy_1 = __importDefault(require("lodash/unionBy"));
|
|
23
|
+
const postman_code_generators_1 = __importDefault(
|
|
24
|
+
require("postman-code-generators")
|
|
25
|
+
);
|
|
22
26
|
function mergeCodeSampleLanguage(languages, codeSamples) {
|
|
23
27
|
return languages.map((language) => {
|
|
24
28
|
const languageCodeSamples = codeSamples.filter(
|
|
@@ -73,3 +77,27 @@ function getCodeSampleSourceFromLanguage(language) {
|
|
|
73
77
|
return "";
|
|
74
78
|
}
|
|
75
79
|
exports.getCodeSampleSourceFromLanguage = getCodeSampleSourceFromLanguage;
|
|
80
|
+
function generateLanguageSet() {
|
|
81
|
+
const languageSet = [];
|
|
82
|
+
postman_code_generators_1.default.getLanguageList().forEach((language) => {
|
|
83
|
+
const variants = [];
|
|
84
|
+
language.variants.forEach((variant) => {
|
|
85
|
+
variants.push(variant.key);
|
|
86
|
+
});
|
|
87
|
+
languageSet.push({
|
|
88
|
+
highlight: language.syntax_mode,
|
|
89
|
+
language: language.key,
|
|
90
|
+
codeSampleLanguage: language.label,
|
|
91
|
+
logoClass: language.key,
|
|
92
|
+
options: {
|
|
93
|
+
longFormat: false,
|
|
94
|
+
followRedirect: true,
|
|
95
|
+
trimRequestBody: true,
|
|
96
|
+
},
|
|
97
|
+
variant: variants[0],
|
|
98
|
+
variants: variants,
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
return languageSet;
|
|
102
|
+
}
|
|
103
|
+
exports.generateLanguageSet = generateLanguageSet;
|
|
@@ -146,6 +146,24 @@ body[class="ReactModal__Body--open"] {
|
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
+
.openapi-tabs__code-item--dart {
|
|
150
|
+
color: var(--ifm-color-info);
|
|
151
|
+
|
|
152
|
+
&::after {
|
|
153
|
+
content: "";
|
|
154
|
+
width: var(--code-tab-logo-width);
|
|
155
|
+
height: var(--code-tab-logo-height);
|
|
156
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/dart/dart-original.svg")
|
|
157
|
+
no-repeat;
|
|
158
|
+
margin-block: auto;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
&.active {
|
|
162
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-dart);
|
|
163
|
+
border-color: var(--openapi-code-tab-border-color-dart);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
149
167
|
.openapi-tabs__code-item--javascript {
|
|
150
168
|
color: var(--ifm-color-warning);
|
|
151
169
|
|
|
@@ -164,7 +182,7 @@ body[class="ReactModal__Body--open"] {
|
|
|
164
182
|
}
|
|
165
183
|
}
|
|
166
184
|
|
|
167
|
-
.openapi-tabs__code-item--
|
|
185
|
+
.openapi-tabs__code-item--curl {
|
|
168
186
|
color: var(--ifm-color-danger);
|
|
169
187
|
|
|
170
188
|
&::after {
|
|
@@ -179,7 +197,7 @@ body[class="ReactModal__Body--open"] {
|
|
|
179
197
|
}
|
|
180
198
|
|
|
181
199
|
&.active {
|
|
182
|
-
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-
|
|
200
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-curl);
|
|
183
201
|
border-color: var(--ifm-color-danger);
|
|
184
202
|
}
|
|
185
203
|
}
|
|
@@ -220,6 +238,96 @@ body[class="ReactModal__Body--open"] {
|
|
|
220
238
|
}
|
|
221
239
|
}
|
|
222
240
|
|
|
241
|
+
.openapi-tabs__code-item--r {
|
|
242
|
+
color: var(--ifm-color-gray-500);
|
|
243
|
+
|
|
244
|
+
&::after {
|
|
245
|
+
content: "";
|
|
246
|
+
width: var(--code-tab-logo-width);
|
|
247
|
+
height: var(--code-tab-logo-height);
|
|
248
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/r/r-original.svg")
|
|
249
|
+
no-repeat;
|
|
250
|
+
margin-block: auto;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
&.active {
|
|
254
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-r);
|
|
255
|
+
border-color: var(--openapi-code-tab-border-color-r);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
.openapi-tabs__code-item--swift {
|
|
260
|
+
color: var(--ifm-color-danger);
|
|
261
|
+
|
|
262
|
+
&::after {
|
|
263
|
+
content: "";
|
|
264
|
+
width: var(--code-tab-logo-width);
|
|
265
|
+
height: var(--code-tab-logo-height);
|
|
266
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/swift/swift-original.svg")
|
|
267
|
+
no-repeat;
|
|
268
|
+
margin-block: auto;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
&.active {
|
|
272
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-swift);
|
|
273
|
+
border-color: var(--openapi-code-tab-border-color-swift);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.openapi-tabs__code-item--c {
|
|
278
|
+
color: var(--ifm-color-info);
|
|
279
|
+
|
|
280
|
+
&::after {
|
|
281
|
+
content: "";
|
|
282
|
+
width: var(--code-tab-logo-width);
|
|
283
|
+
height: var(--code-tab-logo-height);
|
|
284
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/c/c-original.svg")
|
|
285
|
+
no-repeat;
|
|
286
|
+
margin-block: auto;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
&.active {
|
|
290
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-c);
|
|
291
|
+
border-color: var(--openapi-code-tab-border-color-c);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
.openapi-tabs__code-item--objective-c {
|
|
296
|
+
color: var(--ifm-color-info);
|
|
297
|
+
|
|
298
|
+
&::after {
|
|
299
|
+
content: "";
|
|
300
|
+
width: var(--code-tab-logo-width);
|
|
301
|
+
height: var(--code-tab-logo-height);
|
|
302
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/objectivec/objectivec-plain.svg")
|
|
303
|
+
no-repeat;
|
|
304
|
+
margin-block: auto;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
&.active {
|
|
308
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-objective-c);
|
|
309
|
+
border-color: var(--openapi-code-tab-border-color-objective-c);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
.openapi-tabs__code-item--ocaml {
|
|
314
|
+
color: var(--ifm-color-warning);
|
|
315
|
+
|
|
316
|
+
&::after {
|
|
317
|
+
content: "";
|
|
318
|
+
width: var(--code-tab-logo-width);
|
|
319
|
+
height: var(--code-tab-logo-height);
|
|
320
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/ocaml/ocaml-original.svg")
|
|
321
|
+
no-repeat;
|
|
322
|
+
margin-block: auto;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
&.active {
|
|
326
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-objective-ocaml);
|
|
327
|
+
border-color: var(--openapi-code-tab-border-color-objective-ocaml);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
223
331
|
.openapi-tabs__code-item--nodejs {
|
|
224
332
|
color: var(--ifm-color-success);
|
|
225
333
|
|
|
@@ -256,6 +364,42 @@ body[class="ReactModal__Body--open"] {
|
|
|
256
364
|
}
|
|
257
365
|
}
|
|
258
366
|
|
|
367
|
+
.openapi-tabs__code-item--kotlin {
|
|
368
|
+
color: var(--ifm-color-gray-500);
|
|
369
|
+
|
|
370
|
+
&::after {
|
|
371
|
+
content: "";
|
|
372
|
+
width: var(--code-tab-logo-width);
|
|
373
|
+
height: var(--code-tab-logo-height);
|
|
374
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/kotlin/kotlin-original.svg")
|
|
375
|
+
no-repeat;
|
|
376
|
+
margin-block: auto;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
&.active {
|
|
380
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-kotlin);
|
|
381
|
+
border-color: var(--openapi-code-tab-border-color-kotlin);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
.openapi-tabs__code-item--rust {
|
|
386
|
+
color: var(--ifm-color-gray-500);
|
|
387
|
+
|
|
388
|
+
&::after {
|
|
389
|
+
content: "";
|
|
390
|
+
width: var(--code-tab-logo-width);
|
|
391
|
+
height: var(--code-tab-logo-height);
|
|
392
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/rust/rust-original.svg")
|
|
393
|
+
no-repeat;
|
|
394
|
+
margin-block: auto;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
&.active {
|
|
398
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-rust);
|
|
399
|
+
border-color: var(--openapi-code-tab-border-color-rust);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
|
|
259
403
|
.openapi-tabs__code-item--java {
|
|
260
404
|
color: var(--ifm-color-warning);
|
|
261
405
|
|
|
@@ -71,12 +71,24 @@ function TabList({
|
|
|
71
71
|
selectValue,
|
|
72
72
|
tabValues,
|
|
73
73
|
}) {
|
|
74
|
-
const tabRefs = [];
|
|
74
|
+
const tabRefs = (0, react_1.useRef)([]);
|
|
75
75
|
const { blockElementScrollPositionUntilNextRender } = (0,
|
|
76
76
|
internal_1.useScrollPositionBlocker)();
|
|
77
|
+
(0, react_1.useEffect)(() => {
|
|
78
|
+
const activeTab = tabRefs.current.find(
|
|
79
|
+
(tab) => tab?.getAttribute("aria-selected") === "true"
|
|
80
|
+
);
|
|
81
|
+
if (activeTab) {
|
|
82
|
+
activeTab.scrollIntoView({
|
|
83
|
+
behavior: "auto",
|
|
84
|
+
block: "center",
|
|
85
|
+
inline: "start",
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}, []);
|
|
77
89
|
const handleTabChange = (event) => {
|
|
78
90
|
const newTab = event.currentTarget;
|
|
79
|
-
const newTabIndex = tabRefs.indexOf(newTab);
|
|
91
|
+
const newTabIndex = tabRefs.current.indexOf(newTab);
|
|
80
92
|
const newTabValue = tabValues[newTabIndex].value;
|
|
81
93
|
if (newTabValue !== selectedValue) {
|
|
82
94
|
blockElementScrollPositionUntilNextRender(newTab);
|
|
@@ -100,7 +112,7 @@ function TabList({
|
|
|
100
112
|
newLanguage = languageSet.filter(
|
|
101
113
|
(lang) => lang.language === newTabValue
|
|
102
114
|
)[0];
|
|
103
|
-
action.setSelectedVariant(newLanguage.
|
|
115
|
+
action.setSelectedVariant(newLanguage.variants[0].toLowerCase());
|
|
104
116
|
action.setSelectedSample(newLanguage.sample);
|
|
105
117
|
}
|
|
106
118
|
action.setLanguage(newLanguage);
|
|
@@ -114,13 +126,15 @@ function TabList({
|
|
|
114
126
|
break;
|
|
115
127
|
}
|
|
116
128
|
case "ArrowRight": {
|
|
117
|
-
const nextTab = tabRefs.indexOf(event.currentTarget) + 1;
|
|
118
|
-
focusElement = tabRefs[nextTab] ?? tabRefs[0];
|
|
129
|
+
const nextTab = tabRefs.current.indexOf(event.currentTarget) + 1;
|
|
130
|
+
focusElement = tabRefs.current[nextTab] ?? tabRefs.current[0];
|
|
119
131
|
break;
|
|
120
132
|
}
|
|
121
133
|
case "ArrowLeft": {
|
|
122
|
-
const prevTab = tabRefs.indexOf(event.currentTarget) - 1;
|
|
123
|
-
focusElement =
|
|
134
|
+
const prevTab = tabRefs.current.indexOf(event.currentTarget) - 1;
|
|
135
|
+
focusElement =
|
|
136
|
+
tabRefs.current[prevTab] ??
|
|
137
|
+
tabRefs.current[tabRefs.current.length - 1];
|
|
124
138
|
break;
|
|
125
139
|
}
|
|
126
140
|
default:
|
|
@@ -151,7 +165,7 @@ function TabList({
|
|
|
151
165
|
tabIndex: selectedValue === value ? 0 : -1,
|
|
152
166
|
"aria-selected": selectedValue === value,
|
|
153
167
|
key: value,
|
|
154
|
-
ref: (tabControl) => tabRefs.push(tabControl),
|
|
168
|
+
ref: (tabControl) => tabRefs.current.push(tabControl),
|
|
155
169
|
onKeyDown: handleKeydown,
|
|
156
170
|
onClick: handleTabChange,
|
|
157
171
|
...attributes,
|
|
@@ -2,6 +2,7 @@ import React from "react";
|
|
|
2
2
|
export interface Props {
|
|
3
3
|
method: string;
|
|
4
4
|
path: string;
|
|
5
|
+
context?: "endpoint" | "callback";
|
|
5
6
|
}
|
|
6
|
-
declare function MethodEndpoint({ method, path }: Props): React.JSX.Element;
|
|
7
|
+
declare function MethodEndpoint({ method, path, context }: Props): React.JSX.Element;
|
|
7
8
|
export default MethodEndpoint;
|
|
@@ -34,12 +34,15 @@ function colorForMethod(method) {
|
|
|
34
34
|
return undefined;
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
|
-
function MethodEndpoint({ method, path }) {
|
|
37
|
+
function MethodEndpoint({ method, path, context }) {
|
|
38
38
|
let serverValue = (0, hooks_1.useTypedSelector)(
|
|
39
39
|
(state) => state.server.value
|
|
40
40
|
);
|
|
41
41
|
let serverUrlWithVariables = "";
|
|
42
42
|
const renderServerUrl = () => {
|
|
43
|
+
if (context === "callback") {
|
|
44
|
+
return "";
|
|
45
|
+
}
|
|
43
46
|
if (serverValue && serverValue.variables) {
|
|
44
47
|
serverUrlWithVariables = serverValue.url.replace(/\/$/, "");
|
|
45
48
|
Object.keys(serverValue.variables).forEach((variable) => {
|
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-797",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"openapi",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"clsx": "^1.1.1",
|
|
43
43
|
"copy-text-to-clipboard": "^3.1.0",
|
|
44
44
|
"crypto-js": "^4.1.1",
|
|
45
|
-
"docusaurus-plugin-openapi-docs": "0.0.0-
|
|
45
|
+
"docusaurus-plugin-openapi-docs": "0.0.0-797",
|
|
46
46
|
"docusaurus-plugin-sass": "^0.2.3",
|
|
47
47
|
"file-saver": "^2.0.5",
|
|
48
48
|
"lodash": "^4.17.20",
|
|
@@ -69,5 +69,5 @@
|
|
|
69
69
|
"engines": {
|
|
70
70
|
"node": ">=14"
|
|
71
71
|
},
|
|
72
|
-
"gitHead": "
|
|
72
|
+
"gitHead": "0ad6968bd07b838eab231eb7ef399d1dc5c6ac8d"
|
|
73
73
|
}
|
|
@@ -27,120 +27,10 @@ import {
|
|
|
27
27
|
getCodeSampleSourceFromLanguage,
|
|
28
28
|
mergeArraysbyLanguage,
|
|
29
29
|
mergeCodeSampleLanguage,
|
|
30
|
+
generateLanguageSet,
|
|
30
31
|
} from "./languages";
|
|
31
32
|
|
|
32
|
-
export const languageSet: Language[] =
|
|
33
|
-
{
|
|
34
|
-
highlight: "bash",
|
|
35
|
-
language: "curl",
|
|
36
|
-
codeSampleLanguage: "Shell",
|
|
37
|
-
logoClass: "bash",
|
|
38
|
-
options: {
|
|
39
|
-
longFormat: false,
|
|
40
|
-
followRedirect: true,
|
|
41
|
-
trimRequestBody: true,
|
|
42
|
-
},
|
|
43
|
-
variant: "cURL",
|
|
44
|
-
variants: ["curl"],
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
highlight: "python",
|
|
48
|
-
language: "python",
|
|
49
|
-
codeSampleLanguage: "Python",
|
|
50
|
-
logoClass: "python",
|
|
51
|
-
options: {
|
|
52
|
-
followRedirect: true,
|
|
53
|
-
trimRequestBody: true,
|
|
54
|
-
},
|
|
55
|
-
variant: "requests",
|
|
56
|
-
variants: ["requests", "http.client"],
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
highlight: "go",
|
|
60
|
-
language: "go",
|
|
61
|
-
codeSampleLanguage: "Go",
|
|
62
|
-
logoClass: "go",
|
|
63
|
-
options: {
|
|
64
|
-
followRedirect: true,
|
|
65
|
-
trimRequestBody: true,
|
|
66
|
-
},
|
|
67
|
-
variant: "native",
|
|
68
|
-
variants: ["native"],
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
highlight: "javascript",
|
|
72
|
-
language: "nodejs",
|
|
73
|
-
codeSampleLanguage: "JavaScript",
|
|
74
|
-
logoClass: "nodejs",
|
|
75
|
-
options: {
|
|
76
|
-
ES6_enabled: true,
|
|
77
|
-
followRedirect: true,
|
|
78
|
-
trimRequestBody: true,
|
|
79
|
-
},
|
|
80
|
-
variant: "axios",
|
|
81
|
-
variants: ["axios", "native"],
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
highlight: "ruby",
|
|
85
|
-
language: "ruby",
|
|
86
|
-
codeSampleLanguage: "Ruby",
|
|
87
|
-
logoClass: "ruby",
|
|
88
|
-
options: {
|
|
89
|
-
followRedirect: true,
|
|
90
|
-
trimRequestBody: true,
|
|
91
|
-
},
|
|
92
|
-
variant: "Net::HTTP",
|
|
93
|
-
variants: ["net::http"],
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
highlight: "csharp",
|
|
97
|
-
language: "csharp",
|
|
98
|
-
codeSampleLanguage: "C#",
|
|
99
|
-
logoClass: "csharp",
|
|
100
|
-
options: {
|
|
101
|
-
followRedirect: true,
|
|
102
|
-
trimRequestBody: true,
|
|
103
|
-
},
|
|
104
|
-
variant: "RestSharp",
|
|
105
|
-
variants: ["restsharp", "httpclient"],
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
highlight: "php",
|
|
109
|
-
language: "php",
|
|
110
|
-
codeSampleLanguage: "PHP",
|
|
111
|
-
logoClass: "php",
|
|
112
|
-
options: {
|
|
113
|
-
followRedirect: true,
|
|
114
|
-
trimRequestBody: true,
|
|
115
|
-
},
|
|
116
|
-
variant: "cURL",
|
|
117
|
-
variants: ["curl", "guzzle", "pecl_http", "http_request2"],
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
highlight: "java",
|
|
121
|
-
language: "java",
|
|
122
|
-
codeSampleLanguage: "Java",
|
|
123
|
-
logoClass: "java",
|
|
124
|
-
options: {
|
|
125
|
-
followRedirect: true,
|
|
126
|
-
trimRequestBody: true,
|
|
127
|
-
},
|
|
128
|
-
variant: "OkHttp",
|
|
129
|
-
variants: ["okhttp", "unirest"],
|
|
130
|
-
},
|
|
131
|
-
{
|
|
132
|
-
highlight: "powershell",
|
|
133
|
-
language: "powershell",
|
|
134
|
-
codeSampleLanguage: "PowerShell",
|
|
135
|
-
logoClass: "powershell",
|
|
136
|
-
options: {
|
|
137
|
-
followRedirect: true,
|
|
138
|
-
trimRequestBody: true,
|
|
139
|
-
},
|
|
140
|
-
variant: "RestMethod",
|
|
141
|
-
variants: ["restmethod"],
|
|
142
|
-
},
|
|
143
|
-
];
|
|
33
|
+
export const languageSet: Language[] = generateLanguageSet();
|
|
144
34
|
|
|
145
35
|
export interface Props {
|
|
146
36
|
postman: sdk.Request;
|
|
@@ -339,6 +229,7 @@ function CodeSnippets({ postman, codeSamples }: Props) {
|
|
|
339
229
|
|
|
340
230
|
return (
|
|
341
231
|
<>
|
|
232
|
+
{/* Outer language tabs */}
|
|
342
233
|
<CodeTabs
|
|
343
234
|
groupId="code-samples"
|
|
344
235
|
action={{
|
|
@@ -347,6 +238,7 @@ function CodeSnippets({ postman, codeSamples }: Props) {
|
|
|
347
238
|
setSelectedSample: setSelectedSample,
|
|
348
239
|
}}
|
|
349
240
|
languageSet={mergedLangs}
|
|
241
|
+
defaultValue={defaultLang[0]?.language ?? mergedLangs[0].language}
|
|
350
242
|
lazy
|
|
351
243
|
>
|
|
352
244
|
{mergedLangs.map((lang) => {
|
|
@@ -359,6 +251,7 @@ function CodeSnippets({ postman, codeSamples }: Props) {
|
|
|
359
251
|
className: `openapi-tabs__code-item--${lang.logoClass}`,
|
|
360
252
|
}}
|
|
361
253
|
>
|
|
254
|
+
{/* Inner x-codeSamples tabs */}
|
|
362
255
|
{lang.samples && (
|
|
363
256
|
<CodeTabs
|
|
364
257
|
className="openapi-tabs__code-container-inner"
|
|
@@ -400,6 +293,7 @@ function CodeSnippets({ postman, codeSamples }: Props) {
|
|
|
400
293
|
</CodeTabs>
|
|
401
294
|
)}
|
|
402
295
|
|
|
296
|
+
{/* Inner generated code snippets */}
|
|
403
297
|
<CodeTabs
|
|
404
298
|
className="openapi-tabs__code-container-inner"
|
|
405
299
|
action={{
|
|
@@ -9,6 +9,7 @@ import find from "lodash/find";
|
|
|
9
9
|
import isArray from "lodash/isArray";
|
|
10
10
|
import mergeWith from "lodash/mergeWith";
|
|
11
11
|
import unionBy from "lodash/unionBy";
|
|
12
|
+
import codegen from "postman-code-generators";
|
|
12
13
|
|
|
13
14
|
import { CodeSample, Language } from "./code-snippets-types";
|
|
14
15
|
|
|
@@ -73,3 +74,27 @@ export function getCodeSampleSourceFromLanguage(language: Language) {
|
|
|
73
74
|
|
|
74
75
|
return "";
|
|
75
76
|
}
|
|
77
|
+
|
|
78
|
+
export function generateLanguageSet() {
|
|
79
|
+
const languageSet: Language[] = [];
|
|
80
|
+
codegen.getLanguageList().forEach((language: any) => {
|
|
81
|
+
const variants: any = [];
|
|
82
|
+
language.variants.forEach((variant: any) => {
|
|
83
|
+
variants.push(variant.key);
|
|
84
|
+
});
|
|
85
|
+
languageSet.push({
|
|
86
|
+
highlight: language.syntax_mode,
|
|
87
|
+
language: language.key,
|
|
88
|
+
codeSampleLanguage: language.label,
|
|
89
|
+
logoClass: language.key,
|
|
90
|
+
options: {
|
|
91
|
+
longFormat: false,
|
|
92
|
+
followRedirect: true,
|
|
93
|
+
trimRequestBody: true,
|
|
94
|
+
},
|
|
95
|
+
variant: variants[0],
|
|
96
|
+
variants: variants,
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
return languageSet;
|
|
100
|
+
}
|
|
@@ -146,6 +146,24 @@ body[class="ReactModal__Body--open"] {
|
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
+
.openapi-tabs__code-item--dart {
|
|
150
|
+
color: var(--ifm-color-info);
|
|
151
|
+
|
|
152
|
+
&::after {
|
|
153
|
+
content: "";
|
|
154
|
+
width: var(--code-tab-logo-width);
|
|
155
|
+
height: var(--code-tab-logo-height);
|
|
156
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/dart/dart-original.svg")
|
|
157
|
+
no-repeat;
|
|
158
|
+
margin-block: auto;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
&.active {
|
|
162
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-dart);
|
|
163
|
+
border-color: var(--openapi-code-tab-border-color-dart);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
149
167
|
.openapi-tabs__code-item--javascript {
|
|
150
168
|
color: var(--ifm-color-warning);
|
|
151
169
|
|
|
@@ -164,7 +182,7 @@ body[class="ReactModal__Body--open"] {
|
|
|
164
182
|
}
|
|
165
183
|
}
|
|
166
184
|
|
|
167
|
-
.openapi-tabs__code-item--
|
|
185
|
+
.openapi-tabs__code-item--curl {
|
|
168
186
|
color: var(--ifm-color-danger);
|
|
169
187
|
|
|
170
188
|
&::after {
|
|
@@ -179,7 +197,7 @@ body[class="ReactModal__Body--open"] {
|
|
|
179
197
|
}
|
|
180
198
|
|
|
181
199
|
&.active {
|
|
182
|
-
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-
|
|
200
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-curl);
|
|
183
201
|
border-color: var(--ifm-color-danger);
|
|
184
202
|
}
|
|
185
203
|
}
|
|
@@ -220,6 +238,96 @@ body[class="ReactModal__Body--open"] {
|
|
|
220
238
|
}
|
|
221
239
|
}
|
|
222
240
|
|
|
241
|
+
.openapi-tabs__code-item--r {
|
|
242
|
+
color: var(--ifm-color-gray-500);
|
|
243
|
+
|
|
244
|
+
&::after {
|
|
245
|
+
content: "";
|
|
246
|
+
width: var(--code-tab-logo-width);
|
|
247
|
+
height: var(--code-tab-logo-height);
|
|
248
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/r/r-original.svg")
|
|
249
|
+
no-repeat;
|
|
250
|
+
margin-block: auto;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
&.active {
|
|
254
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-r);
|
|
255
|
+
border-color: var(--openapi-code-tab-border-color-r);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
.openapi-tabs__code-item--swift {
|
|
260
|
+
color: var(--ifm-color-danger);
|
|
261
|
+
|
|
262
|
+
&::after {
|
|
263
|
+
content: "";
|
|
264
|
+
width: var(--code-tab-logo-width);
|
|
265
|
+
height: var(--code-tab-logo-height);
|
|
266
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/swift/swift-original.svg")
|
|
267
|
+
no-repeat;
|
|
268
|
+
margin-block: auto;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
&.active {
|
|
272
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-swift);
|
|
273
|
+
border-color: var(--openapi-code-tab-border-color-swift);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.openapi-tabs__code-item--c {
|
|
278
|
+
color: var(--ifm-color-info);
|
|
279
|
+
|
|
280
|
+
&::after {
|
|
281
|
+
content: "";
|
|
282
|
+
width: var(--code-tab-logo-width);
|
|
283
|
+
height: var(--code-tab-logo-height);
|
|
284
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/c/c-original.svg")
|
|
285
|
+
no-repeat;
|
|
286
|
+
margin-block: auto;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
&.active {
|
|
290
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-c);
|
|
291
|
+
border-color: var(--openapi-code-tab-border-color-c);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
.openapi-tabs__code-item--objective-c {
|
|
296
|
+
color: var(--ifm-color-info);
|
|
297
|
+
|
|
298
|
+
&::after {
|
|
299
|
+
content: "";
|
|
300
|
+
width: var(--code-tab-logo-width);
|
|
301
|
+
height: var(--code-tab-logo-height);
|
|
302
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/objectivec/objectivec-plain.svg")
|
|
303
|
+
no-repeat;
|
|
304
|
+
margin-block: auto;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
&.active {
|
|
308
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-objective-c);
|
|
309
|
+
border-color: var(--openapi-code-tab-border-color-objective-c);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
.openapi-tabs__code-item--ocaml {
|
|
314
|
+
color: var(--ifm-color-warning);
|
|
315
|
+
|
|
316
|
+
&::after {
|
|
317
|
+
content: "";
|
|
318
|
+
width: var(--code-tab-logo-width);
|
|
319
|
+
height: var(--code-tab-logo-height);
|
|
320
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/ocaml/ocaml-original.svg")
|
|
321
|
+
no-repeat;
|
|
322
|
+
margin-block: auto;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
&.active {
|
|
326
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-objective-ocaml);
|
|
327
|
+
border-color: var(--openapi-code-tab-border-color-objective-ocaml);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
223
331
|
.openapi-tabs__code-item--nodejs {
|
|
224
332
|
color: var(--ifm-color-success);
|
|
225
333
|
|
|
@@ -256,6 +364,42 @@ body[class="ReactModal__Body--open"] {
|
|
|
256
364
|
}
|
|
257
365
|
}
|
|
258
366
|
|
|
367
|
+
.openapi-tabs__code-item--kotlin {
|
|
368
|
+
color: var(--ifm-color-gray-500);
|
|
369
|
+
|
|
370
|
+
&::after {
|
|
371
|
+
content: "";
|
|
372
|
+
width: var(--code-tab-logo-width);
|
|
373
|
+
height: var(--code-tab-logo-height);
|
|
374
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/kotlin/kotlin-original.svg")
|
|
375
|
+
no-repeat;
|
|
376
|
+
margin-block: auto;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
&.active {
|
|
380
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-kotlin);
|
|
381
|
+
border-color: var(--openapi-code-tab-border-color-kotlin);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
.openapi-tabs__code-item--rust {
|
|
386
|
+
color: var(--ifm-color-gray-500);
|
|
387
|
+
|
|
388
|
+
&::after {
|
|
389
|
+
content: "";
|
|
390
|
+
width: var(--code-tab-logo-width);
|
|
391
|
+
height: var(--code-tab-logo-height);
|
|
392
|
+
background: url("https://raw.githubusercontent.com/devicons/devicon/master/icons/rust/rust-original.svg")
|
|
393
|
+
no-repeat;
|
|
394
|
+
margin-block: auto;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
&.active {
|
|
398
|
+
box-shadow: 0 0 0 3px var(--openapi-code-tab-shadow-color-rust);
|
|
399
|
+
border-color: var(--openapi-code-tab-border-color-rust);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
|
|
259
403
|
.openapi-tabs__code-item--java {
|
|
260
404
|
color: var(--ifm-color-warning);
|
|
261
405
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
* ========================================================================== */
|
|
7
7
|
|
|
8
|
-
import React, { cloneElement, ReactElement } from "react";
|
|
8
|
+
import React, { cloneElement, ReactElement, useEffect, useRef } from "react";
|
|
9
9
|
|
|
10
10
|
import {
|
|
11
11
|
sanitizeTabsChildren,
|
|
@@ -43,10 +43,23 @@ function TabList({
|
|
|
43
43
|
selectValue,
|
|
44
44
|
tabValues,
|
|
45
45
|
}: CodeTabsProps & ReturnType<typeof useTabs>) {
|
|
46
|
-
const tabRefs
|
|
46
|
+
const tabRefs = useRef<(HTMLLIElement | null)[]>([]);
|
|
47
47
|
const { blockElementScrollPositionUntilNextRender } =
|
|
48
48
|
useScrollPositionBlocker();
|
|
49
49
|
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
const activeTab = tabRefs.current.find(
|
|
52
|
+
(tab) => tab?.getAttribute("aria-selected") === "true"
|
|
53
|
+
);
|
|
54
|
+
if (activeTab) {
|
|
55
|
+
activeTab.scrollIntoView({
|
|
56
|
+
behavior: "auto",
|
|
57
|
+
block: "center",
|
|
58
|
+
inline: "start",
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}, []);
|
|
62
|
+
|
|
50
63
|
const handleTabChange = (
|
|
51
64
|
event:
|
|
52
65
|
| React.FocusEvent<HTMLLIElement>
|
|
@@ -54,7 +67,7 @@ function TabList({
|
|
|
54
67
|
| React.KeyboardEvent<HTMLLIElement>
|
|
55
68
|
) => {
|
|
56
69
|
const newTab = event.currentTarget;
|
|
57
|
-
const newTabIndex = tabRefs.indexOf(newTab);
|
|
70
|
+
const newTabIndex = tabRefs.current.indexOf(newTab);
|
|
58
71
|
const newTabValue = tabValues[newTabIndex]!.value;
|
|
59
72
|
|
|
60
73
|
if (newTabValue !== selectedValue) {
|
|
@@ -80,7 +93,7 @@ function TabList({
|
|
|
80
93
|
newLanguage = languageSet.filter(
|
|
81
94
|
(lang: Language) => lang.language === newTabValue
|
|
82
95
|
)[0];
|
|
83
|
-
action.setSelectedVariant(newLanguage.
|
|
96
|
+
action.setSelectedVariant(newLanguage.variants[0].toLowerCase());
|
|
84
97
|
action.setSelectedSample(newLanguage.sample);
|
|
85
98
|
}
|
|
86
99
|
action.setLanguage(newLanguage);
|
|
@@ -96,13 +109,15 @@ function TabList({
|
|
|
96
109
|
break;
|
|
97
110
|
}
|
|
98
111
|
case "ArrowRight": {
|
|
99
|
-
const nextTab = tabRefs.indexOf(event.currentTarget) + 1;
|
|
100
|
-
focusElement = tabRefs[nextTab] ?? tabRefs[0]!;
|
|
112
|
+
const nextTab = tabRefs.current.indexOf(event.currentTarget) + 1;
|
|
113
|
+
focusElement = tabRefs.current[nextTab] ?? tabRefs.current[0]!;
|
|
101
114
|
break;
|
|
102
115
|
}
|
|
103
116
|
case "ArrowLeft": {
|
|
104
|
-
const prevTab = tabRefs.indexOf(event.currentTarget) - 1;
|
|
105
|
-
focusElement =
|
|
117
|
+
const prevTab = tabRefs.current.indexOf(event.currentTarget) - 1;
|
|
118
|
+
focusElement =
|
|
119
|
+
tabRefs.current[prevTab] ??
|
|
120
|
+
tabRefs.current[tabRefs.current.length - 1]!;
|
|
106
121
|
break;
|
|
107
122
|
}
|
|
108
123
|
default:
|
|
@@ -132,7 +147,7 @@ function TabList({
|
|
|
132
147
|
tabIndex={selectedValue === value ? 0 : -1}
|
|
133
148
|
aria-selected={selectedValue === value}
|
|
134
149
|
key={value}
|
|
135
|
-
ref={(tabControl) => tabRefs.push(tabControl)}
|
|
150
|
+
ref={(tabControl) => tabRefs.current.push(tabControl)}
|
|
136
151
|
onKeyDown={handleKeydown}
|
|
137
152
|
onClick={handleTabChange}
|
|
138
153
|
{...attributes}
|
|
@@ -35,13 +35,18 @@ function colorForMethod(method: string) {
|
|
|
35
35
|
export interface Props {
|
|
36
36
|
method: string;
|
|
37
37
|
path: string;
|
|
38
|
+
context?: "endpoint" | "callback";
|
|
38
39
|
}
|
|
39
40
|
|
|
40
|
-
function MethodEndpoint({ method, path }: Props) {
|
|
41
|
+
function MethodEndpoint({ method, path, context }: Props) {
|
|
41
42
|
let serverValue = useTypedSelector((state: any) => state.server.value);
|
|
42
43
|
let serverUrlWithVariables = "";
|
|
43
44
|
|
|
44
45
|
const renderServerUrl = () => {
|
|
46
|
+
if (context === "callback") {
|
|
47
|
+
return "";
|
|
48
|
+
}
|
|
49
|
+
|
|
45
50
|
if (serverValue && serverValue.variables) {
|
|
46
51
|
serverUrlWithVariables = serverValue.url.replace(/\/$/, "");
|
|
47
52
|
|