From e2dc7b27eef0e48c25768fd3c0f81bbd89a2b1bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Debongnie?= Date: Wed, 21 Oct 2015 10:00:05 +0200 Subject: [PATCH] [IMP] mail: add link to origin channel from message --- addons/mail/static/src/js/chat_manager.js | 15 ++++++++++----- addons/mail/static/src/js/client_action.js | 4 ++++ addons/mail/static/src/js/thread.js | 7 +++++++ addons/mail/static/src/less/thread.less | 3 +++ addons/mail/static/src/xml/thread.xml | 3 +++ 5 files changed, 27 insertions(+), 5 deletions(-) diff --git a/addons/mail/static/src/js/chat_manager.js b/addons/mail/static/src/js/chat_manager.js index 51598896654..783ee6b0c14 100644 --- a/addons/mail/static/src/js/chat_manager.js +++ b/addons/mail/static/src/js/chat_manager.js @@ -32,7 +32,7 @@ function add_message (data, options) { var msg = _.findWhere(messages, { id: data.id }); if (!msg) { - msg = make_message(data, options.channel_id); + msg = make_message(data); // Keep the array ordered by date when inserting the new message messages.splice(_.sortedIndex(messages, msg, 'date'), 0, msg); if (options.channel_id) { @@ -59,13 +59,11 @@ function add_message (data, options) { if (!options.silent) { chat_manager.bus.trigger('new_message', msg); } - } else if (msg && options.channel_id !== undefined) { - add_channel_to_message(msg, options.channel_id); } return msg; } -function make_message (data, channel_id) { +function make_message (data) { var msg = { id: data.id, author_id: data.author_id, @@ -78,7 +76,7 @@ function make_message (data, channel_id) { email_from: data.email_from, record_name: data.record_name, tracking_value_ids: data.tracking_value_ids, - channel_ids: (channel_id !== undefined ? [channel_id] : []), + channel_ids: data.channel_ids, model: data.model, res_id: data.res_id, }; @@ -116,6 +114,13 @@ function make_message (data, channel_id) { if (_.contains(data.starred_partner_ids, session.partner_id)) { msg.is_starred = true; } + var real_channels = _.without(msg.channel_ids, 'channel_inbox', 'channel_starred'); + var origin = real_channels.length ? real_channels[0] : undefined; + var channel; + if (origin && (channel = _.findWhere(channels, {id: origin}))) { + msg.origin_id = origin; + msg.origin_name = channel.name; + } return msg; } diff --git a/addons/mail/static/src/js/client_action.js b/addons/mail/static/src/js/client_action.js index f65bcd7f43b..a6a441d0f67 100644 --- a/addons/mail/static/src/js/client_action.js +++ b/addons/mail/static/src/js/client_action.js @@ -167,6 +167,9 @@ var ChatAction = Widget.extend(ControlPanelMixin, { this.$buttons.on('click', '.o_mail_chat_button_detach', this.on_click_button_detach); this.thread.on('redirect', this, this.on_redirect); + this.thread.on('redirect_to_channel', this, function (channel_id) { + this.set_channel(chat_manager.get_channel(channel_id)); + }); this.thread.on('load_more_messages', this, this.load_more_messages); this.thread.on('mark_as_read', this, function (message_id) { chat_manager.mark_as_read(message_id); @@ -340,6 +343,7 @@ var ChatAction = Widget.extend(ControlPanelMixin, { return { display_load_more: !chat_manager.all_history_loaded(this.channel, this.domain), display_needactions: this.channel.display_needactions, + channel_id: this.channel.id, }; }, diff --git a/addons/mail/static/src/js/thread.js b/addons/mail/static/src/js/thread.js index 79f3d8c0607..32444085936 100644 --- a/addons/mail/static/src/js/thread.js +++ b/addons/mail/static/src/js/thread.js @@ -18,6 +18,7 @@ var Thread = Widget.extend({ events: { "click .o_mail_redirect": "on_click_redirect", + "click .o_channel_redirect": "on_channel_redirect", "click .o_thread_show_more": "on_click_show_more", "click .o_thread_message_needaction": function (event) { event.stopPropagation(); @@ -80,6 +81,12 @@ var Thread = Widget.extend({ this.trigger('redirect', res_model, res_id); }, + on_channel_redirect: function (event) { + event.preventDefault(); + var channel_id = $(event.target).data('channel-id'); + this.trigger('redirect_to_channel', channel_id); + }, + on_click_show_more: function () { this.trigger('load_more_messages'); }, diff --git a/addons/mail/static/src/less/thread.less b/addons/mail/static/src/less/thread.less index 869a4ba85aa..70eedfe8aa0 100644 --- a/addons/mail/static/src/less/thread.less +++ b/addons/mail/static/src/less/thread.less @@ -73,6 +73,9 @@ .o_mail_mailto, .o_mail_mailto:hover { .text-muted(); } + .o_channel_redirect { + color: gray; + } } .o_thread_message_star, .o_thread_message_needaction { diff --git a/addons/mail/static/src/xml/thread.xml b/addons/mail/static/src/xml/thread.xml index ad287839c3e..3f840881d86 100644 --- a/addons/mail/static/src/xml/thread.xml +++ b/addons/mail/static/src/xml/thread.xml @@ -83,6 +83,9 @@ on + + (in channel ) +