diff options
Diffstat (limited to 'addons/web/static/src/js')
| -rw-r--r-- | addons/web/static/src/js/views/abstract_controller.js | 17 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/abstract_view.js | 13 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/search_panel.js | 12 |
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); |
