summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/src')
-rw-r--r--addons/web/static/src/js/control_panel/custom_filter_item.js32
-rw-r--r--addons/web/static/src/xml/base.xml6
2 files changed, 25 insertions, 13 deletions
diff --git a/addons/web/static/src/js/control_panel/custom_filter_item.js b/addons/web/static/src/js/control_panel/custom_filter_item.js
index 98080f6a418..0b9b1ccb8f4 100644
--- a/addons/web/static/src/js/control_panel/custom_filter_item.js
+++ b/addons/web/static/src/js/control_panel/custom_filter_item.js
@@ -105,6 +105,7 @@ odoo.define('web.CustomFilterItem', function (require) {
const fieldType = this.fields[condition.field].type;
const genericType = FIELD_TYPES[fieldType];
const operator = FIELD_OPERATORS[genericType][condition.operator];
+ // Logical value
switch (genericType) {
case 'id':
case 'number':
@@ -129,6 +130,12 @@ odoo.define('web.CustomFilterItem', function (require) {
default:
condition.value = "";
}
+ // Displayed value
+ if (["float", "monetary"].includes(fieldType)) {
+ condition.displayedValue = `0${this.DECIMAL_POINT}0`;
+ } else {
+ condition.displayedValue = String(condition.value);
+ }
}
//---------------------------------------------------------------------
@@ -235,20 +242,25 @@ odoo.define('web.CustomFilterItem', function (require) {
* @param {Event} ev
*/
_onValueInput(condition, ev) {
- const type = this.fields[condition.field].type;
- if (['float', 'integer', 'id'].includes(type)) {
- const previousValue = condition.value;
- const parser = field_utils.parse[type === 'float' ? 'float' : 'integer'];
+ if (!ev.target.value) {
+ return this._setDefaultValue(condition);
+ }
+ let { type } = this.fields[condition.field];
+ if (type === "id") {
+ type = "integer";
+ }
+ if (FIELD_TYPES[type] === "number") {
try {
- const parsed = parser(ev.target.value || 0);
- // Force parsed value in the input.
- ev.target.value = condition.value = (parsed || 0);
+ // Write logical value into the 'value' property
+ condition.value = field_utils.parse[type](ev.target.value);
+ // Write displayed value in the input and 'displayedValue' property
+ condition.displayedValue = ev.target.value;
} catch (err) {
- // Force previous value if non-parseable.
- ev.target.value = previousValue || 0;
+ // Parsing error: reverts to previous value
+ ev.target.value = condition.displayedValue;
}
} else {
- condition.value = ev.target.value || "";
+ condition.value = condition.displayedValue = ev.target.value;
}
}
}
diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml
index 949c6926ebf..36b63c852ad 100644
--- a/addons/web/static/src/xml/base.xml
+++ b/addons/web/static/src/xml/base.xml
@@ -390,20 +390,20 @@
t-att-type="DECIMAL_POINT === '.' ? 'number' : 'text'"
t-attf-title="Number using {{ DECIMAL_POINT }} as decimal separator."
t-attf-pattern="[0-9]+([\\{{ DECIMAL_POINT }}][0-9]+)?"
- t-att-value="condition.value or (0 + DECIMAL_POINT + 0)"
+ t-att-value="condition.displayedValue"
t-on-input="_onValueInput(condition)"
/>
<input t-elif="['integer', 'id'].includes(fieldType)"
class="o_input"
step="1"
type="number"
- t-att-value="condition.value or 0"
+ t-att-value="condition.displayedValue"
t-on-input="_onValueInput(condition)"
/>
<input t-else=""
type="text"
class="o_input"
- t-att-value="condition.value or ''"
+ t-att-value="condition.displayedValue"
t-on-input="_onValueInput(condition)"
/>
</span>