3
0
Fork 0

[IMP] web_widget_one2many_product_picker: Prevent lost search input focus

12.0
Alexandre D. Díaz 2020-12-29 19:59:34 +01:00
parent b51144a0b7
commit eec959b820
2 changed files with 26 additions and 16 deletions

View File

@ -154,7 +154,7 @@ odoo.define("web_widget_one2many_product_picker.One2ManyProductPickerRenderer",
false, false,
true, true,
search_record_index search_record_index
) )[0]
); );
} }
} }
@ -233,7 +233,7 @@ odoo.define("web_widget_one2many_product_picker.One2ManyProductPickerRenderer",
// Need add a new one? // Need add a new one?
if (!exists && search_record_index !== -1) { if (!exists && search_record_index !== -1) {
var new_search_record = _.extend({}, search_record, {__id: state.id}); var new_search_record = _.extend({}, search_record, {__id: state.id});
defs.push(this.appendSearchRecords([new_search_record], false, true, search_record_index)); defs.push(this.appendSearchRecords([new_search_record], false, true, search_record_index)[0]);
} }
} }
this.widgets = _.compact(this.widgets); this.widgets = _.compact(this.widgets);
@ -254,7 +254,8 @@ odoo.define("web_widget_one2many_product_picker.One2ManyProductPickerRenderer",
this.$extraButtonsContainer = $(qweb.render("One2ManyProductPicker.ExtraButtons")); this.$extraButtonsContainer = $(qweb.render("One2ManyProductPicker.ExtraButtons"));
this.$btnLoadMore = this.$extraButtonsContainer.find("#productPickerLoadMore"); this.$btnLoadMore = this.$extraButtonsContainer.find("#productPickerLoadMore");
return $.Deferred(function (d) { return $.Deferred(function (d) {
self.appendSearchRecords(self.search_data, true).then(function () { var defs = self.appendSearchRecords(self.search_data, true);
defs[0].then(function () {
_.invoke(oldWidgets, "destroy"); _.invoke(oldWidgets, "destroy");
self.$el.empty(); self.$el.empty();
self.$el.append(self.$recordsContainer); self.$el.append(self.$recordsContainer);
@ -263,7 +264,7 @@ odoo.define("web_widget_one2many_product_picker.One2ManyProductPickerRenderer",
if (self._isInDom) { if (self._isInDom) {
_.invoke(self.widgets, "on_attach_callback"); _.invoke(self.widgets, "on_attach_callback");
} }
d.resolve(); d.resolve(defs[1]);
}); });
}); });
}, },
@ -398,7 +399,7 @@ odoo.define("web_widget_one2many_product_picker.One2ManyProductPickerRenderer",
* @param {Boolean} no_attach_widgets * @param {Boolean} no_attach_widgets
* @param {Boolean} no_process_records * @param {Boolean} no_process_records
* @param {Number} position * @param {Number} position
* @returns {Deferred} * @returns {Array[Deferred]}
*/ */
appendSearchRecords: function (search_records, no_attach_widgets, no_process_records, position) { appendSearchRecords: function (search_records, no_attach_widgets, no_process_records, position) {
var self = this; var self = this;
@ -411,15 +412,17 @@ odoo.define("web_widget_one2many_product_picker.One2ManyProductPickerRenderer",
delete this.defs; delete this.defs;
var defsVirtualState = this.defsVirtualState; var defsVirtualState = this.defsVirtualState;
delete this.defsVirtualState; delete this.defsVirtualState;
$.when.apply($, defsVirtualState).then(function () { return [
self.trigger_up("loading_records", {finished:true}); $.when.apply($, defs).then(function () {
});
return $.when.apply($, defs).then(function () {
if (!no_attach_widgets && self._isInDom) { if (!no_attach_widgets && self._isInDom) {
var new_widgets = self.widgets.slice(cur_widget_index); var new_widgets = self.widgets.slice(cur_widget_index);
_.invoke(new_widgets, "on_attach_callback"); _.invoke(new_widgets, "on_attach_callback");
} }
}); }),
$.when.apply($, defsVirtualState).then(function () {
self.trigger_up("loading_records", {finished:true});
}),
];
}, },
/** /**

View File

@ -270,7 +270,11 @@ odoo.define("web_widget_one2many_product_picker.FieldOne2ManyProductPicker", fun
return $.Deferred(function (d) { return $.Deferred(function (d) {
self._getSearchRecords().then(function () { self._getSearchRecords().then(function () {
self.renderer.$el.scrollTop(0); self.renderer.$el.scrollTop(0);
self.renderer._renderView().then(d.resolve); self.renderer._renderView().then(function (virtualStateDefs) {
virtualStateDefs.then(function () {
d.resolve();
});
});
}); });
}); });
}, },
@ -546,8 +550,11 @@ odoo.define("web_widget_one2many_product_picker.FieldOne2ManyProductPicker", fun
* @private * @private
*/ */
_onClickSearchEraser: function () { _onClickSearchEraser: function () {
var self = this;
this._clearSearchInput(); this._clearSearchInput();
this.doRenderSearchRecords(); this.doRenderSearchRecords().then(function () {
self.$searchInput.focus();
});
}, },
/** /**