From 4c763e6bca864d710c98ce7510169772a2dea55b Mon Sep 17 00:00:00 2001 From: Xavier Dubuc Date: Mon, 22 Jun 2020 15:59:16 +0000 Subject: [PATCH] [FIX] mail: clarify composer placeholder MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also moved isLog from composer component prop to composer model field. task-2280159 & task-2250887 closes odoo/odoo#53645 X-original-commit: ba41b1de5edc2b3153a5b20a4f11778a3f724ade Signed-off-by: Alexandre Kühn (aku) --- .../static/src/components/chatter/chatter.xml | 1 - .../chatter_topbar/chatter_topbar.js | 11 +- .../chatter_topbar/chatter_topbar.xml | 4 +- .../chatter_topbar/chatter_topbar_tests.js | 137 ++++++++++++++++++ .../src/components/composer/composer.js | 11 +- .../src/components/composer/composer.xml | 4 +- .../src/components/composer/composer_tests.js | 83 ++++++++++- .../composer_text_input.js | 16 ++ .../composer_text_input.xml | 2 +- .../mail/static/src/models/chatter/chatter.js | 26 ++-- .../static/src/models/composer/composer.js | 50 ++----- 11 files changed, 273 insertions(+), 72 deletions(-) diff --git a/addons/mail/static/src/components/chatter/chatter.xml b/addons/mail/static/src/components/chatter/chatter.xml index f630eaf7634..ad5751cdbb0 100644 --- a/addons/mail/static/src/components/chatter/chatter.xml +++ b/addons/mail/static/src/components/chatter/chatter.xml @@ -17,7 +17,6 @@ hasTextInputSendOnEnterEnabled="false" isCompact="false" isExpandable="true" - isLog="chatter.isComposerLog" t-on-o-message-posted="_onComposerMessagePosted" t-ref="composer" /> diff --git a/addons/mail/static/src/components/chatter_topbar/chatter_topbar.js b/addons/mail/static/src/components/chatter_topbar/chatter_topbar.js index c4b088b7709..37b28b4970e 100644 --- a/addons/mail/static/src/components/chatter_topbar/chatter_topbar.js +++ b/addons/mail/static/src/components/chatter_topbar/chatter_topbar.js @@ -23,6 +23,7 @@ class ChatterTopbar extends Component { return { areThreadAttachmentsLoaded: thread && thread.areAttachmentsLoaded, chatter: chatter ? chatter.__state : undefined, + composer: chatter && chatter.composer ? chatter.composer.__state : undefined, threadAttachmentsAmount: threadAttachments.length, }; }); @@ -66,7 +67,10 @@ class ChatterTopbar extends Component { * @param {MouseEvent} ev */ _onClickLogNote(ev) { - if (this.chatter.isComposerVisible && this.chatter.isComposerLog) { + if (!this.chatter.composer) { + return; + } + if (this.chatter.isComposerVisible && this.chatter.composer.isLog) { this.chatter.update({ isComposerVisible: false }); } else { this.chatter.showLogNote(); @@ -106,7 +110,10 @@ class ChatterTopbar extends Component { * @param {MouseEvent} ev */ _onClickSendMessage(ev) { - if (this.chatter.isComposerVisible && !this.chatter.isComposerLog) { + if (!this.chatter.composer) { + return; + } + if (this.chatter.isComposerVisible && !this.chatter.composer.isLog) { this.chatter.update({ isComposerVisible: false }); } else { this.chatter.showSendMessage(); diff --git a/addons/mail/static/src/components/chatter_topbar/chatter_topbar.xml b/addons/mail/static/src/components/chatter_topbar/chatter_topbar.xml index 67dfe4ea844..3512f93332e 100644 --- a/addons/mail/static/src/components/chatter_topbar/chatter_topbar.xml +++ b/addons/mail/static/src/components/chatter_topbar/chatter_topbar.xml @@ -9,7 +9,7 @@ diff --git a/addons/mail/static/src/components/composer/composer_tests.js b/addons/mail/static/src/components/composer/composer_tests.js index e506e99a48e..c62242360a6 100644 --- a/addons/mail/static/src/components/composer/composer_tests.js +++ b/addons/mail/static/src/components/composer/composer_tests.js @@ -58,12 +58,87 @@ QUnit.module('composer_tests.js', { }, }); -QUnit.test('composer text input: basic rendering', async function (assert) { +QUnit.test('composer text input: basic rendering when posting a message', async function (assert) { assert.expect(5); await this.start(); - const composer = this.env.models['mail.composer'].create(); - await this.createComposerComponent(composer); + const thread = this.env.models['mail.thread'].create({ + composer: [['create', { isLog: false }]], + id: 20, + model: 'res.partner', + }); + await this.createComposerComponent(thread.composer); + assert.strictEqual( + document.querySelectorAll('.o_Composer').length, + 1, + "should have composer in discuss thread" + ); + assert.strictEqual( + document.querySelectorAll('.o_Composer_textInput').length, + 1, + "should have text input inside discuss thread composer" + ); + assert.ok( + document.querySelector('.o_Composer_textInput').classList.contains('o_ComposerTextInput'), + "composer text input of composer should be a ComposerTextIput component" + ); + assert.strictEqual( + document.querySelectorAll(`.o_ComposerTextInput_textarea`).length, + 1, + "should have editable part inside composer text input" + ); + assert.strictEqual( + document.querySelector(`.o_ComposerTextInput_textarea`).placeholder, + "Send a message to followers...", + "should have 'Send a message to followers...' as placeholder composer text input" + ); +}); + +QUnit.test('composer text input: basic rendering when logging note', async function (assert) { + assert.expect(5); + + await this.start(); + const thread = this.env.models['mail.thread'].create({ + composer: [['create', { isLog: true }]], + id: 20, + model: 'res.partner', + }); + await this.createComposerComponent(thread.composer); + assert.strictEqual( + document.querySelectorAll('.o_Composer').length, + 1, + "should have composer in discuss thread" + ); + assert.strictEqual( + document.querySelectorAll('.o_Composer_textInput').length, + 1, + "should have text input inside discuss thread composer" + ); + assert.ok( + document.querySelector('.o_Composer_textInput').classList.contains('o_ComposerTextInput'), + "composer text input of composer should be a ComposerTextIput component" + ); + assert.strictEqual( + document.querySelectorAll(`.o_ComposerTextInput_textarea`).length, + 1, + "should have editable part inside composer text input" + ); + assert.strictEqual( + document.querySelector(`.o_ComposerTextInput_textarea`).placeholder, + "Log an internal note...", + "should have 'Log an internal note...' as placeholder in composer text input if composer is log" + ); +}); + +QUnit.test('composer text input: basic rendering when linked thread is a mail.channel', async function (assert) { + assert.expect(5); + + await this.start(); + const thread = this.env.models['mail.thread'].create({ + id: 20, + model: 'mail.channel', + }); + await this.createComposerComponent(thread.composer); assert.strictEqual( document.querySelectorAll('.o_Composer').length, 1, @@ -86,7 +161,7 @@ QUnit.test('composer text input: basic rendering', async function (assert) { assert.strictEqual( document.querySelector(`.o_ComposerTextInput_textarea`).placeholder, "Write something...", - "should have placeholder in note editable of composer text input" + "should have 'Write something...' as placeholder in composer text input if composer is for a 'mail.channel'" ); }); diff --git a/addons/mail/static/src/components/composer_text_input/composer_text_input.js b/addons/mail/static/src/components/composer_text_input/composer_text_input.js index 1be0e77a98b..279d5a6ae93 100644 --- a/addons/mail/static/src/components/composer_text_input/composer_text_input.js +++ b/addons/mail/static/src/components/composer_text_input/composer_text_input.js @@ -65,6 +65,22 @@ class ComposerTextInput extends Component { return this.env.models['mail.composer'].get(this.props.composerLocalId); } + /** + * @returns {string} + */ + get textareaPlaceholder() { + if (!this.composer) { + return ""; + } + if (this.composer.thread && this.composer.thread.model !== 'mail.channel') { + if (this.composer.isLog) { + return this.env._t("Log an internal note..."); + } + return this.env._t("Send a message to followers..."); + } + return this.env._t("Write something..."); + } + focusout() { this.saveStateInStore(); this._textareaRef.el.blur(); diff --git a/addons/mail/static/src/components/composer_text_input/composer_text_input.xml b/addons/mail/static/src/components/composer_text_input/composer_text_input.xml index 949f1065a56..dfeae27fc61 100644 --- a/addons/mail/static/src/components/composer_text_input/composer_text_input.xml +++ b/addons/mail/static/src/components/composer_text_input/composer_text_input.xml @@ -36,7 +36,7 @@ -