diff --git a/addons/web/static/src/js/views/form/form_renderer.js b/addons/web/static/src/js/views/form/form_renderer.js index 9efadaabe30..98331c9b409 100644 --- a/addons/web/static/src/js/views/form/form_renderer.js +++ b/addons/web/static/src/js/views/form/form_renderer.js @@ -16,6 +16,7 @@ var FormRenderer = BasicRenderer.extend({ 'click .o_notification_box .oe_field_translate': '_onTranslate', 'click .o_notification_box .close': '_onTranslateNotificationClose', 'click .oe_title, .o_inner_group': '_onClick', + 'shown.bs.tab a[data-toggle="tab"]': '_onNotebookTabChanged', }), custom_events: _.extend({}, BasicRenderer.prototype.custom_events, { 'navigation_move':'_onNavigationMove', @@ -1061,6 +1062,16 @@ var FormRenderer = BasicRenderer.extend({ this._activatePreviousFieldWidget(this.state, index); } }, + /** + * Listen to notebook tab changes and trigger a DOM_updated event such that + * widgets in the visible tab can correctly compute their dimensions (e.g. + * autoresize on field text) + * + * @private + */ + _onNotebookTabChanged: function () { + core.bus.trigger('DOM_updated'); + }, /** * open the translation view for the current field * diff --git a/addons/web/static/tests/views/form_tests.js b/addons/web/static/tests/views/form_tests.js index 9c603e8b051..5ce5718178b 100644 --- a/addons/web/static/tests/views/form_tests.js +++ b/addons/web/static/tests/views/form_tests.js @@ -7016,6 +7016,54 @@ QUnit.module('Views', { form.destroy(); }); + QUnit.test('autoresize of text fields is done on notebook page show', async function (assert) { + assert.expect(5); + + this.data.partner.fields.text_field = { string: 'Text field', type: 'text' }; + this.data.partner.fields.text_field.default = "some\n\nmulti\n\nline\n\ntext\n"; + this.data.partner.records[0].text_field = "a\nb\nc\nd\ne\nf"; + this.data.partner.fields.text_field_empty = { string: 'Text field', type: 'text' }; + + var form = await createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: '
', + res_id: 1, + }); + + await testUtils.form.clickEdit(form); + assert.hasClass(form.$('.o_notebook .nav .nav-link:first()'), 'active'); + + await testUtils.dom.click(form.$('.o_notebook .nav .nav-link:nth(1)')); + assert.hasClass(form.$('.o_notebook .nav .nav-link:nth(1)'), 'active'); + + var height = form.$('.o_field_widget[name=text_field]').height(); + assert.ok(height > 80, "textarea should have an height of at least 80px"); + + await testUtils.dom.click(form.$('.o_notebook .nav .nav-link:nth(2)')); + assert.hasClass(form.$('.o_notebook .nav .nav-link:nth(2)'), 'active'); + + var height = form.$('.o_field_widget[name=text_field_empty]').css('height'); + assert.strictEqual(height, '50px', "empty textarea should have height of 50px"); + + form.destroy(); + }); + QUnit.test('check if the view destroys all widgets and instances', async function (assert) { assert.expect(1);