summaryrefslogtreecommitdiff
path: root/addons/board/static
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2018-10-10 14:40:01 +0200
committerChristophe Simonis <chs@odoo.com>2018-10-10 14:40:01 +0200
commit7415f40fbd3a809602b83c78f2ad00e2d79e6b98 (patch)
tree66f78201e74c94a2fb01b4706818f02a3b279dcb /addons/board/static
parent61df7749ccf8b6a1c9eb6328aaee6323f0c4dbb6 (diff)
parenta69f117bbf5031bde6c2d353a2adcfb399bf466a (diff)
[MERGE] forward port branch 11.0 up to a69f117bbf5
Diffstat (limited to 'addons/board/static')
-rw-r--r--addons/board/static/src/js/board_view.js18
-rw-r--r--addons/board/static/tests/dashboard_tests.js51
2 files changed, 62 insertions, 7 deletions
diff --git a/addons/board/static/src/js/board_view.js b/addons/board/static/src/js/board_view.js
index b2d57903a3d..a40348bc319 100644
--- a/addons/board/static/src/js/board_view.js
+++ b/addons/board/static/src/js/board_view.js
@@ -9,6 +9,7 @@ var Domain = require('web.Domain');
var FormController = require('web.FormController');
var FormRenderer = require('web.FormRenderer');
var FormView = require('web.FormView');
+var pyUtils = require('web.pyeval'); // do not forwardport this to 12.0
var viewRegistry = require('web.view_registry');
var _t = core._t;
@@ -236,7 +237,6 @@ var BoardRenderer = FormRenderer.extend({
*/
_createController: function (params) {
var self = this;
- var context = params.context.eval();
return this._rpc({
route: '/web/action/load',
params: {action_id: params.actionID}
@@ -246,18 +246,22 @@ var BoardRenderer = FormRenderer.extend({
// the action does not exist anymore
return $.when();
}
+ var rawContext = new Context(params.context, action.context);
+ var context = pyUtils.eval('context', rawContext);
+ var domain = params.domain || pyUtils.eval('domain', action.domain || '[]', action.context);
+ var viewType = params.viewType || action.views[0][1];
var view = _.find(action.views, function (descr) {
- return descr[1] === params.viewType;
- }) || [false, params.viewType];
+ return descr[1] === viewType;
+ }) || [false, viewType];
return self.loadViews(action.res_model, context, [view])
.then(function (viewsInfo) {
- var viewInfo = viewsInfo[params.viewType];
- var View = viewRegistry.get(params.viewType);
+ var viewInfo = viewsInfo[viewType];
+ var View = viewRegistry.get(viewType);
var view = new View(viewInfo, {
action: action,
context: context,
- domain: params.domain,
- groupBy: context.group_by,
+ domain: domain,
+ groupBy: context.group_by || [],
modelName: action.res_model,
hasSelectors: false,
});
diff --git a/addons/board/static/tests/dashboard_tests.js b/addons/board/static/tests/dashboard_tests.js
index e777b7b36b7..1329d883696 100644
--- a/addons/board/static/tests/dashboard_tests.js
+++ b/addons/board/static/tests/dashboard_tests.js
@@ -191,6 +191,57 @@ QUnit.test('basic functionality, with one sub action', function (assert) {
form.destroy();
});
+QUnit.test('can render an action without view_mode attribute', function (assert) {
+ // The view_mode attribute is automatically set to the 'action' nodes when
+ // the action is added to the dashboard using the 'Add to dashboard' button
+ // in the searchview. However, other dashboard views can be written by hand
+ // (see openacademy tutorial), and in this case, we don't want hardcode
+ // action's params (like context or domain), as the dashboard can directly
+ // retrieve them from the action. Same applies for the view_type, as the
+ // first view of the action can be used, by default.
+ assert.expect(2);
+
+ var form = createView({
+ View: FormView, // replace by BoardView when forwarported to saas-11.3
+ model: 'board',
+ data: this.data,
+ arch: '<form string="My Dashboard">' +
+ '<board style="2-1">' +
+ '<column>' +
+ '<action string="ABC" name="51" context="{\'a\': 1}"></action>' +
+ '</column>' +
+ '</board>' +
+ '</form>',
+ archs: {
+ 'partner,4,list':
+ '<tree string="Partner"><field name="foo"/></tree>',
+ },
+ mockRPC: function (route, args) {
+ if (route === '/board/static/src/img/layout_1-1-1.png') {
+ return $.when();
+ }
+ if (route === '/web/action/load') {
+ return $.when({
+ context: '{"b": 2}',
+ domain: '[["foo", "=", "yop"]]',
+ res_model: 'partner',
+ views: [[4, 'list'], [false, 'form']],
+ });
+ }
+ if (route === '/web/dataset/search_read') {
+ assert.deepEqual(args.domain, [['foo', '=', 'yop']],
+ "should use the domain of the action");
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ assert.strictEqual(form.$('.oe_action:contains(ABC) .o_list_view').length, 1,
+ "the list view (first view of action) should have been rendered correctly");
+
+ form.destroy();
+});
+
QUnit.test('can sort a sub list', function (assert) {
assert.expect(2);