Skip to content

Commit fce8b72

Browse files
committed
Merge branch 'master' of github.com:swagger-api/swagger-ui into feature/2926-click-model-name-to-toggle
# Conflicts: # src/core/components/model.jsx
2 parents 14b63c5 + 4a66219 commit fce8b72

File tree

11 files changed

+315
-286
lines changed

11 files changed

+315
-286
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import React, { Component } from "react"
2+
import PropTypes from "prop-types"
3+
4+
const propStyle = { color: "#999", fontStyle: "italic" }
5+
6+
export default class ArrayModel extends Component {
7+
static propTypes = {
8+
schema: PropTypes.object.isRequired,
9+
getComponent: PropTypes.func.isRequired,
10+
specSelectors: PropTypes.object.isRequired,
11+
name: PropTypes.string,
12+
required: PropTypes.bool,
13+
expandDepth: PropTypes.number,
14+
depth: PropTypes.number
15+
}
16+
17+
render(){
18+
let { getComponent, required, schema, depth, expandDepth } = this.props
19+
let items = schema.get("items")
20+
let properties = schema.filter( ( v, key) => ["type", "items", "$$ref"].indexOf(key) === -1 )
21+
22+
const ModelCollapse = getComponent("ModelCollapse")
23+
const Model = getComponent("Model")
24+
25+
return <span className="model">
26+
<span className="model-title">
27+
<span className="model-title__text">{ schema.get("title") }</span>
28+
</span>
29+
<ModelCollapse collapsed={ depth > expandDepth } collapsedContent="[...]">
30+
[
31+
<span><Model { ...this.props } schema={ items } required={ false }/></span>
32+
]
33+
{
34+
properties.size ? <span>
35+
{ properties.entrySeq().map( ( [ key, v ] ) => <span key={`${key}-${v}`} style={propStyle}>
36+
<br />{ `${key}:`}{ String(v) }</span>)
37+
}<br /></span>
38+
: null
39+
}
40+
</ModelCollapse>
41+
{ required && <span style={{ color: "red" }}>*</span>}
42+
</span>
43+
}
44+
}

src/core/components/enum-model.jsx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import React from "react"
2+
import ImPropTypes from "react-immutable-proptypes"
3+
4+
const EnumModel = ({ value, getComponent }) => {
5+
let ModelCollapse = getComponent("ModelCollapse")
6+
let collapsedContent = <span>Array [ { value.count() } ]</span>
7+
return <span className="prop-enum">
8+
Enum:<br />
9+
<ModelCollapse collapsedContent={ collapsedContent }>
10+
[ { value.join(", ") } ]
11+
</ModelCollapse>
12+
</span>
13+
}
14+
EnumModel.propTypes = {
15+
value: ImPropTypes.iterable,
16+
getComponent: ImPropTypes.func
17+
}
18+
19+
export default EnumModel

src/core/components/layouts/base.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export default class BaseLayout extends React.Component {
2626

2727
let Info = getComponent("info")
2828
let Operations = getComponent("operations", true)
29-
let Models = getComponent("models", true)
29+
let Models = getComponent("Models", true)
3030
let AuthorizeBtn = getComponent("authorizeBtn", true)
3131
let Row = getComponent("Row")
3232
let Col = getComponent("Col")
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import React, { Component } from "react"
2+
import PropTypes from "prop-types"
3+
4+
export default class ModelCollapse extends Component {
5+
static propTypes = {
6+
collapsedContent: PropTypes.any,
7+
collapsed: PropTypes.bool,
8+
children: PropTypes.any
9+
}
10+
11+
static defaultProps = {
12+
collapsedContent: "{...}",
13+
collapsed: true,
14+
}
15+
16+
constructor(props, context) {
17+
super(props, context)
18+
19+
let { collapsed, collapsedContent } = this.props
20+
21+
this.state = {
22+
collapsed: collapsed !== undefined ? collapsed : ModelCollapse.defaultProps.collapsed,
23+
collapsedContent: collapsedContent || ModelCollapse.defaultProps.collapsedContent
24+
}
25+
}
26+
27+
toggleCollapsed=()=>{
28+
this.setState({
29+
collapsed: !this.state.collapsed
30+
})
31+
}
32+
33+
render () {
34+
return (<span>
35+
<span onClick={ this.toggleCollapsed } style={{ "cursor": "pointer" }}>
36+
<span className={ "model-toggle" + ( this.state.collapsed ? " collapsed" : "" ) }></span>
37+
</span>
38+
{ this.state.collapsed ? this.state.collapsedContent : this.props.children }
39+
</span>)
40+
}
41+
}

src/core/components/model-example.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export default class ModelExample extends React.Component {
2828

2929
render() {
3030
let { getComponent, specSelectors, schema, example, isExecute } = this.props
31-
const Model = getComponent("model")
31+
const ModelWrapper = getComponent("ModelWrapper")
3232

3333
return <div>
3434
<ul className="tab">
@@ -44,7 +44,7 @@ export default class ModelExample extends React.Component {
4444
(isExecute || this.state.activeTab === "example") && example
4545
}
4646
{
47-
!isExecute && this.state.activeTab === "model" && <Model schema={ schema }
47+
!isExecute && this.state.activeTab === "model" && <ModelWrapper schema={ schema }
4848
getComponent={ getComponent }
4949
specSelectors={ specSelectors }
5050
expandDepth={ 1 } />
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import React, { Component, } from "react"
2+
import PropTypes from "prop-types"
3+
4+
export default class ModelComponent extends Component {
5+
static propTypes = {
6+
schema: PropTypes.object.isRequired,
7+
name: PropTypes.string,
8+
getComponent: PropTypes.func.isRequired,
9+
specSelectors: PropTypes.object.isRequired,
10+
expandDepth: PropTypes.number
11+
}
12+
13+
render(){
14+
let { getComponent } = this.props
15+
const Model = getComponent("Model")
16+
17+
return <div className="model-box">
18+
<Model { ...this.props } depth={ 1 } expandDepth={ this.props.expandDepth || 0 }/>
19+
</div>
20+
}
21+
}
22+
23+

0 commit comments

Comments
 (0)