[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:
committed by
Alexandre Kühn
parent
5c861656b6
commit
bec6cefd0c
@@ -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)-->
|
||||
|
||||
+23
@@ -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);
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
.o_mail_notification {
|
||||
display: inline;
|
||||
}
|
||||
+12
@@ -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>
|
||||
@@ -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',
|
||||
}),
|
||||
},
|
||||
});
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user