Skip to content

Commit dc2dbc5

Browse files
authored
Update OpenAPI code examples to support multiple content-type (#2843)
1 parent bdd6303 commit dc2dbc5

File tree

7 files changed

+888
-25
lines changed

7 files changed

+888
-25
lines changed

.changeset/big-lemons-wait.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@gitbook/react-openapi': patch
3+
---
4+
5+
Update OpenAPI code examples to support multiple content-type

packages/react-openapi/src/OpenAPICodeSample.tsx

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,7 @@ export function OpenAPICodeSample(props: {
5757
data.path +
5858
(searchParams.size ? `?${searchParams.toString()}` : ''),
5959
method: data.method,
60-
body: requestBodyContent
61-
? generateMediaTypeExample(requestBodyContent[1], {
62-
omitEmptyAndOptionalProperties: true,
63-
})
64-
: undefined,
60+
body: requestBodyContent ? generateMediaTypeExample(requestBodyContent[1]) : undefined,
6561
headers: {
6662
...getSecurityHeaders(data.securities),
6763
...headersObject,

packages/react-openapi/src/OpenAPISchema.tsx

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -260,12 +260,7 @@ export function OpenAPISchemaPresentation(props: OpenAPISchemaPropertyEntry) {
260260
) : null}
261261
{shouldDisplayExample(schema) ? (
262262
<div className="openapi-schema-example">
263-
Example:{' '}
264-
<code>
265-
{typeof schema.example === 'string'
266-
? schema.example
267-
: stringifyOpenAPI(schema.example)}
268-
</code>
263+
Example: <code>{formatExample(schema.example)}</code>
269264
</div>
270265
) : null}
271266
{schema.pattern ? (
@@ -434,3 +429,16 @@ function getDisclosureLabel(schema: OpenAPIV3.SchemaObject): string | undefined
434429

435430
return schema.title;
436431
}
432+
433+
function formatExample(example: any): string {
434+
if (typeof example === 'string') {
435+
return example
436+
.replace(/\n/g, ' ') // Replace newlines with spaces
437+
.replace(/\s+/g, ' ') // Collapse multiple spaces/newlines into a single space
438+
.replace(/([\{\}:,])\s+/g, '$1 ') // Ensure a space after {, }, :, and ,
439+
.replace(/\s+([\{\}:,])/g, ' $1') // Ensure a space before {, }, :, and ,
440+
.trim();
441+
}
442+
443+
return stringifyOpenAPI(example);
444+
}

packages/react-openapi/src/OpenAPITabs.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,17 @@ export function OpenAPITabs(
7474
const tabFromState = syncedTabs.get(stateKey);
7575

7676
if (!items.some((item) => item.key === tabFromState?.key)) {
77-
return;
77+
return setSelectedTab(defaultTab);
7878
}
7979

8080
if (tabFromState && tabFromState?.key !== selectedTab?.key) {
81-
setSelectedTab(tabFromState);
81+
const tabFromItems = items.find((item) => item.key === tabFromState.key);
82+
83+
if (!tabFromItems) {
84+
return;
85+
}
86+
87+
setSelectedTab(tabFromItems);
8288
}
8389
}
8490
}, [isVisible, stateKey, syncedTabs, selectedTabKey]);

0 commit comments

Comments
 (0)