[IMP] mail: rename PartnerImStatusIcon to PersonaImStatusIcon

Now that it potentially contains guests, the previous name is no longer correct.

Part of task-2883466

closes odoo/odoo#93731

Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
This commit is contained in:
Sébastien Theys
2022-06-17 14:14:33 +02:00
parent 0e8b1721b5
commit 4d41afd0ef
27 changed files with 132 additions and 132 deletions
@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates xml:space="preserve">
<t t-inherit="mail.PartnerImStatusIcon" t-inherit-mode="extension">
<t t-inherit="mail.PersonaImStatusIcon" t-inherit-mode="extension">
<xpath expr="//*[@name='root']" position="inside">
<t t-if="partnerImStatusIconView.persona.im_status === 'leave_online'">
<i class="o_PartnerImStatusIcon_icon o-online fa fa-plane fa-stack-1x" title="Online" role="img" aria-label="User is online"/>
<t t-if="personaImStatusIconView.persona.im_status === 'leave_online'">
<i class="o_PersonaImStatusIcon_icon o-online fa fa-plane fa-stack-1x" title="Online" role="img" aria-label="User is online"/>
</t>
<t t-if="partnerImStatusIconView.persona.im_status === 'leave_away'">
<i class="o_PartnerImStatusIcon_icon o-away fa fa-plane fa-stack-1x text-warning" title="Away" role="img" aria-label="User is away"/>
<t t-if="personaImStatusIconView.persona.im_status === 'leave_away'">
<i class="o_PersonaImStatusIcon_icon o-away fa fa-plane fa-stack-1x text-warning" title="Away" role="img" aria-label="User is away"/>
</t>
<t t-if="partnerImStatusIconView.persona.im_status === 'leave_offline'">
<i class="o_PartnerImStatusIcon_icon o-offline fa fa-plane fa-stack-1x text-700" title="Out of office" role="img" aria-label="User is out of office"/>
<t t-if="personaImStatusIconView.persona.im_status === 'leave_offline'">
<i class="o_PersonaImStatusIcon_icon o-offline fa fa-plane fa-stack-1x text-700" title="Out of office" role="img" aria-label="User is out of office"/>
</t>
</xpath>
</t>
@@ -4,7 +4,7 @@ import { start, startServer } from '@mail/../tests/helpers/test_utils';
QUnit.module('hr_holidays', {}, function () {
QUnit.module('components', {}, function () {
QUnit.module('partner_im_status_icon_tests.js');
QUnit.module('persona_im_status_icon_tests.js');
QUnit.test('on leave & online', async function (assert) {
assert.expect(2);
@@ -29,14 +29,14 @@ QUnit.test('on leave & online', async function (assert) {
await openDiscuss();
await afterNextRender(() => advanceTime(messaging.fetchImStatusTimerDuration));
assert.hasClass(
document.querySelector('.o_PartnerImStatusIcon_icon'),
document.querySelector('.o_PersonaImStatusIcon_icon'),
'o-online',
"partner IM status icon should have online status rendering"
"persona IM status icon should have online status rendering"
);
assert.hasClass(
document.querySelector('.o_PartnerImStatusIcon_icon'),
document.querySelector('.o_PersonaImStatusIcon_icon'),
'fa-plane',
"partner IM status icon should have leave status rendering"
"persona IM status icon should have leave status rendering"
);
});
@@ -63,14 +63,14 @@ QUnit.test('on leave & away', async function (assert) {
await openDiscuss();
await afterNextRender(() => advanceTime(messaging.fetchImStatusTimerDuration));
assert.hasClass(
document.querySelector('.o_PartnerImStatusIcon_icon'),
document.querySelector('.o_PersonaImStatusIcon_icon'),
'o-away',
"partner IM status icon should have away status rendering"
"persona IM status icon should have away status rendering"
);
assert.hasClass(
document.querySelector('.o_PartnerImStatusIcon_icon'),
document.querySelector('.o_PersonaImStatusIcon_icon'),
'fa-plane',
"partner IM status icon should have leave status rendering"
"persona IM status icon should have leave status rendering"
);
});
@@ -97,14 +97,14 @@ QUnit.test('on leave & offline', async function (assert) {
await openDiscuss();
await afterNextRender(() => advanceTime(messaging.fetchImStatusTimerDuration));
assert.hasClass(
document.querySelector('.o_PartnerImStatusIcon_icon'),
document.querySelector('.o_PersonaImStatusIcon_icon'),
'o-offline',
"partner IM status icon should have offline status rendering"
"persona IM status icon should have offline status rendering"
);
assert.hasClass(
document.querySelector('.o_PartnerImStatusIcon_icon'),
document.querySelector('.o_PersonaImStatusIcon_icon'),
'fa-plane',
"partner IM status icon should have leave status rendering"
"persona IM status icon should have leave status rendering"
);
});
@@ -5,14 +5,14 @@
<div class="o_ChannelInvitationFormSelectablePartner d-flex align-items-center px-3 py-1 btn-light" t-on-click="() => channelInvitationFormSelectablePartnerView.channelInvitationFormOwner.onClickSelectablePartner(channelInvitationFormSelectablePartnerView.partner)" t-att-data-partner-id="channelInvitationFormSelectablePartnerView.partner.id" t-attf-class="{{ className }}" t-ref="root">
<div class="o_ChannelInvitationFormSelectablePartner_avatarContainer position-relative flex-shrink-0">
<img class="o_ChannelInvitationFormSelectablePartner_avatar w-100 h-100 rounded-circle" t-att-src="channelInvitationFormSelectablePartnerView.partner.avatarUrl" alt="Avatar"/>
<t t-if="channelInvitationFormSelectablePartnerView.partnerImStatusIconView">
<PartnerImStatusIcon
<t t-if="channelInvitationFormSelectablePartnerView.personaImStatusIconView">
<PersonaImStatusIcon
className="'o_ChannelInvitationFormSelectablePartner_imStatusIcon position-absolute bottom-0 end-0 d-flex align-items-center justify-content-center text-white'"
classNameObj="{
'o_ChannelInvitationFormSelectablePartner_imStatusIcon-mobile': messaging.device.isSmall,
'small' : !messaging.device.isSmall,
}"
record="channelInvitationFormSelectablePartnerView.partnerImStatusIconView"
record="channelInvitationFormSelectablePartnerView.personaImStatusIconView"
/>
</t>
</div>
@@ -6,14 +6,14 @@
<div class="o_ChannelMember_avatarContainer position-relative flex-shrink-0 o_cursor_pointer" t-on-click="channelMemberView.onClickMemberAvatar">
<img class="o_ChannelMember_avatar rounded-circle w-100 h-100" t-attf-src="/mail/channel/{{ channelMemberView.channelMember.channel.id }}/partner/{{ channelMemberView.channelMember.partner.id }}/avatar_128" alt="Avatar"/>
<t t-if="channelMemberView.partnerImStatusIconView">
<PartnerImStatusIcon
className="'o_ChannelMember_partnerImStatusIcon position-absolute bottom-0 end-0 d-flex align-items-center justify-content-center text-light'"
<t t-if="channelMemberView.personaImStatusIconView">
<PersonaImStatusIcon
className="'o_ChannelMember_personaImStatusIcon position-absolute bottom-0 end-0 d-flex align-items-center justify-content-center text-light'"
classNameObj="{
'o-isDeviceSmall': messaging.device.isSmall,
'small': !messaging.device.isSmall,
}"
record="channelMemberView.partnerImStatusIconView"
record="channelMemberView.personaImStatusIconView"
/>
</t>
</div>
@@ -16,11 +16,11 @@
<em class="o_ComposerSuggestion_part2 text-600 text-truncate"><t t-esc="composerSuggestion.record.help"/></em>
</t>
<t t-if="composerSuggestion.partner">
<PartnerImStatusIcon
t-if="composerSuggestion.partnerImStatusIconView"
className="'o_ComposerSuggestion_partnerImStatusIcon flex-shrink-0 mr-1'"
<PersonaImStatusIcon
t-if="composerSuggestion.personaImStatusIconView"
className="'o_ComposerSuggestion_personaImStatusIcon flex-shrink-0 mr-1'"
hasBackground="false"
record="composerSuggestion.partnerImStatusIconView"
record="composerSuggestion.personaImStatusIconView"
/>
<strong class="o_ComposerSuggestion_part1 flex-shrink-0 mw-100 pr-2 text-truncate"><t t-esc="composerSuggestion.record.nameOrDisplayName"/></strong>
<t t-if="composerSuggestion.record.email">
@@ -70,7 +70,7 @@
margin-inline-end: map-get($spacers, 2);
}
.o_Message_partnerImStatusIcon {
.o_Message_personaImStatusIcon {
// Could be replaced by "position absolute bottom-0 end-0"
// after the migration to BS5 for the backend AND the frontend
@include o-position-absolute($bottom: 0, $right: 0);
@@ -35,18 +35,18 @@
<t t-if="!messageView.isSquashed">
<div class="o_Message_authorAvatarContainer o_Message_sidebarItem position-relative mx-1">
<img class="o_Message_authorAvatar w-100 h-100 rounded-circle" t-att-class="{ 'o_Message_authorRedirect o_cursor_pointer': messageView.hasAuthorOpenChat, o_redirect: messageView.hasAuthorOpenChat }" t-att-src="messageView.message.avatarUrl" role="button" tabindex="0" t-on-click="messageView.onClickAuthorAvatar" t-att-title="messageView.hasAuthorOpenChat ? messageView.authorAvatarTitleText : ''" t-att-alt="messageView.hasAuthorOpenChat ? messageView.authorAvatarTitleText : ''"/>
<t t-if="messageView.partnerImStatusIconView">
<PartnerImStatusIcon
className="'o_Message_partnerImStatusIcon d-flex align-items-center justify-content-center'"
<t t-if="messageView.personaImStatusIconView">
<PersonaImStatusIcon
className="'o_Message_personaImStatusIcon d-flex align-items-center justify-content-center'"
classNameObj="{
'o-message-selected text-400': messageView.isSelected,
'o_Message_partnerImStatusIcon-mobile': messaging.device.isSmall,
'o_Message_personaImStatusIcon-mobile': messaging.device.isSmall,
'small': !messaging.device.isSmall,
'text-white': !messageView.isSelected and messageView.message.isDiscussionOrNotification,
'text-100': !messageView.message.isDiscussionOrNotification and !messageView.isSelected,
}"
hasOpenChat="messageView.hasAuthorOpenChat"
record="messageView.partnerImStatusIconView"
record="messageView.personaImStatusIconView"
/>
</t>
</div>
@@ -14,7 +14,7 @@ $o-mail-notification-list-item-muted-hover-background-color:
&:hover {
background-color: $o-mail-notification-list-item-hover-background-color;
.o_NotificationListItem_partnerImStatusIcon {
.o_NotificationListItem_personaImStatusIcon {
color: $o-mail-notification-list-item-hover-background-color;
}
}
@@ -25,7 +25,7 @@ $o-mail-notification-list-item-muted-hover-background-color:
&:hover {
background-color: $o-mail-notification-list-item-muted-hover-background-color;
.o_NotificationListItem_partnerImStatusIcon {
.o_NotificationListItem_personaImStatusIcon {
color: $o-mail-notification-list-item-muted-hover-background-color;
}
}
@@ -51,7 +51,7 @@ $o-mail-notification-list-item-muted-hover-background-color:
}
}
.o_NotificationListItem_partnerImStatusIcon {
.o_NotificationListItem_personaImStatusIcon {
color: $o-mail-notification-list-item-background-color;
&.o-muted {
@@ -7,11 +7,11 @@
<div class="o_NotificationListItem_sidebar o_NotificationRequest_sidebar m-1">
<div class="o_NotificationListItem_imageContainer o_NotificationRequest_imageContainer o_NotificationRequest_sidebarItem position-relative">
<img class="o_NotificationListItem_image o_NotificationRequest_image w-100 h-100 rounded-circle" t-att-src="messaging.partnerRoot.avatarUrl" alt="Avatar of OdooBot"/>
<PartnerImStatusIcon
t-if="notificationRequestView.partnerImStatusIconView"
className="'o_NotificationListItem_partnerImStatusIcon o_NotificationRequest_partnerImStatusIcon position-absolute bottom-0 end-0 d-flex align-items-center justify-content-center'"
<PersonaImStatusIcon
t-if="notificationRequestView.personaImStatusIconView"
className="'o_NotificationListItem_personaImStatusIcon o_NotificationRequest_personaImStatusIcon position-absolute bottom-0 end-0 d-flex align-items-center justify-content-center'"
classNameObj="{ 'o-isDeviceSmall': messaging.device.isSmall, 'small': !messaging.device.isSmall }"
record="notificationRequestView.partnerImStatusIconView"
record="notificationRequestView.personaImStatusIconView"
/>
</div>
</div>
@@ -5,16 +5,16 @@ import { markEventHandled } from '@mail/utils/utils';
const { Component } = owl;
export class PartnerImStatusIcon extends Component {
export class PersonaImStatusIcon extends Component {
//--------------------------------------------------------------------------
// Public
//--------------------------------------------------------------------------
/**
* @returns {PartnerImStatusIconView}
* @returns {PersonaImStatusIconView}
*/
get partnerImStatusIconView() {
get personaImStatusIconView() {
return this.props.record;
}
@@ -27,16 +27,16 @@ export class PartnerImStatusIcon extends Component {
* @param {MouseEvent} ev
*/
_onClick(ev) {
markEventHandled(ev, 'PartnerImStatusIcon.Click');
if (!this.props.hasOpenChat || !this.partnerImStatusIconView.persona.partner) {
markEventHandled(ev, 'PersonaImStatusIcon.Click');
if (!this.props.hasOpenChat || !this.personaImStatusIconView.persona.partner) {
return;
}
this.partnerImStatusIconView.persona.partner.openChat();
this.personaImStatusIconView.persona.partner.openChat();
}
}
Object.assign(PartnerImStatusIcon, {
Object.assign(PersonaImStatusIcon, {
defaultProps: {
hasBackground: true,
hasOpenChat: false,
@@ -50,7 +50,7 @@ Object.assign(PartnerImStatusIcon, {
hasOpenChat: { type: Boolean, optional: true },
record: Object,
},
template: 'mail.PartnerImStatusIcon',
template: 'mail.PersonaImStatusIcon',
});
registerMessagingComponent(PartnerImStatusIcon);
registerMessagingComponent(PersonaImStatusIcon);
@@ -2,13 +2,13 @@
// Layout
// ------------------------------------------------------------------
.o_PartnerImStatusIcon {
.o_PersonaImStatusIcon {
width: $o-mail-partner-status-icon-size;
height: $o-mail-partner-status-icon-size;
line-height: 1.3em;
}
.o_PartnerImStatusIcon_outerBackground {
.o_PersonaImStatusIcon_outerBackground {
transform: scale(1.5);
}
@@ -16,7 +16,7 @@
// Style
// ------------------------------------------------------------------
.o_PartnerImStatusIcon_icon {
.o_PersonaImStatusIcon_icon {
&.o-bot {
color: $o-enterprise-primary-color;
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates xml:space="preserve">
<t t-name="mail.PartnerImStatusIcon" owl="1">
<span class="o_PartnerImStatusIcon d-flex flex-column fa-stack"
<t t-name="mail.PersonaImStatusIcon" owl="1">
<span class="o_PersonaImStatusIcon d-flex flex-column fa-stack"
t-att-class="{
'o-away': partnerImStatusIconView.persona.im_status === 'away',
'o-bot': messaging.partnerRoot.persona === partnerImStatusIconView.persona,
'o-away': personaImStatusIconView.persona.im_status === 'away',
'o-bot': messaging.partnerRoot.persona === personaImStatusIconView.persona,
'o-has-open-chat o_cursor_pointer': props.hasOpenChat,
'o-offline': partnerImStatusIconView.persona.im_status === 'offline',
'o-online': partnerImStatusIconView.persona.im_status === 'online',
'o-offline': personaImStatusIconView.persona.im_status === 'offline',
'o-online': personaImStatusIconView.persona.im_status === 'online',
}"
t-attf-class="{{ className }}"
t-on-click="_onClick"
@@ -16,20 +16,20 @@
name="root"
>
<t t-if="props.hasBackground">
<i class="o_PartnerImStatusIcon_outerBackground fa fa-circle fa-stack-1x"/>
<i class="o_PartnerImStatusIcon_innerBackground fa fa-circle fa-stack-1x text-white"/>
<i class="o_PersonaImStatusIcon_outerBackground fa fa-circle fa-stack-1x"/>
<i class="o_PersonaImStatusIcon_innerBackground fa fa-circle fa-stack-1x text-white"/>
</t>
<t t-if="partnerImStatusIconView.persona.im_status === 'online'">
<i class="o_PartnerImStatusIcon_icon o-online fa fa-circle fa-stack-1x" title="Online" role="img" aria-label="User is online"/>
<t t-if="personaImStatusIconView.persona.im_status === 'online'">
<i class="o_PersonaImStatusIcon_icon o-online fa fa-circle fa-stack-1x" title="Online" role="img" aria-label="User is online"/>
</t>
<t t-if="partnerImStatusIconView.persona.im_status === 'away'">
<i class="o_PartnerImStatusIcon_icon o-away fa fa-circle fa-stack-1x text-warning" title="Idle" role="img" aria-label="User is idle"/>
<t t-if="personaImStatusIconView.persona.im_status === 'away'">
<i class="o_PersonaImStatusIcon_icon o-away fa fa-circle fa-stack-1x text-warning" title="Idle" role="img" aria-label="User is idle"/>
</t>
<t t-if="partnerImStatusIconView.persona.im_status === 'offline'">
<i class="o_PartnerImStatusIcon_icon o-offline fa fa-circle-o fa-stack-1x text-700" title="Offline" role="img" aria-label="User is offline"/>
<t t-if="personaImStatusIconView.persona.im_status === 'offline'">
<i class="o_PersonaImStatusIcon_icon o-offline fa fa-circle-o fa-stack-1x text-700" title="Offline" role="img" aria-label="User is offline"/>
</t>
<t t-if="partnerImStatusIconView.persona === messaging.partnerRoot.persona">
<i class="o_PartnerImStatusIcon_icon o-bot fa fa-heart fa-stack-1x" title="Bot" role="img" aria-label="User is a bot"/>
<t t-if="personaImStatusIconView.persona === messaging.partnerRoot.persona">
<i class="o_PersonaImStatusIcon_icon o-bot fa fa-heart fa-stack-1x" title="Bot" role="img" aria-label="User is a bot"/>
</t>
</span>
</t>
@@ -11,14 +11,14 @@
<div class="o_NotificationListItem_sidebar o_ThreadNeedactionPreview_sidebar m-1">
<div class="o_NotificationListItem_imageContainer o_ThreadNeedactionPreview_imageContainer o_ThreadNeedactionPreview_sidebarItem position-relative">
<img class="o_NotificationListItem_image o_ThreadNeedactionPreview_image w-100 h-100" t-att-src="image()" alt="Thread Image"/>
<t t-if="threadNeedactionPreviewView.partnerImStatusIconView">
<PartnerImStatusIcon
className="'o_NotificationListItem_partnerImStatusIcon o_ThreadNeedactionPreview_partnerImStatusIcon position-absolute bottom-0 end-0 d-flex align-items-center justify-content-center'"
<t t-if="threadNeedactionPreviewView.personaImStatusIconView">
<PersonaImStatusIcon
className="'o_NotificationListItem_personaImStatusIcon o_ThreadNeedactionPreview_personaImStatusIcon position-absolute bottom-0 end-0 d-flex align-items-center justify-content-center'"
classNameObj="{
'o-isDeviceSmall': messaging.device.isSmall,
'small': !messaging.device.isSmall,
}"
record="threadNeedactionPreviewView.partnerImStatusIconView"
record="threadNeedactionPreviewView.personaImStatusIconView"
/>
</t>
</div>
@@ -11,15 +11,15 @@
<div class="o_NotificationListItem_sidebar o_ThreadPreview_sidebar m-1">
<div class="o_NotificationListItem_imageContainer o_ThreadPreview_imageContainer o_ThreadPreview_sidebarItem position-relative">
<img class="o_NotificationListItem_image o_ThreadPreview_image w-100 h-100 rounded-circle" t-att-src="image()" alt="Thread Image"/>
<t t-if="threadPreviewView.partnerImStatusIconView">
<PartnerImStatusIcon
className="'o_NotificationListItem_partnerImStatusIcon o_ThreadPreview_partnerImStatusIcon position-absolute bottom-0 end-0 d-flex align-items-center justify-content-center'"
<t t-if="threadPreviewView.personaImStatusIconView">
<PersonaImStatusIcon
className="'o_NotificationListItem_personaImStatusIcon o_ThreadPreview_personaImStatusIcon position-absolute bottom-0 end-0 d-flex align-items-center justify-content-center'"
classNameObj="{
'o-isDeviceSmall': messaging.device.isSmall,
'small': !messaging.device.isSmall,
'o-muted': threadPreviewView.thread.localMessageUnreadCounter === 0,
}"
record="threadPreviewView.partnerImStatusIconView"
record="threadPreviewView.personaImStatusIconView"
/>
</t>
</div>
@@ -12,7 +12,7 @@ registerModel({
* @private
* @returns {FieldCommand}
*/
_computePartnerImStatusIconView() {
_computePersonaImStatusIconView() {
return this.partner.isImStatusSet ? insertAndReplace() : clear();
},
},
@@ -27,8 +27,8 @@ registerModel({
readonly: true,
required: true,
}),
partnerImStatusIconView: one('PartnerImStatusIconView', {
compute: '_computePartnerImStatusIconView',
personaImStatusIconView: one('PersonaImStatusIconView', {
compute: '_computePersonaImStatusIconView',
inverse: 'channelInvitationFormSelectablePartnerViewOwner',
isCausal: true,
readonly: true,
@@ -32,7 +32,7 @@ registerModel({
* @private
* @returns {FieldCommand}
*/
_computePartnerImStatusIconView() {
_computePersonaImStatusIconView() {
return this.channelMember.partner && this.channelMember.partner.isImStatusSet ? insertAndReplace() : clear();
},
},
@@ -47,8 +47,8 @@ registerModel({
readonly: true,
required: true,
}),
partnerImStatusIconView: one('PartnerImStatusIconView', {
compute: '_computePartnerImStatusIconView',
personaImStatusIconView: one('PersonaImStatusIconView', {
compute: '_computePersonaImStatusIconView',
inverse: 'channelMemberViewOwner',
isCausal: true,
readonly: true,
@@ -70,7 +70,7 @@ registerModel({
* @private
* @returns {FieldCommand}
*/
_computePartnerImStatusIconView() {
_computePersonaImStatusIconView() {
return this.partner && this.partner.isImStatusSet ? insertAndReplace() : clear();
},
/**
@@ -150,8 +150,8 @@ registerModel({
partner: one('Partner', {
readonly: true,
}),
partnerImStatusIconView: one('PartnerImStatusIconView', {
compute: '_computePartnerImStatusIconView',
personaImStatusIconView: one('PersonaImStatusIconView', {
compute: '_computePersonaImStatusIconView',
inverse: 'composerSuggestionViewOwner',
isCausal: true,
readonly: true,
@@ -49,7 +49,7 @@ registerModel({
!isEventHandled(ev, 'MessageActionList.Click') &&
!isEventHandled(ev, 'MessageReactionGroup.Click') &&
!isEventHandled(ev, 'MessageInReplyToView.ClickMessageInReplyTo') &&
!isEventHandled(ev, 'PartnerImStatusIcon.Click')
!isEventHandled(ev, 'PersonaImStatusIcon.Click')
) {
if (this.messagingAsClickedMessageView) {
this.messaging.update({ clickedMessageView: clear() });
@@ -298,7 +298,7 @@ registerModel({
* @private
* @returns {FieldCommand}
*/
_computePartnerImStatusIconView() {
_computePersonaImStatusIconView() {
return this.message.author && this.message.author.isImStatusSet ? insertAndReplace() : clear();
},
},
@@ -446,8 +446,8 @@ registerModel({
messagingAsClickedMessageView: one('Messaging', {
inverse: 'clickedMessageView',
}),
partnerImStatusIconView: one('PartnerImStatusIconView', {
compute: '_computePartnerImStatusIconView',
personaImStatusIconView: one('PersonaImStatusIconView', {
compute: '_computePersonaImStatusIconView',
inverse: 'messageViewOwner',
isCausal: true,
readonly: true,
@@ -27,7 +27,7 @@ registerModel({
* @private
* @returns {FieldCommand}
*/
_computePartnerImStatusIconView() {
_computePersonaImStatusIconView() {
return this.messaging.partnerRoot.isImStatusSet ? insertAndReplace() : clear();
},
},
@@ -40,8 +40,8 @@ registerModel({
required: true,
readonly: true,
}),
partnerImStatusIconView: one('PartnerImStatusIconView', {
compute: '_computePartnerImStatusIconView',
personaImStatusIconView: one('PersonaImStatusIconView', {
compute: '_computePersonaImStatusIconView',
inverse: 'notificationRequestViewOwner',
isCausal: true,
readonly: true,
@@ -5,7 +5,7 @@ import { registerModel } from '@mail/model/model_core';
import { clear, replace } from '@mail/model/model_field_command';
registerModel({
name: 'PartnerImStatusIconView',
name: 'PersonaImStatusIconView',
identifyingFields: [[
'channelInvitationFormSelectablePartnerViewOwner',
'channelMemberViewOwner',
@@ -47,31 +47,31 @@ registerModel({
},
fields: {
channelInvitationFormSelectablePartnerViewOwner: one('ChannelInvitationFormSelectablePartnerView', {
inverse: 'partnerImStatusIconView',
inverse: 'personaImStatusIconView',
readonly: true,
}),
channelMemberViewOwner: one('ChannelMemberView', {
inverse: 'partnerImStatusIconView',
inverse: 'personaImStatusIconView',
readonly: true,
}),
composerSuggestionViewOwner: one('ComposerSuggestion', {
inverse: 'partnerImStatusIconView',
inverse: 'personaImStatusIconView',
readonly: true,
}),
messageViewOwner: one('MessageView', {
inverse: 'partnerImStatusIconView',
inverse: 'personaImStatusIconView',
readonly: true,
}),
notificationRequestViewOwner: one('NotificationRequestView', {
inverse: 'partnerImStatusIconView',
inverse: 'personaImStatusIconView',
readonly: true,
}),
threadNeedactionPreviewViewOwner: one('ThreadNeedactionPreviewView', {
inverse: 'partnerImStatusIconView',
inverse: 'personaImStatusIconView',
readonly: true,
}),
threadPreviewViewOwner: one('ThreadPreviewView', {
inverse: 'partnerImStatusIconView',
inverse: 'personaImStatusIconView',
readonly: true,
}),
persona: one('Persona', {
@@ -79,7 +79,7 @@ registerModel({
* @private
* @returns {FieldCommand}
*/
_computePartnerImStatusIconView() {
_computePersonaImStatusIconView() {
return this.thread.correspondent && this.thread.correspondent.isImStatusSet ? insertAndReplace() : clear();
},
},
@@ -112,8 +112,8 @@ registerModel({
readonly: true,
required: true,
}),
partnerImStatusIconView: one('PartnerImStatusIconView', {
compute: '_computePartnerImStatusIconView',
personaImStatusIconView: one('PersonaImStatusIconView', {
compute: '_computePersonaImStatusIconView',
inverse: 'threadNeedactionPreviewViewOwner',
isCausal: true,
readonly: true,
@@ -78,7 +78,7 @@ registerModel({
* @private
* @returns {FieldCommand}
*/
_computePartnerImStatusIconView() {
_computePersonaImStatusIconView() {
return this.thread.correspondent && this.thread.correspondent.isImStatusSet ? insertAndReplace() : clear();
},
},
@@ -111,8 +111,8 @@ registerModel({
readonly: true,
required: true,
}),
partnerImStatusIconView: one('PartnerImStatusIconView', {
compute: '_computePartnerImStatusIconView',
personaImStatusIconView: one('PersonaImStatusIconView', {
compute: '_computePersonaImStatusIconView',
inverse: 'threadPreviewViewOwner',
isCausal: true,
readonly: true,
+1 -1
View File
@@ -2,7 +2,7 @@
<templates xml:space="preserve">
<!--
AKU FIXME: use mail/static/src/components/partner_im_status_icon/partner_im_status_icon.js component instead
AKU FIXME: use mail/static/src/components/persona_im_status_icon/persona_im_status_icon.js component instead
@param {string} status
-->
<t t-name="mail.widgets.UserStatus">
@@ -53,7 +53,7 @@ QUnit.test('partner mention suggestion correct data', async function (assert) {
await insertText('.o_ComposerTextInput_textarea', "@demo");
assert.containsOnce(
document.querySelector('.o_ComposerSuggestion'),
'.o_PartnerImStatusIcon',
'.o_PersonaImStatusIcon',
"Partner's im_status should be displayed"
);
assert.containsOnce(
@@ -858,16 +858,16 @@ QUnit.test('chat with author should be opened after clicking on their im status
await afterNextRender(() => advanceTime(50 * 1000)); // next fetch of im_status
assert.containsOnce(
document.body,
'.o_Message_partnerImStatusIcon',
'.o_Message_personaImStatusIcon',
"message should have the author im status icon"
);
assert.hasClass(
document.querySelector('.o_Message_partnerImStatusIcon'),
document.querySelector('.o_Message_personaImStatusIcon'),
'o-has-open-chat',
"author im status icon should have the open chat style"
);
await click('.o_Message_partnerImStatusIcon');
await click('.o_Message_personaImStatusIcon');
assert.containsOnce(
document.body,
'.o_ChatWindow_thread',
@@ -4,7 +4,7 @@ import { start, startServer } from '@mail/../tests/helpers/test_utils';
QUnit.module('mail', {}, function () {
QUnit.module('components', {}, function () {
QUnit.module('partner_im_status_icon_tests.js');
QUnit.module('persona_im_status_icon_tests.js');
QUnit.test('initially online', async function (assert) {
assert.expect(1);
@@ -29,9 +29,9 @@ QUnit.test('initially online', async function (assert) {
await openDiscuss();
await afterNextRender(() => advanceTime(messaging.fetchImStatusTimerDuration));
assert.strictEqual(
document.querySelectorAll(`.o_PartnerImStatusIcon.o-online`).length,
document.querySelectorAll(`.o_PersonaImStatusIcon.o-online`).length,
1,
"partner IM status icon should have online status rendering"
"persona IM status icon should have online status rendering"
);
});
@@ -58,9 +58,9 @@ QUnit.test('initially offline', async function (assert) {
await openDiscuss();
await afterNextRender(() => advanceTime(messaging.fetchImStatusTimerDuration));
assert.strictEqual(
document.querySelectorAll(`.o_PartnerImStatusIcon.o-offline`).length,
document.querySelectorAll(`.o_PersonaImStatusIcon.o-offline`).length,
1,
"partner IM status icon should have offline status rendering"
"persona IM status icon should have offline status rendering"
);
});
@@ -87,9 +87,9 @@ QUnit.test('initially away', async function (assert) {
await openDiscuss();
await afterNextRender(() => advanceTime(messaging.fetchImStatusTimerDuration));
assert.strictEqual(
document.querySelectorAll(`.o_PartnerImStatusIcon.o-away`).length,
document.querySelectorAll(`.o_PersonaImStatusIcon.o-away`).length,
1,
"partner IM status icon should have away status rendering"
"persona IM status icon should have away status rendering"
);
});
@@ -116,33 +116,33 @@ QUnit.test('change icon on change partner im_status', async function (assert) {
await openDiscuss();
await afterNextRender(() => advanceTime(messaging.fetchImStatusTimerDuration));
assert.strictEqual(
document.querySelectorAll(`.o_PartnerImStatusIcon.o-online`).length,
document.querySelectorAll(`.o_PersonaImStatusIcon.o-online`).length,
1,
"partner IM status icon should have online status rendering"
"persona IM status icon should have online status rendering"
);
pyEnv['res.partner'].write([partnerId], { im_status: 'offline' });
await afterNextRender(() => advanceTime(messaging.fetchImStatusTimerDuration));
assert.strictEqual(
document.querySelectorAll(`.o_PartnerImStatusIcon.o-offline`).length,
document.querySelectorAll(`.o_PersonaImStatusIcon.o-offline`).length,
1,
"partner IM status icon should have offline status rendering"
"persona IM status icon should have offline status rendering"
);
pyEnv['res.partner'].write([partnerId], { im_status: 'away' });
await afterNextRender(() => advanceTime(messaging.fetchImStatusTimerDuration));
assert.strictEqual(
document.querySelectorAll(`.o_PartnerImStatusIcon.o-away`).length,
document.querySelectorAll(`.o_PersonaImStatusIcon.o-away`).length,
1,
"partner IM status icon should have away status rendering"
"persona IM status icon should have away status rendering"
);
pyEnv['res.partner'].write([partnerId], { im_status: 'online' });
await afterNextRender(() => advanceTime(messaging.fetchImStatusTimerDuration));
assert.strictEqual(
document.querySelectorAll(`.o_PartnerImStatusIcon.o-online`).length,
document.querySelectorAll(`.o_PersonaImStatusIcon.o-online`).length,
1,
"partner IM status icon should have online status rendering in the end"
"persona IM status icon should have online status rendering in the end"
);
});
@@ -40,7 +40,7 @@ QUnit.test('chat: correspondent is typing', async function (assert) {
assert.containsOnce(
document.body,
'.o_ThreadIcon_online',
"should have thread icon with partner im status icon 'online'"
"should have thread icon with persona IM status icon 'online'"
);
const mailChannel1 = pyEnv['mail.channel'].searchRead([['id', '=', mailChannelId1]])[0];
@@ -76,7 +76,7 @@ QUnit.test('chat: correspondent is typing', async function (assert) {
assert.containsOnce(
document.body,
'.o_ThreadIcon_online',
"should have thread icon with partner im status icon 'online' (no longer typing)"
"should have thread icon with persona IM status icon 'online' (no longer typing)"
);
});