Files
web/web_notify/static/src/js/web_client.js
2020-02-24 17:43:31 +07:00

77 lines
2.9 KiB
JavaScript

odoo.define('web_notify.WebClient', function (require) {
"use strict";
var WebClient = require('web.WebClient');
var base_bus = require('bus.Longpolling');
var session = require('web.session');
require('bus.BusService');
WebClient.include({
show_application: function () {
var res = this._super();
this.start_polling();
return res;
},
start_polling: function () {
this.channel_success = 'notify_success_' + session.uid;
this.channel_danger = 'notify_danger_' + session.uid;
this.channel_warning = 'notify_warning_' + session.uid;
this.channel_info = 'notify_info_' + session.uid;
this.channel_default = 'notify_default_' + session.uid;
this.all_channels = [
this.channel_success,
this.channel_danger,
this.channel_warning,
this.channel_info,
this.channel_default,
];
// startPolling to get this new tab registered,
// in order to be able to call isMasterTab
this.call('bus_service', 'startPolling');
// - no need to add channels again if it was done already
// - this is also a workaround for the infinite loop issue
// that occures when user logs in as a different user
// while still being logged in 2+ other tabs
if(this.call('bus_service', 'isMasterTab')) {
this.call('bus_service', 'addChannel', this.channel_success);
this.call('bus_service', 'addChannel', this.channel_danger);
this.call('bus_service', 'addChannel', this.channel_warning);
this.call('bus_service', 'addChannel', this.channel_info);
this.call('bus_service', 'addChannel', this.channel_default);
}
this.call(
'bus_service', 'on', 'notification',
this, this.bus_notification);
},
bus_notification: function (notifications) {
var self = this;
_.each(notifications, function (notification) {
var channel = notification[0];
var message = notification[1];
if (
self.all_channels != null &&
self.all_channels.indexOf(channel) > -1
) {
self.on_message(message);
}
});
},
on_message: function (message) {
return this.call(
'notification', 'notify', {
type: message.type,
title: message.title,
message: message.message,
sticky: message.sticky,
className: message.className,
}
);
},
});
});