getConfigs prop expansion; limit extension render based on config setting

This commit is contained in:
Greg Thompson
2017-11-09 10:22:41 -06:00
parent 83dd9f3dfc
commit 91dab7b166
10 changed files with 38 additions and 14 deletions

View File

@@ -7,6 +7,7 @@ export default class ArrayModel extends Component {
static propTypes = { static propTypes = {
schema: PropTypes.object.isRequired, schema: PropTypes.object.isRequired,
getComponent: PropTypes.func.isRequired, getComponent: PropTypes.func.isRequired,
getConfigs: PropTypes.func.isRequired,
specSelectors: PropTypes.object.isRequired, specSelectors: PropTypes.object.isRequired,
name: PropTypes.string, name: PropTypes.string,
required: PropTypes.bool, required: PropTypes.bool,
@@ -15,7 +16,7 @@ export default class ArrayModel extends Component {
} }
render(){ render(){
let { getComponent, schema, depth, expandDepth, name } = this.props let { getComponent, getConfigs, schema, depth, expandDepth, name } = this.props
let description = schema.get("description") let description = schema.get("description")
let items = schema.get("items") let items = schema.get("items")
let title = schema.get("title") || name let title = schema.get("title") || name
@@ -46,7 +47,7 @@ export default class ArrayModel extends Component {
!description ? null : !description ? null :
<Markdown source={ description } /> <Markdown source={ description } />
} }
<span><Model { ...this.props } name={null} schema={ items } required={ false } depth={ depth + 1 } /></span> <span><Model { ...this.props } getConfigs={ getConfigs } name={null} schema={ items } required={ false } depth={ depth + 1 } /></span>
] ]
</ModelCollapse> </ModelCollapse>
</span> </span>

View File

@@ -52,6 +52,7 @@ export default class ModelExample extends React.Component {
{ {
!isExecute && this.state.activeTab === "model" && <ModelWrapper schema={ schema } !isExecute && this.state.activeTab === "model" && <ModelWrapper schema={ schema }
getComponent={ getComponent } getComponent={ getComponent }
getConfigs={ getConfigs }
specSelectors={ specSelectors } specSelectors={ specSelectors }
expandDepth={ defaultModelExpandDepth } /> expandDepth={ defaultModelExpandDepth } />

View File

@@ -6,18 +6,17 @@ export default class ModelComponent extends Component {
schema: PropTypes.object.isRequired, schema: PropTypes.object.isRequired,
name: PropTypes.string, name: PropTypes.string,
getComponent: PropTypes.func.isRequired, getComponent: PropTypes.func.isRequired,
getConfigs: PropTypes.func.isRequired,
specSelectors: PropTypes.object.isRequired, specSelectors: PropTypes.object.isRequired,
expandDepth: PropTypes.number expandDepth: PropTypes.number
} }
render(){ render(){
let { getComponent } = this.props let { getComponent, getConfigs } = this.props
const Model = getComponent("Model") const Model = getComponent("Model")
return <div className="model-box"> return <div className="model-box">
<Model { ...this.props } depth={ 1 } expandDepth={ this.props.expandDepth || 0 }/> <Model { ...this.props } getConfigs={ getConfigs } depth={ 1 } expandDepth={ this.props.expandDepth || 0 }/>
</div> </div>
} }
} }

View File

@@ -5,6 +5,7 @@ export default class Model extends PureComponent {
static propTypes = { static propTypes = {
schema: PropTypes.object.isRequired, schema: PropTypes.object.isRequired,
getComponent: PropTypes.func.isRequired, getComponent: PropTypes.func.isRequired,
getConfigs: PropTypes.func.isRequired,
specSelectors: PropTypes.object.isRequired, specSelectors: PropTypes.object.isRequired,
name: PropTypes.string, name: PropTypes.string,
isRef: PropTypes.bool, isRef: PropTypes.bool,
@@ -29,7 +30,7 @@ export default class Model extends PureComponent {
} }
render () { render () {
let { getComponent, specSelectors, schema, required, name, isRef } = this.props let { getComponent, getConfigs, specSelectors, schema, required, name, isRef } = this.props
const ObjectModel = getComponent("ObjectModel") const ObjectModel = getComponent("ObjectModel")
const ArrayModel = getComponent("ArrayModel") const ArrayModel = getComponent("ArrayModel")
const PrimitiveModel = getComponent("PrimitiveModel") const PrimitiveModel = getComponent("PrimitiveModel")
@@ -53,6 +54,7 @@ export default class Model extends PureComponent {
case "object": case "object":
return <ObjectModel return <ObjectModel
className="object" { ...this.props } className="object" { ...this.props }
getConfigs={ getConfigs }
schema={ schema } schema={ schema }
name={ name } name={ name }
deprecated={deprecated} deprecated={deprecated}
@@ -60,6 +62,7 @@ export default class Model extends PureComponent {
case "array": case "array":
return <ArrayModel return <ArrayModel
className="array" { ...this.props } className="array" { ...this.props }
getConfigs={ getConfigs }
schema={ schema } schema={ schema }
name={ name } name={ name }
deprecated={deprecated} deprecated={deprecated}
@@ -72,6 +75,7 @@ export default class Model extends PureComponent {
return <PrimitiveModel return <PrimitiveModel
{ ...this.props } { ...this.props }
getComponent={ getComponent } getComponent={ getComponent }
getConfigs={ getConfigs }
schema={ schema } schema={ schema }
name={ name } name={ name }
deprecated={deprecated} deprecated={deprecated}

View File

@@ -36,6 +36,7 @@ export default class Models extends Component {
expandDepth={ defaultModelExpandDepth } expandDepth={ defaultModelExpandDepth }
schema={ model } schema={ model }
getComponent={ getComponent } getComponent={ getComponent }
getConfigs={ getConfigs }
specSelectors={ specSelectors }/> specSelectors={ specSelectors }/>
</div> </div>
}).toArray() }).toArray()

View File

@@ -9,6 +9,7 @@ export default class ObjectModel extends Component {
static propTypes = { static propTypes = {
schema: PropTypes.object.isRequired, schema: PropTypes.object.isRequired,
getComponent: PropTypes.func.isRequired, getComponent: PropTypes.func.isRequired,
getConfigs: PropTypes.func.isRequired,
specSelectors: PropTypes.object.isRequired, specSelectors: PropTypes.object.isRequired,
name: PropTypes.string, name: PropTypes.string,
isRef: PropTypes.bool, isRef: PropTypes.bool,
@@ -17,7 +18,7 @@ export default class ObjectModel extends Component {
} }
render(){ render(){
let { schema, name, isRef, getComponent, depth, expandDepth, ...otherProps } = this.props let { schema, name, isRef, getComponent, getConfigs, depth, expandDepth, ...otherProps } = this.props
let { specSelectors } = otherProps let { specSelectors } = otherProps
let { isOAS3 } = specSelectors let { isOAS3 } = specSelectors
@@ -86,6 +87,7 @@ export default class ObjectModel extends Component {
<Model key={ `object-${name}-${key}_${value}` } { ...otherProps } <Model key={ `object-${name}-${key}_${value}` } { ...otherProps }
required={ isRequired } required={ isRequired }
getComponent={ getComponent } getComponent={ getComponent }
getConfigs={ getConfigs }
schema={ value } schema={ value }
depth={ depth + 1 } /> depth={ depth + 1 } />
</td> </td>
@@ -99,6 +101,7 @@ export default class ObjectModel extends Component {
<td> <td>
<Model { ...otherProps } required={ false } <Model { ...otherProps } required={ false }
getComponent={ getComponent } getComponent={ getComponent }
getConfigs={ getConfigs }
schema={ additionalProperties } schema={ additionalProperties }
depth={ depth + 1 } /> depth={ depth + 1 } />
</td> </td>
@@ -112,6 +115,7 @@ export default class ObjectModel extends Component {
{anyOf.map((schema, k) => { {anyOf.map((schema, k) => {
return <div key={k}><Model { ...otherProps } required={ false } return <div key={k}><Model { ...otherProps } required={ false }
getComponent={ getComponent } getComponent={ getComponent }
getConfigs={ getConfigs }
schema={ schema } schema={ schema }
depth={ depth + 1 } /></div> depth={ depth + 1 } /></div>
})} })}
@@ -126,6 +130,7 @@ export default class ObjectModel extends Component {
{oneOf.map((schema, k) => { {oneOf.map((schema, k) => {
return <div key={k}><Model { ...otherProps } required={ false } return <div key={k}><Model { ...otherProps } required={ false }
getComponent={ getComponent } getComponent={ getComponent }
getConfigs={ getConfigs }
schema={ schema } schema={ schema }
depth={ depth + 1 } /></div> depth={ depth + 1 } /></div>
})} })}
@@ -140,6 +145,7 @@ export default class ObjectModel extends Component {
{not.map((schema, k) => { {not.map((schema, k) => {
return <div key={k}><Model { ...otherProps } required={ false } return <div key={k}><Model { ...otherProps } required={ false }
getComponent={ getComponent } getComponent={ getComponent }
getConfigs={ getConfigs }
schema={ schema } schema={ schema }
depth={ depth + 1 } /></div> depth={ depth + 1 } /></div>
})} })}

View File

@@ -147,7 +147,7 @@ export default class Operation extends PureComponent {
const Schemes = getComponent( "schemes" ) const Schemes = getComponent( "schemes" )
const OperationExt = getComponent( "OperationExt" ) const OperationExt = getComponent( "OperationExt" )
const { deepLinking } = getConfigs() const { deepLinking, showExtensions } = getConfigs()
const isDeepLinkingEnabled = deepLinking && deepLinking !== "false" const isDeepLinkingEnabled = deepLinking && deepLinking !== "false"
@@ -285,7 +285,7 @@ export default class Operation extends PureComponent {
fn={fn} /> fn={fn} />
} }
{ !extensions.size ? null : { !showExtensions || !extensions.size ? null :
<OperationExt extensions={ extensions } getComponent={ getComponent } /> <OperationExt extensions={ extensions } getComponent={ getComponent } />
} }
</div> </div>

View File

@@ -73,6 +73,8 @@ export default class ParameterRow extends Component {
let { isOAS3 } = specSelectors let { isOAS3 } = specSelectors
const { showExtensions } = getConfigs()
// const onChangeWrapper = (value) => onChange(param, value) // const onChangeWrapper = (value) => onChange(param, value)
const JsonSchemaForm = getComponent("JsonSchemaForm") const JsonSchemaForm = getComponent("JsonSchemaForm")
const ParamBody = getComponent("ParamBody") const ParamBody = getComponent("ParamBody")
@@ -116,7 +118,7 @@ export default class ParameterRow extends Component {
{ isOAS3 && isOAS3() && param.get("deprecated") ? "deprecated": null } { isOAS3 && isOAS3() && param.get("deprecated") ? "deprecated": null }
</div> </div>
<div className="parameter__in">({ param.get("in") })</div> <div className="parameter__in">({ param.get("in") })</div>
{ !extensions.size ? null : extensions.map((v, key) => <ParameterExt key={`${key}-${v}`} xKey={key} xVal={v} /> )} { !showExtensions || !extensions.size ? null : extensions.map((v, key) => <ParameterExt key={`${key}-${v}`} xKey={key} xVal={v} /> )}
</td> </td>
<td className="col parameters-col_description"> <td className="col parameters-col_description">

View File

@@ -1,5 +1,6 @@
import React, { Component } from "react" import React, { Component } from "react"
import PropTypes from "prop-types" import PropTypes from "prop-types"
import { getExtensions } from "core/utils"
const propStyle = { color: "#999", fontStyle: "italic" } const propStyle = { color: "#999", fontStyle: "italic" }
@@ -7,12 +8,15 @@ export default class Primitive extends Component {
static propTypes = { static propTypes = {
schema: PropTypes.object.isRequired, schema: PropTypes.object.isRequired,
getComponent: PropTypes.func.isRequired, getComponent: PropTypes.func.isRequired,
getConfigs: PropTypes.func.isRequired,
name: PropTypes.string, name: PropTypes.string,
depth: PropTypes.number depth: PropTypes.number
} }
render(){ render(){
let { schema, getComponent, name, depth } = this.props let { schema, getComponent, getConfigs, name, depth } = this.props
const { showExtensions } = getConfigs()
if(!schema || !schema.get) { if(!schema || !schema.get) {
// don't render if schema isn't correctly formed // don't render if schema isn't correctly formed
@@ -25,7 +29,8 @@ export default class Primitive extends Component {
let enumArray = schema.get("enum") let enumArray = schema.get("enum")
let title = schema.get("title") || name let title = schema.get("title") || name
let description = schema.get("description") let description = schema.get("description")
let properties = schema.filter( ( v, key) => ["enum", "type", "format", "description", "$$ref"].indexOf(key) === -1 ) let extensions = getExtensions(schema)
let properties = schema.filter( ( v, key) => ["enum", "type", "format", "description", "$$ref"].indexOf(key) === -1 ).filterNot( (v, key) => extensions.has(key) )
const Markdown = getComponent("Markdown") const Markdown = getComponent("Markdown")
const EnumModel = getComponent("EnumModel") const EnumModel = getComponent("EnumModel")
const Property = getComponent("Property") const Property = getComponent("Property")
@@ -38,6 +43,9 @@ export default class Primitive extends Component {
{ {
properties.size ? properties.entrySeq().map( ( [ key, v ] ) => <Property key={`${key}-${v}`} propKey={ key } propVal={ v } propStyle={ propStyle } />) : null properties.size ? properties.entrySeq().map( ( [ key, v ] ) => <Property key={`${key}-${v}`} propKey={ key } propVal={ v } propStyle={ propStyle } />) : null
} }
{
showExtensions && extensions.size ? extensions.entrySeq().map( ( [ key, v ] ) => <Property key={`${key}-${v}`} propKey={ key } propVal={ v } propStyle={ propStyle } />) : null
}
{ {
!description ? null : !description ? null :
<Markdown source={ description } /> <Markdown source={ description } />

View File

@@ -8,12 +8,13 @@ class ModelComponent extends Component {
schema: PropTypes.object.isRequired, schema: PropTypes.object.isRequired,
name: PropTypes.string, name: PropTypes.string,
getComponent: PropTypes.func.isRequired, getComponent: PropTypes.func.isRequired,
getConfigs: PropTypes.func.isRequired,
specSelectors: PropTypes.object.isRequired, specSelectors: PropTypes.object.isRequired,
expandDepth: PropTypes.number expandDepth: PropTypes.number
} }
render(){ render(){
let { schema } = this.props let { getConfigs, schema } = this.props
let classes = ["model-box"] let classes = ["model-box"]
let isDeprecated = schema.get("deprecated") === true let isDeprecated = schema.get("deprecated") === true
let message = null let message = null
@@ -26,6 +27,7 @@ class ModelComponent extends Component {
return <div className={classes.join(" ")}> return <div className={classes.join(" ")}>
{message} {message}
<Model { ...this.props } <Model { ...this.props }
getConfigs={ getConfigs }
depth={ 1 } depth={ 1 }
expandDepth={ this.props.expandDepth || 0 } expandDepth={ this.props.expandDepth || 0 }
/> />