diff options
| author | Alexandre Kühn <aku@odoo.com> | 2018-08-30 16:10:20 +0200 |
|---|---|---|
| committer | Alexandre Kühn <aku@odoo.com> | 2018-08-30 17:55:18 +0200 |
| commit | f80bbb4b2a1230ba543e97d3da01c7b2c52d24cc (patch) | |
| tree | 34d27fbdab943be7a2ebd675095060bb6ea512b5 /addons/mail_bot/static/src/js/systray_messaging_menu.js | |
| parent | f8e3aed20ba073294fa1453f86709d6cbce650f5 (diff) | |
[IMP] mail, mail_bot: improved push notifications permission response
This commit makes small improvements on the messaging menu with
the new module `mail_bot`:
[IMP] When OdooBot has a request, it now adds "+1" to the counter of
the messaging menu. The related preview also has a bold title,
and displays "(1)" next to the title.
[REF] Static previews are no longer in mail_service. This was only
used for "OdooBot has a request" preview. This logic has now
been moved to the module `mail_bot` (was previously in `mail`).
[FIX] Title of response of push notifications permission clearly
states whether permission has been granted or denied
(was displaying "[Object object]" before this commit).
Task-ID 1877502
Diffstat (limited to 'addons/mail_bot/static/src/js/systray_messaging_menu.js')
| -rw-r--r-- | addons/mail_bot/static/src/js/systray_messaging_menu.js | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/addons/mail_bot/static/src/js/systray_messaging_menu.js b/addons/mail_bot/static/src/js/systray_messaging_menu.js new file mode 100644 index 00000000000..05c0ee54f24 --- /dev/null +++ b/addons/mail_bot/static/src/js/systray_messaging_menu.js @@ -0,0 +1,121 @@ +odoo.define('mail_bot.systray.MessagingMenu', function (require) { +"use strict"; + +var MessagingMenu = require('mail.systray.MessagingMenu'); +var core = require('web.core'); + +var _t = core._t; + +return MessagingMenu.include({ + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * Override so that 'mailbot has a request' is included in the computation + * of of the counter. + * + * @override + * @private + * @returns {integer} + */ + _computeCounter: function () { + var counter = this._super.apply(this, arguments); + if (this.call('mailbot_service', 'hasRequest')) { + counter++; + } + return counter; + }, + /** + * Override so that the mailbot previews are included in the systray + * messaging menu (e.g. 'OdooBot has a request') + * + * @override + * @private + * @returns {$.Promise<Object[]>} resolved with list of previews that are + * compatible with the 'mail.Preview' template. + */ + _getPreviews: function () { + var mailbotPreviews = this.call('mailbot_service', 'getPreviews', this._filter); + return this._super.apply(this, arguments).then(function (previews) { + return _.union(mailbotPreviews, previews); + }); + }, + /** + * Handle the response of the user when prompted whether push notifications + * are granted or denied. + * + * Also refreshes the counter after a response from a push notification + * request. This is useful because the counter contains a part for the + * OdooBot, and the OdooBot influences the counter by 1 when it requests + * for notifications. This should no longer be the case when push + * notifications are either granted or denied. + * + * @private + * @param {string} value + */ + _handleResponseNotificationPermission: function (value) { + if (value !== 'granted') { + this.call('bus_service', 'sendNotification', _t('Permission denied'), + _t('Odoo will not have the permission to send native notifications on this device.')); + } else { + this.call('bus_service', 'sendNotification', _t('Yay, push notifications are enabled!'), + _t('Odoo has now the permission to send you native notifications on this device.')); + } + this._updateCounter(); + }, + /** + * Display the browser notification request dialog when the user clicks on + * systray's corresponding notification + * + * @private + */ + _requestNotificationPermission: function () { + var def = window.Notification && window.Notification.requestPermission(); + if (def) { + def.then(this._handleResponseNotificationPermission.bind(this)); + } + this.$('.o_mail_navbar_request_permission').slideUp(); + }, + + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + /** + * Override so that it handles preview related to OdooBot + * + * @override + * @private + * @param {MouseEvent} ev + */ + _onClickPreview: function (ev) { + var previewID = $(ev.currentTarget).data('preview-id'); + if (previewID === 'request_notification') { + this._requestNotificationPermission(); + } else { + this._super.apply(this, arguments); + } + }, + /** + * Override so that it handles clicking on 'mark as read' similarly to + * requesting push notification permission. + * + * @override + * @private + * @param {MouseEvent} ev + */ + _onClickPreviewMarkAsRead: function (ev) { + ev.stopPropagation(); + var $preview = $(ev.currentTarget).closest('.o_mail_preview'); + var previewID = $preview.data('preview-id'); + if (previewID === 'request_notification') { + this._requestNotificationPermission(); + } else { + this._super.apply(this, arguments); + } + } +}); + +}); |
