Skip to content

Commit 87e7142

Browse files
committed
Revert "Update parameter <select> elements to render 'invalid' classes. Add '.invalid' CSS for <select> elements. Rework validateParam() function. Added .btn-sm class for "Add item" and "Remove item" buttons in array parameters. Reduce border-width on <select> elements inside parameters. Update tests for utils.validateParam()."
This reverts commit 666e22f.
1 parent e45edc5 commit 87e7142

File tree

8 files changed

+99
-384
lines changed

8 files changed

+99
-384
lines changed

src/core/components/layout-utils.jsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,7 @@ export class Select extends React.Component {
129129
value: PropTypes.any,
130130
onChange: PropTypes.func,
131131
multiple: PropTypes.bool,
132-
allowEmptyValue: PropTypes.bool,
133-
className: PropTypes.string
132+
allowEmptyValue: PropTypes.bool
134133
}
135134

136135
static defaultProps = {
@@ -143,7 +142,7 @@ export class Select extends React.Component {
143142

144143
let value
145144

146-
if (props.value) {
145+
if (props.value !== undefined) {
147146
value = props.value
148147
} else {
149148
value = props.multiple ? [""] : ""
@@ -179,7 +178,7 @@ export class Select extends React.Component {
179178
let value = this.state.value.toJS ? this.state.value.toJS() : this.state.value
180179

181180
return (
182-
<select className={this.props.className} multiple={ multiple } value={ value } onChange={ this.onChange } >
181+
<select multiple={ multiple } value={ value } onChange={ this.onChange } >
183182
{ allowEmptyValue ? <option value="">--</option> : null }
184183
{
185184
allowedValues.map(function (item, key) {

src/core/json-schema-components.js

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,7 @@ export class JsonSchema_string extends Component {
5757

5858
if ( enumValue ) {
5959
const Select = getComponent("Select")
60-
return (<Select className={ errors.length ? "invalid" : ""}
61-
allowedValues={ enumValue }
60+
return (<Select allowedValues={ enumValue }
6261
value={ value }
6362
allowEmptyValue={ !required }
6463
onChange={ this.onEnumChange }/>)
@@ -122,7 +121,6 @@ export class JsonSchema_array extends PureComponent {
122121
render() {
123122
let { getComponent, required, schema, fn } = this.props
124123

125-
let errors = schema.errors || []
126124
let itemSchema = fn.inferSchema(schema.items)
127125

128126
const JsonSchemaForm = getComponent("JsonSchemaForm")
@@ -133,17 +131,19 @@ export class JsonSchema_array extends PureComponent {
133131

134132
if ( enumValue ) {
135133
const Select = getComponent("Select")
136-
return (<Select className={ errors.length ? "invalid" : ""}
137-
multiple={ true }
134+
return (<Select multiple={ true }
138135
value={ value }
139136
allowedValues={ enumValue }
140137
allowEmptyValue={ !required }
141138
onChange={ this.onEnumChange }/>)
142139
}
143140

141+
let errors = schema.errors || []
142+
144143
return (
145144
<div>
146-
{ !value || value.count() < 1 ? null :
145+
{ !value || value.count() < 1 ?
146+
(errors.length ? <span style={{ color: "red", fortWeight: "bold" }}>{ errors[0] }</span> : null) :
147147
value.map( (item,i) => {
148148
let schema = Object.assign({}, itemSchema)
149149
if ( errors.length ) {
@@ -153,12 +153,12 @@ export class JsonSchema_array extends PureComponent {
153153
return (
154154
<div key={i} className="json-schema-form-item">
155155
<JsonSchemaForm fn={fn} getComponent={getComponent} value={item} onChange={(val) => this.onItemChange(val, i)} schema={schema} />
156-
<Button className="btn btn-sm json-schema-form-item-remove" onClick={()=> this.removeItem(i)} > - </Button>
156+
<Button className="json-schema-form-item-remove" onClick={()=> this.removeItem(i)} > - </Button>
157157
</div>
158158
)
159159
}).toArray()
160160
}
161-
<Button className={`btn btn-sm json-schema-form-item-add ${errors.length ? "invalid" : null}`} onClick={this.addItem}> Add item </Button>
161+
<Button className="json-schema-form-item-add" onClick={this.addItem}> Add item </Button>
162162
</div>
163163
)
164164
}
@@ -170,14 +170,12 @@ export class JsonSchema_boolean extends Component {
170170

171171
onEnumChange = (val) => this.props.onChange(val)
172172
render() {
173-
let { getComponent, value, schema } = this.props
174-
let errors = schema.errors || []
173+
let { getComponent, required, value } = this.props
175174
const Select = getComponent("Select")
176175

177-
return (<Select className={ errors.length ? "invalid" : ""}
178-
value={ String(value) }
176+
return (<Select value={ String(value) }
179177
allowedValues={ fromJS(["true", "false"]) }
180-
allowEmptyValue={true}
178+
allowEmptyValue={ !required }
181179
onChange={ this.onEnumChange }/>)
182180
}
183181
}

src/core/utils.js

Lines changed: 44 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -468,85 +468,59 @@ export const validateFile = ( val ) => {
468468
}
469469
}
470470

471-
export const validateBoolean = ( val ) => {
472-
if ( !(val === "true" || val === "false" || val === true || val === false) ) {
473-
return "Value must be a boolean"
474-
}
475-
}
476-
477-
export const validateString = ( val ) => {
478-
if ( val && typeof val !== "string" ) {
479-
return "Value must be a string"
480-
}
481-
}
482-
483471
// validation of parameters before execute
484472
export const validateParam = (param, isXml) => {
485473
let errors = []
486474
let value = isXml && param.get("in") === "body" ? param.get("value_xml") : param.get("value")
487475
let required = param.get("required")
488476
let type = param.get("type")
489477

490-
// If the parameter is required OR the parameter has a value (meaning optional, but filled in)
491-
// then we should do our validation routine
492-
if ( required || value ) {
493-
// These checks should evaluate to true if the parameter's value is valid
494-
let stringCheck = type === "string" && value && !validateString(value)
495-
let arrayCheck = type === "array" && Array.isArray(value) && value.length
496-
let listCheck = type === "array" && Im.List.isList(value) && value.count()
497-
let fileCheck = type === "file" && value instanceof win.File
498-
let booleanCheck = type === "boolean" && !validateBoolean(value)
499-
let numberCheck = type === "number" && !validateNumber(value) // validateNumber returns undefined if the value is a number
500-
let integerCheck = type === "integer" && !validateInteger(value) // validateInteger returns undefined if the value is an integer
501-
502-
if ( required && !(stringCheck || arrayCheck || listCheck || fileCheck || booleanCheck || numberCheck || integerCheck) ) {
503-
errors.push("Required field is not provided")
504-
return errors
505-
}
478+
let stringCheck = type === "string" && !value
479+
let arrayCheck = type === "array" && Array.isArray(value) && !value.length
480+
let listCheck = type === "array" && Im.List.isList(value) && !value.count()
481+
let fileCheck = type === "file" && !(value instanceof win.File)
506482

507-
if ( type === "string" ) {
508-
let err = validateString(value)
509-
if (!err) return errors
510-
errors.push(err)
511-
} else if ( type === "boolean" ) {
512-
let err = validateBoolean(value)
513-
if (!err) return errors
514-
errors.push(err)
515-
} else if ( type === "number" ) {
516-
let err = validateNumber(value)
517-
if (!err) return errors
518-
errors.push(err)
519-
} else if ( type === "integer" ) {
520-
let err = validateInteger(value)
521-
if (!err) return errors
522-
errors.push(err)
523-
} else if ( type === "array" ) {
524-
let itemType
525-
526-
if ( !value.count() ) { return errors }
527-
528-
itemType = param.getIn(["items", "type"])
529-
530-
value.forEach((item, index) => {
531-
let err
532-
533-
if (itemType === "number") {
534-
err = validateNumber(item)
535-
} else if (itemType === "integer") {
536-
err = validateInteger(item)
537-
} else if (itemType === "string") {
538-
err = validateString(item)
539-
}
483+
if ( required && (stringCheck || arrayCheck || listCheck || fileCheck) ) {
484+
errors.push("Required field is not provided")
485+
return errors
486+
}
540487

541-
if ( err ) {
542-
errors.push({ index: index, error: err})
543-
}
544-
})
545-
} else if ( type === "file" ) {
546-
let err = validateFile(value)
547-
if (!err) return errors
548-
errors.push(err)
549-
}
488+
if ( value === null || value === undefined ) {
489+
return errors
490+
}
491+
492+
if ( type === "number" ) {
493+
let err = validateNumber(value)
494+
if (!err) return errors
495+
errors.push(err)
496+
} else if ( type === "integer" ) {
497+
let err = validateInteger(value)
498+
if (!err) return errors
499+
errors.push(err)
500+
} else if ( type === "array" ) {
501+
let itemType
502+
503+
if ( !value.count() ) { return errors }
504+
505+
itemType = param.getIn(["items", "type"])
506+
507+
value.forEach((item, index) => {
508+
let err
509+
510+
if (itemType === "number") {
511+
err = validateNumber(item)
512+
} else if (itemType === "integer") {
513+
err = validateInteger(item)
514+
}
515+
516+
if ( err ) {
517+
errors.push({ index: index, error: err})
518+
}
519+
})
520+
} else if ( type === "file" ) {
521+
let err = validateFile(value)
522+
if (!err) return errors
523+
errors.push(err)
550524
}
551525

552526
return errors

src/style/_buttons.scss

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,6 @@
1414

1515
@include text_headline();
1616

17-
&.btn-sm {
18-
font-size: 12px;
19-
padding: 4px 23px;
20-
}
21-
2217
&[disabled]
2318
{
2419
cursor: not-allowed;
@@ -170,9 +165,6 @@
170165
button
171166
{
172167
cursor: pointer;
173-
outline: none;
174168

175-
&.invalid {
176-
@include invalidFormElement();
177-
}
169+
outline: none;
178170
}

src/style/_form.scss

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,6 @@ select
2121

2222
background: #f7f7f7;
2323
}
24-
25-
&.invalid {
26-
@include invalidFormElement();
27-
}
2824
}
2925

3026
.opblock-body select
@@ -57,8 +53,12 @@ input[type=file]
5753
border-radius: 4px;
5854
background: #fff;
5955

60-
&.invalid {
61-
@include invalidFormElement();
56+
&.invalid
57+
{
58+
animation: shake .4s 1;
59+
60+
border-color: $_color-delete;
61+
background: lighten($_color-delete, 35%);
6262
}
6363
}
6464

src/style/_mixins.scss

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,3 @@ $browser-context: 16;
166166
@warn 'Breakpoint mixin supports: tablet, mobile, desktop';
167167
}
168168
}
169-
170-
@mixin invalidFormElement() {
171-
animation: shake .4s 1;
172-
border-color: $_color-delete;
173-
background: lighten($_color-delete, 35%);
174-
}

src/style/_table.scss

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,6 @@ table
9797
width: 100%;
9898
max-width: 340px;
9999
}
100-
101-
select {
102-
border-width: 1px;
103-
}
104100
}
105101

106102
.parameter__name

0 commit comments

Comments
 (0)