summaryrefslogtreecommitdiff
path: root/addons/web/static
diff options
context:
space:
mode:
authorPierre Rousseau <pro@odoo.com>2020-03-26 07:19:21 +0000
committerPierre Rousseau <pro@odoo.com>2020-06-11 05:35:53 +0000
commitb906ba08b9f64f1c25a5a39e4ebf516070f8aec3 (patch)
tree5aaf2f8d4e90a1afe7059c5f34f4d4af6d7d43fd /addons/web/static
parent4f116a0f9be26b91d95e019cda1aa620faf6d620 (diff)
[IMP] web: allow to add buttons to pivot controller
This is useful for the integration of pivot views with spreadsheet Task-ID: 2168016
Diffstat (limited to 'addons/web/static')
-rw-r--r--addons/web/static/src/js/views/pivot/pivot_controller.js30
-rw-r--r--addons/web/static/tests/views/pivot_tests.js32
2 files changed, 57 insertions, 5 deletions
diff --git a/addons/web/static/src/js/views/pivot/pivot_controller.js b/addons/web/static/src/js/views/pivot/pivot_controller.js
index ee37aba3ce5..3eeed181795 100644
--- a/addons/web/static/src/js/views/pivot/pivot_controller.js
+++ b/addons/web/static/src/js/views/pivot/pivot_controller.js
@@ -91,11 +91,7 @@ odoo.define('web.PivotController', function (require) {
* does nothing
*/
renderButtons: function ($node) {
- const context = {
- measures: Object.entries(this.measures)
- .filter(x => x[0] !== '__count')
- .sort((a, b) => a[1].string.toLowerCase() > b[1].string.toLowerCase() ? 1 : -1),
- };
+ const context = this._getRenderButtonContext();
this.$buttons = $(QWeb.render('PivotView.buttons', context));
this.$buttons.click(this._onButtonClick.bind(this));
this.$buttons.find('button').tooltip();
@@ -183,6 +179,30 @@ odoo.define('web.PivotController', function (require) {
if ($target.hasClass('o_pivot_download')) {
this._downloadTable();
}
+
+ await this._addIncludedButtons(ev);
+ },
+
+ /**
+ * Declared to be overwritten in includes of pivot controller
+ *
+ * @param {MouseEvent} ev
+ * @returns {Promise<void>}
+ * @private
+ */
+ _addIncludedButtons: async function(ev) {},
+ /**
+ * Get the context of rendering of the buttons
+ *
+ * @returns {Object}
+ * @private
+ */
+ _getRenderButtonContext: function () {
+ return {
+ measures: Object.entries(this.measures)
+ .filter(x => x[0] !== '__count')
+ .sort((a, b) => a[1].string.toLowerCase() > b[1].string.toLowerCase() ? 1 : -1),
+ };
},
/**
*
diff --git a/addons/web/static/tests/views/pivot_tests.js b/addons/web/static/tests/views/pivot_tests.js
index 17712fb36c4..3cceabb600c 100644
--- a/addons/web/static/tests/views/pivot_tests.js
+++ b/addons/web/static/tests/views/pivot_tests.js
@@ -3,6 +3,7 @@ odoo.define('web.pivot_tests', function (require) {
var core = require('web.core');
var PivotView = require('web.PivotView');
+const PivotController = require("web.PivotController");
var testUtils = require('web.test_utils');
var testUtilsDom = require('web.test_utils_dom');
@@ -2835,5 +2836,36 @@ QUnit.module('Views', {
pivot.destroy();
});
+
+ QUnit.test('Allow to add behaviour to buttons on pivot', async function (assert) {
+ assert.expect(2);
+
+ let _testButtons = (ev) => {
+ if ($(ev.target).hasClass("o_pivot_flip_button")) {
+ assert.step("o_pivot_flip_button")
+ }
+ }
+
+ PivotController.include({
+ _addIncludedButtons: async function (ev) {
+ await this._super(...arguments);
+ _testButtons(ev);
+ },
+ });
+
+ const pivot = await createView({
+ View: PivotView,
+ model: "partner",
+ data: this.data,
+ arch: '<pivot>' +
+ '<field name="date" type="row" interval="day"/>' +
+ '<field name="bar" type="col"/>' +
+ '</pivot>',
+ });
+ await testUtils.dom.click(pivot.$buttons.find('.o_pivot_flip_button'));
+ assert.verifySteps(["o_pivot_flip_button"]);
+ _testButtons = () => true;
+ pivot.destroy();
+ });
});
});