[IMP] mail: create activity_box model

This PR introduce activity_box_model to handle the activity_box component logic.

part of task-2579306

closes odoo/odoo#79993

Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
This commit is contained in:
Didier (did)
2021-11-23 13:54:57 +00:00
parent 0d2c09a938
commit e1084c4536
5 changed files with 82 additions and 31 deletions
@@ -13,15 +13,15 @@ export class ActivityBox extends Component {
/**
* @returns {Chatter}
*/
get chatter() {
return this.messaging.models['mail.chatter'].get(this.props.chatterLocalId);
get activityBoxView() {
return this.messaging.models['mail.activity_box_view'].get(this.props.activityBoxViewLocalId);
}
}
Object.assign(ActivityBox, {
props: {
chatterLocalId: String,
activityBoxViewLocalId: String,
},
template: 'mail.ActivityBox',
});
@@ -3,37 +3,37 @@
<t t-name="mail.ActivityBox" owl="1">
<div class="o_ActivityBox">
<t t-if="chatter and chatter.thread">
<a role="button" class="o_ActivityBox_title btn" t-on-click="chatter.onClickActivityBoxTitle">
<t t-if="activityBoxView">
<a role="button" class="o_ActivityBox_title btn" t-on-click="activityBoxView.onClickActivityBoxTitle">
<hr class="o_ActivityBox_titleLine" />
<span class="o_ActivityBox_titleText">
<i class="fa fa-fw" t-att-class="chatter.isActivityBoxVisible ? 'fa-caret-down' : 'fa-caret-right'"/>
<i class="fa fa-fw" t-att-class="activityBoxView.isActivityListVisible ? 'fa-caret-down' : 'fa-caret-right'"/>
Planned activities
</span>
<t t-if="!chatter.isActivityBoxVisible">
<t t-if="!activityBoxView.isActivityListVisible">
<span class="o_ActivityBox_titleBadges">
<t t-if="chatter.thread.overdueActivities.length > 0">
<t t-if="activityBoxView.chatter.thread.overdueActivities.length > 0">
<span class="o_ActivityBox_titleBadge badge rounded-circle badge-danger">
<t t-esc="chatter.thread.overdueActivities.length"/>
<t t-esc="activityBoxView.chatter.thread.overdueActivities.length"/>
</span>
</t>
<t t-if="chatter.thread.todayActivities.length > 0">
<t t-if="activityBoxView.chatter.thread.todayActivities.length > 0">
<span class="o_ActivityBox_titleBadge badge rounded-circle badge-warning">
<t t-esc="chatter.thread.todayActivities.length"/>
<t t-esc="activityBoxView.chatter.thread.todayActivities.length"/>
</span>
</t>
<t t-if="chatter.thread.futureActivities.length > 0">
<t t-if="activityBoxView.chatter.thread.futureActivities.length > 0">
<span class="o_ActivityBox_titleBadge badge rounded-circle badge-success">
<t t-esc="chatter.thread.futureActivities.length"/>
<t t-esc="activityBoxView.chatter.thread.futureActivities.length"/>
</span>
</t>
</span>
</t>
<hr class="o_ActivityBox_titleLine" />
</a>
<t t-if="chatter.isActivityBoxVisible">
<div class="o_ActivityList">
<t t-foreach="chatter.thread.activities" t-as="activity" t-key="activity.localId">
<t t-if="activityBoxView.isActivityListVisible">
<div class="o_ActivityBox_activityList">
<t t-foreach="activityBoxView.chatter.thread.activities" t-as="activity" t-key="activity.localId">
<Activity class="o_ActivityBox_activity" activityLocalId="activity.localId"/>
</t>
</div>
@@ -29,10 +29,10 @@
attachmentBoxViewLocalId="chatter.attachmentBoxView.localId"
/>
</t>
<t t-if="chatter.thread and chatter.hasActivities and chatter.thread.activities.length > 0">
<t t-if="chatter.activityBoxView">
<ActivityBox
class="o_Chatter_activityBox"
chatterLocalId="chatter.localId"
activityBoxViewLocalId="chatter.activityBoxView.localId"
/>
</t>
<t t-if="chatter.threadView">
@@ -0,0 +1,48 @@
/** @odoo-module **/
import { registerNewModel } from '@mail/model/model_core';
import { attr, one2one } from '@mail/model/model_field';
import { clear, link } from '@mail/model/model_field_command';
function factory(dependencies) {
class ActivityBoxView extends dependencies['mail.model'] {
/**
* @override
*/
_created() {
// Bind necessary until OWL supports arrow function in handlers: https://github.com/odoo/owl/issues/876
this.onClickActivityBoxTitle = this.onClickActivityBoxTitle.bind(this);
}
//----------------------------------------------------------------------
// Public
//----------------------------------------------------------------------
/**
* Handles click on activity box title.
*/
onClickActivityBoxTitle() {
this.update({ isActivityListVisible: !this.isActivityListVisible });
}
}
ActivityBoxView.fields = {
chatter: one2one('mail.chatter', {
inverse: 'activityBoxView',
readonly: true,
required: true,
}),
isActivityListVisible: attr({
default: true,
}),
};
ActivityBoxView.identifyingFields = ['chatter'];
ActivityBoxView.modelName = 'mail.activity_box_view';
return ActivityBoxView;
}
registerNewModel('mail.activity_box_view', factory);
@@ -32,7 +32,6 @@ function factory(dependencies) {
this._attachmentsLoaderTimeout = undefined;
this._isPreparingAttachmentsLoading = undefined;
// Bind necessary until OWL supports arrow function in handlers: https://github.com/odoo/owl/issues/876
this.onClickActivityBoxTitle = this.onClickActivityBoxTitle.bind(this);
this.onClickButtonAttachments = this.onClickButtonAttachments.bind(this);
this.onClickChatterTopbarClose = this.onClickChatterTopbarClose.bind(this);
this.onClickLogNote = this.onClickLogNote.bind(this);
@@ -59,15 +58,6 @@ function factory(dependencies) {
}
}
/**
* Handles click on activity box title.
*
* @param {MouseEvent} ev
*/
onClickActivityBoxTitle(ev) {
this.update({ isActivityBoxVisible: !this.isActivityBoxVisible });
}
/**
* Handles click on the attachments button.
*
@@ -185,6 +175,17 @@ function factory(dependencies) {
// Private
//----------------------------------------------------------------------
/**
* @private
* @returns {FieldCommand}
*/
_computeActivityBoxView() {
if (this.thread && this.thread.hasActivities && this.thread.activities.length > 0) {
return insertAndReplace();
}
return clear();
}
/**
* @private
* @returns {boolean}
@@ -311,6 +312,11 @@ function factory(dependencies) {
}
Chatter.fields = {
activityBoxView: one2one('mail.activity_box_view', {
compute: '_computeActivityBoxView',
inverse: 'chatter',
isCausal: true,
}),
attachmentBoxView: one2one('mail.attachment_box_view', {
inverse: 'chatter',
isCausal: true,
@@ -387,9 +393,6 @@ function factory(dependencies) {
readonly: true,
required: true,
}),
isActivityBoxVisible: attr({
default: true,
}),
/**
* Determiners whether the attachment box is visible initially.
*/