Skip to content

Commit 7e9ae59

Browse files
committed
Merge branch 'master' of github.com:swagger-api/swagger-ui
2 parents 99d35e0 + 943f71b commit 7e9ae59

File tree

16 files changed

+79
-30
lines changed

16 files changed

+79
-30
lines changed

src/core/components/array-model.jsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@ export default class ArrayModel extends Component {
1212
name: PropTypes.string,
1313
required: PropTypes.bool,
1414
expandDepth: PropTypes.number,
15+
specPath: PropTypes.array.isRequired,
1516
depth: PropTypes.number
1617
}
1718

1819
render(){
19-
let { getComponent, getConfigs, schema, depth, expandDepth, name } = this.props
20+
let { getComponent, getConfigs, schema, depth, expandDepth, name, specPath } = this.props
2021
let description = schema.get("description")
2122
let items = schema.get("items")
2223
let title = schema.get("title") || name
@@ -47,7 +48,7 @@ export default class ArrayModel extends Component {
4748
!description ? null :
4849
<Markdown source={ description } />
4950
}
50-
<span><Model { ...this.props } getConfigs={ getConfigs } name={null} schema={ items } required={ false } depth={ depth + 1 } /></span>
51+
<span><Model { ...this.props } getConfigs={ getConfigs } specPath={[...specPath, "items"]} name={null} schema={ items } required={ false } depth={ depth + 1 } /></span>
5152
]
5253
</ModelCollapse>
5354
</span>

src/core/components/model-example.jsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ export default class ModelExample extends React.Component {
88
schema: PropTypes.object.isRequired,
99
example: PropTypes.any.isRequired,
1010
isExecute: PropTypes.bool,
11-
getConfigs: PropTypes.func.isRequired
11+
getConfigs: PropTypes.func.isRequired,
12+
specPath: PropTypes.array.isRequired,
1213
}
1314

