* add opt-in Prettier config * remove legacy `examples` implementation * create ExamplesSelect * support `Response.examples` in OpenAPI 3 * create response controls group * prettier reformat * prepare to break up Parameters * reunify Parameters and OAS3 Parameters * Parameter Examples * Example component * handle parameter value stringification correctly * FOR REVIEW: add prop for controlling Select * use regular header for param examples in Try-It-Out * manage active examples member via Redux * Request Body Try-It-Out examples * remove special Response description styling * omit Example value display in Try-It-Out * support disabled text inputs in JsonSchemaForm * Example.omitValue => Example.showValue * ExamplesSelectValueRetainer * styling for disabled inputs * remove console.log * support "Modified Values" in ExamplesSelect * remove Examples component (wasn't used anywhere) * use ParameterRow.getParamKey for active examples member keying * split-rendering of examples in ParameterRow * send disabled prop to JsonSchemaForm * use content type to key request body active examples members * remove debugger * rewire RequestBodyEditor to be a controlled component REVIEW: does this have perf implications? * trigger synthetic onSelect events in ExamplesSelect * prettier updates * remove outdated Examples usage in RequestBody * don't handle examples changes in ESVR * make RequestBodyEditor semi-controlled * don't default to an empty Map for request bodies * add namespaceKey to ESVR for state mgmt * don't key RequestBody activeExampleKeys on media type * tweak ESVR isModifiedValueSelected calculation * add trace class to ExamplesSelect * remove usage of ESVR.currentNamespace * reset to first example if currentExampleKey is invalid * add default values to RequestBody rendering * stringify things in ESVR * avoid null select value (silences React warning) * detect user inputs that match any examples member's value * add trace class for json-schema-array * shallowly convert namespace state, to preserve Immutable stucts in state * stringify RBE values; don't trim JSON in editor * match user input to an example when non-primitives are expressed in state as strings * update Cypress * don't apply sample values in JsonSchema_Object * support disabling all JsonSchemaForm subcomponents * Core tests * style changes to accomodate Examples * fix version-checking error in Response * disable SCU for Responses * don't stringify Select values * ModelExample: default to Model tab if no example is available; provide a default no example message * don't trim JSON ParamBody inputs * read directly from 2.0 Response.schema instead of inferring a value * show current Example information in RequestBody * show label for Examples dropdown by default * rework Response content ordering * style disabled textareas like other read-only blocks * meta: fix sourcemaps * refactor ESVR setNameForNamespace * protect second half of ternary expession * cypress: `select.examples-select` => `.examples-select > select` * clarify ModelExample.componentWillReceiveProps * add gates/defaults to prevent issues in very bare-boned documents * fix test block organization problem * simplify RequestBodyEditor interface * linter fixes * prettier updates * use plugin system for new components * move ME Cypress helpers to other file
96 lines
2.9 KiB
JavaScript
96 lines
2.9 KiB
JavaScript
import React from "react"
|
|
import PropTypes from "prop-types"
|
|
import ImPropTypes from "react-immutable-proptypes"
|
|
|
|
export default class ModelExample extends React.Component {
|
|
static propTypes = {
|
|
getComponent: PropTypes.func.isRequired,
|
|
specSelectors: PropTypes.object.isRequired,
|
|
schema: PropTypes.object.isRequired,
|
|
example: PropTypes.any.isRequired,
|
|
isExecute: PropTypes.bool,
|
|
getConfigs: PropTypes.func.isRequired,
|
|
specPath: ImPropTypes.list.isRequired,
|
|
}
|
|
|
|
constructor(props, context) {
|
|
super(props, context)
|
|
let { getConfigs, isExecute } = this.props
|
|
let { defaultModelRendering } = getConfigs()
|
|
|
|
let activeTab = defaultModelRendering
|
|
|
|
if (defaultModelRendering !== "example" && defaultModelRendering !== "model") {
|
|
activeTab = "example"
|
|
}
|
|
|
|
if(isExecute) {
|
|
activeTab = "example"
|
|
}
|
|
|
|
this.state = {
|
|
activeTab: activeTab
|
|
}
|
|
}
|
|
|
|
activeTab =( e ) => {
|
|
let { target : { dataset : { name } } } = e
|
|
|
|
this.setState({
|
|
activeTab: name
|
|
})
|
|
}
|
|
|
|
componentWillReceiveProps(nextProps) {
|
|
if (
|
|
nextProps.isExecute &&
|
|
!this.props.isExecute &&
|
|
this.props.example
|
|
) {
|
|
this.setState({ activeTab: "example" })
|
|
}
|
|
}
|
|
|
|
render() {
|
|
let { getComponent, specSelectors, schema, example, isExecute, getConfigs, specPath } = this.props
|
|
let { defaultModelExpandDepth } = getConfigs()
|
|
const ModelWrapper = getComponent("ModelWrapper")
|
|
const HighlightCode = getComponent("highlightCode")
|
|
|
|
let isOAS3 = specSelectors.isOAS3()
|
|
|
|
return <div className="model-example">
|
|
<ul className="tab">
|
|
<li className={ "tabitem" + ( this.state.activeTab === "example" ? " active" : "") }>
|
|
<a className="tablinks" data-name="example" onClick={ this.activeTab }>{isExecute ? "Edit Value" : "Example Value"}</a>
|
|
</li>
|
|
{ schema ? <li className={ "tabitem" + ( this.state.activeTab === "model" ? " active" : "") }>
|
|
<a className={ "tablinks" + ( isExecute ? " inactive" : "" )} data-name="model" onClick={ this.activeTab }>
|
|
{isOAS3 ? "Schema" : "Model" }
|
|
</a>
|
|
</li> : null }
|
|
</ul>
|
|
<div>
|
|
{
|
|
this.state.activeTab === "example" ? (
|
|
example ? example : (
|
|
<HighlightCode value="(no example available)" />
|
|
)
|
|
) : null
|
|
}
|
|
{
|
|
this.state.activeTab === "model" && <ModelWrapper schema={ schema }
|
|
getComponent={ getComponent }
|
|
getConfigs={ getConfigs }
|
|
specSelectors={ specSelectors }
|
|
expandDepth={ defaultModelExpandDepth }
|
|
specPath={specPath} />
|
|
|
|
|
|
}
|
|
</div>
|
|
</div>
|
|
}
|
|
|
|
}
|