[IMP] mail: rename MessageListViewMessageViewItem in MessageListViewItem

part of task-2918956

Part-of: odoo/odoo#98262
This commit is contained in:
Didier (did)
2022-08-30 23:40:24 +02:00
committed by Alexandre Kühn
parent 3d7688eab8
commit 5c861656b6
11 changed files with 72 additions and 72 deletions
@@ -8,7 +8,7 @@
'o_Message_active': messageView.isActive,
'o-clicked': messageView.messagingAsClickedMessageView,
'o-discussion': messageView.message.isDiscussionOrNotification,
'o-has-message-selection': messageView.messageListViewMessageViewItemOwner and messageView.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.replyingToMessageView,
'o-has-message-selection': messageView.messageListViewItemOwner and messageView.messageListViewItemOwner.messageListViewOwner.threadViewOwner.replyingToMessageView,
'o-highlighted': messageView.message.isHighlighted or messageView.isHighlighted,
'o-isReplyHighlighted bg-white shadow-lg': messageView.isHighlighted,
'o-isDeviceSmall': messaging.device.isSmall,
@@ -19,10 +19,10 @@
'o-starred': messageView.message.isStarred,
'o-currentAuthor': messageView.message.isCurrentUserOrGuestAuthor,
'mt-1': !messageView.isSquashed,
'mt-5': !messageView.isSquashed and messageView.messageListViewMessageViewItemOwner,
'mt-5': !messageView.isSquashed and messageView.messageListViewItemOwner,
'px-3': !messageView.isInChatWindow,
'px-1': messageView.isInChatWindow,
'opacity-50': (messageView.messageListViewMessageViewItemOwner and messageView.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.replyingToMessageView) and !messageView.isSelected,
'opacity-50': (messageView.messageListViewItemOwner and messageView.messageListViewItemOwner.messageListViewOwner.threadViewOwner.replyingToMessageView) and !messageView.isSelected,
}" t-attf-class="{{ messageView.extraClass }} {{ className }}" role="group" t-att-aria-label="messageView.message.messageTypeText" t-on-click="messageView.onClick" t-on-mouseenter="messageView.onMouseenter" t-on-mouseleave="messageView.onMouseleave" t-att-data-id="messageView.message.id" t-att-data-message-id="messageView.message.id"
t-ref="root"
>
@@ -100,7 +100,7 @@
<t t-if="messageView.messageSeenIndicatorView">
<MessageSeenIndicator className="'o_Message_seenIndicator ms-1'" record="messageView.messageSeenIndicatorView"/>
</t>
<t t-if="messageView.messageListViewMessageViewItemOwner and messageView.message.originThread and messageView.message.originThread !== messageView.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.thread">
<t t-if="messageView.messageListViewItemOwner and messageView.message.originThread and messageView.message.originThread !== messageView.messageListViewItemOwner.messageListViewOwner.threadViewOwner.thread">
<small class="o_Message_originThread me-2" t-att-class="{ 'o-message-selected text-600': messageView.isSelected, 'text-500': !messageView.isSelected }">
<t t-if="messageView.message.originThread.model === 'mail.channel'">
(from <a class="o_Message_originThreadLink fs-6" t-att-href="messageView.message.originThread.url" t-on-click="messageView.onClickOriginThread"><t t-if="messageView.message.originThread.displayName">#<t t-esc="messageView.message.originThread.displayName"/></t><t t-else="">channel</t></a>)
@@ -110,7 +110,7 @@
</t>
</small>
</t>
<t t-if="messageView.messageListViewMessageViewItemOwner and messageView.message.originThread and messageView.message.originThread === messageView.messageListViewMessageViewItemOwner.messageListViewOwner.threadViewOwner.thread and messageView.message.notifications.length > 0">
<t t-if="messageView.messageListViewItemOwner and messageView.message.originThread and messageView.message.originThread === messageView.messageListViewItemOwner.messageListViewOwner.threadViewOwner.thread and messageView.message.notifications.length > 0">
<div t-att-class="{ 'ms-2': messageView.isInChatWindowAndIsAlignedRight }">
<t t-if="messageView.message.failureNotifications.length > 0">
<span class="o_Message_notificationIconClickable o-error cursor-pointer text-danger" role="button" tabindex="0" t-on-click="messageView.onClickFailure">
@@ -126,7 +126,7 @@
</t>
</div>
</t>
<div
<div
class="o_Message_bubbleWrap position-relative d-flex align-items-start"
t-att-class="{
'd-flex justify-content-end': messageView.isInChatWindowAndIsAlignedRight,
@@ -143,8 +143,8 @@
'w-100': !(messageView.message.isDiscussionOrNotification or messageView.message.message_type === 'sms') and !messageView.isInChatWindow,
'me-2': messageView.isInChatWindowAndIsAlignedLeft and !messageView.composerViewInEditing,
'ms-2': messageView.isInChatWindowAndIsAlignedRight and !messageView.composerViewInEditing,
'p-3': messageView.message.prettyBody !== '' and !messageView.composerViewInEditing and (messageView.message.isDiscussionOrNotification or messageView.message.message_type === 'sms'),
'p-2': messageView.composerViewInEditing,
'p-3': messageView.message.prettyBody !== '' and !messageView.composerViewInEditing and (messageView.message.isDiscussionOrNotification or messageView.message.message_type === 'sms'),
'p-2': messageView.composerViewInEditing,
'text-muted': messageView.message.is_note and messageView.message.message_type !== 'sms',
}"
>
@@ -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'),
}"
@@ -48,21 +48,21 @@
<div t-if="messageListView.threadViewOwner.order === 'asc' and messageListView.threadViewOwner.threadCache.orderedNonEmptyMessages.length !== 0 and !(messageListView.threadViewOwner.thread and messageListView.threadViewOwner.thread.mailbox)" class="flex-grow-1"/>
<!-- MESSAGES -->
<t t-set="current_day" t-value="0"/>
<t t-foreach="messageListView.messageListViewMessageViewItems" t-as="messageListViewMessageViewItem" t-key="messageListViewMessageViewItem.localId">
<Transition visible="messageListViewMessageViewItem.message === messageListView.threadViewOwner.thread.messageAfterNewMessageSeparator" name="'o-fade'" t-slot-scope="transition">
<t t-foreach="messageListView.messageListViewItems" t-as="messageListViewItem" t-key="messageListViewItem.localId">
<Transition visible="messageListViewItem.message === messageListView.threadViewOwner.thread.messageAfterNewMessageSeparator" name="'o-fade'" t-slot-scope="transition">
<div class="o_MessageList_separator o_MessageList_separatorNewMessages o_MessageList_item d-flex flex-shrink-0 align-items-center me-4 p-0 fw-bolder" t-att-class="{ 'o-disable-animation': messaging.disableAnimation, 'opacity-0': transition.className.includes('o-fade-leave') }" t-attf-class="{{transition.className}}">
<hr class="o_MessageList_separatorLine o_MessageList_separatorLineNewMessages flex-grow-1 w-auto"/><span class="o_MessageList_separatorLabel o_MessageList_separatorLabelNewMessages px-3">New messages</span>
</div>
</Transition>
<t t-if="!messageListViewMessageViewItem.message.isEmpty">
<t t-set="message_day" t-value="messageListViewMessageViewItem.message.dateDay"/>
<t t-if="!messageListViewItem.message.isEmpty">
<t t-set="message_day" t-value="messageListViewItem.message.dateDay"/>
<t t-if="current_day !== message_day">
<div class="o_MessageList_separator o_MessageList_separatorDate o_MessageList_item d-flex flex-shrink-0 align-items-center pt-4 pb-0 px-0 fw-bolder">
<hr class="o_MessageList_separatorLine flex-grow-1 w-auto border-top"/><span class="o_MessageList_separatorLabel o_MessageList_separatorLabelDate px-3"><t t-esc="message_day"/></span><hr class="o_MessageList_separatorLine flex-grow-1 w-auto border-top"/>
<t t-set="current_day" t-value="message_day"/>
</div>
</t>
<Message record="messageListViewMessageViewItem.messageView"/>
<Message record="messageListViewItem.messageView"/>
</t>
</t>
<!-- LOADING (if order desc)-->
+1 -1
View File
@@ -824,7 +824,7 @@ registerModel({
inverse: 'message',
isCausal: true,
}),
messageListViewMessageViewItems: many('MessageListViewMessageViewItem', {
messageListViewItems: many('MessageListViewItem', {
inverse: 'message',
isCausal: true,
}),
@@ -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 {};
@@ -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
@@ -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,
@@ -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,
@@ -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();
+30 -30
View File
@@ -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',
}),
+7 -7
View File
@@ -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
@@ -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();