diff options
Diffstat (limited to 'addons/web/static/src/js/fields/relational_fields.js')
| -rw-r--r-- | addons/web/static/src/js/fields/relational_fields.js | 81 |
1 files changed, 47 insertions, 34 deletions
diff --git a/addons/web/static/src/js/fields/relational_fields.js b/addons/web/static/src/js/fields/relational_fields.js index 93863c2f619..f4337d0c8f9 100644 --- a/addons/web/static/src/js/fields/relational_fields.js +++ b/addons/web/static/src/js/fields/relational_fields.js @@ -402,6 +402,52 @@ var FieldMany2One = AbstractField.extend({ }; }, /** + * @private + * @param {Object} values + * @param {string} search_val + * @param {Object} domain + * @param {Object} context + * @returns {Object} + */ + _manageSearchMore: function (values, search_val, domain, context) { + var self = this; + values = values.slice(0, this.limit); + values.push({ + label: _t("Search More..."), + action: function () { + var prom; + if (search_val !== '') { + prom = self._rpc({ + model: self.field.relation, + method: 'name_search', + kwargs: { + name: search_val, + args: domain, + operator: "ilike", + limit: self.SEARCH_MORE_LIMIT, + context: context, + }, + }); + } + Promise.resolve(prom).then(function (results) { + var dynamicFilters; + if (results) { + var ids = _.map(results, function (x) { + return x[0]; + }); + dynamicFilters = [{ + description: _.str.sprintf(_t('Quick search: %s'), search_val), + domain: [['id', 'in', ids]], + }]; + } + self._searchCreatePopup("search", false, {}, dynamicFilters); + }); + }, + classname: 'o_m2o_dropdown_option', + }); + return values; + }, + /** * Listens to events 'field_changed' to keep track of the last event that * has been trigerred. This allows to detect that all changes have been * acknowledged by the environment. @@ -552,40 +598,7 @@ var FieldMany2One = AbstractField.extend({ // search more... if more results than limit if (values.length > self.limit) { - values = values.slice(0, self.limit); - values.push({ - label: _t("Search More..."), - action: function () { - var prom; - if (search_val !== '') { - prom = self._rpc({ - model: self.field.relation, - method: 'name_search', - kwargs: { - name: search_val, - args: domain, - operator: "ilike", - limit: self.SEARCH_MORE_LIMIT, - context: context, - }, - }); - } - Promise.resolve(prom).then(function (results) { - var dynamicFilters; - if (results) { - var ids = _.map(results, function (x) { - return x[0]; - }); - dynamicFilters = [{ - description: _.str.sprintf(_t('Quick search: %s'), search_val), - domain: [['id', 'in', ids]], - }]; - } - self._searchCreatePopup("search", false, {}, dynamicFilters); - }); - }, - classname: 'o_m2o_dropdown_option', - }); + values = self._manageSearchMore(values, search_val, domain, context); } var create_enabled = self.can_create && !self.nodeOptions.no_create; // quick create |
