[FIX] mail: systray items must wait for chat_manager
Those items might have been rendered and inserted into the DOM before the chat manager initialization was completed. As those items rely on chat manager's data, they should wait for it before executing their action (inbox redirection and channels preview display).
This commit is contained in:
@@ -21,7 +21,7 @@ var InboxItem = Widget.extend({
|
||||
start: function () {
|
||||
this.$needaction_counter = this.$('.o_notification_counter');
|
||||
chat_manager.bus.on("update_needaction", this, this.update_counter);
|
||||
this.update_counter();
|
||||
chat_manager.is_ready.then(this.update_counter.bind(this));
|
||||
return this._super();
|
||||
},
|
||||
update_counter: function () {
|
||||
@@ -31,7 +31,7 @@ var InboxItem = Widget.extend({
|
||||
},
|
||||
on_click: function (event) {
|
||||
event.preventDefault();
|
||||
this.discuss_redirect();
|
||||
chat_manager.is_ready.then(this.discuss_redirect.bind(this));
|
||||
},
|
||||
discuss_redirect: _.debounce(function () {
|
||||
var self = this;
|
||||
@@ -66,7 +66,7 @@ var MessagingMenu = Widget.extend({
|
||||
this.$channels_preview = this.$('.o_mail_navbar_dropdown_channels');
|
||||
this.filter = false;
|
||||
chat_manager.bus.on("update_channel_unread_counter", this, this.update_counter);
|
||||
this.update_counter();
|
||||
chat_manager.is_ready.then(this.update_counter.bind(this));
|
||||
return this._super();
|
||||
},
|
||||
is_open: function () {
|
||||
@@ -78,52 +78,56 @@ var MessagingMenu = Widget.extend({
|
||||
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();
|
||||
this.update_channels_preview();
|
||||
}
|
||||
},
|
||||
render_channels_preview: function () {
|
||||
update_channels_preview: function () {
|
||||
var self = this;
|
||||
var channels = _.filter(chat_manager.get_channels(), function (channel) {
|
||||
if (self.filter === 'chat') {
|
||||
return channel.is_chat;
|
||||
} else if (self.filter === 'channels') {
|
||||
return !channel.is_chat && channel.type !== 'static';
|
||||
} else {
|
||||
return channel.type !== 'static';
|
||||
}
|
||||
});
|
||||
|
||||
// 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) {
|
||||
// Sort channels: 1. channels with unread messages, 2. chat, 3. by date of last msg
|
||||
channels_preview.sort(function (c1, c2) {
|
||||
return Math.min(1, c2.unread_counter) - Math.min(1, c1.unread_counter) ||
|
||||
c2.is_chat - c1.is_chat ||
|
||||
c2.last_message.date.diff(c1.last_message.date);
|
||||
});
|
||||
|
||||
// Generate last message preview (inline message body and compute date to display)
|
||||
_.each(channels_preview, function (channel) {
|
||||
channel.last_message_preview =
|
||||
channel.last_message.displayed_author + ': ' +
|
||||
chat_manager.get_message_body_preview(channel.last_message.body);
|
||||
if (channel.last_message.date.isSame(new Date(), 'd')) { // today
|
||||
channel.last_message_date = channel.last_message.date.format('LT');
|
||||
chat_manager.is_ready.then(function () {
|
||||
var channels = _.filter(chat_manager.get_channels(), function (channel) {
|
||||
if (self.filter === 'chat') {
|
||||
return channel.is_chat;
|
||||
} else if (self.filter === 'channels') {
|
||||
return !channel.is_chat && channel.type !== 'static';
|
||||
} else {
|
||||
channel.last_message_date = channel.last_message.date.format('lll');
|
||||
return channel.type !== 'static';
|
||||
}
|
||||
});
|
||||
|
||||
self.$channels_preview.html(QWeb.render('mail.chat.ChannelsPreview', {
|
||||
channels: channels_preview,
|
||||
}));
|
||||
chat_manager.get_channels_preview(channels).then(self._render_channels_preview.bind(self));
|
||||
});
|
||||
},
|
||||
_render_channels_preview: function (channels_preview) {
|
||||
// Sort channels: 1. channels with unread messages, 2. chat, 3. by date of last msg
|
||||
channels_preview.sort(function (c1, c2) {
|
||||
return Math.min(1, c2.unread_counter) - Math.min(1, c1.unread_counter) ||
|
||||
c2.is_chat - c1.is_chat ||
|
||||
c2.last_message.date.diff(c1.last_message.date);
|
||||
});
|
||||
|
||||
// Generate last message preview (inline message body and compute date to display)
|
||||
_.each(channels_preview, function (channel) {
|
||||
channel.last_message_preview =
|
||||
channel.last_message.displayed_author + ': ' +
|
||||
chat_manager.get_message_body_preview(channel.last_message.body);
|
||||
if (channel.last_message.date.isSame(new Date(), 'd')) { // today
|
||||
channel.last_message_date = channel.last_message.date.format('LT');
|
||||
} else {
|
||||
channel.last_message_date = channel.last_message.date.format('lll');
|
||||
}
|
||||
});
|
||||
|
||||
this.$channels_preview.html(QWeb.render('mail.chat.ChannelsPreview', {
|
||||
channels: channels_preview,
|
||||
}));
|
||||
},
|
||||
on_click: function () {
|
||||
if (!this.is_open()) {
|
||||
this.render_channels_preview(); // we are opening the dropdown so render its content
|
||||
this.update_channels_preview(); // we are opening the dropdown so update its content
|
||||
}
|
||||
},
|
||||
on_click_filter_button: function (event) {
|
||||
@@ -132,7 +136,7 @@ var MessagingMenu = Widget.extend({
|
||||
var $target = $(event.currentTarget);
|
||||
$target.addClass('o_selected');
|
||||
this.filter = $target.data('filter');
|
||||
this.render_channels_preview();
|
||||
this.update_channels_preview();
|
||||
},
|
||||
on_click_new_message: function () {
|
||||
chat_manager.bus.trigger('open_chat');
|
||||
|
||||
Reference in New Issue
Block a user