[IMP] mail: differentiate message and notification in channel

This PR changes the way notification are displayed inside the a channel.
Currently, notification look exactly the same as a message send by the user.

task-2918956

closes odoo/odoo#98262

Related: odoo/enterprise#30732
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
This commit is contained in:
Didier (did)
2022-08-30 23:40:24 +02:00
committed by Alexandre Kühn
parent 5c861656b6
commit bec6cefd0c
8 changed files with 94 additions and 6 deletions
@@ -62,7 +62,8 @@
<t t-set="current_day" t-value="message_day"/>
</div>
</t>
<Message record="messageListViewItem.messageView"/>
<NotificationMessageView t-if="messageListViewItem.notificationMessageView" record="messageListViewItem.notificationMessageView"/>
<Message t-if="messageListViewItem.messageView" record="messageListViewItem.messageView"/>
</t>
</t>
<!-- LOADING (if order desc)-->
@@ -0,0 +1,23 @@
/** @odoo-module **/
import { registerMessagingComponent } from '@mail/utils/messaging_component';
const { Component } = owl;
class NotificationMessageView extends Component {
/**
* @returns {NotificationMessageView}
*/
get notificationMessageView() {
return this.props.record;
}
}
Object.assign(NotificationMessageView, {
props: { record: Object },
template: 'mail.NotificationMessageView',
});
registerMessagingComponent(NotificationMessageView);
@@ -0,0 +1,3 @@
.o_mail_notification {
display: inline;
}
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates xml:space="preserve">
<t t-name="mail.NotificationMessageView" owl="1">
<div class="o_NotificationMessageView d-flex justify-content-center">
<div class="flex-grow-1"/>
<div class="text-500 small px-3" t-out="notificationMessageView.notificationText">
<span class="d-inline" t-esc="notificationMessageView.message.authorName"/> <t t-out="notificationMessageView.message.prettyBodyAsMarkup"/>
</div>
<div class="flex-grow-1"/>
</div>
</t>
</templates>
+4
View File
@@ -817,6 +817,10 @@ registerModel({
compute: '_computeMessageTypeText',
}),
message_type: attr(),
notificationMessageViews: many('NotificationMessageView', {
inverse: 'message',
isCausal: true,
}),
/**
* States the views that are displaying this message.
*/
@@ -2,6 +2,7 @@
import { registerModel } from '@mail/model/model_core';
import { attr, one } from '@mail/model/model_field';
import { clear } from '@mail/model/model_field_command';
/**
* Models a relation between a message list view and a message view where
@@ -9,6 +10,28 @@ import { attr, one } from '@mail/model/model_field';
*/
registerModel({
name: 'MessageListViewItem',
recordMethods: {
/**
* @private
* @returns {FieldCommand}
*/
_computeNotificationMessageView() {
if (this.message.message_type === 'notification' && this.message.originThread.channel) {
return {};
}
return clear();
},
/**
* @private
* @returns {FieldCommand}
*/
_computeMessageView() {
if (this.message.message_type !== 'notification' || !this.message.originThread.channel) {
return {};
}
return clear();
},
},
fields: {
isSquashed: attr({
required: true,
@@ -21,12 +44,15 @@ registerModel({
identifying: true,
inverse: 'messageListViewItems',
}),
messageView: one('MessageView', {
default: {},
notificationMessageView: one('NotificationMessageView', {
compute: '_computeNotificationMessageView',
inverse: 'messageListViewItemOwner',
isCausal: true,
}),
messageView: one('MessageView', {
compute: '_computeMessageView',
inverse: 'messageListViewItemOwner',
isCausal: true,
readonly: true,
required: true,
}),
},
});
@@ -0,0 +1,19 @@
/** @odoo-module **/
import { registerModel } from '@mail/model/model_core';
import { one } from '@mail/model/model_field';
registerModel({
name: 'NotificationMessageView',
fields: {
message: one('Message', {
related: 'messageListViewItemOwner.message',
inverse: 'notificationMessageViews',
required: true,
}),
messageListViewItemOwner: one('MessageListViewItem', {
identifying: true,
inverse: 'notificationMessageView',
}),
},
});
+1 -1
View File
@@ -155,7 +155,7 @@ registerModel({
return clear();
}
const { length, [length - 1]: messageListViewItem } = this.messageListView.messageListViewItems;
return messageListViewItem ? messageListViewItem.messageView : clear();
return messageListViewItem && messageListViewItem.messageView ? messageListViewItem.messageView : clear();
},
/**
* @private