'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;