summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/control_panel
diff options
context:
space:
mode:
authorJulien Mougenot <jum@odoo.com>2020-06-25 11:59:14 +0000
committerJulien Mougenot <jum@odoo.com>2020-06-30 07:22:12 +0000
commitc96de07f8593d525dd2992c06add68eb5c2cde8c (patch)
treed1b2f2f1466428b0f458da1af02d8a12ace156f4 /addons/web/static/src/js/control_panel
parent7e5ae026fd72d6ec0525f2b70820510bc488ec92 (diff)
[FIX] web: Allow default favorite filter over search default
Before this commit, when a search_default on a many2one field tried to update its label after a name_get, the value was set on its initial associated query element which could have been erased by a default favorite. Now, the model determines whether there is a default favorite before processing default filters, preventing any unnecessary RPC. closes odoo/odoo#53840 X-original-commit: ff834d0ba6f9b7eadc23c28dbbf892eba2058583 Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
Diffstat (limited to 'addons/web/static/src/js/control_panel')
-rw-r--r--addons/web/static/src/js/control_panel/control_panel_model.js25
1 files changed, 9 insertions, 16 deletions
diff --git a/addons/web/static/src/js/control_panel/control_panel_model.js b/addons/web/static/src/js/control_panel/control_panel_model.js
index 67b9c999f74..a9500999793 100644
--- a/addons/web/static/src/js/control_panel/control_panel_model.js
+++ b/addons/web/static/src/js/control_panel/control_panel_model.js
@@ -544,23 +544,13 @@ odoo.define('web.ControlPanelModel', function (require) {
* @private
*/
_activateDefaultFilters() {
- const defaultFilters = [];
- const defaultFavorites = [];
- for (const fId in this.state.filters) {
- if (this.state.filters[fId].isDefault) {
- if (this.state.filters[fId].type === 'favorite') {
- defaultFavorites.push(this.state.filters[fId]);
- } else {
- defaultFilters.push(this.state.filters[fId]);
- }
- }
- }
- if (this.activateDefaultFavorite && defaultFavorites.length) {
+ if (this.defaultFavoriteId) {
// Activate default favorite
- this.toggleFilter(defaultFavorites[0].id);
+ this.toggleFilter(this.defaultFavoriteId);
} else {
// Activate default filters
- defaultFilters
+ Object.values(this.state.filters)
+ .filter((f) => f.isDefault && f.type !== 'favorite')
.sort((f1, f2) => (f1.defaultRank || 100) - (f2.defaultRank || 100))
.forEach(f => {
if (f.hasOptions) {
@@ -589,9 +579,9 @@ odoo.define('web.ControlPanelModel', function (require) {
* @private
*/
_addFilters() {
+ this._createGroupOfFavorites();
this._createGroupOfFiltersFromArch();
this._createGroupOfDynamicFilters();
- this._createGroupOfFavorites();
}
/**
@@ -707,6 +697,9 @@ odoo.define('web.ControlPanelModel', function (require) {
this.favoriteFilters.forEach(irFilter => {
const favorite = this._irFilterToFavorite(irFilter);
this._createGroupOfFilters([favorite]);
+ if (this.activateDefaultFavorite && favorite.isDefault) {
+ this.defaultFavoriteId = favorite.id;
+ }
});
}
@@ -721,7 +714,7 @@ odoo.define('web.ControlPanelModel', function (require) {
pregroup.forEach(preFilter => {
const filter = Object.assign(preFilter, { groupId, id: filterId });
this.state.filters[filterId] = filter;
- if (filter.isDefault && filter.type === 'field') {
+ if (!this.defaultFavoriteId && filter.isDefault && filter.type === 'field') {
this._prepareDefaultLabel(filter);
}
filterId++;