Store any selection in selection mixin to compute textual value
Since 917de1b3e124 the current selection is no more stored but it is needed to render textual value of a column synchronously. Closes #15104
This commit is contained in:
+10
-2
@@ -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;
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
+15
-28
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user