1415
constructor(props, context) {
@@ -32,7 +33,7 @@ export default class ModelExample extends React.Component {
3233
}
3334

3435
render() {
35-
let { getComponent, specSelectors, schema, example, isExecute, getConfigs } = this.props
36+
let { getComponent, specSelectors, schema, example, isExecute, getConfigs, specPath } = this.props
3637
let { defaultModelExpandDepth } = getConfigs()
3738
const ModelWrapper = getComponent("ModelWrapper")
3839

@@ -54,7 +55,8 @@ export default class ModelExample extends React.Component {
5455
getComponent={ getComponent }
5556
getConfigs={ getConfigs }
5657
specSelectors={ specSelectors }
57-
expandDepth={ defaultModelExpandDepth } />
58+
expandDepth={ defaultModelExpandDepth }
59+
specPath={specPath} />
5860

5961

6062
}

src/core/components/model.jsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ export default class Model extends PureComponent {
1212
isRef: PropTypes.bool,
1313
required: PropTypes.bool,
1414
expandDepth: PropTypes.number,
15-
depth: PropTypes.number
15+
depth: PropTypes.number,
16+
specPath: PropTypes.array.isRequired,
1617
}
1718

1819
getModelName =( ref )=> {
@@ -31,7 +32,7 @@ export default class Model extends PureComponent {
3132
}
3233

3334
render () {
34-
let { getComponent, getConfigs, specSelectors, schema, required, name, isRef } = this.props
35+
let { getComponent, getConfigs, specSelectors, schema, required, name, isRef, specPath } = this.props
3536
const ObjectModel = getComponent("ObjectModel")
3637
const ArrayModel = getComponent("ArrayModel")
3738
const PrimitiveModel = getComponent("PrimitiveModel")
@@ -55,6 +56,7 @@ export default class Model extends PureComponent {
5556
case "object":
5657
return <ObjectModel
5758
className="object" { ...this.props }
59+
specPath={specPath}
5860
getConfigs={ getConfigs }
5961
schema={ schema }
6062
name={ name }

src/core/components/models.jsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export default class Models extends Component {
1515
let definitions = specSelectors.definitions()
1616
let { docExpansion, defaultModelExpandDepth } = getConfigs()
1717
let showModels = layoutSelectors.isShown("models", docExpansion === "full" || docExpansion === "list" )
18+
const specPathBase = specSelectors.isOAS3() ? ["components", "schemas"] : ["definitions"]
1819

1920
const ModelWrapper = getComponent("ModelWrapper")
2021
const Collapse = getComponent("Collapse")
@@ -35,6 +36,7 @@ export default class Models extends Component {
3536
<ModelWrapper name={ name }
3637
expandDepth={ defaultModelExpandDepth }
3738
schema={ model }
39+
specPath={[...specPathBase, name]}
3840
getComponent={ getComponent }
3941
getConfigs={ getConfigs }
4042
specSelectors={ specSelectors }/>

src/core/components/object-model.jsx

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,15 @@ export default class ObjectModel extends Component {
1414
name: PropTypes.string,
1515
isRef: PropTypes.bool,
1616
expandDepth: PropTypes.number,
17-
depth: PropTypes.number
17+
depth: PropTypes.number,
18+
specPath: PropTypes.object.isRequired
1819
}
1920

2021
render(){
21-
let { schema, name, isRef, getComponent, getConfigs, depth, expandDepth, ...otherProps } = this.props
22+
let { schema, name, isRef, getComponent, getConfigs, depth, specPath, expandDepth, ...otherProps } = this.props
2223
let { specSelectors } = otherProps
23-
let { isOAS3 } = specSelectors
24+
25+
const { isOAS3 } = specSelectors
2426

2527
if(!schema) {
2628
return null
@@ -39,14 +41,13 @@ export default class ObjectModel extends Component {
3941
const Model = getComponent("Model")
4042
const ModelCollapse = getComponent("ModelCollapse")
4143

42-
const JumpToPathSection = ({ name }) => {
43-
const path = isOAS3 && isOAS3() ? `components.schemas.${name}` : `definitions.${name}`
44-
return <span className="model-jump-to-path"><JumpToPath path={path} /></span>
44+
const JumpToPathSection = () => {
45+
return <span className="model-jump-to-path"><JumpToPath specPath={specPath} /></span>
4546
}
4647
const collapsedContent = (<span>
4748
<span>{ braceOpen }</span>...<span>{ braceClose }</span>
4849
{
49-
isRef ? <JumpToPathSection name={ name }/> : ""
50+
isRef ? <JumpToPathSection /> : ""
5051
}
5152
</span>)
5253

@@ -63,7 +64,7 @@ export default class ObjectModel extends Component {
6364
<ModelCollapse title={titleEl} collapsed={ depth > expandDepth } collapsedContent={ collapsedContent }>
6465
<span className="brace-open object">{ braceOpen }</span>
6566
{
66-
!isRef ? null : <JumpToPathSection name={ name }/>
67+
!isRef ? null : <JumpToPathSection />
6768
}
6869
<span className="inner-object">
6970
{
@@ -94,6 +95,7 @@ export default class ObjectModel extends Component {
9495
<Model key={ `object-${name}-${key}_${value}` } { ...otherProps }
9596
required={ isRequired }
9697
getComponent={ getComponent }
98+
specPath={[...specPath, "properties", key]}
9799
getConfigs={ getConfigs }
98100
schema={ value }
99101
depth={ depth + 1 } />
@@ -132,6 +134,7 @@ export default class ObjectModel extends Component {
132134
<td>
133135
<Model { ...otherProps } required={ false }
134136
getComponent={ getComponent }
137+
specPath={[...specPath, "additionalProperties"]}
135138
getConfigs={ getConfigs }
136139
schema={ additionalProperties }
137140
depth={ depth + 1 } />
@@ -146,6 +149,7 @@ export default class ObjectModel extends Component {
146149
{anyOf.map((schema, k) => {
147150
return <div key={k}><Model { ...otherProps } required={ false }
148151
getComponent={ getComponent }
152+
specPath={[...specPath, "anyOf", k]}
149153
getConfigs={ getConfigs }
150154
schema={ schema }
151155
depth={ depth + 1 } /></div>
@@ -161,6 +165,7 @@ export default class ObjectModel extends Component {
161165
{oneOf.map((schema, k) => {
162166
return <div key={k}><Model { ...otherProps } required={ false }
163167
getComponent={ getComponent }
168+
specPath={[...specPath, "oneOf", k]}
164169
getConfigs={ getConfigs }
165170
schema={ schema }
166171
depth={ depth + 1 } /></div>
@@ -177,6 +182,7 @@ export default class ObjectModel extends Component {
177182
<Model { ...otherProps }
178183
required={ false }
179184
getComponent={ getComponent }
185+
specPath={[...specPath, "not"]}
180186
getConfigs={ getConfigs }
181187
schema={ not }
182188
depth={ depth + 1 } />

src/core/components/operation.jsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { Iterable } from "immutable"
66

77
export default class Operation extends PureComponent {
88
static propTypes = {
9+
specPath: PropTypes.array.isRequired,
910
operation: PropTypes.instanceOf(Iterable).isRequired,
1011
response: PropTypes.instanceOf(Iterable),
1112
request: PropTypes.instanceOf(Iterable),
@@ -36,6 +37,7 @@ export default class Operation extends PureComponent {
3637

3738
render() {
3839
let {
40+
specPath,
3941
response,
4042
request,
4143
toggleShown,
@@ -57,7 +59,6 @@ export default class Operation extends PureComponent {
5759
let {
5860
isShown,
5961
isAuthorized,
60-
jumpToKey,
6162
path,
6263
method,
6364
op,
@@ -112,8 +113,10 @@ export default class Operation extends PureComponent {
112113
let onChangeKey = [ path, method ] // Used to add values to _this_ operation ( indexed by path and method )
113114

114115
return (
116+
<div className={`opblock-summary opblock-summary-${method}`} onClick={toggleShown} >
117+
{/*TODO: convert this into a component, that can be wrapped
118+
and pulled in with getComponent */}
115119
<div className={deprecated ? "opblock opblock-deprecated" : isShown ? `opblock opblock-${method} is-open` : `opblock opblock-${method}`} id={isShownKey.join("-")} >
116-
<div className={`opblock-summary opblock-summary-${method}`} onClick={toggleShown} >
117120
<span className="opblock-summary-method">{method.toUpperCase()}</span>
118121
<span className={ deprecated ? "opblock-summary-path__deprecated" : "opblock-summary-path" } >
119122
<a
@@ -122,7 +125,7 @@ export default class Operation extends PureComponent {
122125
href={isDeepLinkingEnabled ? `#/${isShownKey.join("/")}` : null}>
123126
<span>{path}</span>
124127
</a>
125-
<JumpToPath path={jumpToKey} />
128+
<JumpToPath path={specPath} /> {/*TODO: use wrapComponents here, swagger-ui doesn't care about jumpToPath */}
126129
</span>
127130

128131
{ !showSummary ? null :
@@ -170,6 +173,7 @@ export default class Operation extends PureComponent {
170173

171174
<Parameters
172175
parameters={parameters}
176+
specPath={[...specPath, "parameters"]}
173177
operation={operation}
174178
onChangeKey={onChangeKey}
175179
onTryoutClick = { onTryoutClick }
@@ -243,6 +247,7 @@ export default class Operation extends PureComponent {
243247
specActions={ specActions }
244248
produces={ produces }
245249
producesValue={ operation.get("produces_value") }
250+
specPath={[...specPath, "responses"]}
246251
path={ path }
247252
method={ method }
248253
displayRequestDuration={ displayRequestDuration }

src/core/components/operations.jsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@ export default class Operations extends React.Component {
119119
operations.map( op => {
120120
const path = op.get("path")
121121
const method = op.get("method")
122+
const specPath = ["paths", path, method]
123+
122124

123125
// FIXME: (someday) this logic should probably be in a selector,
124126
// but doing so would require further opening up
@@ -134,6 +136,7 @@ export default class Operations extends React.Component {
134136

135137
return <OperationContainer
136138
key={`${path}-${method}`}
139+
specPath={specPath}
137140
op={op}
138141
path={path}
139142
method={method}

src/core/components/parameter-row.jsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ export default class ParameterRow extends Component {
1414
onChangeConsumes: PropTypes.func.isRequired,
1515
specSelectors: PropTypes.object.isRequired,
1616
pathMethod: PropTypes.array.isRequired,
17-
getConfigs: PropTypes.func.isRequired
17+
getConfigs: PropTypes.func.isRequired,
18+
specPath: PropTypes.array.isRequired,
1819
}
1920

2021
constructor(props, context) {
@@ -69,7 +70,7 @@ export default class ParameterRow extends Component {
6970
}
7071

7172
render() {
72-
let {param, onChange, getComponent, getConfigs, isExecute, fn, onChangeConsumes, specSelectors, pathMethod} = this.props
73+
let {param, onChange, getComponent, getConfigs, isExecute, fn, onChangeConsumes, specSelectors, pathMethod, specPath} = this.props
7374

7475
let { isOAS3 } = specSelectors
7576

@@ -138,6 +139,7 @@ export default class ParameterRow extends Component {
138139

139140
{
140141
bodyParam && schema ? <ModelExample getComponent={ getComponent }
142+
specPath={[...specPath, "schema"]}
141143
getConfigs={ getConfigs }
142144
isExecute={ isExecute }
143145
specSelectors={ specSelectors }

src/core/components/parameters.jsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ export default class Parameters extends Component {
2020
onCancelClick: PropTypes.func,
2121
onChangeKey: PropTypes.array,
2222
pathMethod: PropTypes.array.isRequired,
23-
getConfigs: PropTypes.func.isRequired
23+
getConfigs: PropTypes.func.isRequired,
24+
specPath: PropTypes.array.isRequired,
2425
}
2526

2627

@@ -30,6 +31,7 @@ export default class Parameters extends Component {
3031
tryItOutEnabled: false,
3132
allowTryItOut: true,
3233
onChangeKey: [],
34+
specPath: [],
3335
}
3436

3537
onChange = ( param, value, isXml ) => {
@@ -58,6 +60,7 @@ export default class Parameters extends Component {
5860
parameters,
5961
allowTryItOut,
6062
tryItOutEnabled,
63+
specPath,
6164

6265
fn,
6366
getComponent,
@@ -92,8 +95,10 @@ export default class Parameters extends Component {
9295
</thead>
9396
<tbody>
9497
{
95-
eachMap(parameters, (parameter) => (
96-
<ParameterRow fn={ fn }
98+
eachMap(parameters, (parameter, i) => (
99+
<ParameterRow
100+
fn={ fn }
101+
specPath={[...specPath, i]}
97102
getComponent={ getComponent }
98103
getConfigs={ getConfigs }
99104
param={ parameter }

src/core/components/response.jsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ export default class Response extends React.Component {
4747
getComponent: PropTypes.func.isRequired,
4848
getConfigs: PropTypes.func.isRequired,
4949
specSelectors: PropTypes.object.isRequired,
50+
specPath: PropTypes.array.isRequired,
5051
fn: PropTypes.object.isRequired,
5152
contentType: PropTypes.string,
5253
controlsAcceptHeader: PropTypes.bool,
@@ -72,6 +73,7 @@ export default class Response extends React.Component {
7273
code,
7374
response,
7475
className,
76+
specPath,
7577
fn,
7678
getComponent,
7779
getConfigs,
@@ -94,16 +96,19 @@ export default class Response extends React.Component {
9496
const ContentType = getComponent("contentType")
9597

9698
var sampleResponse
97-
var schema
99+
var schema, specPathWithPossibleSchema
98100

99101
if(isOAS3()) {
100-
let oas3SchemaForContentType = response.getIn(["content", this.state.responseContentType, "schema"])
102+
const schemaPath = ["content", this.state.responseContentType, "schema"]
103+
const oas3SchemaForContentType = response.getIn(schemaPath)
101104
sampleResponse = oas3SchemaForContentType ? getSampleSchema(oas3SchemaForContentType.toJS(), this.state.responseContentType, {
102105
includeReadOnly: true
103106
}) : null
104107
schema = oas3SchemaForContentType ? inferSchema(oas3SchemaForContentType.toJS()) : null
108+
specPathWithPossibleSchema = oas3SchemaForContentType ? schemaPath : specPath
105109
} else {
106-
schema = inferSchema(response.toJS())
110+
schema = inferSchema(response.toJS()) // TODO: don't convert back and forth. Lets just stick with immutable for inferSchema
111+
specPathWithPossibleSchema = response.has("schema") ? [...specPath, "schema"] : specPath
107112
sampleResponse = schema ? getSampleSchema(schema, contentType, {
108113
includeReadOnly: true,
109114
includeWriteOnly: true // writeOnly has no filtering effect in swagger 2.0
@@ -145,6 +150,7 @@ export default class Response extends React.Component {
145150

146151
{ example ? (
147152
<ModelExample
153+
specPath={specPathWithPossibleSchema}
148154
getComponent={ getComponent }
149155
getConfigs={ getConfigs }
150156
specSelectors={ specSelectors }

0 commit comments

Comments
 (0)