summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/web/static/src/js/views/form/form_renderer.js12
-rw-r--r--addons/web/static/tests/views/form_tests.js29
2 files changed, 30 insertions, 11 deletions
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 66d4c5d8bd2..2b91c5820ee 100644
--- a/addons/web/static/src/js/views/form/form_renderer.js
+++ b/addons/web/static/src/js/views/form/form_renderer.js
@@ -5,7 +5,6 @@ var BasicRenderer = require('web.BasicRenderer');
var config = require('web.config');
var core = require('web.core');
var dom = require('web.dom');
-const { WidgetAdapterMixin } = require('web.OwlCompatibility');
var viewUtils = require('web.viewUtils');
var _t = core._t;
@@ -14,7 +13,7 @@ var qweb = core.qweb;
// symbol used as key to set the <field> node id on its widget
const symbol = Symbol('form');
-var FormRenderer = BasicRenderer.extend(WidgetAdapterMixin, {
+var FormRenderer = BasicRenderer.extend({
className: "o_form_view",
events: _.extend({}, BasicRenderer.prototype.events, {
'click .o_notification_box .oe_field_translate': '_onTranslate',
@@ -54,17 +53,9 @@ var FormRenderer = BasicRenderer.extend(WidgetAdapterMixin, {
return this._super.apply(this, arguments);
},
/**
- * @override
- */
- destroy() {
- this._super(...arguments);
- WidgetAdapterMixin.destroy.call(this);
- },
- /**
* Called each time the form view is attached into the DOM
*/
on_attach_callback: function () {
- WidgetAdapterMixin.on_attach_callback.call(this);
this._isInDom = true;
_.invoke(this.widgets, 'on_attach_callback');
this._super.apply(this, arguments);
@@ -73,7 +64,6 @@ var FormRenderer = BasicRenderer.extend(WidgetAdapterMixin, {
* Called each time the renderer is detached from the DOM.
*/
on_detach_callback: function () {
- WidgetAdapterMixin.on_detach_callback.call(this);
this._isInDom = false;
this._super.apply(this, arguments);
},
diff --git a/addons/web/static/tests/views/form_tests.js b/addons/web/static/tests/views/form_tests.js
index 5033c990c43..edc96a05e71 100644
--- a/addons/web/static/tests/views/form_tests.js
+++ b/addons/web/static/tests/views/form_tests.js
@@ -6,6 +6,7 @@ var BasicModel = require('web.BasicModel');
var concurrency = require('web.concurrency');
var core = require('web.core');
var fieldRegistry = require('web.field_registry');
+const fieldRegistryOwl = require('web.field_registry_owl');
var FormView = require('web.FormView');
var mixins = require('web.mixins');
var NotificationService = require('web.NotificationService');
@@ -9532,6 +9533,34 @@ QUnit.module('Views', {
form.destroy();
delete widgetRegistry.map.test;
});
+
+ QUnit.test('do not call mounted twice on children', async function (assert) {
+ assert.expect(3);
+
+ class CustomFieldComponent extends fieldRegistryOwl.get('boolean') {
+ mounted() {
+ super.mounted(...arguments);
+ assert.step('mounted');
+ }
+ willUnmount() {
+ super.willUnmount(...arguments);
+ assert.step('willUnmount');
+ }
+ }
+ fieldRegistryOwl.add('custom', CustomFieldComponent);
+
+ const form = await createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: `<form><field name="bar" widget="custom"/></form>`,
+ });
+
+ form.destroy();
+ delete fieldRegistryOwl.map.custom;
+
+ assert.verifySteps(['mounted', 'willUnmount']);
+ });
});
});