diff options
| author | Alexandre Kühn <aku@odoo.com> | 2020-02-04 12:05:55 +0000 |
|---|---|---|
| committer | Alexandre Kühn <aku@odoo.com> | 2020-02-04 12:05:56 +0000 |
| commit | cdc5ad32301fb0d79402b85948904eb9965b67b6 (patch) | |
| tree | 0e961f66a4f62c7493172c95e3777a1bd51c35fc /addons | |
| parent | 34b091fc93b92636141a74eb25a08c7f7d087380 (diff) | |
[FIX] mail: fix concurrent rendering thread with message fadeout
Follow up on 4f5334a081ee0e551fc2848aa230dabc96984862
Before this commit, thread was not re-rendered correctly in Discuss
App when user clicked on "Mark as Read" from Inbox and then changed
conversation in a narrow time frame.
This issue was discovered from a test that failed undeterministically
on rare occasions (once every hundreds of builds on Runbot):
```
QUnit test failed: "mail > Discuss > all messages in "Inbox" in "History" after marked all as read"
[message: "there should be 30 messages in History", actual: "0", expected: "30"]
```
This test crashed due to the rendering of Inbox after message fadeout
animation that overwrote the rendering of History. As a result,
thread widget indefinitely displays Inbox content, which is empty.
The HTML content of Discuss during the crash shows that breadcrumb
and discuss sidebar correctly have "History" as the active thread,
but thread widget still shows "Inbox" as content:
http://runbot.odoo.com/runbot/build/1092504
This commit fixes the issue by re-rendering of the thread with
message fadeout animation only if the active thread has not changed.
closes odoo/odoo#44585
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
Diffstat (limited to 'addons')
| -rw-r--r-- | addons/mail/static/src/js/thread_widget.js | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/addons/mail/static/src/js/thread_widget.js b/addons/mail/static/src/js/thread_widget.js index 3ec66d02520..0a58b13d5ad 100644 --- a/addons/mail/static/src/js/thread_widget.js +++ b/addons/mail/static/src/js/thread_widget.js @@ -260,11 +260,14 @@ var ThreadWidget = Widget.extend({ */ removeMessageAndRender: function (messageID, thread, options) { var self = this; + this._currentThreadID = thread.getID(); return new Promise(function (resolve, reject) { self.$('.o_thread_message[data-message-id="' + messageID + '"]') .fadeOut({ done: function () { - self.render(thread, options); + if (self._currentThreadID === thread.getID()) { + self.render(thread, options); + } resolve(); }, duration: 200, |
