[IMP] mail: introduce ChannelMemberListCategoryView

Task-2831082

closes odoo/odoo#91699

Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
This commit is contained in:
Alexandre Kühn
2022-06-02 18:58:31 +02:00
parent 22f52f3700
commit 299138350d
4 changed files with 62 additions and 5 deletions
@@ -4,11 +4,11 @@
<t t-name="mail.ChannelMemberList" owl="1">
<t t-if="channelMemberListView">
<div class="o_ChannelMemberList d-flex flex-column overflow-auto bg-light" t-attf-class="{{ className }}" t-ref="root">
<t t-if="channelMemberListView.channel.orderedOnlineMembers.length > 0">
<ChannelMemberListCategory category="'online'" channelMemberListView="channelMemberListView"/>
<t t-if="channelMemberListView.onlineCategoryView">
<ChannelMemberListCategory record="channelMemberListView.onlineCategoryView" category="'online'" channelMemberListView="channelMemberListView"/>
</t>
<t t-if="channelMemberListView.channel.orderedOfflineMembers.length > 0">
<ChannelMemberListCategory category="'offline'" channelMemberListView="channelMemberListView"/>
<t t-if="channelMemberListView.offlineCategoryView">
<ChannelMemberListCategory record="channelMemberListView.offlineCategoryView" category="'offline'" channelMemberListView="channelMemberListView"/>
</t>
<t t-if="channelMemberListView.channel.unknownMemberCount === 1">
<span class="mx-2 mt-2">And 1 other member.</span>
@@ -15,6 +15,13 @@ export class ChannelMemberListCategory extends Component {
return this.props.channelMemberListView;
}
/**
* @returns {ChannelMemberListCategoryView}
*/
get record() {
return this.props.record;
}
/**
* @returns {Partner[]}
*/
@@ -57,6 +64,7 @@ Object.assign(ChannelMemberListCategory, {
props: {
category: String,
channelMemberListView: Object,
record: Object,
},
template: 'mail.ChannelMemberListCategory',
});
@@ -0,0 +1,19 @@
/** @odoo-module **/
import { registerModel } from '@mail/model/model_core';
import { one } from '@mail/model/model_field';
registerModel({
name: 'ChannelMemberListCategoryView',
identifyingFields: [['channelMemberListViewOwnerAsOffline', 'channelMemberListViewOwnerAsOnline']],
fields: {
channelMemberListViewOwnerAsOffline: one('ChannelMemberListView', {
inverse: 'offlineCategoryView',
readonly: true,
}),
channelMemberListViewOwnerAsOnline: one('ChannelMemberListView', {
inverse: 'onlineCategoryView',
readonly: true,
}),
},
});
@@ -2,7 +2,7 @@
import { registerModel } from '@mail/model/model_core';
import { one } from '@mail/model/model_field';
import { clear, replace } from '@mail/model/model_field_command';
import { clear, insertAndReplace, replace } from '@mail/model/model_field_command';
registerModel({
name: 'ChannelMemberListView',
@@ -21,6 +21,26 @@ registerModel({
}
return clear();
},
/**
* @private
* @returns {FieldCommand}
*/
_computeOfflineCategoryView() {
if (this.channel && this.channel.orderedOfflineMembers.length > 0) {
return insertAndReplace();
}
return clear();
},
/**
* @private
* @returns {FieldCommand}
*/
_computeOnlineCategoryView() {
if (this.channel && this.channel.orderedOnlineMembers.length > 0) {
return insertAndReplace();
}
return clear();
},
},
fields: {
channel: one('Thread', {
@@ -31,6 +51,16 @@ registerModel({
inverse: 'channelMemberListView',
readonly: true,
}),
offlineCategoryView: one('ChannelMemberListCategoryView', {
compute: '_computeOfflineCategoryView',
inverse: 'channelMemberListViewOwnerAsOffline',
isCausal: true,
}),
onlineCategoryView: one('ChannelMemberListCategoryView', {
compute: '_computeOnlineCategoryView',
inverse: 'channelMemberListViewOwnerAsOnline',
isCausal: true,
}),
threadViewOwner: one('ThreadView', {
inverse: 'channelMemberListView',
readonly: true,