diff --git a/src/core/components/operation.jsx b/src/core/components/operation.jsx index eb21b8db..b9a0bd22 100644 --- a/src/core/components/operation.jsx +++ b/src/core/components/operation.jsx @@ -117,7 +117,8 @@ export default class Operation extends PureComponent { specSelectors, authActions, authSelectors, - getConfigs + getConfigs, + oas3Actions } = this.props let summary = operation.get("summary") @@ -265,6 +266,7 @@ export default class Operation extends PureComponent { getComponent={ getComponent } getConfigs={ getConfigs } specSelectors={ specSelectors } + oas3Actions={oas3Actions} specActions={ specActions } produces={ produces } producesValue={ operation.get("produces_value") } diff --git a/src/core/components/operations.jsx b/src/core/components/operations.jsx index 2aec664a..4a0ea3ac 100644 --- a/src/core/components/operations.jsx +++ b/src/core/components/operations.jsx @@ -9,6 +9,7 @@ export default class Operations extends React.Component { static propTypes = { specSelectors: PropTypes.object.isRequired, specActions: PropTypes.object.isRequired, + oas3Actions: PropTypes.object.isRequired, getComponent: PropTypes.func.isRequired, layoutSelectors: PropTypes.object.isRequired, layoutActions: PropTypes.object.isRequired, @@ -21,6 +22,7 @@ export default class Operations extends React.Component { let { specSelectors, specActions, + oas3Actions, getComponent, layoutSelectors, layoutActions, @@ -147,6 +149,8 @@ export default class Operations extends React.Component { specActions={ specActions } specSelectors={ specSelectors } + oas3Actions={oas3Actions} + layoutActions={ layoutActions } layoutSelectors={ layoutSelectors } diff --git a/src/core/components/response.jsx b/src/core/components/response.jsx index b2507a2e..8aad5109 100644 --- a/src/core/components/response.jsx +++ b/src/core/components/response.jsx @@ -48,13 +48,24 @@ export default class Response extends React.Component { specSelectors: PropTypes.object.isRequired, fn: PropTypes.object.isRequired, contentType: PropTypes.string, - controlsAcceptHeader: PropTypes.bool + controlsAcceptHeader: PropTypes.bool, + onContentTypeChange: PropTypes.func } static defaultProps = { response: fromJS({}), + onContentTypeChange: () => {} }; + _onContentTypeChange = (value) => { + const { onContentTypeChange, controlsAcceptHeader } = this.props + this.setState({ responseContentType: value }) + onContentTypeChange({ + value: value, + controlsAcceptHeader + }) + } + render() { let { code, @@ -116,7 +127,7 @@ export default class Response extends React.Component { this.setState({ responseContentType: val })} + onChange={this._onContentTypeChange} /> { controlsAcceptHeader ? Controls Accept header. : null } diff --git a/src/core/components/responses.jsx b/src/core/components/responses.jsx index 1f43f27f..a6ea4a34 100644 --- a/src/core/components/responses.jsx +++ b/src/core/components/responses.jsx @@ -29,6 +29,16 @@ export default class Responses extends React.Component { onChangeProducesWrapper = ( val ) => this.props.specActions.changeProducesValue(this.props.pathMethod, val) + onResponseContentTypeChange = ({ controlsAcceptHeader, value }) => { + const { oas3Actions, pathMethod } = this.props + if(controlsAcceptHeader) { + oas3Actions.setResponseContentType({ + value, + pathMethod + }) + } + } + render() { let { responses, @@ -93,7 +103,6 @@ export default class Responses extends React.Component { { responses.entrySeq().map( ([code, response]) => { - let className = tryItOutResponse && tryItOutResponse.get("status") == code ? "response_current" : "" return ( ) diff --git a/src/core/plugins/oas3/actions.js b/src/core/plugins/oas3/actions.js index 4a5bf9ac..ad81f3e7 100644 --- a/src/core/plugins/oas3/actions.js +++ b/src/core/plugins/oas3/actions.js @@ -4,6 +4,7 @@ export const UPDATE_SELECTED_SERVER = "oas3_set_servers" export const UPDATE_REQUEST_BODY_VALUE = "oas3_set_request_body_value" export const UPDATE_REQUEST_CONTENT_TYPE = "oas3_set_request_content_type" +export const UPDATE_RESPONSE_CONTENT_TYPE = "oas3_set_response_content_type" export const UPDATE_SERVER_VARIABLE_VALUE = "oas3_set_server_variable_value" export function setSelectedServer (selectedServerUrl) { @@ -27,6 +28,13 @@ export function setRequestContentType ({ value, pathMethod }) { } } +export function setResponseContentType ({ value, pathMethod }) { + return { + type: UPDATE_RESPONSE_CONTENT_TYPE, + payload: { value, pathMethod } + } +} + export function setServerVariableValue ({ server, key, val }) { return { type: UPDATE_SERVER_VARIABLE_VALUE, diff --git a/src/core/plugins/oas3/reducers.js b/src/core/plugins/oas3/reducers.js index 810c1ba0..149f55e3 100644 --- a/src/core/plugins/oas3/reducers.js +++ b/src/core/plugins/oas3/reducers.js @@ -2,7 +2,8 @@ import { UPDATE_SELECTED_SERVER, UPDATE_REQUEST_BODY_VALUE, UPDATE_REQUEST_CONTENT_TYPE, - UPDATE_SERVER_VARIABLE_VALUE + UPDATE_SERVER_VARIABLE_VALUE, + UPDATE_RESPONSE_CONTENT_TYPE } from "./actions" export default { @@ -17,6 +18,10 @@ export default { let [path, method] = pathMethod return state.setIn( [ "requestData", path, method, "requestContentType" ], value) }, + [UPDATE_RESPONSE_CONTENT_TYPE]: (state, { payload: { value, pathMethod } } ) =>{ + let [path, method] = pathMethod + return state.setIn( [ "requestData", path, method, "responseContentType" ], value) + }, [UPDATE_SERVER_VARIABLE_VALUE]: (state, { payload: { server, key, val } } ) =>{ return state.setIn( [ "serverVariableValues", server, key ], val) }, diff --git a/src/core/plugins/oas3/selectors.js b/src/core/plugins/oas3/selectors.js index a6c57761..86fc617f 100644 --- a/src/core/plugins/oas3/selectors.js +++ b/src/core/plugins/oas3/selectors.js @@ -30,6 +30,11 @@ export const requestContentType = onlyOAS3((state, path, method) => { } ) +export const responseContentType = onlyOAS3((state, path, method) => { + return state.getIn(["requestData", path, method, "responseContentType"]) || null + } +) + export const serverVariableValue = onlyOAS3((state, server, key) => { return state.getIn(["serverVariableValues", server, key]) || null } diff --git a/src/core/plugins/spec/actions.js b/src/core/plugins/spec/actions.js index 7465574c..98919880 100644 --- a/src/core/plugins/spec/actions.js +++ b/src/core/plugins/spec/actions.js @@ -218,6 +218,7 @@ export const executeRequest = (req) => req.server = oas3Selectors.selectedServer() req.serverVariables = oas3Selectors.serverVariables(req.server).toJS() req.requestContentType = oas3Selectors.requestContentType(pathName, method) + req.responseContentType = oas3Selectors.responseContentType(pathName, method) || "*/*" const requestBody = oas3Selectors.requestBodyValue(pathName, method) if(isJSONObject(requestBody)) {