diff --git a/web_ir_actions_act_window_message/__manifest__.py b/web_ir_actions_act_window_message/__manifest__.py index 698b92965..ac31d88c5 100644 --- a/web_ir_actions_act_window_message/__manifest__.py +++ b/web_ir_actions_act_window_message/__manifest__.py @@ -2,13 +2,20 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { "name": "Client side message boxes", - "version": "14.0.1.0.0", + "version": "15.0.1.0.0", "author": "Therp BV, " "ACSONE SA/NV, " "Odoo Community Association (OCA)", "website": "https://github.com/OCA/web", "license": "AGPL-3", "category": "Hidden/Dependency", "summary": "Show a message box to users", "depends": ["web"], - "data": ["security/ir.model.access.csv", "views/templates.xml"], - "qweb": ["static/src/xml/web_ir_actions_act_window_message.xml"], + "data": ["security/ir.model.access.csv"], + "assets": { + "web.assets_backend": [ + "web_ir_actions_act_window_message/static/src/**/**.esm.js", + ], + "web.assets_qweb": [ + "web_ir_actions_act_window_message/static/src/**/**.xml", + ], + }, } diff --git a/web_ir_actions_act_window_message/static/src/js/web_ir_actions_act_window_message.esm.js b/web_ir_actions_act_window_message/static/src/js/web_ir_actions_act_window_message.esm.js new file mode 100644 index 000000000..8ef51075e --- /dev/null +++ b/web_ir_actions_act_window_message/static/src/js/web_ir_actions_act_window_message.esm.js @@ -0,0 +1,89 @@ +/** @odoo-module **/ + +import {registry} from "@web/core/registry"; +import Dialog from "web.Dialog"; + +function ir_actions_act_window_message_get_buttons(env, action, close_func) { + // Return an array of button definitions from action + return _.map(action.buttons || [], function (button_definition) { + return { + text: button_definition.name || "No name set", + classes: button_definition.classes || "btn-default", + click: function () { + if (button_definition.type === "method") { + env.services + .rpc("/web/dataset/call_button", { + model: button_definition.model, + method: button_definition.method, + args: button_definition.args, + kwargs: button_definition.kwargs, + }) + .then(function (result) { + if (_.isObject(result)) { + return env.services.action.doAction(result); + } + // Always refresh the view after the action + // ex: action updates a status + const {__legacy_widget__} = + env.services.action.currentController.getLocalState(); + __legacy_widget__.reload({}); + }); + } else { + return env.services.action.doAction(button_definition); + } + close_func(); + }, + }; + }); +} + +async function _executeWindowMessageAction({env, action}) { + var buttons = []; + if (action.close_button_title !== false) { + buttons.push({ + text: action.close_button_title || env._t("Close"), + click: function () { + // Refresh the view before closing the dialog + const {__legacy_widget__} = + env.services.action.currentController.getLocalState(); + __legacy_widget__.reload({}); + this.close(); + }, + classes: "btn-default", + }); + } + + var is_html = action.is_html_message === true; + var content_properties = {}; + + if (is_html) { + content_properties = { + html: action.message, + }; + } else { + content_properties = { + text: action.message, + css: { + "white-space": "pre-line", + }, + }; + } + var dialog = new Dialog( + this, + _.extend({ + size: "medium", + title: action.title, + $content: $("
", content_properties), + buttons: buttons.concat( + ir_actions_act_window_message_get_buttons(env, action, function () { + dialog.close(); + }) + ), + }) + ); + return dialog.open()._opened; +} + +registry + .category("action_handlers") + .add("ir.actions.act_window.message", _executeWindowMessageAction); diff --git a/web_ir_actions_act_window_message/static/src/js/web_ir_actions_act_window_message.js b/web_ir_actions_act_window_message/static/src/js/web_ir_actions_act_window_message.js deleted file mode 100644 index 7b491aca0..000000000 --- a/web_ir_actions_act_window_message/static/src/js/web_ir_actions_act_window_message.js +++ /dev/null @@ -1,109 +0,0 @@ -/* Copyright 2017 Therp BV, ACSONE SA/NV - * * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */ - -odoo.define("web.web_ir_actions_act_window_message", function (require) { - "use strict"; - - var ActionManager = require("web.ActionManager"), - core = require("web.core"), - Dialog = require("web.Dialog"); - - var _t = core._t; - - ActionManager.include({ - _handleAction: function (action, options) { - if (action.type === "ir.actions.act_window.message") { - return this._executeWindowMessageAction(action, options); - } - return this._super.apply(this, arguments); - }, - _executeWindowMessageAction: function (action, options) { - var self = this, - buttons = []; - - if (action.close_button_title !== false) { - buttons.push({ - text: action.close_button_title || _t("Close"), - click: function () { - // Refresh the view before closing the dialog - var controller = self.getCurrentController(); - if (controller && controller.widget) { - controller.widget.reload(); - } - }, - classes: "btn-default", - }); - } - - var is_html = action.is_html_message === true; - var content_properties = {}; - - if (is_html) { - content_properties = { - html: action.message, - }; - } else { - content_properties = { - text: action.message, - css: { - "white-space": "pre-line", - }, - }; - } - - var dialog = new Dialog( - this, - _.extend( - { - size: "medium", - title: action.title, - $content: $("
", content_properties), - buttons: buttons.concat( - this.ir_actions_act_window_message_get_buttons( - action, - function () { - dialog.close(); - } - ) - ), - }, - options - ) - ); - return dialog.open()._opened; - }, - ir_actions_act_window_message_get_buttons: function (action, close_func) { - // Return an array of button definitions from action - var self = this; - return _.map(action.buttons || [], function (button_definition) { - return { - text: button_definition.name || "No name set", - classes: button_definition.classes || "btn-default", - click: function () { - if (button_definition.type === "method") { - self._rpc({ - model: button_definition.model, - method: button_definition.method, - args: button_definition.args, - kwargs: button_definition.kwargs, - }).then(function (result) { - if (_.isObject(result)) { - self.do_action(result); - } - // Always refresh the view after the action - // ex: action updates a status - var controller = self.getCurrentController(); - if (controller && controller.widget) { - controller.widget.reload(); - } - }); - } else { - self.do_action(button_definition); - } - close_func(); - }, - }; - }); - }, - }); -}); diff --git a/web_ir_actions_act_window_message/views/templates.xml b/web_ir_actions_act_window_message/views/templates.xml deleted file mode 100644 index 2a71d18af..000000000 --- a/web_ir_actions_act_window_message/views/templates.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - -