Description
I've a custom tv4 keyword defined like this
tv4.defineKeyword('email', function(data, value, schema) {
if (schema.email) {
if (/^\S+@\S+$/.test(data)) {
return null;
}
return {code: 10001};
}
return null;
});
and a custom error like this
tv4.defineError('EMAIL', 10001, 'Invalid email address');
and I'm configuring sfErrorMessageProvider
like this on startup
app.config(['sfErrorMessageProvider', function(sfErrorMessageProvider) {
sfErrorMessageProvider.setDefaultMessage(10001, 'Invalid email address');
}]);
In my schema I have the following definition
"CONTACTEMAIL": {
"type": "string",
"maxLength": 255,
"email": true
}
My field definition is like this
{
"key": "CONTACTEMAIL",
"placeholder": "Enter contact email",
"feedback": false
}
Before submitting my form I call $scope.$broadcast('schemaFormValidate')
, however the field is not validated. For example when it contains the data "NULL"
(as a string). This happens when I open an edit form and supply the form data, the model value directly. The field will be initialised with the value "NULL"
.
However, if I edit the field manually everything works just fine. The field is marked as invalid, my error message shows up.
Right now, as a workaround I'm marking my form with sf-options="{validateOnRender: true}"
. This way the following happens:
- the field initially won't be marked as erroneous (at least not with the related CSS classes, so the field is not red)
- when I call
$broadcast('schemaFormValidate')
it will be marked as erroneous (it'll be red) - however, the validation message won't show up until I type something in the field
So, validateOnRender: true
isn't completely ideal, but this at least prevents invalid form submission.
Any idea?