[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:
+7
-7
@@ -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>
|
||||
+13
-13
@@ -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"
|
||||
);
|
||||
});
|
||||
|
||||
+3
-3
@@ -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>
|
||||
|
||||
+9
-9
@@ -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);
|
||||
+3
-3
@@ -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;
|
||||
+16
-16
@@ -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>
|
||||
+4
-4
@@ -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,
|
||||
|
||||
+8
-8
@@ -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,
|
||||
|
||||
@@ -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">
|
||||
|
||||
+1
-1
@@ -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',
|
||||
|
||||
+15
-15
@@ -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)"
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user