Skip to content

Commit a512c90

Browse files
authored
Re-arrange OpenAPI Scopes for OAuth2 (#3799)
1 parent 9cbefa8 commit a512c90

File tree

12 files changed

+37
-12
lines changed

12 files changed

+37
-12
lines changed

.changeset/calm-shirts-tie.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+
Re-arrange OpenAPI Scopes for OAuth2

packages/react-openapi/src/OpenAPIRequiredScopes.tsx

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,6 @@ export function OpenAPIRequiredScopes(props: {
2525
}
2626

2727
const scopes = selectedSecurity.schemes.flatMap((scheme) => {
28-
if (scheme.type === 'oauth2') {
29-
return Object.entries(scheme.flows ?? {}).flatMap(([_, flow]) =>
30-
Object.entries(flow.scopes ?? {})
31-
);
32-
}
33-
3428
return scheme.scopes ?? [];
3529
});
3630

@@ -66,16 +60,20 @@ export function OpenAPIRequiredScopes(props: {
6660
);
6761
}
6862

69-
function OpenAPISchemaScopes(props: {
63+
export function OpenAPISchemaScopes(props: {
7064
scopes: OpenAPISecurityScope[];
7165
context: OpenAPIClientContext;
66+
isOAuth2?: boolean;
7267
}) {
73-
const { scopes, context } = props;
68+
const { scopes, context, isOAuth2 } = props;
7469

7570
return (
7671
<div className="openapi-securities-scopes openapi-markdown">
7772
<div className="openapi-required-scopes-description">
78-
{t(context.translation, 'required_scopes_description')}
73+
{t(
74+
context.translation,
75+
isOAuth2 ? 'available_scopes' : 'required_scopes_description'
76+
)}
7977
</div>
8078
<ul>
8179
{scopes.map((scope) => (

packages/react-openapi/src/OpenAPISecurities.tsx

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Fragment } from 'react';
33
import { InteractiveSection } from './InteractiveSection';
44
import { Markdown } from './Markdown';
55
import { OpenAPICopyButton } from './OpenAPICopyButton';
6-
import { OpenAPIRequiredScopes } from './OpenAPIRequiredScopes';
6+
import { OpenAPIRequiredScopes, OpenAPISchemaScopes } from './OpenAPIRequiredScopes';
77
import { OpenAPISchemaName } from './OpenAPISchemaName';
88
import type { OpenAPIClientContext } from './context';
99
import { t } from './translate';
@@ -43,7 +43,11 @@ export function OpenAPISecurities(props: {
4343
body: (
4444
<div className="openapi-schema">
4545
{schemes.map((security, index) => {
46-
const description = resolveDescription(security);
46+
// OAuth2 description is already rendered in OpenAPISchemaOAuth2Item
47+
const description =
48+
security.type !== 'oauth2'
49+
? resolveDescription(security)
50+
: undefined;
4751
return (
4852
<div
4953
key={`${key}-${index}`}
@@ -172,6 +176,10 @@ function OpenAPISchemaOAuth2Item(props: {
172176
return null;
173177
}
174178

179+
const scopes = !security.scopes?.length && flow.scopes ? Object.entries(flow.scopes) : [];
180+
181+
const description = resolveDescription(security);
182+
175183
return (
176184
<div>
177185
<OpenAPISchemaName
@@ -181,7 +189,9 @@ function OpenAPISchemaOAuth2Item(props: {
181189
required={security.required}
182190
/>
183191
<div className="openapi-securities-oauth-content openapi-markdown">
184-
{security.description ? <Markdown source={security.description} /> : null}
192+
{description ? (
193+
<Markdown source={description} className="openapi-securities-description" />
194+
) : null}
185195
{'authorizationUrl' in flow && flow.authorizationUrl ? (
186196
<span>
187197
Authorization URL:{' '}
@@ -221,6 +231,9 @@ function OpenAPISchemaOAuth2Item(props: {
221231
</OpenAPICopyButton>
222232
</span>
223233
) : null}
234+
{scopes.length ? (
235+
<OpenAPISchemaScopes scopes={scopes} context={context} isOAuth2 />
236+
) : null}
224237
</div>
225238
</div>
226239
);

packages/react-openapi/src/translations/de.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export const de = {
3838
available_items: 'Verfügbare Elemente',
3939
required_scopes: 'Erforderliche Scopes',
4040
required_scopes_description: 'Dieser Endpunkt erfordert die folgenden Scopes:',
41+
available_scopes: 'Verfügbare Scopes:',
4142
properties: 'Eigenschaften',
4243
or: 'oder',
4344
and: 'und',

packages/react-openapi/src/translations/en.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export const en = {
3838
available_items: 'Available items',
3939
required_scopes: 'Required scopes',
4040
required_scopes_description: 'This endpoint requires the following scopes:',
41+
available_scopes: 'Available scopes:',
4142
possible_values: 'Possible values',
4243
properties: 'Properties',
4344
or: 'or',

packages/react-openapi/src/translations/es.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export const es = {
3838
available_items: 'Elementos disponibles',
3939
required_scopes: 'Scopes requeridos',
4040
required_scopes_description: 'Este endpoint requiere los siguientes scopes:',
41+
available_scopes: 'Scopes disponibles:',
4142
properties: 'Propiedades',
4243
or: 'o',
4344
and: 'y',

packages/react-openapi/src/translations/fr.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export const fr = {
3838
available_items: 'Éléments disponibles',
3939
required_scopes: 'Scopes requis',
4040
required_scopes_description: 'Cet endpoint nécessite les scopes suivants:',
41+
available_scopes: 'Scopes disponibles:',
4142
properties: 'Propriétés',
4243
or: 'ou',
4344
and: 'et',

packages/react-openapi/src/translations/ja.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export const ja = {
3838
available_items: '利用可能なアイテム',
3939
required_scopes: '必須スコープ',
4040
required_scopes_description: 'このエンドポイントには次のスコープが必要です:',
41+
available_scopes: '利用可能なスコープ:',
4142
properties: 'プロパティ',
4243
or: 'または',
4344
and: 'かつ',

packages/react-openapi/src/translations/nl.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export const nl = {
3838
available_items: 'Beschikbare items',
3939
required_scopes: 'Vereiste scopes',
4040
required_scopes_description: 'Dit endpoint vereist de volgende scopes:',
41+
available_scopes: 'Beschikbare scopes:',
4142
properties: 'Eigenschappen',
4243
or: 'of',
4344
and: 'en',

packages/react-openapi/src/translations/no.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export const no = {
3838
available_items: 'Tilgjengelige elementer',
3939
required_scopes: 'Påkrevde scopes',
4040
required_scopes_description: 'Dette endepunktet krever følgende scopes:',
41+
available_scopes: 'Tilgjengelige scopes:',
4142
properties: 'Egenskaper',
4243
or: 'eller',
4344
and: 'og',

0 commit comments

Comments
 (0)