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 19cda7d3241..507d8a18217 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 @@ -86,7 +86,7 @@ ActionManager.include({ // jQuery's BBQ plugin does some parsing on values that are valid integers // which means that if there's only one item, it will do parseInt() on it, // otherwise it will keep the comma seperated list as string - context.active_ids = state.active_ids.split(',').map(function (id) { + context.active_ids = state.active_ids.toString().split(',').map(function (id) { return parseInt(id, 10) || id; }); } else if (state.active_id) { diff --git a/addons/web/static/tests/chrome/action_manager_tests.js b/addons/web/static/tests/chrome/action_manager_tests.js index af335509afa..1820685ecc8 100644 --- a/addons/web/static/tests/chrome/action_manager_tests.js +++ b/addons/web/static/tests/chrome/action_manager_tests.js @@ -1342,6 +1342,26 @@ QUnit.module('ActionManager', { actionManager.destroy(); }); + QUnit.test('state with integer active_ids should not crash', async function (assert) { + assert.expect(0); + + var actionManager = await createActionManager({ + actions: this.actions, + mockRPC: function (route, args) { + if (route === '/web/action/run') { + return Promise.resolve(); + } + return this._super.apply(this, arguments); + }, + }); + await actionManager.loadState({ + action: 2, + active_ids: 3, + }); + + actionManager.destroy(); + }); + QUnit.module('Concurrency management'); QUnit.test('drop previous actions if possible', async function (assert) {