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',
};