57 lines
1.5 KiB
JavaScript
57 lines
1.5 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
var textField = require('./TextInputEntryFactory');
|
||
|
|
||
|
/**
|
||
|
* This function is a wrapper around TextInputEntryFactory.
|
||
|
* It adds functionality to cache an invalid value entered in the
|
||
|
* text input, instead of setting it on the business object.
|
||
|
*/
|
||
|
var validationAwareTextField = function(options, defaultParameters) {
|
||
|
|
||
|
var modelProperty = options.modelProperty;
|
||
|
|
||
|
defaultParameters.get = function(element, node) {
|
||
|
var value = this.__lastInvalidValue;
|
||
|
|
||
|
delete this.__lastInvalidValue;
|
||
|
|
||
|
var properties = {};
|
||
|
|
||
|
properties[modelProperty] = value !== undefined ? value : options.getProperty(element, node);
|
||
|
|
||
|
return properties;
|
||
|
};
|
||
|
|
||
|
defaultParameters.set = function(element, values, node) {
|
||
|
var validationErrors = validate.apply(this, [ element, values, node ]),
|
||
|
propertyValue = values[modelProperty];
|
||
|
|
||
|
// make sure we do not update the id
|
||
|
if (validationErrors && validationErrors[modelProperty]) {
|
||
|
this.__lastInvalidValue = propertyValue;
|
||
|
|
||
|
return options.setProperty(element, {}, node);
|
||
|
} else {
|
||
|
var properties = {};
|
||
|
|
||
|
properties[modelProperty] = propertyValue;
|
||
|
|
||
|
return options.setProperty(element, properties, node);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var validate = defaultParameters.validate = function(element, values, node) {
|
||
|
var value = values[modelProperty] || this.__lastInvalidValue;
|
||
|
|
||
|
var property = {};
|
||
|
property[modelProperty] = value;
|
||
|
|
||
|
return options.validate(element, property, node);
|
||
|
};
|
||
|
|
||
|
return textField(options, defaultParameters);
|
||
|
};
|
||
|
|
||
|
module.exports = validationAwareTextField;
|