From 54b383a7d2c6587663626fd5f29af7f02f98810d Mon Sep 17 00:00:00 2001 From: Matthew Seal Date: Tue, 15 Aug 2017 18:02:17 -0700 Subject: [PATCH 1/4] Updated docs for correct usage of SWAGGER_JSON --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c543541a..10d87701 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ Will start nginx with swagger-ui on port 80. Or you can provide your own swagger.json on your host ``` -docker run -p 80:8080 -e "SWAGGER_JSON=/foo/swagger.json" -v /bar:/foo swaggerapi/swagger-ui +docker run -p 80:8080 -e SWAGGER_JSON=/foo/swagger.json -v /bar:/foo swaggerapi/swagger-ui ``` ##### Prerequisites From 3b9940567bbf9fea18a04e126c827b6ba12a4790 Mon Sep 17 00:00:00 2001 From: Owen Conti Date: Thu, 7 Sep 2017 18:28:38 -0600 Subject: [PATCH 2/4] Fix property names being displayed in array models --- src/core/components/model.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/components/model.jsx b/src/core/components/model.jsx index e00c317e..639751f4 100644 --- a/src/core/components/model.jsx +++ b/src/core/components/model.jsx @@ -74,7 +74,7 @@ export default class Model extends Component { { ...this.props } getComponent={ getComponent } schema={ modelSchema } - name={ modelName || name } + name={ modelName } deprecated={deprecated} required={ required }/> } } From e9f46e6f5e954fd94b7af6370bd401b4ba4597ae Mon Sep 17 00:00:00 2001 From: Owen Conti Date: Fri, 8 Sep 2017 17:59:41 -0600 Subject: [PATCH 3/4] Working on refactoring of model.jsx --- src/core/components/model.jsx | 102 +++++++++++++++++++++++++-------- src/core/components/models.jsx | 1 - 2 files changed, 77 insertions(+), 26 deletions(-) diff --git a/src/core/components/model.jsx b/src/core/components/model.jsx index 639751f4..8fe25219 100644 --- a/src/core/components/model.jsx +++ b/src/core/components/model.jsx @@ -28,41 +28,25 @@ export default class Model extends Component { return specSelectors.findDefinition(model) } - render () { - let { getComponent, specSelectors, schema, required, name, isRef } = this.props - let ObjectModel = getComponent("ObjectModel") - let ArrayModel = getComponent("ArrayModel") - let PrimitiveModel = getComponent("PrimitiveModel") - let $$ref = schema && schema.get("$$ref") - let modelName = $$ref && this.getModelName( $$ref ) - let modelSchema, type - - const deprecated = specSelectors.isOAS3() && schema.get("deprecated") - - if ( schema && (schema.get("type") || schema.get("properties")) ) { - modelSchema = schema - } else if ( $$ref ) { - modelSchema = this.getRefSchema( modelName ) - } - - type = modelSchema && modelSchema.get("type") - if ( !type && modelSchema && modelSchema.get("properties") ) { - type = "object" - } + renderModel( type, props, modelSchema, modelName, isRef, required, getComponent, specSelectors ) { + const ObjectModel = getComponent("ObjectModel") + const ArrayModel = getComponent("ArrayModel") + const PrimitiveModel = getComponent("PrimitiveModel") + const deprecated = specSelectors.isOAS3() && modelSchema.get("deprecated") switch(type) { case "object": return + isRef={ isRef } /> case "array": return case "string": @@ -76,6 +60,74 @@ export default class Model extends Component { schema={ modelSchema } name={ modelName } deprecated={deprecated} - required={ required }/> } + required={ required }/> + } + } + + render () { + let { getComponent, specSelectors, schema, required, name, isRef } = this.props + let modelName, modelSchema, type + let $$ref = schema && schema.get("$$ref") + + console.log("Rendering model", this.getModelName( $$ref ), name, $$ref, schema.toJS()) + + if ( schema && (schema.get("type") || schema.get("properties")) ) { + // props.schema is a normal schema + modelName = name + modelSchema = schema + } else if ( $$ref ) { + // props.schema is not a normal schema, most likely a $ref + modelName = this.getModelName( $$ref ) + modelSchema = this.getRefSchema( modelName ) + } + + if ( !modelSchema ) { + // Don't bother rendering an invalid schema + return null + } + + // Default `type` to object + type = modelSchema.get("type") || "object" + isRef = isRef !== undefined ? isRef : !!$$ref + + // If the model is `oneOf` or `anyOf`, go through its available types + // and render each type as part of an array + // if ( this.props.schema.get("oneOf") || this.props.schema.get("anyOf") ) { + // const isOneOf = this.props.schema.get("oneOf") + // const options = this.props.schema.get("oneOf") || this.props.schema.get("anyOf") + // return ( + // + // { isOneOf ? "One of: " : "Any of: " } + // { options.map( (typeOption, i) => { + // const type = typeOption.get("type") + // const $$ref = typeOption.get("$$ref") + + // // Override modelName if the typeOption is a $$ref to another Model + // if ( $$ref ) { + // console.log("reassigning model name from", typeOption.toJS(), modelName, this.getModelName( $$ref )) + // // modelName = $$ref && this.getModelName( $$ref ) + // } + + // let result = [] + // // "join" together the options with " or "/" and " + // if ( i > 0 ) { + // result.push(  or  ) + // } + + // // Render the Model component, overriding the props.schema and modelSchema properties + // // with the proper type from the current iteration of the available types + // result.push( + // { this.renderModel( type, { + // ...this.props, + // schema: typeOption + // }, typeOption, modelName, name, deprecated, isRef, $$ref, required, getComponent ) } + // ) + // return result + // } ).toJS() } + // + // ) + // } + + return this.renderModel( type, this.props, modelSchema, modelName, isRef, required, getComponent, specSelectors ) } } diff --git a/src/core/components/models.jsx b/src/core/components/models.jsx index 1af412ab..29ac96d0 100644 --- a/src/core/components/models.jsx +++ b/src/core/components/models.jsx @@ -34,7 +34,6 @@ export default class Models extends Component { return
From 12c96e3190052b0c04acfab4866be097a5747e7e Mon Sep 17 00:00:00 2001 From: Owen Conti Date: Sat, 9 Sep 2017 13:51:09 -0600 Subject: [PATCH 4/4] Add comment to array-model for to clarify change. Rework logic in `Model.render()` to fix bug with overriding name and schema from `$ref` definition. --- src/core/components/array-model.jsx | 7 +- src/core/components/model.jsx | 100 +++++++--------------------- 2 files changed, 30 insertions(+), 77 deletions(-) diff --git a/src/core/components/array-model.jsx b/src/core/components/array-model.jsx index f0046aec..a9c36a2c 100644 --- a/src/core/components/array-model.jsx +++ b/src/core/components/array-model.jsx @@ -28,10 +28,15 @@ export default class ArrayModel extends Component { { title } + /* + Note: we set `name={null}` in below because we don't want + the name of the current Model passed (and displayed) as the name of the array element Model + */ + return expandDepth } collapsedContent="[...]"> [ - + ] { properties.size ? diff --git a/src/core/components/model.jsx b/src/core/components/model.jsx index 8fe25219..73163388 100644 --- a/src/core/components/model.jsx +++ b/src/core/components/model.jsx @@ -28,25 +28,40 @@ export default class Model extends Component { return specSelectors.findDefinition(model) } - renderModel( type, props, modelSchema, modelName, isRef, required, getComponent, specSelectors ) { + render () { + let { getComponent, specSelectors, schema, required, name, isRef } = this.props const ObjectModel = getComponent("ObjectModel") const ArrayModel = getComponent("ArrayModel") const PrimitiveModel = getComponent("PrimitiveModel") - const deprecated = specSelectors.isOAS3() && modelSchema.get("deprecated") - + let type = "object" + let $$ref = schema && schema.get("$$ref") + + // If we weren't passed a `name` but have a ref, grab the name from the ref + if ( !name && $$ref ) { + name = this.getModelName( $$ref ) + } + // If we weren't passed a `schema` but have a ref, grab the schema from the ref + if ( !schema && $$ref ) { + schema = this.getRefSchema( name ) + } + + const deprecated = specSelectors.isOAS3() && schema.get("deprecated") + isRef = isRef !== undefined ? isRef : !!$$ref + type = schema && schema.get("type") || type + switch(type) { case "object": return case "array": return case "string": @@ -57,77 +72,10 @@ export default class Model extends Component { return } } - - render () { - let { getComponent, specSelectors, schema, required, name, isRef } = this.props - let modelName, modelSchema, type - let $$ref = schema && schema.get("$$ref") - - console.log("Rendering model", this.getModelName( $$ref ), name, $$ref, schema.toJS()) - - if ( schema && (schema.get("type") || schema.get("properties")) ) { - // props.schema is a normal schema - modelName = name - modelSchema = schema - } else if ( $$ref ) { - // props.schema is not a normal schema, most likely a $ref - modelName = this.getModelName( $$ref ) - modelSchema = this.getRefSchema( modelName ) - } - - if ( !modelSchema ) { - // Don't bother rendering an invalid schema - return null - } - - // Default `type` to object - type = modelSchema.get("type") || "object" - isRef = isRef !== undefined ? isRef : !!$$ref - - // If the model is `oneOf` or `anyOf`, go through its available types - // and render each type as part of an array - // if ( this.props.schema.get("oneOf") || this.props.schema.get("anyOf") ) { - // const isOneOf = this.props.schema.get("oneOf") - // const options = this.props.schema.get("oneOf") || this.props.schema.get("anyOf") - // return ( - // - // { isOneOf ? "One of: " : "Any of: " } - // { options.map( (typeOption, i) => { - // const type = typeOption.get("type") - // const $$ref = typeOption.get("$$ref") - - // // Override modelName if the typeOption is a $$ref to another Model - // if ( $$ref ) { - // console.log("reassigning model name from", typeOption.toJS(), modelName, this.getModelName( $$ref )) - // // modelName = $$ref && this.getModelName( $$ref ) - // } - - // let result = [] - // // "join" together the options with " or "/" and " - // if ( i > 0 ) { - // result.push(  or  ) - // } - - // // Render the Model component, overriding the props.schema and modelSchema properties - // // with the proper type from the current iteration of the available types - // result.push( - // { this.renderModel( type, { - // ...this.props, - // schema: typeOption - // }, typeOption, modelName, name, deprecated, isRef, $$ref, required, getComponent ) } - // ) - // return result - // } ).toJS() } - // - // ) - // } - - return this.renderModel( type, this.props, modelSchema, modelName, isRef, required, getComponent, specSelectors ) - } }