Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/calm-shirts-tie.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@gitbook/react-openapi': patch
---

Re-arrange OpenAPI Scopes for OAuth2
16 changes: 7 additions & 9 deletions packages/react-openapi/src/OpenAPIRequiredScopes.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,6 @@ export function OpenAPIRequiredScopes(props: {
}

const scopes = selectedSecurity.schemes.flatMap((scheme) => {
if (scheme.type === 'oauth2') {
return Object.entries(scheme.flows ?? {}).flatMap(([_, flow]) =>
Object.entries(flow.scopes ?? {})
);
}

return scheme.scopes ?? [];
});

Expand Down Expand Up @@ -66,16 +60,20 @@ export function OpenAPIRequiredScopes(props: {
);
}

function OpenAPISchemaScopes(props: {
export function OpenAPISchemaScopes(props: {
scopes: OpenAPISecurityScope[];
context: OpenAPIClientContext;
isOAuth2?: boolean;
}) {
const { scopes, context } = props;
const { scopes, context, isOAuth2 } = props;

return (
<div className="openapi-securities-scopes openapi-markdown">
<div className="openapi-required-scopes-description">
{t(context.translation, 'required_scopes_description')}
{t(
context.translation,
isOAuth2 ? 'available_scopes' : 'required_scopes_description'
)}
</div>
<ul>
{scopes.map((scope) => (
Expand Down
19 changes: 16 additions & 3 deletions packages/react-openapi/src/OpenAPISecurities.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { Fragment } from 'react';
import { InteractiveSection } from './InteractiveSection';
import { Markdown } from './Markdown';
import { OpenAPICopyButton } from './OpenAPICopyButton';
import { OpenAPIRequiredScopes } from './OpenAPIRequiredScopes';
import { OpenAPIRequiredScopes, OpenAPISchemaScopes } from './OpenAPIRequiredScopes';
import { OpenAPISchemaName } from './OpenAPISchemaName';
import type { OpenAPIClientContext } from './context';
import { t } from './translate';
Expand Down Expand Up @@ -43,7 +43,11 @@ export function OpenAPISecurities(props: {
body: (
<div className="openapi-schema">
{schemes.map((security, index) => {
const description = resolveDescription(security);
// OAuth2 description is already rendered in OpenAPISchemaOAuth2Item
const description =
security.type !== 'oauth2'
? resolveDescription(security)
: undefined;
return (
<div
key={`${key}-${index}`}
Expand Down Expand Up @@ -172,6 +176,10 @@ function OpenAPISchemaOAuth2Item(props: {
return null;
}

const scopes = !security.scopes?.length && flow.scopes ? Object.entries(flow.scopes) : [];

const description = resolveDescription(security);

return (
<div>
<OpenAPISchemaName
Expand All @@ -181,7 +189,9 @@ function OpenAPISchemaOAuth2Item(props: {
required={security.required}
/>
<div className="openapi-securities-oauth-content openapi-markdown">
{security.description ? <Markdown source={security.description} /> : null}
{description ? (
<Markdown source={description} className="openapi-securities-description" />
) : null}
{'authorizationUrl' in flow && flow.authorizationUrl ? (
<span>
Authorization URL:{' '}
Expand Down Expand Up @@ -221,6 +231,9 @@ function OpenAPISchemaOAuth2Item(props: {
</OpenAPICopyButton>
</span>
) : null}
{scopes.length ? (
<OpenAPISchemaScopes scopes={scopes} context={context} isOAuth2 />
) : null}
</div>
</div>
);
Expand Down
1 change: 1 addition & 0 deletions packages/react-openapi/src/translations/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export const de = {
available_items: 'Verfügbare Elemente',
required_scopes: 'Erforderliche Scopes',
required_scopes_description: 'Dieser Endpunkt erfordert die folgenden Scopes:',
available_scopes: 'Verfügbare Scopes:',
properties: 'Eigenschaften',
or: 'oder',
and: 'und',
Expand Down
1 change: 1 addition & 0 deletions packages/react-openapi/src/translations/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export const en = {
available_items: 'Available items',
required_scopes: 'Required scopes',
required_scopes_description: 'This endpoint requires the following scopes:',
available_scopes: 'Available scopes:',
possible_values: 'Possible values',
properties: 'Properties',
or: 'or',
Expand Down
1 change: 1 addition & 0 deletions packages/react-openapi/src/translations/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export const es = {
available_items: 'Elementos disponibles',
required_scopes: 'Scopes requeridos',
required_scopes_description: 'Este endpoint requiere los siguientes scopes:',
available_scopes: 'Scopes disponibles:',
properties: 'Propiedades',
or: 'o',
and: 'y',
Expand Down
1 change: 1 addition & 0 deletions packages/react-openapi/src/translations/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export const fr = {
available_items: 'Éléments disponibles',
required_scopes: 'Scopes requis',
required_scopes_description: 'Cet endpoint nécessite les scopes suivants:',
available_scopes: 'Scopes disponibles:',
properties: 'Propriétés',
or: 'ou',
and: 'et',
Expand Down
1 change: 1 addition & 0 deletions packages/react-openapi/src/translations/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export const ja = {
available_items: '利用可能なアイテム',
required_scopes: '必須スコープ',
required_scopes_description: 'このエンドポイントには次のスコープが必要です:',
available_scopes: '利用可能なスコープ:',
properties: 'プロパティ',
or: 'または',
and: 'かつ',
Expand Down
1 change: 1 addition & 0 deletions packages/react-openapi/src/translations/nl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export const nl = {
available_items: 'Beschikbare items',
required_scopes: 'Vereiste scopes',
required_scopes_description: 'Dit endpoint vereist de volgende scopes:',
available_scopes: 'Beschikbare scopes:',
properties: 'Eigenschappen',
or: 'of',
and: 'en',
Expand Down
1 change: 1 addition & 0 deletions packages/react-openapi/src/translations/no.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export const no = {
available_items: 'Tilgjengelige elementer',
required_scopes: 'Påkrevde scopes',
required_scopes_description: 'Dette endepunktet krever følgende scopes:',
available_scopes: 'Tilgjengelige scopes:',
properties: 'Egenskaper',
or: 'eller',
and: 'og',
Expand Down
1 change: 1 addition & 0 deletions packages/react-openapi/src/translations/pt-br.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export const pt_br = {
available_items: 'Itens disponíveis',
required_scopes: 'Scopes obrigatórios',
required_scopes_description: 'Este endpoint requer os seguintes scopes:',
available_scopes: 'Scopes disponíveis:',
properties: 'Propriedades',
or: 'ou',
and: 'e',
Expand Down
1 change: 1 addition & 0 deletions packages/react-openapi/src/translations/zh.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export const zh = {
available_items: '可用项',
required_scopes: '必需范围',
required_scopes_description: '此端点需要以下范围:',
available_scopes: '可用范围:',
properties: '属性',
or: '或',
and: '和',
Expand Down