diff options
4 files changed, 45 insertions, 41 deletions
diff --git a/addons/web/static/src/js/views/basic/basic_controller.js b/addons/web/static/src/js/views/basic/basic_controller.js index 5293ee6f4b6..7beb15a9d70 100644 --- a/addons/web/static/src/js/views/basic/basic_controller.js +++ b/addons/web/static/src/js/views/basic/basic_controller.js @@ -88,6 +88,41 @@ return AbstractController.extend(FieldManagerMixin, { //-------------------------------------------------------------------------- /** + * When the user clicks on a 'action button', this function determines what + * should happen. + * + * @private + * @param {Object} attrs the attrs of the button clicked + * @param {Object} [record] the current state of the view + * @returns {Deferred} + */ + _callButtonAction: function (attrs, record) { + var self = this; + var def = $.Deferred(); + var reload = function () { + if (!self.isDestroyed()) { + self.reload(); + } + }; + record = record || this.model.get(this.handle); + var recordID = record.data.id; + this.trigger_up('execute_action', { + action_data: _.extend({}, attrs, { + context: record.getContext({additionalContext: attrs.context}), + }), + model: record.model, + record_id: recordID, + on_closed: function (reason) { + if (!_.isObject(reason)) { + reload(); + } + }, + on_fail: reload, + on_success: def.resolve.bind(def), + }); + return this.alive(def); + }, + /** * Called by the field manager mixin to confirm that a change just occured * (after that potential onchanges have been applied). * 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 e833c80e3b2..981d614f52c 100644 --- a/addons/web/static/src/js/views/form/form_controller.js +++ b/addons/web/static/src/js/views/form/form_controller.js @@ -261,41 +261,6 @@ var FormController = BasicController.extend({ //-------------------------------------------------------------------------- /** - * When the user clicks on a form button, this function determines what - * should happen. - * - * @private - * @param {Object} attrs the attrs of the button clicked - * @param {Object} [record] the current state of the view - * @returns {Deferred} - */ - _callButtonAction: function (attrs, record) { - var self = this; - var def = $.Deferred(); - var reload = function () { - if (!self.isDestroyed()) { - self.reload(); - } - }; - record = record || this.model.get(this.handle); - var recordID = record.data.id; - this.trigger_up('execute_action', { - action_data: _.extend({}, attrs, { - context: record.getContext({additionalContext: attrs.context}), - }), - model: record.model, - record_id: recordID, - on_closed: function (reason) { - if (!_.isObject(reason)) { - reload(); - } - }, - on_fail: reload, - on_success: def.resolve.bind(def), - }); - return this.alive(def); - }, - /** * When a save operation has been confirmed from the model, this method is * called. * diff --git a/addons/web/static/src/js/views/list/list_controller.js b/addons/web/static/src/js/views/list/list_controller.js index 1f5bb64cac8..d4d1fe9debe 100644 --- a/addons/web/static/src/js/views/list/list_controller.js +++ b/addons/web/static/src/js/views/list/list_controller.js @@ -210,11 +210,8 @@ var ListController = BasicController.extend({ * @param {OdooEvent} event */ _onButtonClicked: function (event) { - this.trigger_up('execute_action', { - action_data: event.data.attrs, - model: this.modelName, - record_id: event.data.record.res_id, - }); + event.stopPropagation(); + this._callButtonAction(event.data.attrs, event.data.record); }, /** * This event is triggered when a list renderer goes from mode = readonly to diff --git a/addons/web/static/tests/views/list_tests.js b/addons/web/static/tests/views/list_tests.js index 59a7aa774b8..a3abe59892b 100644 --- a/addons/web/static/tests/views/list_tests.js +++ b/addons/web/static/tests/views/list_tests.js @@ -969,7 +969,7 @@ QUnit.module('Views', { }); QUnit.test('click on a button in a list view', function (assert) { - assert.expect(6); + assert.expect(9); var list = createView({ View: ListView, @@ -979,6 +979,10 @@ QUnit.module('Views', { '<field name="foo"/>' + '<button string="a button" name="button_action" icon="fa-car" type="object"/>' + '</tree>', + mockRPC: function (route) { + assert.step(route); + return this._super.apply(this, arguments); + }, intercepts: { execute_action: function (event) { assert.strictEqual(event.data.record_id, 1, @@ -989,6 +993,7 @@ QUnit.module('Views', { "should call correct method"); assert.strictEqual(event.data.action_data.type, 'object', 'should have correct type'); + event.data.on_closed(); }, }, }); @@ -999,6 +1004,8 @@ QUnit.module('Views', { 'buttons should have correct icon'); list.$('.o_list_button:first > button').click(); // click on the button + assert.verifySteps(['/web/dataset/search_read', '/web/dataset/search_read'], + "should have reloaded the view (after the action is complete)"); list.destroy(); }); |
