[FIX] web: FormRenderer: notebook and invisible pages

When switching between records, the active tab of the previous
record is made active on the new record.

However, before this rev., this was done without checking that
this tab is still visible on the new record (there may be an
invisible attrs that makes it invisible), so it happened that
the active tab was actually invisible.

This was for instance the case when switching between stock
pickings, as the first tab ('Operations') is sometimes hidden.
This commit is contained in:
Aaron Bohy
2017-04-28 08:28:57 +02:00
parent 627da0503b
commit c5579ef89e
2 changed files with 52 additions and 3 deletions
@@ -111,9 +111,10 @@ var FormRenderer = BasicRenderer.extend({
var $notebook = $(this);
var name = $notebook.data('name');
if (name in state) {
$notebook.find('> ul > li > a[data-toggle="tab"]')
.eq(state[name])
.click();
var $page = $notebook.find('> ul > li').eq(state[name]);
if (!$page.hasClass('o_form_invisible')) {
$page.find('a[data-toggle="tab"]').click();
}
}
});
},
@@ -3778,5 +3778,53 @@ QUnit.module('Views', {
form.destroy();
});
QUnit.test('do not activate an hidden tab when switching between records', function (assert) {
assert.expect(6);
var form = createView({
View: FormView,
model: 'partner',
data: this.data,
arch: '<form string="Partners">' +
'<sheet>' +
'<notebook>' +
'<page string="Foo" attrs=\'{"invisible": [["id", "=", 2]]}\'>' +
'<field name="foo"/>' +
'</page>' +
'<page string="Bar">' +
'<field name="bar"/>' +
'</page>' +
'</notebook>' +
'</sheet>' +
'</form>',
viewOptions: {
ids: [1, 2],
index: 0,
},
res_id: 1,
});
assert.strictEqual(form.$('.o_notebook ul li:not(.o_form_invisible)').length, 2,
"both tabs should be visible");
assert.ok(form.$('.o_notebook ul li:first').hasClass('active'),
"first tab should be active");
// click on the pager to switch to the next record
form.pager.$('.o_pager_next').click();
assert.strictEqual(form.$('.o_notebook ul li:not(.o_form_invisible)').length, 1,
"only the second tab should be visible");
assert.ok(form.$('.o_notebook ul li:not(.o_form_invisible)').hasClass('active'),
"the visible tab should be active");
// click on the pager to switch back to the previous record
form.pager.$('.o_pager_previous').click();
assert.strictEqual(form.$('.o_notebook ul li:not(.o_form_invisible)').length, 2,
"both tabs should be visible again");
assert.ok(form.$('.o_notebook ul li:nth(1)').hasClass('active'),
"second tab should be active");
form.destroy();
});
});
});