summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/mail/static/src/js/composers/basic_composer.js7
-rw-r--r--addons/mail/static/src/js/discuss.js4
-rw-r--r--addons/mail/static/src/js/thread_windows/abstract_thread_window.js4
-rw-r--r--addons/mail/static/tests/discuss_tests.js50
4 files changed, 59 insertions, 6 deletions
diff --git a/addons/mail/static/src/js/composers/basic_composer.js b/addons/mail/static/src/js/composers/basic_composer.js
index 72936152ae5..c84296d55d1 100644
--- a/addons/mail/static/src/js/composers/basic_composer.js
+++ b/addons/mail/static/src/js/composers/basic_composer.js
@@ -510,9 +510,10 @@ var BasicComposer = Widget.extend({
clearTimeout(this._cannedTimeout);
var self = this;
this._preprocessMessage().then(function (message) {
- self.trigger('post_message', message);
- self._clearComposerOnSend();
- self.$input.focus();
+ self.trigger('post_message', message, function() {
+ self._clearComposerOnSend();
+ self.$input.focus();
+ });
});
},
/**
diff --git a/addons/mail/static/src/js/discuss.js b/addons/mail/static/src/js/discuss.js
index 4e88434f86d..8acd52d99c2 100644
--- a/addons/mail/static/src/js/discuss.js
+++ b/addons/mail/static/src/js/discuss.js
@@ -1461,8 +1461,9 @@ var Discuss = AbstractAction.extend({
/**
* @private
* @param {Object} messageData
+ * @param {Function} callback
*/
- _onPostMessage: function (messageData) {
+ _onPostMessage: function (messageData, callback) {
var self = this;
var options = {};
if (this._selectedMessage) {
@@ -1483,6 +1484,7 @@ var Discuss = AbstractAction.extend({
} else {
self._threadWidget.scrollToBottom();
}
+ callback();
});
},
/**
diff --git a/addons/mail/static/src/js/thread_windows/abstract_thread_window.js b/addons/mail/static/src/js/thread_windows/abstract_thread_window.js
index f09b78b8d3f..0af2d1080db 100644
--- a/addons/mail/static/src/js/thread_windows/abstract_thread_window.js
+++ b/addons/mail/static/src/js/thread_windows/abstract_thread_window.js
@@ -394,8 +394,9 @@ var AbstractThreadWindow = Widget.extend({
*
* @private
* @param {Object} messageData
+ * @param {Function} callback
*/
- _postMessage: function (messageData) {
+ _postMessage: function (messageData, callback) {
var self = this;
if (!this.hasThread()) {
return;
@@ -403,6 +404,7 @@ var AbstractThreadWindow = Widget.extend({
this._thread.postMessage(messageData)
.then(function () {
self._threadWidget.scrollToBottom();
+ callback();
});
},
/**
diff --git a/addons/mail/static/tests/discuss_tests.js b/addons/mail/static/tests/discuss_tests.js
index f25c7082648..daf34b4a5be 100644
--- a/addons/mail/static/tests/discuss_tests.js
+++ b/addons/mail/static/tests/discuss_tests.js
@@ -3,7 +3,6 @@ odoo.define('mail.discuss_test', function (require) {
var mailTestUtils = require('mail.testUtils');
-var concurrency = require('web.concurrency');
var testUtils = require('web.test_utils');
var createDiscuss = mailTestUtils.createDiscuss;
@@ -1491,5 +1490,54 @@ QUnit.test('custom-named DM conversation', async function (assert) {
discuss.destroy();
});
+QUnit.test('input not cleared on unresolved message_post rpc', async function (assert) {
+ assert.expect(2);
+
+ // Promise to simulate late server response on message post
+ var messagePostPromise = testUtils.makeTestPromise();
+
+ this.data.initMessaging = {
+ channel_slots: {
+ channel_channel: [{
+ id: 1,
+ channel_type: "channel",
+ name: "general",
+ }],
+ },
+ };
+
+ var discuss = await createDiscuss({
+ id: 1,
+ context: {},
+ params: {},
+ data: this.data,
+ services: this.services,
+ mockRPC: function (route, args) {
+ if (args.method === 'message_post') {
+ return messagePostPromise;
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ // Click on channel 'general'
+ var $general = discuss.$('.o_mail_discuss_sidebar').find('.o_mail_discuss_item[data-thread-id=1]');
+ await testUtils.dom.click($general);
+
+ // Type message
+ var $input = discuss.$('textarea.o_composer_text_field').first();
+ $input.focus();
+ $input.val('test message');
+
+ // Send message
+ await testUtils.fields.triggerKeydown($input, 'enter');
+ assert.strictEqual($input.val(), 'test message', "composer should not be cleared on send without server response");
+
+ // Simulate server response
+ messagePostPromise.resolve();
+ await testUtils.nextTick();
+ assert.strictEqual($input.val(), '', "composer should be cleared on send after server response");
+ discuss.destroy();
+});
});
});