[IMP] mail: introduce MessageSeenIndicator/text
Task-2793280 closes odoo/odoo#87372 Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
This commit is contained in:
@@ -10,74 +10,6 @@ export class MessageSeenIndicator extends Component {
|
||||
// Public
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* @returns {string}
|
||||
*/
|
||||
get indicatorTitle() {
|
||||
if (!this.messageSeenIndicator) {
|
||||
return '';
|
||||
}
|
||||
if (this.messageSeenIndicator.hasEveryoneSeen) {
|
||||
return this.env._t("Seen by Everyone");
|
||||
}
|
||||
if (this.messageSeenIndicator.hasSomeoneSeen) {
|
||||
const partnersThatHaveSeen = this.messageSeenIndicator.partnersThatHaveSeen.map(partner => {
|
||||
if (this.message.originThread) {
|
||||
return this.message.originThread.getMemberName(partner);
|
||||
}
|
||||
return partner.nameOrDisplayName;
|
||||
});
|
||||
if (partnersThatHaveSeen.length === 1) {
|
||||
return _.str.sprintf(
|
||||
this.env._t("Seen by %s"),
|
||||
partnersThatHaveSeen[0]
|
||||
);
|
||||
}
|
||||
if (partnersThatHaveSeen.length === 2) {
|
||||
return _.str.sprintf(
|
||||
this.env._t("Seen by %s and %s"),
|
||||
partnersThatHaveSeen[0],
|
||||
partnersThatHaveSeen[1]
|
||||
);
|
||||
}
|
||||
return _.str.sprintf(
|
||||
this.env._t("Seen by %s, %s and more"),
|
||||
partnersThatHaveSeen[0],
|
||||
partnersThatHaveSeen[1]
|
||||
);
|
||||
}
|
||||
if (this.messageSeenIndicator.hasEveryoneFetched) {
|
||||
return this.env._t("Received by Everyone");
|
||||
}
|
||||
if (this.messageSeenIndicator.hasSomeoneFetched) {
|
||||
const partnersThatHaveFetched = this.messageSeenIndicator.partnersThatHaveFetched.map(partner => {
|
||||
if (this.message.originThread) {
|
||||
return this.message.originThread.getMemberName(partner);
|
||||
}
|
||||
return partner.nameOrDisplayName;
|
||||
});
|
||||
if (partnersThatHaveFetched.length === 1) {
|
||||
return _.str.sprintf(
|
||||
this.env._t("Received by %s"),
|
||||
partnersThatHaveFetched[0]
|
||||
);
|
||||
}
|
||||
if (partnersThatHaveFetched.length === 2) {
|
||||
return _.str.sprintf(
|
||||
this.env._t("Received by %s and %s"),
|
||||
partnersThatHaveFetched[0],
|
||||
partnersThatHaveFetched[1]
|
||||
);
|
||||
}
|
||||
return _.str.sprintf(
|
||||
this.env._t("Received by %s, %s and more"),
|
||||
partnersThatHaveFetched[0],
|
||||
partnersThatHaveFetched[1]
|
||||
);
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {Message}
|
||||
*/
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
<t t-name="mail.MessageSeenIndicator" owl="1">
|
||||
<t t-if="messageSeenIndicator">
|
||||
<span class="o_MessageSeenIndicator" t-att-class="{ 'o-all-seen': messageSeenIndicator.hasEveryoneSeen }" t-attf-class="{{ className }}" t-att-title="indicatorTitle" t-ref="root">
|
||||
<span class="o_MessageSeenIndicator" t-att-class="{ 'o-all-seen': messageSeenIndicator.hasEveryoneSeen }" t-attf-class="{{ className }}" t-att-title="messageSeenIndicator.text" t-ref="root">
|
||||
<t t-if="!messageSeenIndicator.isMessagePreviousToLastCurrentPartnerMessageSeenByEveryone">
|
||||
<t t-if="messageSeenIndicator.hasSomeoneFetched or messageSeenIndicator.hasSomeoneSeen">
|
||||
<i class="o_MessageSeenIndicator_icon o-first fa fa-check"/>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
import { registerModel } from '@mail/model/model_core';
|
||||
import { attr, many, one } from '@mail/model/model_field';
|
||||
import { replace, unlinkAll } from '@mail/model/model_field_command';
|
||||
import { clear, replace, unlinkAll } from '@mail/model/model_field_command';
|
||||
|
||||
registerModel({
|
||||
name: 'MessageSeenIndicator',
|
||||
@@ -165,6 +165,71 @@ registerModel({
|
||||
}
|
||||
return replace(otherPartnersThatHaveSeen);
|
||||
},
|
||||
/**
|
||||
* @private
|
||||
* @returns {string|FieldCommand}
|
||||
*/
|
||||
_computeText() {
|
||||
if (this.hasEveryoneSeen) {
|
||||
return this.env._t("Seen by Everyone");
|
||||
}
|
||||
if (this.hasSomeoneSeen) {
|
||||
const partnersThatHaveSeen = this.partnersThatHaveSeen.map(partner => {
|
||||
if (this.message.originThread) {
|
||||
return this.message.originThread.getMemberName(partner);
|
||||
}
|
||||
return partner.nameOrDisplayName;
|
||||
});
|
||||
if (partnersThatHaveSeen.length === 1) {
|
||||
return _.str.sprintf(
|
||||
this.env._t("Seen by %s"),
|
||||
partnersThatHaveSeen[0]
|
||||
);
|
||||
}
|
||||
if (partnersThatHaveSeen.length === 2) {
|
||||
return _.str.sprintf(
|
||||
this.env._t("Seen by %s and %s"),
|
||||
partnersThatHaveSeen[0],
|
||||
partnersThatHaveSeen[1]
|
||||
);
|
||||
}
|
||||
return _.str.sprintf(
|
||||
this.env._t("Seen by %s, %s and more"),
|
||||
partnersThatHaveSeen[0],
|
||||
partnersThatHaveSeen[1]
|
||||
);
|
||||
}
|
||||
if (this.hasEveryoneFetched) {
|
||||
return this.env._t("Received by Everyone");
|
||||
}
|
||||
if (this.hasSomeoneFetched) {
|
||||
const partnersThatHaveFetched = this.partnersThatHaveFetched.map(partner => {
|
||||
if (this.message.originThread) {
|
||||
return this.message.originThread.getMemberName(partner);
|
||||
}
|
||||
return partner.nameOrDisplayName;
|
||||
});
|
||||
if (partnersThatHaveFetched.length === 1) {
|
||||
return _.str.sprintf(
|
||||
this.env._t("Received by %s"),
|
||||
partnersThatHaveFetched[0]
|
||||
);
|
||||
}
|
||||
if (partnersThatHaveFetched.length === 2) {
|
||||
return _.str.sprintf(
|
||||
this.env._t("Received by %s and %s"),
|
||||
partnersThatHaveFetched[0],
|
||||
partnersThatHaveFetched[1]
|
||||
);
|
||||
}
|
||||
return _.str.sprintf(
|
||||
this.env._t("Received by %s, %s and more"),
|
||||
partnersThatHaveFetched[0],
|
||||
partnersThatHaveFetched[1]
|
||||
);
|
||||
}
|
||||
return clear();
|
||||
},
|
||||
},
|
||||
fields: {
|
||||
hasEveryoneFetched: attr({
|
||||
@@ -201,6 +266,10 @@ registerModel({
|
||||
partnersThatHaveSeen: many('Partner', {
|
||||
compute: '_computePartnersThatHaveSeen',
|
||||
}),
|
||||
text: attr({
|
||||
compute: '_computeText',
|
||||
default: '',
|
||||
}),
|
||||
/**
|
||||
* The thread concerned by this seen indicator.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user