diff --git a/sao/src/common.js b/sao/src/common.js index ffd59f0dd2..e7f5b2b87f 100644 --- a/sao/src/common.js +++ b/sao/src/common.js @@ -776,6 +776,7 @@ Sao.common.selection_mixin = {}; Sao.common.selection_mixin.init = function() { this.inactive_selection = []; + this.any_selection = {} this._values2selection = {}; this._domain_cache = {}; if (this.nullable_widget === undefined) { @@ -800,6 +801,7 @@ }); } let help = this.attributes.help_selection || {}; + Object.assign(this.any_selection, Object.fromEntries(selection)); if (callback) callback(selection, help); }; if (!(selection instanceof Array) && @@ -848,6 +850,9 @@ selection = Sao.common.selection_mixin .filter_selection.call( this, domain, record, field, selection); + Object.assign( + this.any_selection, + Object.fromEntries(selection)); if (callback) { callback(selection, help); } @@ -888,6 +893,8 @@ } } this._domain_cache[jdomain] = [selection, help]; + Object.assign( + this.any_selection, Object.fromEntries(selection)); let cur_domain = field.get_domain(record); let cur_context = field.get_context(record); @@ -968,8 +975,9 @@ 'params': [[value], ['rec_name'], {}] }, Sao.Session.current_session); return prm.then(result => { - this.inactive_selection.push([result[0].id, result[0].rec_name]); - return [result[0].id, result[0].rec_name]; + let selection = [result[0].id, result[0].rec_name]; + this.inactive_selection.push(selection); + return selection; }); }; diff --git a/sao/src/view/tree.js b/sao/src/view/tree.js index ac34c928a0..f1008910ab 100644 --- a/sao/src/view/tree.js +++ b/sao/src/view/tree.js @@ -2875,37 +2875,29 @@ return record._values[related]; } else { var value = this.field.get(record); - for (const option of this.selection) { - if (option[0] === value) { - return option[1]; - } + if (Object.hasOwn(this.any_selection, value)) { + return this.any_selection[value]; + } else { + return value; } - return value; } }, update_text: function(cell, record) { if (!this.tree.editable && (this.field.name + ':string' in record._values)) { - var text_value = this.get_textual_value(record); + let text_value = record._values[this.field.name + ':string']; cell.text(text_value).attr('title', text_value); } else { this.update_selection(record, (selection, help) => { - var value = this.field.get(record); - var prm, text, found = false; - for (const option of selection) { - if (option[0] === value) { - found = true; - text = option[1]; - break; - } - } - if (!found) { + let value = this.field.get(record), + prm; + if (Object.hasOwn(this.any_selection, value)) { + prm = jQuery.when(this.any_selection[value]); + } else { prm = Sao.common.selection_mixin.get_inactive_selection .call(this, value).then(function(inactive) { return inactive[1]; }); - } else { - prm = jQuery.when(text); } prm.done(text_value => { cell.text(text_value).attr('title', text_value); @@ -2936,10 +2928,8 @@ return record._values[related]; } else { var values = this.field.get_eval(record).map(value => { - for (const option of this.selection) { - if (option[0] === value) { - return option[1]; - } + if (Object.hasOwn(this.any_selection, value)) { + return this.any_selection[value]; } return ''; }); @@ -2949,7 +2939,7 @@ update_text: function(cell, record) { if (!this.tree.editable && (this.field_name + ':string' in record._values)) { - var text_value = this.get_textual_value(record); + let text_value = record._values[this.field_name + ':string']; cell.text(text_value).attr('title', text_value); } else { this.update_selection(record, () => { @@ -2995,11 +2985,8 @@ name = value[1]; } if (model) { - for (const option of this.selection) { - if (option[0] === model) { - model = option[1]; - break; - } + if (Object.hasOwn(this.any_selection, model)) { + model = this.any_selection[model]; } text = model + ',' + name; } else {