diff options
Diffstat (limited to 'addons/web/static/src')
| -rw-r--r-- | addons/web/static/src/js/fields/abstract_field.js | 17 | ||||
| -rw-r--r-- | addons/web/static/src/js/fields/abstract_field_owl.js | 17 | ||||
| -rw-r--r-- | addons/web/static/src/js/fields/basic_fields.js | 2 |
3 files changed, 29 insertions, 7 deletions
diff --git a/addons/web/static/src/js/fields/abstract_field.js b/addons/web/static/src/js/fields/abstract_field.js index ab6f226a66e..16e928ea288 100644 --- a/addons/web/static/src/js/fields/abstract_field.js +++ b/addons/web/static/src/js/fields/abstract_field.js @@ -404,6 +404,18 @@ var AbstractField = Widget.extend({ return `text-${decoration.split('-')[1]}`; }, /** + * Compares the given value with the last value that has been set. + * Note that we compare unparsed values. Handles the special case where no + * value has been set yet, and the given value is the empty string. + * + * @private + * @param {any} value + * @returns {boolean} true iff values are the same + */ + _isLastSetValue: function (value) { + return this.lastSetValue === value || (this.value === false && value === ''); + }, + /** * This method check if a value is the same as the current value of the * field. For example, a fieldDate widget might want to use the moment * specific value isSame instead of ===. @@ -499,9 +511,8 @@ var AbstractField = Widget.extend({ * @returns {Promise} */ _setValue: function (value, options) { - // we try to avoid doing useless work, if the value given has not - // changed. Note that we compare the unparsed values. - if (this.lastSetValue === value || (this.value === false && value === '')) { + // we try to avoid doing useless work, if the value given has not changed. + if (this._isLastSetValue(value)) { return Promise.resolve(); } this.lastSetValue = value; diff --git a/addons/web/static/src/js/fields/abstract_field_owl.js b/addons/web/static/src/js/fields/abstract_field_owl.js index f97faae35ed..43e3d468d78 100644 --- a/addons/web/static/src/js/fields/abstract_field_owl.js +++ b/addons/web/static/src/js/fields/abstract_field_owl.js @@ -454,6 +454,18 @@ odoo.define('web.AbstractFieldOwl', function (require) { return `text-${decoration.split('-')[1]}`; } /** + * Compares the given value with the last value that has been set. + * Note that we compare unparsed values. Handles the special case where no + * value has been set yet, and the given value is the empty string. + * + * @private + * @param {any} value + * @returns {boolean} true iff values are the same + */ + _isLastSetValue(value) { + return this._lastSetValue === value || (this.value === false && value === ''); + } + /** * This method check if a value is the same as the current value of the * field. For example, a fieldDate component might want to use the moment * specific value isSame instead of ===. @@ -498,9 +510,8 @@ odoo.define('web.AbstractFieldOwl', function (require) { * @returns {Promise} */ _setValue(value, options) { - // we try to avoid doing useless work, if the value given has not - // changed. Note that we compare the unparsed values. - if (this._lastSetValue === value || (this.value === false && value === '')) { + // we try to avoid doing useless work, if the value given has not changed. + if (this._isLastSetValue(value)) { return Promise.resolve(); } this._lastSetValue = value; diff --git a/addons/web/static/src/js/fields/basic_fields.js b/addons/web/static/src/js/fields/basic_fields.js index bf225d7ea99..d5f1f1074d4 100644 --- a/addons/web/static/src/js/fields/basic_fields.js +++ b/addons/web/static/src/js/fields/basic_fields.js @@ -326,7 +326,7 @@ var InputField = DebouncedField.extend({ * @private */ _onInput: function () { - this.isDirty = true; + this.isDirty = !this._isLastSetValue(this.$input.val()); this._doDebouncedAction(); }, /** |
