From e1084c453689b4eb111340a116e9d2aa69098d2a Mon Sep 17 00:00:00 2001 From: "Didier (did)" Date: Wed, 17 Nov 2021 13:40:20 +0000 Subject: [PATCH] [IMP] mail: create activity_box model MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- .../components/activity_box/activity_box.js | 6 +-- .../components/activity_box/activity_box.xml | 26 +++++----- .../static/src/components/chatter/chatter.xml | 4 +- .../activity_box_view/activity_box_view.js | 48 +++++++++++++++++++ .../mail/static/src/models/chatter/chatter.js | 29 ++++++----- 5 files changed, 82 insertions(+), 31 deletions(-) create mode 100644 addons/mail/static/src/models/activity_box_view/activity_box_view.js diff --git a/addons/mail/static/src/components/activity_box/activity_box.js b/addons/mail/static/src/components/activity_box/activity_box.js index e053423387b..36a6a2230a4 100644 --- a/addons/mail/static/src/components/activity_box/activity_box.js +++ b/addons/mail/static/src/components/activity_box/activity_box.js @@ -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', }); diff --git a/addons/mail/static/src/components/activity_box/activity_box.xml b/addons/mail/static/src/components/activity_box/activity_box.xml index 444520c3c1a..6ce8af208e1 100644 --- a/addons/mail/static/src/components/activity_box/activity_box.xml +++ b/addons/mail/static/src/components/activity_box/activity_box.xml @@ -3,37 +3,37 @@
- - + +
- + Planned activities - + - + - + - + - + - + - +
- -
- + +
+
diff --git a/addons/mail/static/src/components/chatter/chatter.xml b/addons/mail/static/src/components/chatter/chatter.xml index 9812c8d7725..857c4440ef3 100644 --- a/addons/mail/static/src/components/chatter/chatter.xml +++ b/addons/mail/static/src/components/chatter/chatter.xml @@ -29,10 +29,10 @@ attachmentBoxViewLocalId="chatter.attachmentBoxView.localId" />
- + diff --git a/addons/mail/static/src/models/activity_box_view/activity_box_view.js b/addons/mail/static/src/models/activity_box_view/activity_box_view.js new file mode 100644 index 00000000000..af78fffac8b --- /dev/null +++ b/addons/mail/static/src/models/activity_box_view/activity_box_view.js @@ -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); diff --git a/addons/mail/static/src/models/chatter/chatter.js b/addons/mail/static/src/models/chatter/chatter.js index 6f856aa3bd3..9728ba8a949 100644 --- a/addons/mail/static/src/models/chatter/chatter.js +++ b/addons/mail/static/src/models/chatter/chatter.js @@ -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. */