summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/views/controller_adapter.js
diff options
context:
space:
mode:
authorVincent Schippefilt <vsc@odoo.com>2019-11-05 14:28:19 +0000
committerVincent Schippefilt <vsc@odoo.com>2019-12-09 11:09:10 +0000
commitd06e67e748ca9c5c538d5e1a1efc4ae798fee707 (patch)
tree551b153833d7a6ba72d99798983ac475d200e3ce /addons/web/static/src/js/views/controller_adapter.js
parent2cfa68b57158f6f4ac49549e79a5eb7f90cefb5f (diff)
[IMP] web: add Odoo view compatibility for OWL
Add a base class for a complete OWL renderer Add a compatibility layer for a Odoo controller that uses a OWL renderer. Co-authored-by: Pierre Rousseau <pro@odoo.com>
Diffstat (limited to 'addons/web/static/src/js/views/controller_adapter.js')
-rw-r--r--addons/web/static/src/js/views/controller_adapter.js42
1 files changed, 42 insertions, 0 deletions
diff --git a/addons/web/static/src/js/views/controller_adapter.js b/addons/web/static/src/js/views/controller_adapter.js
new file mode 100644
index 00000000000..17973cd3b54
--- /dev/null
+++ b/addons/web/static/src/js/views/controller_adapter.js
@@ -0,0 +1,42 @@
+odoo.define('web.ControllerAdapter', function (require) {
+"use strict";
+
+var AbstractController = require('web.AbstractController');
+
+var ControllerAdapter = AbstractController.extend({
+ on_attach_callback: function () {
+ this.renderer.__callMounted();
+ },
+ on_detach_callback: function () {
+ this.renderer.__callWillUnmount();
+ },
+
+ /**
+ * @override
+ * */
+ updateRendererState: async function (props) {
+ let prom;
+ this.renderer.updateProps(props);
+ if (this.renderer.__owl__.isMounted) {
+ prom = this.renderer.render();
+ } else {
+ prom = this.renderer.mount(this.$('.o_content')[0], true);
+ }
+ return prom;
+ },
+
+ //--------------------------------------------------------------------------
+ // Private
+ //--------------------------------------------------------------------------
+ /**
+ * @override
+ * @private
+ */
+ _startRenderer: async function () {
+ return this.renderer.mount(this.$('.o_content')[0]);
+ },
+});
+
+return ControllerAdapter;
+
+});