Skip to content

Commit 4247361

Browse files
authored
Add required query parameters to the code sample (#2474)
1 parent 2c437f7 commit 4247361

File tree

2 files changed

+35
-12
lines changed

2 files changed

+35
-12
lines changed

.changeset/plenty-pets-hope.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@gitbook/react-openapi': minor
3+
---
4+
5+
Add required query parameters to the code sample

packages/react-openapi/src/OpenAPICodeSample.tsx

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,26 +19,44 @@ export function OpenAPICodeSample(props: {
1919
}) {
2020
const { data, context } = props;
2121

22-
const requiredHeaders = data.operation.parameters
23-
?.map(noReference)
24-
.filter((param) => param.in === 'header' && param.required);
25-
22+
const searchParams = new URLSearchParams();
2623
const headersObject: { [k: string]: string } = {};
27-
requiredHeaders?.forEach((header) => {
28-
const example = header.schema
29-
? generateSchemaExample(noReference(header.schema))
30-
: undefined;
31-
if (example !== undefined) {
32-
headersObject[header.name] =
33-
typeof example !== 'string' ? JSON.stringify(example) : example;
24+
25+
data.operation.parameters?.forEach((rawParam) => {
26+
const param = noReference(rawParam);
27+
if (!param) {
28+
return;
29+
}
30+
31+
if (param.in === 'header' && param.required) {
32+
const example = param.schema
33+
? generateSchemaExample(noReference(param.schema))
34+
: undefined;
35+
if (example !== undefined) {
36+
headersObject[param.name] =
37+
typeof example !== 'string' ? JSON.stringify(example) : example;
38+
}
39+
} else if (param.in === 'query' && param.required) {
40+
const example = param.schema
41+
? generateSchemaExample(noReference(param.schema))
42+
: undefined;
43+
if (example !== undefined) {
44+
searchParams.append(
45+
param.name,
46+
String(Array.isArray(example) ? example[0] : example),
47+
);
48+
}
3449
}
3550
});
3651

3752
const requestBody = noReference(data.operation.requestBody);
3853
const requestBodyContent = requestBody ? Object.entries(requestBody.content)[0] : undefined;
3954

4055
const input: CodeSampleInput = {
41-
url: getServersURL(data.servers) + data.path,
56+
url:
57+
getServersURL(data.servers) +
58+
data.path +
59+
(searchParams.size ? `?${searchParams.toString()}` : ''),
4260
method: data.method,
4361
body: requestBodyContent
4462
? generateMediaTypeExample(requestBodyContent[1], { onlyRequired: true })

0 commit comments

Comments
 (0)