Skip to content

Commit b3015b2

Browse files
committed
added inline message options
1 parent 964a43e commit b3015b2

File tree

4 files changed

+103
-41
lines changed

4 files changed

+103
-41
lines changed

src/components/FormlyField.vue

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,19 @@
3838
if ( !this.field.required && !this.model[ this.field.key ] ) return;
3939
4040
let validator = this.field.validators[validKey];
41+
let validatorMessage = false;
4142
43+
if ( typeof validator === 'object' ){
44+
if ( !( 'message' in validator ) ){
45+
console.error( "Looks like you've set a validator object without setting a message. If you don't need to explicity set the message just define the validator as either an expression or a function. Refer to the docs for more info");
46+
} else {
47+
validatorMessage = validator.message;
48+
validator = validator.expression;
49+
}
50+
}
51+
4252
let valid = typeof validator == 'function' ? !validator(field, model) : !eval(validator);
43-
setError(this.form, this.field.key, validKey, valid);
53+
setError(this.form, this.field.key, validKey, valid, validatorMessage);
4454
4555
});
4656
}

src/util.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export function getTypes(){
2525
* @param {String} err
2626
* @param {Bool} isError
2727
*/
28-
export function setError(form, key, err, isError){
28+
export function setError(form, key, err, isError, message = false){
2929
if ( !form.$errors[key] ) form.$errors[key] = {};
30-
form.$errors[key][err] = isError;
30+
form.$errors[key][err] = message || isError;
3131
}

test/unit/specs/FormlyField.spec.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,55 @@ describe('FormlyField', () => {
284284
done();
285285
},0);
286286
});
287+
288+
describe("Validation Messages", (done) => {
289+
290+
//what do we want to do
291+
292+
//--- define messages ---
293+
//vf.addValidationString('validatorKey', 'message');
294+
//vf.addValidationPattern('validatorKey', '%l is required');
295+
//vf.addValidationPattern('validatorKey', '%v is too small');
296+
297+
//add specific messages
298+
/*
299+
* validators: {
300+
* test: {
301+
* expression: function(){},
302+
* message: '%l requires 10, you entered %s'
303+
* }
304+
* }
305+
*/
306+
307+
it('Inline messages', () => {
308+
let data = {
309+
form: {
310+
$valid: true,
311+
$errors: {}
312+
},
313+
model: {
314+
search: 'testing'
315+
},
316+
fields: [
317+
{
318+
key: 'search',
319+
type: 'test',
320+
validators: {
321+
validatorMessage:
322+
{
323+
expression: 'model.search == "test"',
324+
message: 'Must equal test'
325+
}
326+
}
327+
}
328+
]
329+
};
330+
331+
createValidField(data);
332+
expect(vm.form.$errors.search.validatorMessage).to.equal('Must equal test');
333+
});
334+
335+
});
287336

288337
});
289338

test/unit/specs/index.spec.js

Lines changed: 41 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -6,42 +6,45 @@ import Util, {addType, getTypes, setError} from 'src/util';
66

77
describe('module', () => {
88

9-
it('module props', () => {
10-
expect(VueFormly).to.exist;
11-
expect(VueFormly.install).to.be.a('function');
12-
expect(VueFormly.addType).to.be.a('function');
13-
expect(VueFormly.getTypes).to.be.a('function');
14-
expect(addType).to.be.a('function');
15-
expect(getTypes).to.be.a('function');
16-
expect(setError).to.be.a('function');
17-
expect(Util.formlyFields).to.be.a('object');
18-
});
19-
20-
it('should add fields to Vue', () => {
21-
22-
//mock vue
23-
window.Vue = {
24-
component(){},
25-
filter(){}
26-
};
27-
VueFormly.install(Vue);
28-
29-
let newField = {
30-
foo: 'bar'
31-
};
32-
addType('test', newField);
33-
expect(getTypes().formly_test).to.deep.equal(newField);
34-
});
35-
36-
it('should handle errors',()=>{
37-
let form = {
38-
$errors: {}
39-
};
40-
setError(form, 'fname', 'required', true);
41-
expect(form.$errors.fname.required).to.be.true;
42-
43-
setError(form, 'fname', 'required', false);
44-
expect(form.$errors.fname.required).to.be.false;
45-
});
46-
9+
it('module props', () => {
10+
expect(VueFormly).to.exist;
11+
expect(VueFormly.install).to.be.a('function');
12+
expect(VueFormly.addType).to.be.a('function');
13+
expect(VueFormly.getTypes).to.be.a('function');
14+
expect(addType).to.be.a('function');
15+
expect(getTypes).to.be.a('function');
16+
expect(setError).to.be.a('function');
17+
expect(Util.formlyFields).to.be.a('object');
18+
});
19+
20+
it('should add fields to Vue', () => {
21+
22+
//mock vue
23+
window.Vue = {
24+
component(){},
25+
filter(){}
26+
};
27+
VueFormly.install(Vue);
28+
29+
let newField = {
30+
foo: 'bar'
31+
};
32+
addType('test', newField);
33+
expect(getTypes().formly_test).to.deep.equal(newField);
34+
});
35+
36+
it('should handle errors',()=>{
37+
let form = {
38+
$errors: {}
39+
};
40+
setError(form, 'fname', 'required', true);
41+
expect(form.$errors.fname.required).to.be.true;
42+
43+
setError(form, 'fname', 'required', false);
44+
expect(form.$errors.fname.required).to.be.false;
45+
46+
setError(form, 'fname', 'required', true, 'Hey there');
47+
expect(form.$errors.fname.required).to.equal('Hey there');
48+
});
49+
4750
});

0 commit comments

Comments
 (0)