diff --git a/src/core/components/param-body.jsx b/src/core/components/param-body.jsx index 48373f5f..980ef490 100644 --- a/src/core/components/param-body.jsx +++ b/src/core/components/param-body.jsx @@ -47,7 +47,7 @@ export default class ParamBody extends PureComponent { updateValues = (props) => { let { specSelectors, pathMethod, param, isExecute, consumesValue="" } = props - let parameter = specSelectors ? specSelectors.getParameter(pathMethod, param.get("name")) : {} + let parameter = specSelectors ? specSelectors.getParameter(pathMethod, param.get("name"), param.get("in")) : {} let isXml = /xml/i.test(consumesValue) let isJson = /json/i.test(consumesValue) let paramValue = isXml ? parameter.get("value_xml") : parameter.get("value") @@ -107,7 +107,7 @@ export default class ParamBody extends PureComponent { const HighlightCode = getComponent("highlightCode") const ContentType = getComponent("contentType") // for domains where specSelectors not passed - let parameter = specSelectors ? specSelectors.getParameter(pathMethod, param.get("name")) : param + let parameter = specSelectors ? specSelectors.getParameter(pathMethod, param.get("name"), param.get("in")) : param let errors = parameter.get("errors", List()) let consumesValue = specSelectors.contentTypeValues(pathMethod).get("requestContentType") let consumes = this.props.consumes && this.props.consumes.size ? this.props.consumes : ParamBody.defaultProp.consumes diff --git a/src/core/components/parameter-row.jsx b/src/core/components/parameter-row.jsx index 456a8e63..6799af30 100644 --- a/src/core/components/parameter-row.jsx +++ b/src/core/components/parameter-row.jsx @@ -19,13 +19,17 @@ export default class ParameterRow extends Component { let { specSelectors, pathMethod, param } = props let defaultValue = param.get("default") - let parameter = specSelectors.getParameter(pathMethod, param.get("name")) + let parameter = specSelectors.getParameter(pathMethod, param.get("name"), param.get("in")) let value = parameter ? parameter.get("value") : "" if ( defaultValue !== undefined && value === undefined ) { this.onChangeWrapper(defaultValue) } } + shouldComponentUpdate(nextProps) { + return nextProps.param !== this.props.param + } + componentWillReceiveProps(props) { let { specSelectors, pathMethod, param } = props let example = param.get("example") @@ -86,7 +90,7 @@ export default class ParameterRow extends Component { let isFormDataSupported = "FormData" in win let required = param.get("required") let itemType = param.getIn(isOAS3 && isOAS3() ? ["schema", "items", "type"] : ["items", "type"]) - let parameter = specSelectors.getParameter(pathMethod, param.get("name")) + let parameter = specSelectors.getParameter(pathMethod, param.get("name"), param.get("in")) let value = parameter ? parameter.get("value") : "" return ( diff --git a/src/core/components/parameters.jsx b/src/core/components/parameters.jsx index a6b981e6..eff94f65 100644 --- a/src/core/components/parameters.jsx +++ b/src/core/components/parameters.jsx @@ -37,7 +37,7 @@ export default class Parameters extends Component { onChangeKey, } = this.props - changeParam( onChangeKey, param.get("name"), value, isXml) + changeParam( onChangeKey, param.get("name"), param.get("in"), value, isXml) } onChangeConsumesWrapper = ( val ) => { @@ -94,7 +94,7 @@ export default class Parameters extends Component { { diff --git a/src/core/plugins/spec/actions.js b/src/core/plugins/spec/actions.js index 98919880..31d942b9 100644 --- a/src/core/plugins/spec/actions.js +++ b/src/core/plugins/spec/actions.js @@ -130,10 +130,10 @@ export const formatIntoYaml = () => ({specActions, specSelectors}) => { } } -export function changeParam( path, paramName, value, isXml ){ +export function changeParam( path, paramName, paramIn, value, isXml ){ return { type: UPDATE_PARAM, - payload:{ path, value, paramName, isXml } + payload:{ path, value, paramName, paramIn, isXml } } } @@ -206,7 +206,6 @@ export const executeRequest = (req) => // if url is relative, parseUrl makes it absolute by inferring from `window.location` req.contextUrl = parseUrl(specSelectors.url()).toString() - if(op && op.operationId) { req.operationId = op.operationId } else if(op && pathName && method) { diff --git a/src/core/plugins/spec/reducers.js b/src/core/plugins/spec/reducers.js index e76c2d6a..0c436183 100644 --- a/src/core/plugins/spec/reducers.js +++ b/src/core/plugins/spec/reducers.js @@ -40,9 +40,10 @@ export default { }, [UPDATE_PARAM]: ( state, {payload} ) => { - let { path, paramName, value, isXml } = payload + let { path, paramName, paramIn, value, isXml } = payload + return state.updateIn( [ "resolved", "paths", ...path, "parameters" ], fromJS([]), parameters => { - const index = parameters.findIndex(p => p.get( "name" ) === paramName ) + const index = parameters.findIndex(p => p.get( "name" ) === paramName && p.get("in") === paramIn ) if (!(value instanceof win.File)) { value = fromJSOrdered( value ) } diff --git a/src/core/plugins/spec/selectors.js b/src/core/plugins/spec/selectors.js index a92ef4b3..7628c52a 100644 --- a/src/core/plugins/spec/selectors.js +++ b/src/core/plugins/spec/selectors.js @@ -260,10 +260,10 @@ export const allowTryItOutFor = () => { } // Get the parameter value by parameter name -export function getParameter(state, pathMethod, name) { +export function getParameter(state, pathMethod, name, inType) { let params = spec(state).getIn(["paths", ...pathMethod, "parameters"], fromJS([])) return params.filter( (p) => { - return Map.isMap(p) && p.get("name") === name + return Map.isMap(p) && p.get("name") === name && p.get("in") === inType }).first() } @@ -280,7 +280,7 @@ export function parameterValues(state, pathMethod, isXml) { let params = spec(state).getIn(["paths", ...pathMethod, "parameters"], fromJS([])) return params.reduce( (hash, p) => { let value = isXml && p.get("in") === "body" ? p.get("value_xml") : p.get("value") - return hash.set(p.get("name"), value) + return hash.set(`${p.get("in")}.${p.get("name")}`, value) }, fromJS({})) } diff --git a/test/core/plugins/spec/selectors.js b/test/core/plugins/spec/selectors.js index 7519a42e..df6b1c21 100644 --- a/test/core/plugins/spec/selectors.js +++ b/test/core/plugins/spec/selectors.js @@ -29,8 +29,8 @@ describe("spec plugin - selectors", function(){ "/one": { get: { parameters: [ - { name: "one", value: 1}, - { name: "two", value: "duos"} + { name: "one", in: "query", value: 1}, + { name: "two", in: "query", value: "duos"} ] } } @@ -43,8 +43,8 @@ describe("spec plugin - selectors", function(){ // Then expect(paramValues.toJS()).toEqual({ - one: 1, - two: "duos" + "query.one": 1, + "query.two": "duos" }) })