Skip to content

Commit 536f636

Browse files
committed
refactor: introduce function for getting Schema Object type
1 parent cc6b71a commit 536f636

File tree

12 files changed

+59
-92
lines changed

12 files changed

+59
-92
lines changed

src/core/components/operation-tag.jsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ import Im from "immutable"
55
import { createDeepLinkPath, escapeDeepLinkPath, isFunc } from "core/utils"
66
import { safeBuildUrl, sanitizeUrl } from "core/utils/url"
77

8-
/* eslint-disable react/jsx-no-bind */
9-
108
export default class OperationTag extends React.Component {
119

1210
static defaultProps = {

src/core/components/parameter-row.jsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,8 @@ export default class ParameterRow extends Component {
152152

153153
//// Dispatch the initial value
154154

155-
const type = fn.jsonSchema202012.foldType(immutableToJS(schema?.get("type")))
156-
const itemType = fn.jsonSchema202012.foldType(immutableToJS(schema?.getIn(["items", "type"])))
155+
const type = fn.getSchemaObjectTypeLabel(immutableToJS(schema?.get("type")))
156+
const itemType = fn.getSchemaObjectTypeLabel(immutableToJS(schema?.getIn(["items", "type"])))
157157

158158
if(initialValue !== undefined) {
159159
this.onChangeWrapper(initialValue)
@@ -174,7 +174,7 @@ export default class ParameterRow extends Component {
174174
stringify(generatedSampleValue)
175175
)
176176
)
177-
}
177+
}
178178
else if (
179179
type === "array"
180180
&& itemType === "object"
@@ -251,15 +251,15 @@ export default class ParameterRow extends Component {
251251
if (isOAS3) {
252252
schema = this.composeJsonSchema(schema)
253253
}
254-
254+
255255
let format = schema ? schema.get("format") : null
256256
let isFormData = inType === "formData"
257257
let isFormDataSupported = "FormData" in win
258258
let required = param.get("required")
259259

260-
const typeLabel = fn.jsonSchema202012.getType(immutableToJS(schema))
261-
const type = fn.jsonSchema202012.foldType(immutableToJS(schema?.get("type")))
262-
const itemType = fn.jsonSchema202012.foldType(immutableToJS(schema?.getIn(["items", "type"])))
260+
const typeLabel = fn.getSchemaObjectType(immutableToJS(schema))
261+
const type = fn.getSchemaObjectTypeLabel(immutableToJS(schema?.get("type")))
262+
const itemType = fn.getSchemaObjectTypeLabel(immutableToJS(schema?.getIn(["items", "type"])))
263263
const isObject = !bodyParam && type === "object"
264264
const isArrayOfObjects = !bodyParam && itemType === "object"
265265

@@ -371,7 +371,7 @@ export default class ParameterRow extends Component {
371371
}
372372

373373
{ (isObject || isArrayOfObjects) ? (
374-
<ModelExample
374+
<ModelExample
375375
getComponent={getComponent}
376376
specPath={specPath.push("schema")}
377377
getConfigs={getConfigs}
@@ -380,7 +380,7 @@ export default class ParameterRow extends Component {
380380
schema={schema}
381381
example={jsonSchemaForm}
382382
/>
383-
) : jsonSchemaForm
383+
) : jsonSchemaForm
384384
}
385385

386386
{

src/core/components/response.jsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import { fromJS, Seq, Iterable, List, Map } from "immutable"
66
import { getExtensions, fromJSOrdered, stringify } from "core/utils"
77
import { getKnownSyntaxHighlighterLanguage } from "core/utils/jsonParse"
88

9-
/* eslint-disable react/jsx-no-bind */
109

1110
const getExampleComponent = ( sampleResponse, HighlightCode ) => {
1211
if (sampleResponse == null) return null
@@ -140,8 +139,8 @@ export default class Response extends React.Component {
140139
const targetExample = examplesForMediaType
141140
.get(targetExamplesKey, Map({}))
142141
const getMediaTypeExample = (targetExample) =>
143-
Map.isMap(targetExample)
144-
? targetExample.get("value")
142+
Map.isMap(targetExample)
143+
? targetExample.get("value")
145144
: undefined
146145
mediaTypeExample = getMediaTypeExample(targetExample)
147146
if(mediaTypeExample === undefined) {

src/core/plugins/json-schema-5-samples/fn/index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -635,3 +635,7 @@ const resolver = (arg1, arg2, arg3) => [arg1, JSON.stringify(arg2), JSON.stringi
635635
export const memoizedCreateXMLExample = memoizeN(createXMLExample, resolver)
636636

637637
export const memoizedSampleFromSchema = memoizeN(sampleFromSchema, resolver)
638+
639+
export const getSchemaObjectTypeLabel = (label) => label
640+
641+
export const getSchemaObjectType = (schema) => schema.type ?? "any"

src/core/plugins/json-schema-5-samples/index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import {
99
memoizedCreateXMLExample,
1010
memoizedSampleFromSchema,
1111
mergeJsonSchema,
12+
getSchemaObjectType,
13+
getSchemaObjectTypeLabel,
1214
} from "./fn/index"
1315
import makeGetJsonSampleSchema from "./fn/get-json-sample-schema"
1416
import makeGetYamlSampleSchema from "./fn/get-yaml-sample-schema"
@@ -47,6 +49,8 @@ const JSONSchema5SamplesPlugin = ({ getSystem }) => {
4749
getXmlSampleSchema,
4850
getSampleSchema,
4951
mergeJsonSchema,
52+
getSchemaObjectTypeLabel,
53+
getSchemaObjectType,
5054
},
5155
}
5256
}

src/core/plugins/json-schema-5/components/json-schema-components.jsx

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ import ImPropTypes from "react-immutable-proptypes"
66
import DebounceInput from "react-debounce-input"
77
import { stringify, isImmutable, immutableToJS } from "core/utils"
88

9-
/* eslint-disable react/jsx-no-bind */
10-
119
const noop = ()=> {}
1210
const JsonSchemaPropShape = {
1311
getComponent: PropTypes.func.isRequired,
@@ -50,15 +48,15 @@ export class JsonSchemaForm extends Component {
5048
let { schema, errors, value, onChange, getComponent, fn, disabled } = this.props
5149
const format = schema && schema.get ? schema.get("format") : null
5250
const type = schema && schema.get ? schema.get("type") : null
53-
const foldedType = fn.jsonSchema202012.foldType(immutableToJS(type))
51+
const objectTypeLabel = fn.getSchemaObjectTypeLabel(immutableToJS(type))
5452

5553
let getComponentSilently = (name) => getComponent(name, false, { failSilently: true })
5654
let Comp = type ? format ?
5755
getComponentSilently(`JsonSchema_${type}_${format}`) :
5856
getComponentSilently(`JsonSchema_${type}`) :
5957
getComponent("JsonSchema_string")
6058

61-
if (List.isList(type) && (foldedType === "array" || foldedType === "object")) {
59+
if (List.isList(type) && (objectTypeLabel === "array" || objectTypeLabel === "object")) {
6260
Comp = getComponent("JsonSchema_object")
6361
}
6462

@@ -194,8 +192,8 @@ export class JsonSchema_array extends PureComponent {
194192
value && value.count && value.count() > 0 ? true : false
195193
const schemaItemsEnum = schema.getIn(["items", "enum"])
196194
const schemaItemsType = schema.getIn(["items", "type"])
197-
const foldedSchemaItemsType = fn.jsonSchema202012.foldType(immutableToJS(schemaItemsType))
198-
const schemaItemsTypeLabel = fn.jsonSchema202012.getType(immutableToJS(schema.get("items")))
195+
const objectTypeLabel = fn.getSchemaObjectTypeLabel(immutableToJS(schemaItemsType))
196+
const objectType = fn.getSchemaObjectType(immutableToJS(schema.get("items")))
199197
const schemaItemsFormat = schema.getIn(["items", "format"])
200198
const schemaItemsSchema = schema.get("items")
201199
let ArrayItemsComponent
@@ -207,7 +205,7 @@ export class JsonSchema_array extends PureComponent {
207205
ArrayItemsComponent = getComponent(`JsonSchema_${schemaItemsType}`)
208206
}
209207

210-
if (List.isList(schemaItemsType) && (foldedSchemaItemsType === "array" || foldedSchemaItemsType === "object")) {
208+
if (List.isList(schemaItemsType) && (objectTypeLabel === "array" || objectTypeLabel === "object")) {
211209
ArrayItemsComponent = getComponent(`JsonSchema_object`)
212210
}
213211

@@ -285,7 +283,7 @@ export class JsonSchema_array extends PureComponent {
285283
title={arrayErrors.length ? arrayErrors : ""}
286284
onClick={this.addItem}
287285
>
288-
Add {schemaItemsTypeLabel} item
286+
Add {objectType} item
289287
</Button>
290288
) : null}
291289
</div>

src/core/plugins/json-schema-5/components/models.jsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ import React, { Component } from "react"
22
import Im, { Map } from "immutable"
33
import PropTypes from "prop-types"
44

5-
/* eslint-disable react/jsx-no-bind */
6-
75
export default class Models extends Component {
86
static propTypes = {
97
getComponent: PropTypes.func,

src/core/plugins/oas3/components/request-body.jsx

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ import { Map, OrderedMap, List, fromJS } from "immutable"
55
import { getCommonExtensions, stringify, isEmptyValue, immutableToJS } from "core/utils"
66
import { getKnownSyntaxHighlighterLanguage } from "core/utils/jsonParse"
77

8-
/* eslint-disable react/jsx-no-bind */
9-
108
export const getDefaultRequestBodyValue = (requestBody, mediaType, activeExamplesKey, fn) => {
119
const mediaTypeValue = requestBody.getIn(["content", mediaType]) ?? OrderedMap()
1210
const schema = mediaTypeValue.get("schema", OrderedMap()).toJS()
@@ -161,9 +159,9 @@ const RequestBody = ({
161159

162160
let commonExt = showCommonExtensions ? getCommonExtensions(schema) : null
163161
const required = schemaForMediaType.get("required", List()).includes(key)
164-
const typeLabel = fn.jsonSchema202012.getType(immutableToJS(schema))
165-
const type = fn.jsonSchema202012.foldType(immutableToJS(schema?.get("type")))
166-
const itemType = fn.jsonSchema202012.foldType(immutableToJS(schema?.getIn(["items", "type"])))
162+
const objectType = fn.getSchemaObjectType(immutableToJS(schema))
163+
const objectTypeLabel = fn.getSchemaObjectTypeLabel(immutableToJS(schema?.get("type")))
164+
const itemTypeLabel = fn.getSchemaObjectTypeLabel(immutableToJS(schema?.getIn(["items", "type"])))
167165
const format = schema.get("format")
168166
const description = schema.get("description")
169167
const currentValue = requestBodyValue.getIn([key, "value"])
@@ -182,15 +180,15 @@ const RequestBody = ({
182180
initialValue = "0"
183181
}
184182

185-
if (typeof initialValue !== "string" && type === "object") {
183+
if (typeof initialValue !== "string" && objectTypeLabel === "object") {
186184
initialValue = stringify(initialValue)
187185
}
188186

189-
if (typeof initialValue === "string" && type === "array") {
187+
if (typeof initialValue === "string" && objectTypeLabel === "array") {
190188
initialValue = JSON.parse(initialValue)
191189
}
192190

193-
const isFile = type === "string" && (format === "binary" || format === "base64")
191+
const isFile = objectTypeLabel === "string" && (format === "binary" || format === "base64")
194192

195193
const jsonSchemaForm = <JsonSchemaForm
196194
fn={fn}
@@ -213,7 +211,7 @@ const RequestBody = ({
213211
{ !required ? null : <span>&nbsp;*</span> }
214212
</div>
215213
<div className="parameter__type">
216-
{ typeLabel }
214+
{ objectType }
217215
{ format && <span className="prop-format">(${format})</span>}
218216
{!showCommonExtensions || !commonExt.size ? null : commonExt.entrySeq().map(([key, v]) => <ParameterExt key={`${key}-${v}`} xKey={key} xVal={v} />)}
219217
</div>
@@ -224,7 +222,7 @@ const RequestBody = ({
224222
<td className="parameters-col_description">
225223
<Markdown source={ description }></Markdown>
226224
{isExecute ? <div>
227-
{(type === "object" || itemType === "object") ? (
225+
{(objectTypeLabel === "object" || itemTypeLabel === "object") ? (
228226
<ModelExample
229227
getComponent={getComponent}
230228
specPath={specPath.push("schema")}

src/core/plugins/oas31/after-load.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ function afterLoad({ fn, getSystem }) {
3232
getXmlSampleSchema: fn.jsonSchema202012.getXmlSampleSchema,
3333
getSampleSchema: fn.jsonSchema202012.getSampleSchema,
3434
mergeJsonSchema: fn.jsonSchema202012.mergeJsonSchema,
35+
getSchemaObjectTypeLabel: fn.jsonSchema202012.foldType,
36+
getSchemaObjectType: fn.jsonSchema202012.getType,
3537
},
3638
getSystem()
3739
)

test/unit/bugs/4557-default-parameter-values.jsx

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,8 @@ describe("bug #4557: default parameter values", function () {
5252
getYamlSampleSchema: makeGetYamlSampleSchema(getSystem),
5353
getXmlSampleSchema: makeGetXmlSampleSchema(getSystem),
5454
getSampleSchema: makeGetSampleSchema(getSystem),
55-
jsonSchema202012: {
56-
foldType,
57-
getType: makeGetType(() => ({ isBooleanJSONSchema })),
58-
},
55+
getSchemaObjectTypeLabel: foldType,
56+
getSchemaObjectType: makeGetType(() => ({ isBooleanJSONSchema })),
5957
},
6058
})
6159
const props = {
@@ -114,10 +112,8 @@ describe("bug #4557: default parameter values", function () {
114112
getXmlSampleSchema: makeGetXmlSampleSchema(getSystem),
115113
getSampleSchema: makeGetSampleSchema(getSystem),
116114
mergeJsonSchema,
117-
jsonSchema202012: {
118-
foldType,
119-
getType: makeGetType(() => ({ isBooleanJSONSchema })),
120-
},
115+
getSchemaObjectTypeLabel: foldType,
116+
getSchemaObjectType: makeGetType(() => ({ isBooleanJSONSchema })),
121117
},
122118
})
123119
const props = {

test/unit/components/parameter-row.jsx

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,8 @@ describe("<ParameterRow/>", () => {
3838
getXmlSampleSchema: makeGetXmlSampleSchema(getSystem),
3939
getSampleSchema: makeGetSampleSchema(getSystem),
4040
mergeJsonSchema,
41-
jsonSchema202012: {
42-
foldType,
43-
getType: makeGetType(() => ({ isBooleanJSONSchema })),
44-
},
41+
getSchemaObjectTypeLabel: foldType,
42+
getSchemaObjectType: makeGetType(() => ({ isBooleanJSONSchema })),
4543
},
4644
oas3Selectors: { activeExamplesMember: () => {} },
4745
getConfigs: () => ({}),
@@ -182,10 +180,8 @@ describe("bug #5573: zero default and example values", function () {
182180
getYamlSampleSchema: makeGetYamlSampleSchema(getSystem),
183181
getXmlSampleSchema: makeGetXmlSampleSchema(getSystem),
184182
getSampleSchema: makeGetSampleSchema(getSystem),
185-
jsonSchema202012: {
186-
foldType,
187-
getType: makeGetType(() => ({ isBooleanJSONSchema })),
188-
},
183+
getSchemaObjectTypeLabel: foldType,
184+
getSchemaObjectType: makeGetType(() => ({ isBooleanJSONSchema })),
189185
},
190186
getConfigs: () => {
191187
return {}
@@ -238,10 +234,8 @@ describe("bug #5573: zero default and example values", function () {
238234
getYamlSampleSchema: makeGetYamlSampleSchema(getSystem),
239235
getXmlSampleSchema: makeGetXmlSampleSchema(getSystem),
240236
getSampleSchema: makeGetSampleSchema(getSystem),
241-
jsonSchema202012: {
242-
foldType,
243-
getType: makeGetType(() => ({ isBooleanJSONSchema })),
244-
},
237+
getSchemaObjectTypeLabel: foldType,
238+
getSchemaObjectType: makeGetType(() => ({ isBooleanJSONSchema })),
245239
},
246240
})
247241
const props = {
@@ -296,10 +290,8 @@ describe("bug #5573: zero default and example values", function () {
296290
getXmlSampleSchema: makeGetXmlSampleSchema(getSystem),
297291
getSampleSchema: makeGetSampleSchema(getSystem),
298292
mergeJsonSchema,
299-
jsonSchema202012: {
300-
foldType,
301-
getType: makeGetType(() => ({ isBooleanJSONSchema })),
302-
},
293+
getSchemaObjectTypeLabel: foldType,
294+
getSchemaObjectType: makeGetType(() => ({ isBooleanJSONSchema })),
303295
},
304296
})
305297
const props = {
@@ -354,10 +346,8 @@ describe("bug #5573: zero default and example values", function () {
354346
getXmlSampleSchema: makeGetXmlSampleSchema(getSystem),
355347
getSampleSchema: makeGetSampleSchema(getSystem),
356348
mergeJsonSchema,
357-
jsonSchema202012: {
358-
foldType,
359-
getType: makeGetType(() => ({ isBooleanJSONSchema })),
360-
},
349+
getSchemaObjectTypeLabel: foldType,
350+
getSchemaObjectType: makeGetType(() => ({ isBooleanJSONSchema })),
361351
},
362352
})
363353
const props = {

0 commit comments

Comments
 (0)