summaryrefslogtreecommitdiff
path: root/addons/board/static
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2018-04-16 19:50:50 +0200
committerChristophe Simonis <chs@odoo.com>2018-04-16 19:50:50 +0200
commit74033eb007749c88b84ea883b006a5877355306e (patch)
tree8f8b6cb22cc2bf6046ba04e388ea29855a33c597 /addons/board/static
parent71cdefd9f41881d9720433d5fc7732759098f9a4 (diff)
parent90f8f17fb4fc795c2c12d68d21900e81f3d7a223 (diff)
[MERGE] forward port branch saas-11.2 up to 90f8f17fb4f
Diffstat (limited to 'addons/board/static')
-rw-r--r--addons/board/static/src/js/board_view.js26
-rw-r--r--addons/board/static/tests/dashboard_tests.js45
2 files changed, 71 insertions, 0 deletions
diff --git a/addons/board/static/src/js/board_view.js b/addons/board/static/src/js/board_view.js
index 6ceaafd7253..e5fd56ad049 100644
--- a/addons/board/static/src/js/board_view.js
+++ b/addons/board/static/src/js/board_view.js
@@ -134,6 +134,31 @@ var BoardRenderer = FormRenderer.extend({
this._super.apply(this, arguments);
this.noContentHelp = params.noContentHelp;
this.actionsDescr = {};
+ this._boardSubcontrollers = []; // for board: controllers of subviews
+ },
+ /**
+ * Call `on_attach_callback` for each subview
+ *
+ * @override
+ */
+ on_attach_callback: function () {
+ _.each(this._boardSubcontrollers, function (controller) {
+ if ('on_attach_callback' in controller) {
+ controller.on_attach_callback();
+ }
+ });
+ },
+ /**
+ * Call `on_detach_callback` for each subview
+ *
+ * @override
+ */
+ on_detach_callback: function () {
+ _.each(this._boardSubcontrollers, function (controller) {
+ if ('on_detach_callback' in controller) {
+ controller.on_detach_callback();
+ }
+ });
},
//--------------------------------------------------------------------------
@@ -235,6 +260,7 @@ var BoardRenderer = FormRenderer.extend({
hasSelectors: false,
});
return view.getController(self).then(function (controller) {
+ self._boardSubcontrollers.push(controller);
return controller.appendTo(params.$node);
});
});
diff --git a/addons/board/static/tests/dashboard_tests.js b/addons/board/static/tests/dashboard_tests.js
index 5e1fb5cd3d4..8d6a6bf98c1 100644
--- a/addons/board/static/tests/dashboard_tests.js
+++ b/addons/board/static/tests/dashboard_tests.js
@@ -5,6 +5,7 @@ var BoardView = require('board.BoardView');
var ListController = require('web.ListController');
var testUtils = require('web.test_utils');
+var ListRenderer = require('web.ListRenderer');
var createView = testUtils.createView;
@@ -456,6 +457,50 @@ QUnit.test('clicking on a kanban\'s button should trigger the action', function
form.destroy();
});
+QUnit.test('subviews are aware of attach in or detach from the DOM', function (assert) {
+ assert.expect(2);
+
+ // patch list renderer `on_attach_callback` for the test only
+ testUtils.patch(ListRenderer, {
+ on_attach_callback: function () {
+ assert.step('subview on_attach_callback');
+ }
+ });
+
+ var form = createView({
+ View: FormView,
+ model: 'board',
+ data: this.data,
+ arch: '<form string="My Dashboard">' +
+ '<board style="2-1">' +
+ '<column>' +
+ '<action context="{}" view_mode="list" string="ABC" name="51" domain="[]"></action>' +
+ '</column>' +
+ '</board>' +
+ '</form>',
+ mockRPC: function (route) {
+ if (route === '/web/action/load') {
+ return $.when({
+ res_model: 'partner',
+ views: [[4, 'list']],
+ });
+ }
+ return this._super.apply(this, arguments);
+ },
+ archs: {
+ 'partner,4,list':
+ '<list string="Partner"><field name="foo"/></list>',
+ },
+ });
+
+ assert.verifySteps(['subview on_attach_callback']);
+
+ // restore on_attach_callback of ListRenderer
+ testUtils.unpatch(ListRenderer);
+
+ form.destroy();
+});
+
QUnit.test('dashboard intercepts custom events triggered by sub controllers', function (assert) {
assert.expect(4);