diff --git a/addons/mail/static/src/components/channel_member_list/channel_member_list.xml b/addons/mail/static/src/components/channel_member_list/channel_member_list.xml index daebcc04f58..b3f819c61c0 100644 --- a/addons/mail/static/src/components/channel_member_list/channel_member_list.xml +++ b/addons/mail/static/src/components/channel_member_list/channel_member_list.xml @@ -4,11 +4,11 @@
- - + + - - + + And 1 other member. diff --git a/addons/mail/static/src/components/channel_member_list_category/channel_member_list_category.js b/addons/mail/static/src/components/channel_member_list_category/channel_member_list_category.js index 2e70ce127a9..67a97033fc9 100644 --- a/addons/mail/static/src/components/channel_member_list_category/channel_member_list_category.js +++ b/addons/mail/static/src/components/channel_member_list_category/channel_member_list_category.js @@ -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', }); diff --git a/addons/mail/static/src/models/channel_member_list_category_view.js b/addons/mail/static/src/models/channel_member_list_category_view.js new file mode 100644 index 00000000000..93d2bb42860 --- /dev/null +++ b/addons/mail/static/src/models/channel_member_list_category_view.js @@ -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, + }), + }, +}); diff --git a/addons/mail/static/src/models/channel_member_list_view.js b/addons/mail/static/src/models/channel_member_list_view.js index beae3696e82..c52bd06de70 100644 --- a/addons/mail/static/src/models/channel_member_list_view.js +++ b/addons/mail/static/src/models/channel_member_list_view.js @@ -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,