[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:
@@ -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.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user