diff --git a/package.json b/package.json index f7958bd7..2b72d352 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "redoc", - "version": "2.0.0-0.3.0", + "version": "2.0.0-0.4.0", "description": "ReDoc", "repository": { "type": "git", diff --git a/src/components/Fields/ExtraDescriptions.tsx b/src/components/Custom/ExtraDescriptions.tsx similarity index 100% rename from src/components/Fields/ExtraDescriptions.tsx rename to src/components/Custom/ExtraDescriptions.tsx diff --git a/src/components/Custom/ExtraOperationInformation.tsx b/src/components/Custom/ExtraOperationInformation.tsx new file mode 100644 index 00000000..22e7497f --- /dev/null +++ b/src/components/Custom/ExtraOperationInformation.tsx @@ -0,0 +1,23 @@ +import * as React from 'react'; + +import { MenuItemTitle, OperationBadge } from '../SideMenu'; +import { observer } from 'mobx-react'; +import { shortenHTTPVerb } from '../../utils'; + +export interface ExtraOperationInformationProps { + description: string; + httpVerb: string; + label: string; +} + +export const ExtraOperationInformation = observer((props: ExtraOperationInformationProps) => { + return ( +
+
{props.description}
+
+ {shortenHTTPVerb(props.httpVerb)} + {props.label} +
+
+ ); +}); diff --git a/src/components/Fields/FieldDetails.tsx b/src/components/Fields/FieldDetails.tsx index d7b7aa65..5b108cf7 100644 --- a/src/components/Fields/FieldDetails.tsx +++ b/src/components/Fields/FieldDetails.tsx @@ -13,7 +13,7 @@ import { ExternalDocumentation } from '../ExternalDocumentation/ExternalDocument import { Markdown } from '../Markdown/Markdown'; import { EnumValues } from './EnumValues'; import { Extensions } from './Extensions'; -import { ExtraDescription } from './ExtraDescriptions'; +import { ExtraDescription } from '../Custom/ExtraDescriptions'; import { FieldProps } from './Field'; import { Examples } from './Examples'; import { ConstraintsView } from './FieldContstraints'; @@ -25,6 +25,7 @@ import { l } from '../../services/Labels'; import { OptionsContext } from '../OptionsProvider'; import { Pattern } from './Pattern'; import { ArrayItemDetails } from './ArrayItemDetails'; +import { ExtraOperationInformation } from '../Custom/ExtraOperationInformation'; export const FieldDetailsComponent = observer((props: FieldProps) => { const { enumSkipQuotes, hideSchemaTitles } = React.useContext(OptionsContext); @@ -39,6 +40,7 @@ export const FieldDetailsComponent = observer((props: FieldProps) => { in: _in, const: _const, extraDescription, + extraApiReferenceForValidation, } = field; const isArrayType = schema.type === 'array'; @@ -126,6 +128,13 @@ export const FieldDetailsComponent = observer((props: FieldProps) => { )} {(renderDiscriminatorSwitch && renderDiscriminatorSwitch(props)) || null} {(_const && ) || null} + {!!extraApiReferenceForValidation && ( + + )} ); }); diff --git a/src/services/MenuStore.ts b/src/services/MenuStore.ts index 41660e6f..4ef2860c 100644 --- a/src/services/MenuStore.ts +++ b/src/services/MenuStore.ts @@ -259,7 +259,6 @@ export class MenuStore { ) { // item here can be a copy from search results so find corresponding item from menu const menuItem = (item && this.getItemById(item.id)) || item; - console.log('activateAndScroll', menuItem?.id, updateLocation, rewriteHistory); this.activate(menuItem, updateLocation, rewriteHistory); this.scrollToActive(); if (!menuItem || !menuItem.items.length) { diff --git a/src/services/models/Field.ts b/src/services/models/Field.ts index f2df447b..954c6677 100644 --- a/src/services/models/Field.ts +++ b/src/services/models/Field.ts @@ -61,6 +61,11 @@ export class FieldModel { serializationMime?: string; extraDescription: Record; + extraApiReferenceForValidation: { + httpVerb: string; + label: string; + description: string; + }; constructor( parser: OpenAPIParser, @@ -105,6 +110,17 @@ export class FieldModel { this.extraDescription = info[MilesConstants.MILES_EXTRA_DESCRIPTION_PROPERTY_NAME]; } + if ( + info[MilesConstants.MILES_VALIDATION_MODEL_PROPERTY_NAME] !== undefined && + info[MilesConstants.MILES_VALIDATION_MODEL_PROPERTY_NAME]?.label + ) { + this.extraApiReferenceForValidation = { + label: info[MilesConstants.MILES_VALIDATION_MODEL_PROPERTY_NAME]?.label, + httpVerb: info[MilesConstants.MILES_VALIDATION_MODEL_PROPERTY_NAME]?.httpVerb, + description: info[MilesConstants.MILES_VALIDATION_MODEL_PROPERTY_NAME]?.description, + }; + } + if (serializationMime) { this.serializationMime = serializationMime; } else if (info.style) { diff --git a/src/services/models/Schema.ts b/src/services/models/Schema.ts index 1ab9e7f8..a31d69ba 100644 --- a/src/services/models/Schema.ts +++ b/src/services/models/Schema.ts @@ -461,6 +461,14 @@ function buildFields( field[MilesConstants.MILES_EXTRA_DESCRIPTION_PROPERTY_NAME] != null ? field[MilesConstants.MILES_EXTRA_DESCRIPTION_PROPERTY_NAME] : {}, + [MilesConstants.MILES_EXTRA_DESCRIPTION_PROPERTY_NAME]: + field[MilesConstants.MILES_EXTRA_DESCRIPTION_PROPERTY_NAME] != null + ? field[MilesConstants.MILES_EXTRA_DESCRIPTION_PROPERTY_NAME] + : {}, + [MilesConstants.MILES_VALIDATION_MODEL_PROPERTY_NAME]: + field[MilesConstants.MILES_VALIDATION_MODEL_PROPERTY_NAME] != null + ? field[MilesConstants.MILES_VALIDATION_MODEL_PROPERTY_NAME] + : {}, }, $ref + '/properties/' + fieldName, options, @@ -498,6 +506,14 @@ function buildFields( field[MilesConstants.MILES_EXTRA_DESCRIPTION_PROPERTY_NAME] != null ? field[MilesConstants.MILES_EXTRA_DESCRIPTION_PROPERTY_NAME] : {}, + [MilesConstants.MILES_EXTRA_DESCRIPTION_PROPERTY_NAME]: + field[MilesConstants.MILES_EXTRA_DESCRIPTION_PROPERTY_NAME] != null + ? field[MilesConstants.MILES_EXTRA_DESCRIPTION_PROPERTY_NAME] + : {}, + [MilesConstants.MILES_VALIDATION_MODEL_PROPERTY_NAME]: + field[MilesConstants.MILES_VALIDATION_MODEL_PROPERTY_NAME] != null + ? field[MilesConstants.MILES_VALIDATION_MODEL_PROPERTY_NAME] + : {}, }, `${$ref}/patternProperties/${fieldName}`, options, diff --git a/src/types/miles.constants.ts b/src/types/miles.constants.ts index 720d4bab..f2732e6a 100644 --- a/src/types/miles.constants.ts +++ b/src/types/miles.constants.ts @@ -1,5 +1,6 @@ export const MilesConstants = { MILES_EXTRA_DESCRIPTION_PROPERTY_NAME: 'x-miles-extra-description', + MILES_VALIDATION_MODEL_PROPERTY_NAME: 'x-miles-validation-model', MILES_M2M: 'x-miles-m2m', HIDE_LOGO_QUERY_PARAM: 'hideLogo', };