3
0
Fork 0

[MIG] web_notify: Migration to 18.0

18.0
trisdoan 2024-10-07 15:19:30 +07:00
parent 6997e5940e
commit 51616198d9
8 changed files with 62 additions and 64 deletions

View File

@ -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
-----------

View File

@ -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",

View File

@ -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,
)

View File

@ -0,0 +1 @@
The migration of this module from 17.0 to 18.0 was financially supported by Camptocamp.

View File

@ -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 &lt;<a class="reference external" href="mailto:tridm&#64;trobz.com">tridm&#64;trobz.com</a>&gt;</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" />

View File

@ -1,4 +1,3 @@
/** @odoo-module */
import {Notification} from "@web/core/notifications/notification";
import {patch} from "@web/core/utils/patch";

View File

@ -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();
},

View File

@ -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):