diff --git a/README.md b/README.md index eff32bc7ef16a48b36a50b75c301729ad2b999b9..538b6e0bc97294d35d8dd7de16650c8963c51832 100644 --- a/README.md +++ b/README.md @@ -139,6 +139,7 @@ parameterMacro | MUST be a function. Function to set default value to parameters modelPropertyMacro | MUST be a function. Function to set default values to each property in model. Accepts one argument modelPropertyMacro(property), property is immutable docExpansion | Controls the default expansion setting for the operations and tags. It can be 'list' (expands only the tags), 'full' (expands the tags and operations) or 'none' (expands nothing). The default is 'list'. displayOperationId | Controls the display of operationId in operations list. The default is `false`. +displayRequestDuration | Controls the display of the request duration (in milliseconds) for `Try it out` requests. The default is `false`. ### Plugins diff --git a/src/core/components/live-response.jsx b/src/core/components/live-response.jsx index 7c6f13846e3bb7d29afd15fa3da58adb21a9d205..ab039043e4edbb4b3dca050406dc80a421c9d020 100644 --- a/src/core/components/live-response.jsx +++ b/src/core/components/live-response.jsx @@ -28,11 +28,12 @@ Duration.propTypes = { export default class LiveResponse extends React.Component { static propTypes = { response: PropTypes.object.isRequired, - getComponent: PropTypes.func.isRequired + getComponent: PropTypes.func.isRequired, + displayRequestDuration: PropTypes.bool.isRequired } render() { - const { request, response, getComponent } = this.props + const { request, response, getComponent, displayRequestDuration } = this.props const status = response.get("status") const url = response.get("url") @@ -94,7 +95,7 @@ export default class LiveResponse extends React.Component { hasHeaders ? : null } { - duration ? : null + displayRequestDuration && duration ? : null } diff --git a/src/core/components/operation.jsx b/src/core/components/operation.jsx index 31f52cda39f11d4099a62a98a2a03393bb499aa7..704b729e4f937c43925fb1d0c8a1b9cbaa8c4ab1 100644 --- a/src/core/components/operation.jsx +++ b/src/core/components/operation.jsx @@ -17,6 +17,7 @@ export default class Operation extends PureComponent { allowTryItOut: PropTypes.bool, displayOperationId: PropTypes.bool, + displayRequestDuration: PropTypes.bool, response: PropTypes.object, request: PropTypes.object, @@ -37,6 +38,7 @@ export default class Operation extends PureComponent { response: null, allowTryItOut: true, displayOperationId: false, + displayRequestDuration: false } constructor(props, context) { @@ -107,7 +109,7 @@ export default class Operation extends PureComponent { request, allowTryItOut, displayOperationId, - + displayRequestDuration, fn, getComponent, specActions, @@ -250,6 +252,7 @@ export default class Operation extends PureComponent { produces={ produces } producesValue={ operation.get("produces_value") } pathMethod={ [path, method] } + displayRequestDuration={ displayRequestDuration } fn={fn} /> } diff --git a/src/core/components/operations.jsx b/src/core/components/operations.jsx index 16c8a86e18efb85a3417ea41bdbd49d197e9d38f..7eb7b4e75ab115fe85bf5440168ce0ccbab9eb3f 100644 --- a/src/core/components/operations.jsx +++ b/src/core/components/operations.jsx @@ -32,7 +32,7 @@ export default class Operations extends React.Component { const Collapse = getComponent("Collapse") let showSummary = layoutSelectors.showSummary() - let { docExpansion, displayOperationId } = getConfigs() + let { docExpansion, displayOperationId, displayRequestDuration } = getConfigs() return (
@@ -87,6 +87,7 @@ export default class Operations extends React.Component { allowTryItOut={allowTryItOut} displayOperationId={displayOperationId} + displayRequestDuration={displayRequestDuration} specActions={ specActions } specSelectors={ specSelectors } diff --git a/src/core/components/responses.jsx b/src/core/components/responses.jsx index 8bbe4f0ffa3374090274bdd1ec66d5a0d04d8684..1da9fb69ceec41d28f8471f080eb2b2472d95a62 100644 --- a/src/core/components/responses.jsx +++ b/src/core/components/responses.jsx @@ -14,19 +14,21 @@ export default class Responses extends React.Component { specSelectors: PropTypes.object.isRequired, specActions: PropTypes.object.isRequired, pathMethod: PropTypes.array.isRequired, + displayRequestDuration: PropTypes.bool.isRequired, fn: PropTypes.object.isRequired } static defaultProps = { request: null, tryItOutResponse: null, - produces: fromJS(["application/json"]) + produces: fromJS(["application/json"]), + displayRequestDuration: false } onChangeProducesWrapper = ( val ) => this.props.specActions.changeProducesValue(this.props.pathMethod, val) render() { - let { responses, request, tryItOutResponse, getComponent, specSelectors, fn, producesValue } = this.props + let { responses, request, tryItOutResponse, getComponent, specSelectors, fn, producesValue, displayRequestDuration } = this.props let defaultCode = defaultStatusCode( responses ) const ContentType = getComponent( "contentType" ) @@ -53,7 +55,8 @@ export default class Responses extends React.Component { :
+ getComponent={ getComponent } + displayRequestDuration={ displayRequestDuration } />

Responses

diff --git a/src/core/index.js b/src/core/index.js index 461a67cd1e8a99c8dd53da719e4f464d0f40da29..228ff83889fa45a8f4762663627cf5beef840237 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -8,7 +8,7 @@ import { parseSeach, filterConfigs } from "core/utils" const CONFIGS = [ "url", "spec", "validatorUrl", "onComplete", "onFailure", "authorizations", "docExpansion", "apisSorter", "operationsSorter", "supportedSubmitMethods", "dom_id", "defaultModelRendering", "oauth2RedirectUrl", - "showRequestHeaders", "custom", "modelPropertyMacro", "parameterMacro", "displayOperationId" ] + "showRequestHeaders", "custom", "modelPropertyMacro", "parameterMacro", "displayOperationId" , "displayRequestDuration"] // eslint-disable-next-line no-undef const { GIT_DIRTY, GIT_COMMIT, PACKAGE_VERSION } = buildInfo @@ -29,6 +29,7 @@ module.exports = function SwaggerUI(opts) { configs: {}, custom: {}, displayOperationId: false, + displayRequestDuration: false, // Initial set of plugins ( TODO rename this, or refactor - we don't need presets _and_ plugins. Its just there for performance. // Instead, we can compile the first plugin ( it can be a collection of plugins ), then batch the rest.