summaryrefslogtreecommitdiff
path: root/addons/mail/static/src/components/message/message.js
diff options
context:
space:
mode:
authorXavier Dubuc <xdu@odoo.com>2021-03-03 16:41:09 +0000
committerSébastien Theys <seb@odoo.com>2021-03-03 16:59:08 +0000
commitaa5eaf69380ca3c5b9ed1b5dcb183e90fdc9303a (patch)
tree7f3ee326751d5dd3ba011e91ef1b2db8cec88f47 /addons/mail/static/src/components/message/message.js
parentf212223305a4d1da0f01f008c3874a72945fcae0 (diff)
[FIX] mail: do not show falsy value in tracking values messages
task-2438828 closes odoo/odoo#65183 Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
Diffstat (limited to 'addons/mail/static/src/components/message/message.js')
-rw-r--r--addons/mail/static/src/components/message/message.js79
1 files changed, 61 insertions, 18 deletions
diff --git a/addons/mail/static/src/components/message/message.js b/addons/mail/static/src/components/message/message.js
index 342c4ef162a..a357c024c02 100644
--- a/addons/mail/static/src/components/message/message.js
+++ b/addons/mail/static/src/components/message/message.js
@@ -15,6 +15,7 @@ const useStore = require('mail/static/src/component_hooks/use_store/use_store.js
const useUpdate = require('mail/static/src/component_hooks/use_update/use_update.js');
const { _lt } = require('web.core');
+const { format } = require('web.field_utils');
const { getLangDatetimeFormat } = require('web.time');
const { Component, useState } = owl;
@@ -274,24 +275,66 @@ class Message extends Component {
return this.message.tracking_value_ids.map(trackingValue => {
const value = Object.assign({}, trackingValue);
value.changed_field = _.str.sprintf(this.env._t("%s:"), value.changed_field);
- if (value.field_type === 'datetime') {
- if (value.old_value) {
- value.old_value =
- moment.utc(value.old_value).local().format('LLL');
- }
- if (value.new_value) {
- value.new_value =
- moment.utc(value.new_value).local().format('LLL');
- }
- } else if (value.field_type === 'date') {
- if (value.old_value) {
- value.old_value =
- moment(value.old_value).local().format('LL');
- }
- if (value.new_value) {
- value.new_value =
- moment(value.new_value).local().format('LL');
- }
+ /**
+ * Maps tracked field type to a JS formatter. Tracking values are
+ * not always stored in the same field type as their origin type.
+ * Field types that are not listed here are not supported by
+ * tracking in Python. Also see `create_tracking_values` in Python.
+ */
+ switch (value.field_type) {
+ case 'boolean':
+ value.old_value = format.boolean(value.old_value, undefined, { forceString: true });
+ value.new_value = format.boolean(value.new_value, undefined, { forceString: true });
+ break;
+ /**
+ * many2one formatter exists but is expecting id/name_get or data
+ * object but only the target record name is known in this context.
+ *
+ * Selection formatter exists but requires knowing all
+ * possibilities and they are not given in this context.
+ */
+ case 'char':
+ case 'many2one':
+ case 'selection':
+ value.old_value = format.char(value.old_value);
+ value.new_value = format.char(value.new_value);
+ break;
+ case 'date':
+ if (value.old_value) {
+ value.old_value = moment.utc(value.old_value);
+ }
+ if (value.new_value) {
+ value.new_value = moment.utc(value.new_value);
+ }
+ value.old_value = format.date(value.old_value);
+ value.new_value = format.date(value.new_value);
+ break;
+ case 'datetime':
+ if (value.old_value) {
+ value.old_value = moment.utc(value.old_value);
+ }
+ if (value.new_value) {
+ value.new_value = moment.utc(value.new_value);
+ }
+ value.old_value = format.datetime(value.old_value);
+ value.new_value = format.datetime(value.new_value);
+ break;
+ case 'float':
+ value.old_value = format.float(value.old_value);
+ value.new_value = format.float(value.new_value);
+ break;
+ case 'integer':
+ value.old_value = format.integer(value.old_value);
+ value.new_value = format.integer(value.new_value);
+ break;
+ case 'monetary':
+ value.old_value = format.monetary(value.old_value, undefined, { forceString: true });
+ value.new_value = format.monetary(value.new_value, undefined, { forceString: true });
+ break;
+ case 'text':
+ value.old_value = format.text(value.old_value);
+ value.new_value = format.text(value.new_value);
+ break;
}
return value;
});