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