OAS3 Accept header control: State-side

This commit is contained in:
Kyle Shockey
2017-09-12 19:39:52 -07:00
parent 26edaa5f0b
commit 277cc81a8c
8 changed files with 51 additions and 5 deletions

View File

@@ -117,7 +117,8 @@ export default class Operation extends PureComponent {
specSelectors, specSelectors,
authActions, authActions,
authSelectors, authSelectors,
getConfigs getConfigs,
oas3Actions
} = this.props } = this.props
let summary = operation.get("summary") let summary = operation.get("summary")
@@ -265,6 +266,7 @@ export default class Operation extends PureComponent {
getComponent={ getComponent } getComponent={ getComponent }
getConfigs={ getConfigs } getConfigs={ getConfigs }
specSelectors={ specSelectors } specSelectors={ specSelectors }
oas3Actions={oas3Actions}
specActions={ specActions } specActions={ specActions }
produces={ produces } produces={ produces }
producesValue={ operation.get("produces_value") } producesValue={ operation.get("produces_value") }

View File

@@ -9,6 +9,7 @@ export default class Operations extends React.Component {
static propTypes = { static propTypes = {
specSelectors: PropTypes.object.isRequired, specSelectors: PropTypes.object.isRequired,
specActions: PropTypes.object.isRequired, specActions: PropTypes.object.isRequired,
oas3Actions: PropTypes.object.isRequired,
getComponent: PropTypes.func.isRequired, getComponent: PropTypes.func.isRequired,
layoutSelectors: PropTypes.object.isRequired, layoutSelectors: PropTypes.object.isRequired,
layoutActions: PropTypes.object.isRequired, layoutActions: PropTypes.object.isRequired,
@@ -21,6 +22,7 @@ export default class Operations extends React.Component {
let { let {
specSelectors, specSelectors,
specActions, specActions,
oas3Actions,
getComponent, getComponent,
layoutSelectors, layoutSelectors,
layoutActions, layoutActions,
@@ -147,6 +149,8 @@ export default class Operations extends React.Component {
specActions={ specActions } specActions={ specActions }
specSelectors={ specSelectors } specSelectors={ specSelectors }
oas3Actions={oas3Actions}
layoutActions={ layoutActions } layoutActions={ layoutActions }
layoutSelectors={ layoutSelectors } layoutSelectors={ layoutSelectors }

View File

@@ -48,13 +48,24 @@ export default class Response extends React.Component {
specSelectors: PropTypes.object.isRequired, specSelectors: PropTypes.object.isRequired,
fn: PropTypes.object.isRequired, fn: PropTypes.object.isRequired,
contentType: PropTypes.string, contentType: PropTypes.string,
controlsAcceptHeader: PropTypes.bool controlsAcceptHeader: PropTypes.bool,
onContentTypeChange: PropTypes.func
} }
static defaultProps = { static defaultProps = {
response: fromJS({}), response: fromJS({}),
onContentTypeChange: () => {}
}; };
_onContentTypeChange = (value) => {
const { onContentTypeChange, controlsAcceptHeader } = this.props
this.setState({ responseContentType: value })
onContentTypeChange({
value: value,
controlsAcceptHeader
})
}
render() { render() {
let { let {
code, code,
@@ -116,7 +127,7 @@ export default class Response extends React.Component {
<ContentType <ContentType
value={this.state.responseContentType} value={this.state.responseContentType}
contentTypes={ response.get("content") ? response.get("content").keySeq() : Seq() } contentTypes={ response.get("content") ? response.get("content").keySeq() : Seq() }
onChange={(val) => this.setState({ responseContentType: val })} onChange={this._onContentTypeChange}
/> />
{ controlsAcceptHeader ? <small>Controls <code>Accept</code> header.</small> : null } { controlsAcceptHeader ? <small>Controls <code>Accept</code> header.</small> : null }
</div> </div>

View File

@@ -29,6 +29,16 @@ export default class Responses extends React.Component {
onChangeProducesWrapper = ( val ) => this.props.specActions.changeProducesValue(this.props.pathMethod, val) 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() { render() {
let { let {
responses, responses,
@@ -93,7 +103,6 @@ export default class Responses extends React.Component {
<tbody> <tbody>
{ {
responses.entrySeq().map( ([code, response]) => { responses.entrySeq().map( ([code, response]) => {
let className = tryItOutResponse && tryItOutResponse.get("status") == code ? "response_current" : "" let className = tryItOutResponse && tryItOutResponse.get("status") == code ? "response_current" : ""
return ( return (
<Response key={ code } <Response key={ code }
@@ -104,6 +113,7 @@ export default class Responses extends React.Component {
response={ response } response={ response }
specSelectors={ specSelectors } specSelectors={ specSelectors }
controlsAcceptHeader={response === acceptControllingResponse} controlsAcceptHeader={response === acceptControllingResponse}
onContentTypeChange={this.onResponseContentTypeChange}
contentType={ producesValue } contentType={ producesValue }
getComponent={ getComponent }/> getComponent={ getComponent }/>
) )

View File

@@ -4,6 +4,7 @@
export const UPDATE_SELECTED_SERVER = "oas3_set_servers" export const UPDATE_SELECTED_SERVER = "oas3_set_servers"
export const UPDATE_REQUEST_BODY_VALUE = "oas3_set_request_body_value" 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_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 const UPDATE_SERVER_VARIABLE_VALUE = "oas3_set_server_variable_value"
export function setSelectedServer (selectedServerUrl) { 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 }) { export function setServerVariableValue ({ server, key, val }) {
return { return {
type: UPDATE_SERVER_VARIABLE_VALUE, type: UPDATE_SERVER_VARIABLE_VALUE,

View File

@@ -2,7 +2,8 @@ import {
UPDATE_SELECTED_SERVER, UPDATE_SELECTED_SERVER,
UPDATE_REQUEST_BODY_VALUE, UPDATE_REQUEST_BODY_VALUE,
UPDATE_REQUEST_CONTENT_TYPE, UPDATE_REQUEST_CONTENT_TYPE,
UPDATE_SERVER_VARIABLE_VALUE UPDATE_SERVER_VARIABLE_VALUE,
UPDATE_RESPONSE_CONTENT_TYPE
} from "./actions" } from "./actions"
export default { export default {
@@ -17,6 +18,10 @@ export default {
let [path, method] = pathMethod let [path, method] = pathMethod
return state.setIn( [ "requestData", path, method, "requestContentType" ], value) 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 } } ) =>{ [UPDATE_SERVER_VARIABLE_VALUE]: (state, { payload: { server, key, val } } ) =>{
return state.setIn( [ "serverVariableValues", server, key ], val) return state.setIn( [ "serverVariableValues", server, key ], val)
}, },

View File

@@ -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) => { export const serverVariableValue = onlyOAS3((state, server, key) => {
return state.getIn(["serverVariableValues", server, key]) || null return state.getIn(["serverVariableValues", server, key]) || null
} }

View File

@@ -218,6 +218,7 @@ export const executeRequest = (req) =>
req.server = oas3Selectors.selectedServer() req.server = oas3Selectors.selectedServer()
req.serverVariables = oas3Selectors.serverVariables(req.server).toJS() req.serverVariables = oas3Selectors.serverVariables(req.server).toJS()
req.requestContentType = oas3Selectors.requestContentType(pathName, method) req.requestContentType = oas3Selectors.requestContentType(pathName, method)
req.responseContentType = oas3Selectors.responseContentType(pathName, method) || "*/*"
const requestBody = oas3Selectors.requestBodyValue(pathName, method) const requestBody = oas3Selectors.requestBodyValue(pathName, method)
if(isJSONObject(requestBody)) { if(isJSONObject(requestBody)) {