diff --git a/addons/web/static/src/js/fields/relational_fields.js b/addons/web/static/src/js/fields/relational_fields.js index 0e8537856c6..311f98596fc 100644 --- a/addons/web/static/src/js/fields/relational_fields.js +++ b/addons/web/static/src/js/fields/relational_fields.js @@ -2218,6 +2218,19 @@ var FieldMany2Many = FieldX2Many.extend({ renderingContext.noCreate = !this.canLink; return renderingContext; }, + /** + * @private + * @override + * @param {Object} extraInfo + * @param {string} [extraInfo.type] + */ + _quickEdit: function (extraInfo) { + if (extraInfo.type === 'add') { + this.onAddRecordOpenDialog(); + } else { + this._super(...arguments); + } + }, //-------------------------------------------------------------------------- // Handlers @@ -2234,7 +2247,16 @@ var FieldMany2Many = FieldX2Many.extend({ */ _onAddRecord: function (ev) { ev.stopPropagation(); - this.onAddRecordOpenDialog(); + + if (this._canQuickEdit && this.isReadonly) { + this.trigger_up('quick_edit', { + fieldName: this.name, + target: this.el, + extraInfo: { type: 'add' }, + }); + } else { + this.onAddRecordOpenDialog(); + } }, /** diff --git a/addons/web/static/tests/views/form_tests.js b/addons/web/static/tests/views/form_tests.js index 588b762e287..cc611fefc39 100644 --- a/addons/web/static/tests/views/form_tests.js +++ b/addons/web/static/tests/views/form_tests.js @@ -10777,6 +10777,50 @@ QUnit.module('Views', { form.destroy(); }); + QUnit.test('Quick Edition: Many2Many', async function (assert) { + assert.expect(6); + + const form = await createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: ` +
+ + + + + + + + + `, + archs: { + 'partner_type,false,list': '', + 'partner_type,false,search': '', + }, + res_id: 1, + }); + + assert.containsOnce(form, '.o_form_view.o_form_readonly'); + assert.containsOnce(form, '.o_field_x2many_list_row_add', + 'create line should be displayed'); + + await testUtils.dom.click(form.$('.o_field_x2many_list_row_add a')); + await testUtils.nextTick(); // wait for quick edit + + assert.containsOnce(form, '.o_form_view.o_form_editable', + 'should switch into edit mode'); + assert.containsOnce(document.body, '.modal', + 'should display a dialog'); + + assert.containsNone(form, '.o_field_many2many[name="timmy"] .o_data_row'); + await testUtils.dom.click($('.modal .o_list_view .o_data_row')[0]); + assert.containsOnce(form, '.o_field_many2many[name="timmy"] .o_data_row'); + + form.destroy(); + }); + QUnit.test('Quick Edition: Many2Many checkbox', async function (assert) { assert.expect(7);