summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/src/js')
-rw-r--r--addons/web/static/src/js/views/abstract_controller.js17
-rw-r--r--addons/web/static/src/js/views/abstract_view.js13
-rw-r--r--addons/web/static/src/js/views/search_panel.js12
3 files changed, 30 insertions, 12 deletions
diff --git a/addons/web/static/src/js/views/abstract_controller.js b/addons/web/static/src/js/views/abstract_controller.js
index 09451cdcbfa..866abb03d65 100644
--- a/addons/web/static/src/js/views/abstract_controller.js
+++ b/addons/web/static/src/js/views/abstract_controller.js
@@ -228,7 +228,11 @@ var AbstractController = mvc.Controller.extend(ActionMixin, {
this._searchPanel.importState(controllerState.spState);
this.searchPanelDomain = this._searchPanel.getDomain();
} else {
- searchPanelUpdateProm = this._searchPanel.update({searchDomain: this._getSearchDomain()});
+ const viewDomain = await this._getViewDomain();
+ searchPanelUpdateProm = this._searchPanel.update({
+ searchDomain: this.controlPanelDomain,
+ viewDomain,
+ });
postponeRendering = !params.noRender;
params.noRender = true; // wait for searchpanel to be ready to render
}
@@ -299,16 +303,13 @@ var AbstractController = mvc.Controller.extend(ActionMixin, {
return null;
},
/**
- * Return the current search domain. This is the searchDomain used to update
- * the searchpanel. It returns the domain coming from the controlpanel. This
- * function can be overridden to add sub-domains coming from other parts of
- * the interface.
+ * Get the domain defined by the view. It is meant to be overridden.
*
* @private
- * @returns {Array[]}
+ * @returns {Promise<Array[]>}
*/
- _getSearchDomain: function () {
- return this.controlPanelDomain;
+ _getViewDomain: async function () {
+ return [];
},
/**
* Meant to be overriden to return a proper object.
diff --git a/addons/web/static/src/js/views/abstract_view.js b/addons/web/static/src/js/views/abstract_view.js
index c720a2a515e..4cd503ff480 100644
--- a/addons/web/static/src/js/views/abstract_view.js
+++ b/addons/web/static/src/js/views/abstract_view.js
@@ -296,9 +296,11 @@ var AbstractView = Factory.extend({
}
});
var controlPanelDomain = this.loadParams.domain;
+ const viewDomain = await this._getViewDomain(parent);
var spParams = _.extend({}, this.searchPanelParams, {
defaultValues: defaultValues,
searchDomain: controlPanelDomain,
+ viewDomain,
classes: params.classes || [],
});
var searchPanel = new this.config.SearchPanel(parent, spParams);
@@ -352,6 +354,17 @@ var AbstractView = Factory.extend({
};
},
/**
+ * Get the domain defined by the view. It is meant to be overridden. The parent
+ * is provided in case some subcomponents need to be retrieved.
+ *
+ * @private
+ * @param {Object} parent
+ * @returns {Promise<Array[]>}
+ */
+ _getViewDomain: async function (parent) {
+ return [];
+ },
+ /**
* Processes a fieldsView. In particular, parses its arch.
*
* @private
diff --git a/addons/web/static/src/js/views/search_panel.js b/addons/web/static/src/js/views/search_panel.js
index 590d52e4941..377eb723621 100644
--- a/addons/web/static/src/js/views/search_panel.js
+++ b/addons/web/static/src/js/views/search_panel.js
@@ -83,6 +83,7 @@ var SearchPanel = Widget.extend({
* @param {Object} params.fields
* @param {string} params.model
* @param {Array[]} params.searchDomain domain coming from controlPanel
+ * @param {Array[]} params.viewDomain domain coming from the view (ill advised)
* @param {Object} params.sections
* @param {Object} [params.state] state exported by another searchpanel
* instance
@@ -110,6 +111,7 @@ var SearchPanel = Widget.extend({
this.model = params.model;
this.className = params.classes.concat(['o_search_panel']).join(' ');
this.searchDomain = params.searchDomain;
+ this.viewDomain = params.viewDomain;
},
/**
* @override
@@ -229,15 +231,17 @@ var SearchPanel = Widget.extend({
*
* @param {Object} params
* @param {Array[]} params.searchDomain domain coming from controlPanel
+ * @param {Array[]} params.viewDomain domain coming from view
* @returns {Promise}
*/
update: function (params) {
- var currentSearchDomainStr = JSON.stringify(this.searchDomain);
- var newSearchDomainStr = JSON.stringify(params.searchDomain);
+ const currentDomain = JSON.stringify([...this.searchDomain, ...this.viewDomain]);
+ const newDomain = JSON.stringify([...params.searchDomain, ...params.viewDomain]);
var filtersProm;
- if (this.needReload || (currentSearchDomainStr !== newSearchDomainStr)) {
+ if (this.needReload || (currentDomain !== newDomain)) {
this.needReload = false;
this.searchDomain = params.searchDomain;
+ this.viewDomain = params.viewDomain;
filtersProm = this._fetchFilters();
}
return Promise.resolve(filtersProm).then(this._render.bind(this));
@@ -431,7 +435,7 @@ var SearchPanel = Widget.extend({
disable_counters: filter.disableCounters,
filter_domain: filterDomain,
group_by: filter.groupBy || false,
- search_domain: self.searchDomain,
+ search_domain: [...self.searchDomain, ...self.viewDomain],
},
}).then(function (values) {
self._createFilterTree(filterId, values);