diff options
| author | Pierre Rousseau <pro@odoo.com> | 2020-03-26 07:19:21 +0000 |
|---|---|---|
| committer | Pierre Rousseau <pro@odoo.com> | 2020-06-11 05:35:53 +0000 |
| commit | b906ba08b9f64f1c25a5a39e4ebf516070f8aec3 (patch) | |
| tree | 5aaf2f8d4e90a1afe7059c5f34f4d4af6d7d43fd /addons/web | |
| parent | 4f116a0f9be26b91d95e019cda1aa620faf6d620 (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')
| -rw-r--r-- | addons/web/static/src/js/views/pivot/pivot_controller.js | 30 | ||||
| -rw-r--r-- | addons/web/static/tests/views/pivot_tests.js | 32 |
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(); + }); }); }); |
