Skip to content

Commit c70aaaf

Browse files
char0nrobert-hebel-sb
authored andcommitted
refactor: introduce function for getting Schema Object type
1 parent c52ca44 commit c70aaaf

File tree

12 files changed

+58
-91
lines changed

12 files changed

+58
-91
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,7 +48,7 @@ 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
const isFileUploadIntended = fn.isFileUploadIntended(schema)
5553

5654
let getComponentSilently = (name) => getComponent(name, false, { failSilently: true })
@@ -59,7 +57,7 @@ export class JsonSchemaForm extends Component {
5957
getComponentSilently(`JsonSchema_${type}`) :
6058
getComponent("JsonSchema_string")
6159

62-
if (!isFileUploadIntended && List.isList(type) && (foldedType === "array" || foldedType === "object")) {
60+
if (!isFileUploadIntended && List.isList(type) && (objectTypeLabel === "array" || objectTypeLabel === "object")) {
6361
Comp = getComponent("JsonSchema_object")
6462
}
6563

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

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

@@ -286,7 +284,7 @@ export class JsonSchema_array extends PureComponent {
286284
title={arrayErrors.length ? arrayErrors : ""}
287285
onClick={this.addItem}
288286
>
289-
Add {schemaItemsTypeLabel} item
287+
Add {objectType} item
290288
</Button>
291289
) : null}
292290
</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: 7 additions & 9 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()
@@ -160,9 +158,9 @@ const RequestBody = ({
160158

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

184-
if (typeof initialValue !== "string" && type === "object") {
182+
if (typeof initialValue !== "string" && objectTypeLabel === "object") {
185183
initialValue = stringify(initialValue)
186184
}
187185

188-
if (typeof initialValue === "string" && type === "array") {
186+
if (typeof initialValue === "string" && objectTypeLabel === "array") {
189187
initialValue = JSON.parse(initialValue)
190188
}
191189

@@ -212,7 +210,7 @@ const RequestBody = ({
212210
{ !required ? null : <span>&nbsp;*</span> }
213211
</div>
214212
<div className="parameter__type">
215-
{ typeLabel }
213+
{ objectType }
216214
{ format && <span className="prop-format">(${format})</span>}
217215
{!showCommonExtensions || !commonExt.size ? null : commonExt.entrySeq().map(([key, v]) => <ParameterExt key={`${key}-${v}`} xKey={key} xVal={v} />)}
218216
</div>
@@ -223,7 +221,7 @@ const RequestBody = ({
223221
<td className="parameters-col_description">
224222
<Markdown source={ description }></Markdown>
225223
{isExecute ? <div>
226-
{(type === "object" || itemType === "object") ? (
224+
{(objectTypeLabel === "object" || itemTypeLabel === "object") ? (
227225
<ModelExample
228226
getComponent={getComponent}
229227
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
@@ -33,6 +33,8 @@ function afterLoad({ fn, getSystem }) {
3333
getXmlSampleSchema: fn.jsonSchema202012.getXmlSampleSchema,
3434
getSampleSchema: fn.jsonSchema202012.getSampleSchema,
3535
mergeJsonSchema: fn.jsonSchema202012.mergeJsonSchema,
36+
getSchemaObjectTypeLabel: fn.jsonSchema202012.foldType,
37+
getSchemaObjectType: fn.jsonSchema202012.getType,
3638
},
3739
getSystem()
3840
)

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)