import React from "react" import ImmutablePureComponent from "react-immutable-pure-component" import ImPropTypes from "react-immutable-proptypes" import PropTypes from "prop-types" import RollingLoadSVG from "core/assets/rolling-load.svg" const decodeRefName = uri => { const unescaped = uri.replace(/~1/g, "/").replace(/~0/g, "~") try { return decodeURIComponent(unescaped) } catch { return unescaped } } export default class Model extends ImmutablePureComponent { static propTypes = { schema: ImPropTypes.map.isRequired, getComponent: PropTypes.func.isRequired, getConfigs: PropTypes.func.isRequired, specSelectors: PropTypes.object.isRequired, name: PropTypes.string, displayName: PropTypes.string, isRef: PropTypes.bool, required: PropTypes.bool, expandDepth: PropTypes.number, depth: PropTypes.number, specPath: ImPropTypes.list.isRequired, includeReadOnly: PropTypes.bool, includeWriteOnly: PropTypes.bool, } getModelName =( ref )=> { if ( ref.indexOf("#/definitions/") !== -1 ) { return decodeRefName(ref.replace(/^.*#\/definitions\//, "")) } if ( ref.indexOf("#/components/schemas/") !== -1 ) { return decodeRefName(ref.replace(/^.*#\/components\/schemas\//, "")) } } getRefSchema =( model )=> { let { specSelectors } = this.props return specSelectors.findDefinition(model) } render () { let { getComponent, getConfigs, specSelectors, schema, required, name, isRef, specPath, displayName, includeReadOnly, includeWriteOnly} = this.props const ObjectModel = getComponent("ObjectModel") const ArrayModel = getComponent("ArrayModel") const PrimitiveModel = getComponent("PrimitiveModel") 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 ) } if(!schema) { return { displayName || 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": case "number": case "integer": case "boolean": default: return } } }