import React, { PureComponent } from "react" import PropTypes from "prop-types" import { getList } from "core/utils" import * as CustomPropTypes from "core/proptypes" //import "less/opblock" export default class Operation extends PureComponent { static propTypes = { path: PropTypes.string.isRequired, method: PropTypes.string.isRequired, operation: PropTypes.object.isRequired, showSummary: PropTypes.bool, isShownKey: CustomPropTypes.arrayOrString.isRequired, jumpToKey: CustomPropTypes.arrayOrString.isRequired, allowTryItOut: PropTypes.bool, displayOperationId: PropTypes.bool, displayRequestDuration: PropTypes.bool, response: PropTypes.object, request: PropTypes.object, getComponent: PropTypes.func.isRequired, authActions: PropTypes.object, authSelectors: PropTypes.object, specActions: PropTypes.object.isRequired, specSelectors: PropTypes.object.isRequired, oas3Actions: PropTypes.object.isRequired, layoutActions: PropTypes.object.isRequired, layoutSelectors: PropTypes.object.isRequired, fn: PropTypes.object.isRequired, getConfigs: PropTypes.func.isRequired } static defaultProps = { showSummary: true, response: null, allowTryItOut: true, displayOperationId: false, displayRequestDuration: false } constructor(props, context) { super(props, context) this.state = { tryItOutEnabled: false } } componentWillReceiveProps(nextProps) { const defaultContentType = "application/json" let { specActions, path, method, operation } = nextProps let producesValue = operation.get("produces_value") let produces = operation.get("produces") let consumes = operation.get("consumes") let consumesValue = operation.get("consumes_value") if(nextProps.response !== this.props.response) { this.setState({ executeInProgress: false }) } if (producesValue === undefined) { producesValue = produces && produces.size ? produces.first() : defaultContentType specActions.changeProducesValue([path, method], producesValue) } if (consumesValue === undefined) { consumesValue = consumes && consumes.size ? consumes.first() : defaultContentType specActions.changeConsumesValue([path, method], consumesValue) } } toggleShown =() => { let { layoutActions, isShownKey } = this.props layoutActions.show(isShownKey, !this.isShown()) } isShown =() => { let { layoutSelectors, isShownKey, getConfigs } = this.props let { docExpansion } = getConfigs() return layoutSelectors.isShown(isShownKey, docExpansion === "full" ) // Here is where we set the default } onTryoutClick =() => { this.setState({tryItOutEnabled: !this.state.tryItOutEnabled}) } onCancelClick =() => { let { specActions, path, method } = this.props this.setState({tryItOutEnabled: !this.state.tryItOutEnabled}) specActions.clearValidateParams([path, method]) } onExecute = () => { this.setState({ executeInProgress: true }) } render() { let { isShownKey, jumpToKey, path, method, operation, showSummary, response, request, allowTryItOut, displayOperationId, displayRequestDuration, fn, getComponent, specActions, specSelectors, authActions, authSelectors, getConfigs, oas3Actions } = this.props let summary = operation.get("summary") let description = operation.get("description") let deprecated = operation.get("deprecated") let externalDocs = operation.get("externalDocs") let responses = operation.get("responses") let security = operation.get("security") || specSelectors.security() let produces = operation.get("produces") let schemes = operation.get("schemes") let parameters = getList(operation, ["parameters"]) let operationId = operation.get("__originalOperationId") let operationScheme = specSelectors.operationScheme(path, method) const Responses = getComponent("responses") const Parameters = getComponent( "parameters" ) const Execute = getComponent( "execute" ) const Clear = getComponent( "clear" ) const AuthorizeOperationBtn = getComponent( "authorizeOperationBtn" ) const JumpToPath = getComponent("JumpToPath", true) const Collapse = getComponent( "Collapse" ) const Markdown = getComponent( "Markdown" ) const Schemes = getComponent( "schemes" ) const { deepLinking } = getConfigs() const isDeepLinkingEnabled = deepLinking && deepLinking !== "false" // Merge in Live Response if(responses && response && response.size > 0) { let notDocumented = !responses.get(String(response.get("status"))) response = response.set("notDocumented", notDocumented) } let { tryItOutEnabled } = this.state let shown = this.isShown() let onChangeKey = [ path, method ] // Used to add values to _this_ operation ( indexed by path and method ) return (
{method.toUpperCase()} e.preventDefault() : null} href={isDeepLinkingEnabled ? `#/${isShownKey[1]}/${isShownKey[2]}` : null}> {path} { !showSummary ? null :
{ summary }
} { displayOperationId && operationId ? {operationId} : null } { (!security || !security.count()) ? null : }
{ deprecated &&

Warning: Deprecated

} { description &&
} { externalDocs && externalDocs.get("url") ?

Find more details

{ externalDocs.get("url") }
: null } {!tryItOutEnabled || !allowTryItOut ? null : schemes && schemes.size ?
: null }
{ !tryItOutEnabled || !allowTryItOut ? null : } { (!tryItOutEnabled || !response || !allowTryItOut) ? null : }
{this.state.executeInProgress ?
: null} { !responses ? null : }
) } }