diff --git a/addons/mail/i18n/mail.pot b/addons/mail/i18n/mail.pot index a6ab1f857c3..da6c9d4545a 100644 --- a/addons/mail/i18n/mail.pot +++ b/addons/mail/i18n/mail.pot @@ -823,6 +823,13 @@ msgstr "" msgid "Conversation is minimied" msgstr "" +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/systray.xml:14 +#, python-format +msgid "Conversations" +msgstr "" + #. module: mail #. openerp-web #: code:addons/mail/static/src/js/client_action.js:250 diff --git a/addons/mail/static/src/js/chat_manager.js b/addons/mail/static/src/js/chat_manager.js index 75b1819ddd2..74db804b7fc 100644 --- a/addons/mail/static/src/js/chat_manager.js +++ b/addons/mail/static/src/js/chat_manager.js @@ -25,6 +25,7 @@ var channels = []; var channels_preview_def; var channel_defs = {}; var chat_unread_counter = 0; +var unread_conversation_counter = 0; var emojis = []; var emoji_substitutions = {}; var needaction_counter = 0; @@ -146,7 +147,7 @@ function add_message (data, options) { channel.hidden = false; chat_manager.bus.trigger('new_channel', channel); } - if (!msg.author_id || msg.author_id[0] !== session.partner_id) { + if (channel.type !== 'static' && !msg.is_author) { if (options.increment_unread) { update_channel_unread_counter(channel, channel.unread_counter+1); } @@ -176,6 +177,7 @@ function make_message (data) { date: moment(time.str_to_datetime(data.date)), message_type: data.message_type, subtype_description: data.subtype_description, + is_author: data.author_id && data.author_id[0] === session.partner_id, is_note: data.is_note, attachment_ids: data.attachment_ids, subject: data.subject, @@ -240,11 +242,7 @@ function make_message (data) { } // Don't redirect on author clicked of self-posted messages - if (msg.author_id && msg.author_id[0] === session.partner_id) { - msg.author_redirect = false; - } else { - msg.author_redirect = true; - } + msg.author_redirect = !msg.is_author; // Compute the avatar_url if (msg.author_id && msg.author_id[0]) { @@ -449,8 +447,13 @@ function fetch_document_messages (ids, options) { } function update_channel_unread_counter (channel, counter) { + if (channel.unread_counter > 0 && counter === 0) { + unread_conversation_counter = Math.max(0, unread_conversation_counter-1); + } else if (channel.unread_counter === 0 && counter > 0) { + unread_conversation_counter++; + } if (channel.is_chat) { - chat_unread_counter = chat_unread_counter - channel.unread_counter + counter; + chat_unread_counter = Math.max(0, chat_unread_counter - channel.unread_counter + counter); } channel.unread_counter = counter; chat_manager.bus.trigger("update_channel_unread_counter", channel); @@ -807,6 +810,9 @@ var chat_manager = { get_chat_unread_counter: function () { return chat_unread_counter; }, + get_unread_conversation_counter: function () { + return unread_conversation_counter; + }, get_last_seen_message: function (channel) { if (channel.last_seen_message_id) { @@ -814,7 +820,7 @@ var chat_manager = { var msg = _.findWhere(messages, {id: channel.last_seen_message_id}); if (msg) { var i = _.sortedIndex(messages, msg, 'id') + 1; - while (i < messages.length && messages[i].author_id && messages[i].author_id[0] === session.partner_id) { + while (i < messages.length && messages[i].is_author) { msg = messages[i]; i++; } diff --git a/addons/mail/static/src/js/chat_window.js b/addons/mail/static/src/js/chat_window.js index 95ac9dd8897..3568dd697cb 100644 --- a/addons/mail/static/src/js/chat_window.js +++ b/addons/mail/static/src/js/chat_window.js @@ -28,6 +28,7 @@ return Widget.extend({ this.options = _.defaults(options || {}, { display_stars: true, placeholder: _t("Say something"), + input_less: false, }); this.unread_msgs = unread_msgs || 0; this.is_hidden = false; diff --git a/addons/mail/static/src/js/client_action.js b/addons/mail/static/src/js/client_action.js index e0acd48236b..a2b4a400a1b 100644 --- a/addons/mail/static/src/js/client_action.js +++ b/addons/mail/static/src/js/client_action.js @@ -360,7 +360,7 @@ var ChatAction = Widget.extend(ControlPanelMixin, { // Hide 'detach' button in static channels self.$buttons .find('.o_mail_chat_button_detach') - .toggle(channel.type !== "static" && !channel.mass_mailing); + .toggle(channel.type !== "static"); // Hide 'invite', 'unsubscribe' and 'settings' buttons in static channels and DM self.$buttons .find('.o_mail_chat_button_invite, .o_mail_chat_button_unsubscribe, .o_mail_chat_button_settings') diff --git a/addons/mail/static/src/js/systray.js b/addons/mail/static/src/js/systray.js index 21d22a12eac..3929947acbb 100644 --- a/addons/mail/static/src/js/systray.js +++ b/addons/mail/static/src/js/systray.js @@ -9,6 +9,42 @@ var chat_manager = require('mail.chat_manager'); var QWeb = core.qweb; +/** + * Menu item appended in the systray part of the navbar, redirects to the Inbox in Discuss + * Also displays the needaction counter (= Inbox counter) + */ +var InboxItem = Widget.extend({ + template:'mail.chat.InboxItem', + events: { + "click": "on_click", + }, + start: function () { + this.$needaction_counter = this.$('.o_notification_counter'); + chat_manager.bus.on("update_needaction", this, this.update_counter); + this.update_counter(); + return this._super(); + }, + update_counter: function () { + var counter = chat_manager.get_needaction_counter(); + this.$needaction_counter.text(counter); + this.$el.toggleClass('o_no_notification', !counter); + }, + on_click: function (event) { + event.preventDefault(); + this.discuss_redirect(); + }, + discuss_redirect: _.debounce(function () { + var self = this; + var discuss_ids = chat_manager.get_discuss_ids(); + this.do_action(discuss_ids.action_id, {clear_breadcrumbs: true}).then(function () { + self.trigger_up('hide_app_switcher'); + core.bus.trigger('change_menu_section', discuss_ids.menu_id); + }); + }, 1000, true), +}); + +SystrayMenu.Items.push(InboxItem); + /** * Menu item appended in the systray part of the navbar * @@ -24,13 +60,11 @@ var MessagingMenu = Widget.extend({ "click .o_filter_button": "on_click_filter_button", "click .o_new_message": "on_click_new_message", "click .o_mail_channel_preview": "on_click_channel", - "click .o_redirect_to_discuss": "on_click_redirect_to_discuss", }, start: function () { this.$filter_buttons = this.$('.o_filter_button'); this.$channels_preview = this.$('.o_mail_navbar_dropdown_channels'); this.filter = false; - chat_manager.bus.on("update_needaction", this, this.update_counter); chat_manager.bus.on("update_channel_unread_counter", this, this.update_counter); this.update_counter(); return this._super(); @@ -39,9 +73,10 @@ var MessagingMenu = Widget.extend({ return this.$el.hasClass('open'); }, update_counter: function () { - var counter = chat_manager.get_needaction_counter() + chat_manager.get_chat_unread_counter(); + var counter = chat_manager.get_unread_conversation_counter(); this.$('.o_notification_counter').text(counter); this.$el.toggleClass('o_no_notification', !counter); + this.$el.toggleClass('o_unread_chat', !!chat_manager.get_chat_unread_counter()); if (this.is_open()) { this.render_channels_preview(); } @@ -52,15 +87,13 @@ var MessagingMenu = Widget.extend({ if (self.filter === 'chat') { return channel.is_chat; } else if (self.filter === 'channels') { - return !channel.is_chat && channel.type !== 'static' && !channel.mass_mailing; + return !channel.is_chat && channel.type !== 'static'; } else { - return channel.type !== 'static' && !channel.mass_mailing; + return channel.type !== 'static'; } }); - // Update inbox counter and display spinner while waiting for channels preview - var inbox_counter = chat_manager.get_needaction_counter(); - this.$('.o_inbox_counter').html(inbox_counter ? '(' + inbox_counter + ')' : ''); + // Display spinner while waiting for channels preview this.$channels_preview.html(QWeb.render('mail.chat.Spinner')); chat_manager.get_channels_preview(channels).then(function (channels_preview) { @@ -111,18 +144,6 @@ var MessagingMenu = Widget.extend({ chat_manager.bus.trigger('detach_channel', channel); } }, - on_click_redirect_to_discuss: function (event) { - event.preventDefault(); - this.discuss_redirect(); - }, - discuss_redirect: _.debounce(function () { - var self = this; - var discuss_ids = chat_manager.get_discuss_ids(); - this.do_action(discuss_ids.action_id, {clear_breadcrumbs: true}).then(function () { - self.trigger_up('hide_app_switcher'); - core.bus.trigger('change_menu_section', discuss_ids.menu_id); - }); - }, 1000, true), }); SystrayMenu.Items.push(MessagingMenu); diff --git a/addons/mail/static/src/js/window_manager.js b/addons/mail/static/src/js/window_manager.js index 65488129884..3ee3007a7ea 100644 --- a/addons/mail/static/src/js/window_manager.js +++ b/addons/mail/static/src/js/window_manager.js @@ -39,11 +39,12 @@ function open_chat (session) { var chat_session = _.findWhere(chat_sessions, {id: session.id}); if (!chat_session) { var prefix = !session.is_chat ? "#" : ""; + var options = { input_less: session.mass_mailing }; chat_session = { id: session.id, uuid: session.uuid, name: session.name, - window: new ExtendedChatWindow(web_client, session.id, prefix + session.name, session.is_folded, session.unread_counter), + window: new ExtendedChatWindow(web_client, session.id, prefix + session.name, session.is_folded, session.unread_counter, options), }; chat_session.window.on("close_chat_session", null, function () { close_chat(chat_session); diff --git a/addons/mail/static/src/less/client_action.less b/addons/mail/static/src/less/client_action.less index d7b72cb7453..c4b28874358 100644 --- a/addons/mail/static/src/less/client_action.less +++ b/addons/mail/static/src/less/client_action.less @@ -283,6 +283,9 @@ display: none; } } + &.o_unread_chat > a > i { + color: @odoo-brand-optional; + } &.open .o_mail_navbar_dropdown { .o-flex-display(); @@ -308,19 +311,16 @@ height: 50px; } - .o_filter_button, - .o_new_message, - .o_redirect_to_discuss { - .btn-link; - padding: 5px; - } - .o_mail_navbar_dropdown_top { .o-flex-display(); .o-flex(0, 0, auto); justify-content: space-between; border-bottom: 1px solid lightgray; + .o_filter_button, .o_new_message { + .btn-link; + padding: 5px; + } .o_filter_button { color: @odoo-main-color-muted; &:hover, &.o_selected { @@ -332,15 +332,6 @@ } } } - .o_mail_navbar_dropdown_bottom { - .o-flex(0, 0, auto); - border-top: 1px solid lightgray; - height: 35px; - .o_redirect_to_discuss { - height: 100%; - width: 100%; - } - } .o_mail_navbar_dropdown_channels { .o-flex(0, 1, auto); diff --git a/addons/mail/static/src/xml/chat_window.xml b/addons/mail/static/src/xml/chat_window.xml index eb003cd59cd..7bb854a274c 100644 --- a/addons/mail/static/src/xml/chat_window.xml +++ b/addons/mail/static/src/xml/chat_window.xml @@ -11,7 +11,7 @@