forked from Techsystech/web
[MIG] web_notify: Migration to 18.0
parent
6997e5940e
commit
51616198d9
|
@ -154,6 +154,12 @@ Contributors
|
|||
- Nikul Chaudhary <nchaudhary@opensourceintegrators.com>
|
||||
- Tris Doan <tridm@trobz.com>
|
||||
|
||||
Other credits
|
||||
-------------
|
||||
|
||||
The migration of this module from 17.0 to 18.0 was financially supported
|
||||
by Camptocamp.
|
||||
|
||||
Maintainers
|
||||
-----------
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
"name": "Web Notify",
|
||||
"summary": """
|
||||
Send notification messages to user""",
|
||||
"version": "17.0.1.0.0",
|
||||
"version": "18.0.1.0.0",
|
||||
"license": "AGPL-3",
|
||||
"author": "ACSONE SA/NV," "AdaptiveCity," "Odoo Community Association (OCA)",
|
||||
"development_status": "Production/Stable",
|
||||
|
|
|
@ -130,6 +130,8 @@ class ResUsers(models.Model):
|
|||
"action": action,
|
||||
"params": dict(params or []),
|
||||
}
|
||||
|
||||
notifications = [[partner, "web.notify", [bus_message]] for partner in target]
|
||||
self.env["bus.bus"]._sendmany(notifications)
|
||||
for partner in target:
|
||||
partner._bus_send(
|
||||
"web_notify",
|
||||
bus_message,
|
||||
)
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
The migration of this module from 17.0 to 18.0 was financially supported by Camptocamp.
|
|
@ -390,7 +390,8 @@ supported.</p>
|
|||
<li><a class="reference internal" href="#credits" id="toc-entry-4">Credits</a><ul>
|
||||
<li><a class="reference internal" href="#authors" id="toc-entry-5">Authors</a></li>
|
||||
<li><a class="reference internal" href="#contributors" id="toc-entry-6">Contributors</a></li>
|
||||
<li><a class="reference internal" href="#maintainers" id="toc-entry-7">Maintainers</a></li>
|
||||
<li><a class="reference internal" href="#other-credits" id="toc-entry-7">Other credits</a></li>
|
||||
<li><a class="reference internal" href="#maintainers" id="toc-entry-8">Maintainers</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -483,8 +484,13 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
|
|||
<li>Tris Doan <<a class="reference external" href="mailto:tridm@trobz.com">tridm@trobz.com</a>></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="other-credits">
|
||||
<h2><a class="toc-backref" href="#toc-entry-7">Other credits</a></h2>
|
||||
<p>The migration of this module from 17.0 to 18.0 was financially supported
|
||||
by Camptocamp.</p>
|
||||
</div>
|
||||
<div class="section" id="maintainers">
|
||||
<h2><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h2>
|
||||
<h2><a class="toc-backref" href="#toc-entry-8">Maintainers</a></h2>
|
||||
<p>This module is maintained by the OCA.</p>
|
||||
<a class="reference external image-reference" href="https://odoo-community.org">
|
||||
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
/** @odoo-module */
|
||||
import {Notification} from "@web/core/notifications/notification";
|
||||
import {patch} from "@web/core/utils/patch";
|
||||
|
||||
|
|
|
@ -1,64 +1,48 @@
|
|||
/** @odoo-module **/
|
||||
|
||||
import {markup} from "@odoo/owl";
|
||||
import {browser} from "@web/core/browser/browser";
|
||||
import {registry} from "@web/core/registry";
|
||||
|
||||
export const webNotificationService = {
|
||||
dependencies: ["bus_service", "notification", "action"],
|
||||
|
||||
start(env, {bus_service, notification, action}) {
|
||||
let webNotifTimeouts = {};
|
||||
/**
|
||||
* Displays the web notification on user's screen
|
||||
* @param {*} notifications
|
||||
*/
|
||||
function displaywebNotification(notifications) {
|
||||
Object.values(webNotifTimeouts).forEach((notif) =>
|
||||
browser.clearTimeout(notif)
|
||||
start(env, {bus_service, notification: notificationService, action}) {
|
||||
function displayWebNotification(notification) {
|
||||
let buttons = [];
|
||||
if (notification.action) {
|
||||
const params = notification.action.context?.params || {};
|
||||
|
||||
buttons = [
|
||||
{
|
||||
name: params.button_name || env._t("Open"),
|
||||
primary: true,
|
||||
onClick: async () => {
|
||||
await action.doAction(notification.action);
|
||||
},
|
||||
...(params.button_icon && {icon: params.button_icon}),
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
const notificationRemove = notificationService.add(
|
||||
markup(notification.message),
|
||||
{
|
||||
title: notification.title,
|
||||
type: notification.type,
|
||||
sticky: notification.sticky,
|
||||
className: notification.className,
|
||||
buttons: buttons.map((button) => {
|
||||
const onClick = button.onClick;
|
||||
button.onClick = async () => {
|
||||
await onClick();
|
||||
notificationRemove();
|
||||
};
|
||||
return button;
|
||||
}),
|
||||
}
|
||||
);
|
||||
webNotifTimeouts = {};
|
||||
notifications.forEach((notif) => {
|
||||
browser.setTimeout(() => {
|
||||
var buttons = [];
|
||||
if (notif.action) {
|
||||
const params =
|
||||
(notif.action.context && notif.action.context.params) || {};
|
||||
buttons = [
|
||||
{
|
||||
name: params.button_name || env._t("Open"),
|
||||
primary: true,
|
||||
onClick: async () => {
|
||||
await action.doAction(notif.action);
|
||||
},
|
||||
...(params.button_icon && {icon: params.button_icon}),
|
||||
},
|
||||
];
|
||||
}
|
||||
const notificationRemove = notification.add(markup(notif.message), {
|
||||
title: notif.title,
|
||||
type: notif.type,
|
||||
sticky: notif.sticky,
|
||||
className: notif.className,
|
||||
buttons: buttons.map((button) => {
|
||||
const onClick = button.onClick;
|
||||
button.onClick = async () => {
|
||||
await onClick();
|
||||
notificationRemove();
|
||||
};
|
||||
return button;
|
||||
}),
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
bus_service.addEventListener("notification", ({detail: notifications}) => {
|
||||
for (const {payload, type} of notifications) {
|
||||
if (type === "web.notify") {
|
||||
displaywebNotification(payload);
|
||||
}
|
||||
}
|
||||
bus_service.subscribe("web_notify", (payload) => {
|
||||
displayWebNotification(payload);
|
||||
});
|
||||
bus_service.start();
|
||||
},
|
||||
|
|
|
@ -26,7 +26,7 @@ class TestResUsers(common.TransactionCase):
|
|||
news = bus_bus.search(domain) - existing
|
||||
self.assertEqual(1, len(news))
|
||||
test_msg.update({"type": SUCCESS})
|
||||
payload = json.loads(news.message)["payload"][0]
|
||||
payload = json.loads(news.message)["payload"]
|
||||
self.assertDictEqual(test_msg, payload)
|
||||
|
||||
def test_notify_danger(self):
|
||||
|
@ -45,7 +45,7 @@ class TestResUsers(common.TransactionCase):
|
|||
news = bus_bus.search(domain) - existing
|
||||
self.assertEqual(1, len(news))
|
||||
test_msg.update({"type": DANGER})
|
||||
payload = json.loads(news.message)["payload"][0]
|
||||
payload = json.loads(news.message)["payload"]
|
||||
self.assertDictEqual(test_msg, payload)
|
||||
|
||||
def test_notify_warning(self):
|
||||
|
@ -64,7 +64,7 @@ class TestResUsers(common.TransactionCase):
|
|||
news = bus_bus.search(domain) - existing
|
||||
self.assertEqual(1, len(news))
|
||||
test_msg.update({"type": WARNING})
|
||||
payload = json.loads(news.message)["payload"][0]
|
||||
payload = json.loads(news.message)["payload"]
|
||||
self.assertDictEqual(test_msg, payload)
|
||||
|
||||
def test_notify_info(self):
|
||||
|
@ -83,7 +83,7 @@ class TestResUsers(common.TransactionCase):
|
|||
news = bus_bus.search(domain) - existing
|
||||
self.assertEqual(1, len(news))
|
||||
test_msg.update({"type": INFO})
|
||||
payload = json.loads(news.message)["payload"][0]
|
||||
payload = json.loads(news.message)["payload"]
|
||||
self.assertDictEqual(test_msg, payload)
|
||||
|
||||
def test_notify_default(self):
|
||||
|
@ -102,7 +102,7 @@ class TestResUsers(common.TransactionCase):
|
|||
news = bus_bus.search(domain) - existing
|
||||
self.assertEqual(1, len(news))
|
||||
test_msg.update({"type": DEFAULT})
|
||||
payload = json.loads(news.message)["payload"][0]
|
||||
payload = json.loads(news.message)["payload"]
|
||||
self.assertDictEqual(test_msg, payload)
|
||||
|
||||
def test_notify_many(self):
|
||||
|
|
Loading…
Reference in New Issue