diff --git a/addons/web/static/src/js/chrome/action_manager_act_window.js b/addons/web/static/src/js/chrome/action_manager_act_window.js index 8161dd1c3bb..ff060153f27 100644 --- a/addons/web/static/src/js/chrome/action_manager_act_window.js +++ b/addons/web/static/src/js/chrome/action_manager_act_window.js @@ -688,7 +688,7 @@ ActionManager.include({ }; } var options = {on_close: ev.data.on_closed}; - if (actionData.mobile) { + if (config.device.isMobile && actionData.mobile) { options = Object.assign({}, options, actionData.mobile); } action.flags = _.extend({}, action.flags, {searchPanelDefaultNoFilter: true}); diff --git a/addons/web/static/tests/chrome/action_manager_mobile_tests.js b/addons/web/static/tests/chrome/action_manager_mobile_tests.js index 6be9aae8e26..74f579e6dac 100644 --- a/addons/web/static/tests/chrome/action_manager_mobile_tests.js +++ b/addons/web/static/tests/chrome/action_manager_mobile_tests.js @@ -1,6 +1,7 @@ odoo.define('web.action_manager_mobile_tests', function (require) { "use strict"; +var ActionManager = require('web.ActionManager'); var testUtils = require('web.test_utils'); var createActionManager = testUtils.createActionManager; @@ -131,6 +132,57 @@ QUnit.module('ActionManager', { actionManager.destroy(); }); + + QUnit.test('data-mobile attribute on action button, in mobile', async function (assert) { + assert.expect(2); + + testUtils.mock.patch(ActionManager, { + doAction(action, options) { + if (typeof action !== 'number' && action.id === 1) { + assert.strictEqual(options.plop, 28); + } else { + assert.strictEqual(options.plop, undefined); + } + return this._super(...arguments); + }, + }); + + this.archs['partner,75,kanban'] = ` + + + +
+ +
+
+
+
`; + + this.actions.push({ + id: 100, + name: 'action 100', + res_model: 'partner', + type: 'ir.actions.act_window', + views: [[75, 'kanban']], + }); + + const actionManager = await createActionManager({ + actions: this.actions, + archs: this.archs, + data: this.data + }); + + await actionManager.doAction(100, {}); + await testUtils.dom.click(actionManager.$('button[data-mobile]:first')); + + actionManager.destroy(); + testUtils.mock.unpatch(ActionManager); + }); }); }); diff --git a/addons/web/static/tests/chrome/action_manager_tests.js b/addons/web/static/tests/chrome/action_manager_tests.js index 42abad111c5..6af38ce02de 100644 --- a/addons/web/static/tests/chrome/action_manager_tests.js +++ b/addons/web/static/tests/chrome/action_manager_tests.js @@ -1,6 +1,7 @@ odoo.define('web.action_manager_tests', function (require) { "use strict"; +var ActionManager = require('web.ActionManager'); var ReportClientAction = require('report.client_action'); var Notification = require('web.Notification'); var NotificationService = require('web.NotificationService'); @@ -4218,6 +4219,53 @@ QUnit.module('ActionManager', { actionManager.destroy(); }); + QUnit.test('data-mobile attribute on action button, in desktop', async function (assert) { + assert.expect(2); + + testUtils.mock.patch(ActionManager, { + doAction(action, options) { + assert.strictEqual(options.plop, undefined); + return this._super(...arguments); + }, + }); + + this.archs['partner,75,kanban'] = ` + + + +
+ +
+
+
+
`; + + this.actions.push({ + id: 100, + name: 'action 100', + res_model: 'partner', + type: 'ir.actions.act_window', + views: [[75, 'kanban']], + }); + + const actionManager = await createActionManager({ + actions: this.actions, + archs: this.archs, + data: this.data + }); + + await actionManager.doAction(100, {}); + await testUtils.dom.click(actionManager.$('button[data-mobile]:first')); + + actionManager.destroy(); + testUtils.mock.unpatch(ActionManager); + }); + QUnit.module('Search View Action'); QUnit.test('search view should keep focus during do_search', async function (assert) {