Merge pull request #3926 from swagger-api/bug/editor-1565-callback-expansion
Callback expansion issues
This commit is contained in:
@@ -27,6 +27,16 @@ export default class ContentType extends React.Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
componentWillReceiveProps(nextProps) {
|
||||||
|
if(!nextProps.contentTypes || !nextProps.contentTypes.size) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!nextProps.contentTypes.includes(nextProps.value)) {
|
||||||
|
nextProps.onChange(nextProps.contentTypes.first())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
onChangeWrapper = e => this.props.onChange(e.target.value)
|
onChangeWrapper = e => this.props.onChange(e.target.value)
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
|||||||
@@ -57,6 +57,8 @@ export default class OperationContainer extends PureComponent {
|
|||||||
const operationId = op.getIn(["operation", "operationId"]) || op.getIn(["operation", "__originalOperationId"]) || opId(op.get("operation"), props.path, props.method) || op.get("id")
|
const operationId = op.getIn(["operation", "operationId"]) || op.getIn(["operation", "__originalOperationId"]) || opId(op.get("operation"), props.path, props.method) || op.get("id")
|
||||||
const isShownKey = ["operations", props.tag, operationId]
|
const isShownKey = ["operations", props.tag, operationId]
|
||||||
const isDeepLinkingEnabled = deepLinking && deepLinking !== "false"
|
const isDeepLinkingEnabled = deepLinking && deepLinking !== "false"
|
||||||
|
const allowTryItOut = typeof props.allowTryItOut === "undefined" ?
|
||||||
|
props.specSelectors.allowTryItOutFor(props.path, props.method) : props.allowTryItOut
|
||||||
|
|
||||||
return {
|
return {
|
||||||
operationId,
|
operationId,
|
||||||
@@ -64,9 +66,9 @@ export default class OperationContainer extends PureComponent {
|
|||||||
showSummary,
|
showSummary,
|
||||||
displayOperationId,
|
displayOperationId,
|
||||||
displayRequestDuration,
|
displayRequestDuration,
|
||||||
|
allowTryItOut,
|
||||||
isShown: layoutSelectors.isShown(isShownKey, docExpansion === "full" ),
|
isShown: layoutSelectors.isShown(isShownKey, docExpansion === "full" ),
|
||||||
jumpToKey: `paths.${props.path}.${props.method}`,
|
jumpToKey: `paths.${props.path}.${props.method}`,
|
||||||
allowTryItOut: props.specSelectors.allowTryItOutFor(props.path, props.method),
|
|
||||||
response: props.specSelectors.responseFor(props.path, props.method),
|
response: props.specSelectors.responseFor(props.path, props.method),
|
||||||
request: props.specSelectors.requestFor(props.path, props.method)
|
request: props.specSelectors.requestFor(props.path, props.method)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
import React from "react"
|
import React from "react"
|
||||||
import PropTypes from "prop-types"
|
import PropTypes from "prop-types"
|
||||||
|
import ImPropTypes from "react-immutable-proptypes"
|
||||||
|
import { fromJS } from "immutable"
|
||||||
|
|
||||||
const Callbacks = (props) => {
|
const Callbacks = (props) => {
|
||||||
let { callbacks, getComponent } = props
|
let { callbacks, getComponent } = props
|
||||||
// const Markdown = getComponent("Markdown")
|
// const Markdown = getComponent("Markdown")
|
||||||
const Operation = getComponent("operation", true)
|
const OperationContainer = getComponent("OperationContainer", true)
|
||||||
|
|
||||||
if(!callbacks) {
|
if(!callbacks) {
|
||||||
return <span>No callbacks</span>
|
return <span>No callbacks</span>
|
||||||
@@ -16,24 +18,22 @@ const Callbacks = (props) => {
|
|||||||
{ callback.map((pathItem, pathItemName) => {
|
{ callback.map((pathItem, pathItemName) => {
|
||||||
return <div key={pathItemName}>
|
return <div key={pathItemName}>
|
||||||
{ pathItem.map((operation, method) => {
|
{ pathItem.map((operation, method) => {
|
||||||
return <Operation
|
let op = fromJS({
|
||||||
operation={operation}
|
operation
|
||||||
|
})
|
||||||
|
return <OperationContainer
|
||||||
|
{...props}
|
||||||
|
op={op}
|
||||||
key={method}
|
key={method}
|
||||||
|
tag={""}
|
||||||
method={method}
|
method={method}
|
||||||
isShownKey={["callbacks", operation.get("id"), callbackName]}
|
|
||||||
path={pathItemName}
|
path={pathItemName}
|
||||||
allowTryItOut={false}
|
allowTryItOut={false}
|
||||||
{...props}></Operation>
|
/>
|
||||||
// return <pre>{JSON.stringify(operation)}</pre>
|
|
||||||
}) }
|
}) }
|
||||||
</div>
|
</div>
|
||||||
}) }
|
}) }
|
||||||
</div>
|
</div>
|
||||||
// return <div>
|
|
||||||
// <h2>{name}</h2>
|
|
||||||
// {callback.description && <Markdown source={callback.description}/>}
|
|
||||||
// <pre>{JSON.stringify(callback)}</pre>
|
|
||||||
// </div>
|
|
||||||
})
|
})
|
||||||
return <div>
|
return <div>
|
||||||
{callbackElements}
|
{callbackElements}
|
||||||
@@ -42,7 +42,7 @@ const Callbacks = (props) => {
|
|||||||
|
|
||||||
Callbacks.propTypes = {
|
Callbacks.propTypes = {
|
||||||
getComponent: PropTypes.func.isRequired,
|
getComponent: PropTypes.func.isRequired,
|
||||||
callbacks: PropTypes.array.isRequired
|
callbacks: ImPropTypes.iterable.isRequired
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -48,6 +48,13 @@ export default class RequestBodyEditor extends PureComponent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
componentDidUpdate(prevProps) {
|
||||||
|
if(this.props.requestBody !== prevProps.requestBody) {
|
||||||
|
// force recalc of value if the request body definition has changed
|
||||||
|
this.setValueToSample(this.props.mediaType)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
setValueToSample = (explicitMediaType) => {
|
setValueToSample = (explicitMediaType) => {
|
||||||
this.onChange(this.sample(explicitMediaType))
|
this.onChange(this.sample(explicitMediaType))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,10 @@ const RequestBody = ({
|
|||||||
|
|
||||||
const mediaTypeValue = requestBodyContent.get(contentType)
|
const mediaTypeValue = requestBodyContent.get(contentType)
|
||||||
|
|
||||||
|
if(!mediaTypeValue) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
return <div>
|
return <div>
|
||||||
{ requestBodyDescription &&
|
{ requestBodyDescription &&
|
||||||
<Markdown source={requestBodyDescription} />
|
<Markdown source={requestBodyDescription} />
|
||||||
|
|||||||
@@ -120,5 +120,5 @@ export const getComponent = (getSystem, getStore, getComponents, componentName,
|
|||||||
return makeContainer(getSystem, component, getStore())
|
return makeContainer(getSystem, component, getStore())
|
||||||
|
|
||||||
// container == truthy
|
// container == truthy
|
||||||
return makeContainer(getSystem, component)
|
return makeContainer(getSystem, wrapRender(component))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -571,6 +571,116 @@ describe("bound system", function(){
|
|||||||
// Then
|
// Then
|
||||||
expect(renderedComponent.text()).toEqual("This came from mapStateToProps and this came from the system and this came from my own props")
|
expect(renderedComponent.text()).toEqual("This came from mapStateToProps and this came from the system and this came from my own props")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it("should catch errors thrown inside of React Component Class render methods", function() {
|
||||||
|
// Given
|
||||||
|
// eslint-disable-next-line react/require-render-return
|
||||||
|
class BrokenComponent extends React.Component {
|
||||||
|
render() {
|
||||||
|
throw new Error("This component is broken")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const system = new System({
|
||||||
|
plugins: [
|
||||||
|
ViewPlugin,
|
||||||
|
{
|
||||||
|
components: {
|
||||||
|
BrokenComponent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
// When
|
||||||
|
var Component = system.getSystem().getComponent("BrokenComponent")
|
||||||
|
const renderedComponent = render(<Component />)
|
||||||
|
|
||||||
|
// Then
|
||||||
|
expect(renderedComponent.text()).toEqual("😱 Could not render BrokenComponent, see the console.")
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should catch errors thrown inside of pure component render methods", function() {
|
||||||
|
// Given
|
||||||
|
// eslint-disable-next-line react/require-render-return
|
||||||
|
class BrokenComponent extends PureComponent {
|
||||||
|
render() {
|
||||||
|
throw new Error("This component is broken")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const system = new System({
|
||||||
|
plugins: [
|
||||||
|
ViewPlugin,
|
||||||
|
{
|
||||||
|
components: {
|
||||||
|
BrokenComponent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
// When
|
||||||
|
var Component = system.getSystem().getComponent("BrokenComponent")
|
||||||
|
const renderedComponent = render(<Component />)
|
||||||
|
|
||||||
|
// Then
|
||||||
|
expect(renderedComponent.text()).toEqual("😱 Could not render BrokenComponent, see the console.")
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should catch errors thrown inside of stateless component functions", function() {
|
||||||
|
// Given
|
||||||
|
// eslint-disable-next-line react/require-render-return
|
||||||
|
let BrokenComponent = function BrokenComponent() { throw new Error("This component is broken") }
|
||||||
|
const system = new System({
|
||||||
|
plugins: [
|
||||||
|
ViewPlugin,
|
||||||
|
{
|
||||||
|
components: {
|
||||||
|
BrokenComponent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
// When
|
||||||
|
var Component = system.getSystem().getComponent("BrokenComponent")
|
||||||
|
const renderedComponent = render(<Component />)
|
||||||
|
|
||||||
|
// Then
|
||||||
|
expect(renderedComponent.text().startsWith("😱 Could not render")).toEqual(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should catch errors thrown inside of container components", function() {
|
||||||
|
// Given
|
||||||
|
// eslint-disable-next-line react/require-render-return
|
||||||
|
class BrokenComponent extends React.Component {
|
||||||
|
render() {
|
||||||
|
throw new Error("This component is broken")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const system = new System({
|
||||||
|
plugins: [
|
||||||
|
ViewPlugin,
|
||||||
|
{
|
||||||
|
components: {
|
||||||
|
BrokenComponent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
// When
|
||||||
|
var Component = system.getSystem().getComponent("BrokenComponent", true)
|
||||||
|
const renderedComponent = render(
|
||||||
|
<Provider store={system.getStore()}>
|
||||||
|
<Component />
|
||||||
|
</Provider>
|
||||||
|
)
|
||||||
|
|
||||||
|
// Then
|
||||||
|
expect(renderedComponent.text()).toEqual("😱 Could not render BrokenComponent, see the console.")
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user