@@ -153,9 +153,9 @@
class="o_Message_background position-absolute start-0 top-0 w-100 h-100"
t-att-class="{
'rounded-end-3': !messageView.isInChatWindowAndIsAlignedRight and (messageView.message.isDiscussionOrNotification or messageView.message.message_type === 'sms'),
- 'rounded-start-3': messageView.isInChatWindowAndIsAlignedRight and (messageView.message.isDiscussionOrNotification or messageView.message.message_type === 'sms'),
+ 'rounded-start-3': messageView.isInChatWindowAndIsAlignedRight and (messageView.message.isDiscussionOrNotification or messageView.message.message_type === 'sms'),
'rounded-bottom-3 border': messageView.message.isDiscussionOrNotification or messageView.message.message_type === 'sms',
- 'o-isAuthorNotCurrentUserOrGuest border-info bg-info-light': !messageView.message.isCurrentUserOrGuestAuthor and !messageView.message.isHighlighted and (messageView.message.isDiscussionOrNotification or messageView.message.message_type === 'sms'),
+ 'o-isAuthorNotCurrentUserOrGuest border-info bg-info-light': !messageView.message.isCurrentUserOrGuestAuthor and !messageView.message.isHighlighted and (messageView.message.isDiscussionOrNotification or messageView.message.message_type === 'sms'),
'border-success bg-success-light opacity-25': messageView.message.isCurrentUserOrGuestAuthor and !messageView.message.isHighlighted and (messageView.message.isDiscussionOrNotification or messageView.message.message_type === 'sms'),
'border-warning bg-warning-light opacity-50': messageView.message.isHighlighted and (messageView.message.isDiscussionOrNotification or messageView.message.message_type === 'sms'),
}"
diff --git a/addons/mail/static/src/components/message_list/message_list.xml b/addons/mail/static/src/components/message_list/message_list.xml
index 912da38cfdb..c345e2e6cda 100644
--- a/addons/mail/static/src/components/message_list/message_list.xml
+++ b/addons/mail/static/src/components/message_list/message_list.xml
@@ -48,21 +48,21 @@
-
-
+
+
New messages
-
-
+
+
-
+
diff --git a/addons/mail/static/src/models/message.js b/addons/mail/static/src/models/message.js
index f1f9eb91373..5da2072a71e 100644
--- a/addons/mail/static/src/models/message.js
+++ b/addons/mail/static/src/models/message.js
@@ -824,7 +824,7 @@ registerModel({
inverse: 'message',
isCausal: true,
}),
- messageListViewMessageViewItems: many('MessageListViewMessageViewItem', {
+ messageListViewItems: many('MessageListViewItem', {
inverse: 'message',
isCausal: true,
}),
diff --git a/addons/mail/static/src/models/message_action_list.js b/addons/mail/static/src/models/message_action_list.js
index ce603cc0aa7..085e00e0cae 100644
--- a/addons/mail/static/src/models/message_action_list.js
+++ b/addons/mail/static/src/models/message_action_list.js
@@ -34,8 +34,8 @@ registerModel({
_computeActionMarkAsRead() {
if (
this.messaging && this.messaging.inbox &&
- this.messageView && this.messageView.messageListViewMessageViewItemOwner && this.messageView.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.thread &&
- this.messageView.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.thread === this.messaging.inbox.thread
+ this.messageView && this.messageView.messageListViewItemOwner && this.messageView.messageListViewItemOwner.messageListViewOwner.threadViewOwner.thread &&
+ this.messageView.messageListViewItemOwner.messageListViewOwner.threadViewOwner.thread === this.messaging.inbox.thread
) {
return {};
}
@@ -59,9 +59,9 @@ registerModel({
if (
this.messaging && this.messaging.inbox &&
this.message && !this.message.isTemporary && !this.message.isTransient &&
- this.messageView && this.messageView.messageListViewMessageViewItemOwner && this.messageView.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.thread && (
- this.messageView.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.thread === this.messaging.inbox.thread ||
- this.messageView.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.thread.channel
+ this.messageView && this.messageView.messageListViewItemOwner && this.messageView.messageListViewItemOwner.messageListViewOwner.threadViewOwner.thread && (
+ this.messageView.messageListViewItemOwner.messageListViewOwner.threadViewOwner.thread === this.messaging.inbox.thread ||
+ this.messageView.messageListViewItemOwner.messageListViewOwner.threadViewOwner.thread.channel
)
) {
return {};
diff --git a/addons/mail/static/src/models/message_in_reply_to_view.js b/addons/mail/static/src/models/message_in_reply_to_view.js
index dae219b1916..21911f177a9 100644
--- a/addons/mail/static/src/models/message_in_reply_to_view.js
+++ b/addons/mail/static/src/models/message_in_reply_to_view.js
@@ -13,19 +13,19 @@ registerModel({
*/
onClickReply(ev) {
markEventHandled(ev, 'MessageInReplyToView.ClickMessageInReplyTo');
- const messageListViewMessageViewItem = this.messageView && this.messageView.messageListViewMessageViewItemOwner;
+ const messageListViewItem = this.messageView && this.messageView.messageListViewItemOwner;
const parentMessage = this.messageView.message.parentMessage;
- if (!messageListViewMessageViewItem || !parentMessage) {
+ if (!messageListViewItem || !parentMessage) {
return;
}
- const parentMessageListViewMessageViewItem = this.messaging.models['MessageListViewMessageViewItem'].findFromIdentifyingData({
+ const parentMessageListViewItem = this.messaging.models['MessageListViewItem'].findFromIdentifyingData({
message: parentMessage,
- messageListViewOwner: messageListViewMessageViewItem.messageListViewOwner,
+ messageListViewOwner: messageListViewItem.messageListViewOwner,
});
- if (!parentMessageListViewMessageViewItem) {
+ if (!parentMessageListViewItem) {
return;
}
- parentMessageListViewMessageViewItem.messageView.update({ doHighlight: true });
+ parentMessageListViewItem.messageView.update({ doHighlight: true });
},
/**
* @private
diff --git a/addons/mail/static/src/models/message_list_view.js b/addons/mail/static/src/models/message_list_view.js
index e668f8f838c..08087e35a36 100644
--- a/addons/mail/static/src/models/message_list_view.js
+++ b/addons/mail/static/src/models/message_list_view.js
@@ -113,7 +113,7 @@ registerModel({
/**
* States the message views used to display this thread view owner's messages.
*/
- messageListViewMessageViewItems: many('MessageListViewMessageViewItem', {
+ messageListViewItems: many('MessageListViewItem', {
compute: '_computeMessageListViewMessageViewItems',
inverse: 'messageListViewOwner',
isCausal: true,
diff --git a/addons/mail/static/src/models/message_list_view_message_view_item.js b/addons/mail/static/src/models/message_list_view_item.js
similarity index 76%
rename from addons/mail/static/src/models/message_list_view_message_view_item.js
rename to addons/mail/static/src/models/message_list_view_item.js
index bc1a7b1288d..d7c1e815bf4 100644
--- a/addons/mail/static/src/models/message_list_view_message_view_item.js
+++ b/addons/mail/static/src/models/message_list_view_item.js
@@ -8,22 +8,22 @@ import { attr, one } from '@mail/model/model_field';
* message is used as iterating field.
*/
registerModel({
- name: 'MessageListViewMessageViewItem',
+ name: 'MessageListViewItem',
fields: {
isSquashed: attr({
required: true,
}),
message: one('Message', {
identifying: true,
- inverse: 'messageListViewMessageViewItems',
+ inverse: 'messageListViewItems',
}),
messageListViewOwner: one('MessageListView', {
identifying: true,
- inverse: 'messageListViewMessageViewItems',
+ inverse: 'messageListViewItems',
}),
messageView: one('MessageView', {
default: {},
- inverse: 'messageListViewMessageViewItemOwner',
+ inverse: 'messageListViewItemOwner',
isCausal: true,
readonly: true,
required: true,
diff --git a/addons/mail/static/src/models/message_seen_indicator_view.js b/addons/mail/static/src/models/message_seen_indicator_view.js
index 87175afa5f5..38d487ba1c8 100644
--- a/addons/mail/static/src/models/message_seen_indicator_view.js
+++ b/addons/mail/static/src/models/message_seen_indicator_view.js
@@ -12,10 +12,10 @@ registerModel({
* @returns {FieldCommand}
*/
_computeMessageSeenIndicator() {
- if (this.messageViewOwner.messageListViewMessageViewItemOwner && this.messageViewOwner.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.thread) {
+ if (this.messageViewOwner.messageListViewItemOwner && this.messageViewOwner.messageListViewItemOwner.messageListViewOwner.threadViewOwner.thread) {
return {
message: this.messageViewOwner.message,
- thread: this.messageViewOwner.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.thread,
+ thread: this.messageViewOwner.messageListViewItemOwner.messageListViewOwner.threadViewOwner.thread,
};
}
return clear();
diff --git a/addons/mail/static/src/models/message_view.js b/addons/mail/static/src/models/message_view.js
index f684c68c42e..5bbffbae9d6 100644
--- a/addons/mail/static/src/models/message_view.js
+++ b/addons/mail/static/src/models/message_view.js
@@ -139,8 +139,8 @@ registerModel({
*/
replyTo() {
// When already replying to this messageView, discard the reply.
- if (this.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.replyingToMessageView === this) {
- this.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.composerView.discard();
+ if (this.messageListViewItemOwner.messageListViewOwner.threadViewOwner.replyingToMessageView === this) {
+ this.messageListViewItemOwner.messageListViewOwner.threadViewOwner.composerView.discard();
return;
}
this.message.originThread.update({
@@ -148,7 +148,7 @@ registerModel({
isLog: !this.message.is_discussion && !this.message.is_notification,
},
});
- this.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.update({
+ this.messageListViewItemOwner.messageListViewOwner.threadViewOwner.update({
replyingToMessageView: this,
composerView: {
doFocus: true,
@@ -180,8 +180,8 @@ registerModel({
* Stops editing this message.
*/
stopEditing() {
- if (this.messageListViewMessageViewItemOwner && this.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.composerView && !this.messaging.device.isMobileDevice) {
- this.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.composerView.update({ doFocus: true });
+ if (this.messageListViewItemOwner && this.messageListViewItemOwner.messageListViewOwner.threadViewOwner.composerView && !this.messaging.device.isMobileDevice) {
+ this.messageListViewItemOwner.messageListViewOwner.threadViewOwner.composerView.update({ doFocus: true });
}
this.update({
composerForEditing: clear(),
@@ -228,7 +228,7 @@ registerModel({
* @returns {string|FieldCommand}
*/
_computeExtraClass() {
- if (this.messageListViewMessageViewItemOwner) {
+ if (this.messageListViewItemOwner) {
return 'o_MessageList_item o_MessageList_message';
}
return clear();
@@ -262,10 +262,10 @@ registerModel({
return false;
}
if (
- this.messageListViewMessageViewItemOwner &&
- this.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.thread &&
- this.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.thread.channel &&
- this.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.thread.channel.correspondent === this.message.author
+ this.messageListViewItemOwner &&
+ this.messageListViewItemOwner.messageListViewOwner.threadViewOwner.thread &&
+ this.messageListViewItemOwner.messageListViewOwner.threadViewOwner.thread.channel &&
+ this.messageListViewItemOwner.messageListViewOwner.threadViewOwner.thread.channel.correspondent === this.message.author
) {
return false;
}
@@ -289,10 +289,10 @@ registerModel({
*/
_computeIsInDiscuss() {
return Boolean(
- this.messageListViewMessageViewItemOwner &&
+ this.messageListViewItemOwner &&
(
- this.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.threadViewer.discuss ||
- this.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.threadViewer.discussPublicView
+ this.messageListViewItemOwner.messageListViewOwner.threadViewOwner.threadViewer.discuss ||
+ this.messageListViewItemOwner.messageListViewOwner.threadViewOwner.threadViewer.discussPublicView
)
);
},
@@ -302,8 +302,8 @@ registerModel({
*/
_computeIsInChatWindow() {
return Boolean(
- this.messageListViewMessageViewItemOwner &&
- this.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.threadViewer.chatWindow
+ this.messageListViewItemOwner &&
+ this.messageListViewItemOwner.messageListViewOwner.threadViewOwner.threadViewer.chatWindow
);
},
/**
@@ -312,8 +312,8 @@ registerModel({
*/
_computeIsInChatter() {
return Boolean(
- this.messageListViewMessageViewItemOwner &&
- this.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.threadViewer.chatter
+ this.messageListViewItemOwner &&
+ this.messageListViewItemOwner.messageListViewOwner.threadViewOwner.threadViewer.chatter
);
},
/**
@@ -352,9 +352,9 @@ registerModel({
this.message.isCurrentUserOrGuestAuthor
) ||
(
- this.messageListViewMessageViewItemOwner &&
- this.messageListViewMessageViewItemOwner.messageListViewOwner.thread.channel &&
- this.messageListViewMessageViewItemOwner.messageListViewOwner.thread.channel.channel_type === 'chat'
+ this.messageListViewItemOwner &&
+ this.messageListViewItemOwner.messageListViewOwner.thread.channel &&
+ this.messageListViewItemOwner.messageListViewOwner.thread.channel.channel_type === 'chat'
)
)
)
@@ -366,8 +366,8 @@ registerModel({
*/
_computeIsSelected() {
return Boolean(
- this.messageListViewMessageViewItemOwner &&
- this.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.replyingToMessageView === this
+ this.messageListViewItemOwner &&
+ this.messageListViewItemOwner.messageListViewOwner.threadViewOwner.replyingToMessageView === this
);
},
/**
@@ -375,8 +375,8 @@ registerModel({
* @returns {boolean|FieldCommand}
*/
_computeIsSquashed() {
- if (this.messageListViewMessageViewItemOwner) {
- return this.messageListViewMessageViewItemOwner.isSquashed;
+ if (this.messageListViewItemOwner) {
+ return this.messageListViewItemOwner.isSquashed;
}
return clear();
},
@@ -385,8 +385,8 @@ registerModel({
* @returns {FieldCommand}
*/
_computeMessage() {
- if (this.messageListViewMessageViewItemOwner) {
- return this.messageListViewMessageViewItemOwner.message;
+ if (this.messageListViewItemOwner) {
+ return this.messageListViewItemOwner.message;
}
if (this.deleteMessageConfirmViewOwner) {
return this.deleteMessageConfirmViewOwner.message;
@@ -419,9 +419,9 @@ registerModel({
_computeMessageSeenIndicatorView() {
if (
this.message.isCurrentUserOrGuestAuthor &&
- this.messageListViewMessageViewItemOwner &&
- this.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.thread &&
- this.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.thread.hasSeenIndicators
+ this.messageListViewItemOwner &&
+ this.messageListViewItemOwner.messageListViewOwner.threadViewOwner.thread &&
+ this.messageListViewItemOwner.messageListViewOwner.threadViewOwner.thread.hasSeenIndicators
) {
return {};
}
@@ -630,7 +630,7 @@ registerModel({
inverse: 'messageView',
isCausal: true,
}),
- messageListViewMessageViewItemOwner: one('MessageListViewMessageViewItem', {
+ messageListViewItemOwner: one('MessageListViewItem', {
identifying: true,
inverse: 'messageView',
}),
diff --git a/addons/mail/static/src/models/thread_view.js b/addons/mail/static/src/models/thread_view.js
index 86b1f67ee0b..224691881b1 100644
--- a/addons/mail/static/src/models/thread_view.js
+++ b/addons/mail/static/src/models/thread_view.js
@@ -75,11 +75,11 @@ registerModel({
* Starts editing the last message of this thread from the current user.
*/
startEditingLastMessageFromCurrentUser() {
- const messageListViewMessageViewItems = this.messageListView.messageListViewMessageViewItems;
- messageListViewMessageViewItems.reverse();
- const messageListViewMessageViewItem = messageListViewMessageViewItems.find(messageListViewMessageViewItem => messageListViewMessageViewItem.message.isCurrentUserOrGuestAuthor && messageListViewMessageViewItem.message.canBeDeleted);
- if (messageListViewMessageViewItem) {
- messageListViewMessageViewItem.messageView.startEditing();
+ const messageListViewItems = this.messageListView.messageListViewItems;
+ messageListViewItems.reverse();
+ const messageListViewItem = messageListViewItems.find(messageListViewItem => messageListViewItem.message.isCurrentUserOrGuestAuthor && messageListViewItem.message.canBeDeleted);
+ if (messageListViewItem) {
+ messageListViewItem.messageView.startEditing();
}
},
_computeCallSettingsMenu() {
@@ -154,8 +154,8 @@ registerModel({
if (!this.messageListView) {
return clear();
}
- const { length, [length - 1]: messageListViewMessageViewItem } = this.messageListView.messageListViewMessageViewItems;
- return messageListViewMessageViewItem ? messageListViewMessageViewItem.messageView : clear();
+ const { length, [length - 1]: messageListViewItem } = this.messageListView.messageListViewItems;
+ return messageListViewItem ? messageListViewItem.messageView : clear();
},
/**
* @private
diff --git a/addons/mail/static/tests/qunit_suite_tests/components/thread_view_tests.js b/addons/mail/static/tests/qunit_suite_tests/components/thread_view_tests.js
index c6a57fdded5..0554fd71cf2 100644
--- a/addons/mail/static/tests/qunit_suite_tests/components/thread_view_tests.js
+++ b/addons/mail/static/tests/qunit_suite_tests/components/thread_view_tests.js
@@ -1300,7 +1300,7 @@ QUnit.test('first unseen message should be directly preceded by the new message
// send a command that leads to receiving a transient message
await insertText('.o_ComposerTextInput_textarea', "/who");
await click('.o_Composer_buttonSend');
- const transientMessage = messaging.discuss.threadViewer.threadView.messageListView.messageListViewMessageViewItems[0].message;
+ const transientMessage = messaging.discuss.threadViewer.threadView.messageListView.messageListViewItems[0].message;
// composer is focused by default, we remove that focus
document.querySelector('.o_ComposerTextInput_textarea').blur();