From fce1a799fc688771d9247673bccccf186063297d Mon Sep 17 00:00:00 2001 From: Aaron Bohy Date: Thu, 29 Mar 2018 15:30:14 +0200 Subject: [PATCH] [FIX] web: ActionManager: call 'on_attach_callback' for actions in target='new'. Before this rev., it was only called on the dialog, but not on the controller rendered inside it. --- .../static/src/js/chrome/action_manager.js | 6 ++-- .../tests/chrome/action_manager_tests.js | 32 +++++++++++++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/addons/web/static/src/js/chrome/action_manager.js b/addons/web/static/src/js/chrome/action_manager.js index bed9673d44c..154df08051a 100644 --- a/addons/web/static/src/js/chrome/action_manager.js +++ b/addons/web/static/src/js/chrome/action_manager.js @@ -410,14 +410,14 @@ var ActionManager = Widget.extend({ controller.dialog = dialog; return dialog.open().opened(function () { + self.currentDialogController = controller; + dom.append(dialog.$el, widget.$el, { in_DOM: true, - callbacks: [{widget: dialog}], + callbacks: [{widget: dialog}, {widget: controller.widget}], }); widget.renderButtons(dialog.$footer); - self.currentDialogController = controller; - return action; }); }).fail(function () { diff --git a/addons/web/static/tests/chrome/action_manager_tests.js b/addons/web/static/tests/chrome/action_manager_tests.js index 9d15e729094..5859f16ca36 100644 --- a/addons/web/static/tests/chrome/action_manager_tests.js +++ b/addons/web/static/tests/chrome/action_manager_tests.js @@ -2851,6 +2851,38 @@ QUnit.module('ActionManager', { actionManager.destroy(); }); + QUnit.test('on_attach_callback is called for actions in target="new"', function (assert) { + assert.expect(4); + + var ClientAction = AbstractAction.extend({ + className: 'o_test', + on_attach_callback: function () { + assert.step('on_attach_callback'); + assert.ok(actionManager.currentDialogController, + "the currentDialogController should have been set already"); + }, + }); + core.action_registry.add('test', ClientAction); + + var actionManager = createActionManager({ + actions: this.actions, + archs: this.archs, + data: this.data, + }); + actionManager.doAction({ + tag: 'test', + target: 'new', + type: 'ir.actions.client', + }); + + assert.strictEqual($('.modal .o_test').length, 1, + "should have rendered the client action in a dialog"); + assert.verifySteps(['on_attach_callback']); + + actionManager.destroy(); + delete core.action_registry.map.test; + }); + QUnit.module('Actions in target="inline"'); QUnit.test('form views for actions in target="inline" open in edit mode', function (assert) {