From b3aa323919ef6e504dce818a5391c8d9db90e700 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Debongnie?= Date: Mon, 18 Sep 2017 11:49:39 +0200 Subject: [PATCH] [FIX] web: prevent crash sometimes when sorting one2many Before this commit, there was a crash when sorting a one2many in a form view. This is due to the fact that the event from the one2many bubbled up to the main form view, which basically assumed that it was supposed to sort some sub one2many. It could be seen for example when editing a 'attribute' in a product form view (need to activate variants), then sorting the 'attribute values' sub one2many. With this commit, we simply stop the event propagation at the correct level. --- .../src/js/views/form/form_controller.js | 1 + addons/web/static/tests/views/form_tests.js | 40 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/addons/web/static/src/js/views/form/form_controller.js b/addons/web/static/src/js/views/form/form_controller.js index 611847ac3f4..df5ce2cc2c1 100644 --- a/addons/web/static/src/js/views/form/form_controller.js +++ b/addons/web/static/src/js/views/form/form_controller.js @@ -514,6 +514,7 @@ var FormController = BasicController.extend({ * @param {OdooEvent} event */ _onToggleColumnOrder: function (event) { + event.stopPropagation(); this.model.setSort(event.data.id, event.data.name); var field = event.data.field; var state = this.model.get(this.handle); diff --git a/addons/web/static/tests/views/form_tests.js b/addons/web/static/tests/views/form_tests.js index f47b12d6096..7bc6734c5ac 100644 --- a/addons/web/static/tests/views/form_tests.js +++ b/addons/web/static/tests/views/form_tests.js @@ -5842,5 +5842,45 @@ QUnit.module('Views', { "there should be only one column"); form.destroy(); }); + + QUnit.test('can toggle column in x2many in sub form view', function (assert) { + assert.expect(2); + + this.data.partner.records[2].p = [1,2]; + this.data.partner.fields.foo.sortable = true; + var form = createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: '
' + + '' + + '', + res_id: 1, + mockRPC: function (route, args) { + if (route === '/web/dataset/call_kw/partner/get_formview_id') { + return $.when(false); + } + return this._super.apply(this, arguments); + }, + archs: { + 'partner,false,form': '
' + + '' + + '' + + '' + + '' + + '' + + '
', + }, + viewOptions: {mode: 'edit'}, + }); + form.$('.o_external_button').click(); + assert.strictEqual($('.modal-body .o_form_view .o_list_view .o_data_cell').text(), "yopblip", + "table has some initial order"); + + $('.modal-body .o_form_view .o_list_view th').click(); + assert.strictEqual($('.modal-body .o_form_view .o_list_view .o_data_cell').text(), "blipyop", + "table is now sorted"); + form.destroy(); + }); }); });