diff --git a/packages/netlify-cms-core/src/components/Editor/EditorControlPane/EditorControlPane.js b/packages/netlify-cms-core/src/components/Editor/EditorControlPane/EditorControlPane.js index 89e60568..367ab761 100644 --- a/packages/netlify-cms-core/src/components/Editor/EditorControlPane/EditorControlPane.js +++ b/packages/netlify-cms-core/src/components/Editor/EditorControlPane/EditorControlPane.js @@ -17,14 +17,9 @@ export default class ControlPane extends React.Component { controlRef(field, wrappedControl) { if (!wrappedControl) return; const name = field.get('name'); - const widget = field.get('widget'); - const listFields = field => field.get('field') || field.get('fields') || field.get('types'); - if ((widget === 'list' && listFields(field)) || widget === 'object') { - this.componentValidate[name] = wrappedControl.innerWrappedControl.validate; - } else { - this.componentValidate[name] = wrappedControl.validate; - } + this.componentValidate[name] = + wrappedControl.innerWrappedControl.validate || wrappedControl.validate; } validate = () => { diff --git a/packages/netlify-cms-core/src/components/Editor/EditorControlPane/Widget.js b/packages/netlify-cms-core/src/components/Editor/EditorControlPane/Widget.js index 4e24631b..94b1942c 100644 --- a/packages/netlify-cms-core/src/components/Editor/EditorControlPane/Widget.js +++ b/packages/netlify-cms-core/src/components/Editor/EditorControlPane/Widget.js @@ -97,7 +97,11 @@ export default class Widget extends Component { }; validate = (skipWrapped = false) => { - const { field, value } = this.props; + let value = this.props.value; + // Convert list input widget value to string for validation test + List.isList(value) && (value = value.join(',')); + + const field = this.props.field; const errors = []; const validations = [this.validatePresence, this.validatePattern]; validations.forEach(func => { @@ -137,9 +141,6 @@ export default class Widget extends Component { return { error: false }; } - // Convert list input widget value to string for pattern test - List.isList(value) && (value = value.join(',')); - if (pattern && !RegExp(pattern.first()).test(value)) { const error = { type: ValidationErrorTypes.PATTERN, @@ -271,6 +272,7 @@ export default class Widget extends Component { getAsset, forID: uniqueFieldId, ref: this.processInnerControlRef, + validate: this.validate, classNameWrapper, classNameWidget, classNameWidgetActive, diff --git a/packages/netlify-cms-widget-list/src/ListControl.js b/packages/netlify-cms-widget-list/src/ListControl.js index f75c1010..1749a361 100644 --- a/packages/netlify-cms-widget-list/src/ListControl.js +++ b/packages/netlify-cms-widget-list/src/ListControl.js @@ -79,6 +79,7 @@ export default class ListControl extends React.Component { onChange: PropTypes.func.isRequired, onChangeObject: PropTypes.func.isRequired, onValidateObject: PropTypes.func.isRequired, + validate: PropTypes.func.isRequired, value: ImmutablePropTypes.list, field: PropTypes.object, forID: PropTypes.string, @@ -230,9 +231,13 @@ export default class ListControl extends React.Component { }; validate = () => { - this.validations.forEach(validateListItem => { - validateListItem(); - }); + if (this.getValueType()) { + this.validations.forEach(validateListItem => { + validateListItem(); + }); + } else { + this.props.validate(); + } }; /**