[IMP] web: Allow to use a custom control panel

The abilty to use a custom control panel for an action
seems to have been lost with 18e5416.

With this commit the action config can specify a custom
component to use as control panel.

Usefull for o-spreadsheet integration.

Task 2238915

closes odoo/odoo#52807

Signed-off-by: Vincent Schippefilt (vsc) <vsc@odoo.com>
This commit is contained in:
Lucas Lefèvre
2020-06-11 07:41:02 +00:00
committed by Pierre Rousseau
parent 09cfde14bd
commit 997d21a67e
2 changed files with 25 additions and 1 deletions
@@ -130,7 +130,7 @@ var AbstractAction = Widget.extend(ActionMixin, {
this._setTitle(this.controlPanelProps.title);
}
this.controlPanelProps.title = this.getTitle();
this._controlPanelWrapper = new ComponentWrapper(this, ControlPanel, this.controlPanelProps);
this._controlPanelWrapper = new ComponentWrapper(this, this.config.ControlPanel, this.controlPanelProps);
await this._controlPanelWrapper.mount(this.el, { position: 'first-child' });
}
@@ -19,6 +19,7 @@ var Widget = require('web.Widget');
var createActionManager = testUtils.createActionManager;
const cpHelpers = testUtils.controlPanel;
const { xml } = owl.tags;
QUnit.module('ActionManager', {
beforeEach: function () {
@@ -1882,6 +1883,29 @@ QUnit.module('ActionManager', {
delete core.action_registry.map.HelloWorldTest;
});
QUnit.test('action can use a custom control panel', async function (assert) {
assert.expect(1);
class CustomControlPanel extends owl.Component {}
CustomControlPanel.template = xml/* xml */`
<div class="custom-control-panel">My custom control panel</div>
`
const ClientAction = AbstractAction.extend({
hasControlPanel: true,
config: {
ControlPanel: CustomControlPanel
},
});
const actionManager = await createActionManager();
core.action_registry.add('HelloWorldTest', ClientAction);
await actionManager.doAction('HelloWorldTest');
assert.containsOnce(actionManager, '.custom-control-panel',
"should have a custom control panel");
actionManager.destroy();
delete core.action_registry.map.HelloWorldTest;
});
QUnit.test('breadcrumb is updated on title change', async function (assert) {
assert.expect(2);