summaryrefslogtreecommitdiff
path: root/addons/mail/static/src/js/models/threads/document_thread.js
diff options
context:
space:
mode:
authorOdoo's Mergebot <xmo+roboto@odoo.com>2019-09-03 13:06:23 +0200
committerGitHub <noreply@github.com>2019-09-03 13:06:23 +0200
commit85c5d0a4be4bf7afb7d15f0b5a07cc0daecaa1a5 (patch)
treecb11f94d3c993e83e93a386914075d9e8e8a3cde /addons/mail/static/src/js/models/threads/document_thread.js
parent82c0e9b620bfbd409914e1941e5c8e9117982bd1 (diff)
parent40b57ca824e967a9221f7834e4c9b3db7a4849d0 (diff)
[MERGE][FIX] bus, mail, web: several cross-tab communication fixes
### [FIX] bus: background slave tabs should not loose notifications Slave tabs missed some notifications in case the local storage event's `newValue` did not match actual value in local storage. This happens when master tab overwrites a value that slave tabs did not take the time to read. Slave tabs should now always handle all local storage events. Task-ID 2044231 ### [FIX] bus, mail: correctly synchronize document chat windows Cross-tab synchronization of document chat windows resulted sometimes with an infinite loop. This happens due to tabs relying on actual value in the local storage and all document chat windows state being set as a single local storage entry. Cross-tab communication of document chat windows now is relying on event's `newValue`, and each document chat window has its own local storage entry. Changes from local storage no longer writes again in the local storage, so that it no longer makes an echo (= infinite loop). Task-Id 2034997 closes odoo/odoo#36177 Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
Diffstat (limited to 'addons/mail/static/src/js/models/threads/document_thread.js')
-rw-r--r--addons/mail/static/src/js/models/threads/document_thread.js27
1 files changed, 24 insertions, 3 deletions
diff --git a/addons/mail/static/src/js/models/threads/document_thread.js b/addons/mail/static/src/js/models/threads/document_thread.js
index 18f1e4fb762..3d91b786cef 100644
--- a/addons/mail/static/src/js/models/threads/document_thread.js
+++ b/addons/mail/static/src/js/models/threads/document_thread.js
@@ -62,9 +62,16 @@ var DocumentThread = Thread.extend({
* shared between tabs, and restored on F5.
*
* @override
+ * @param {Object} [options]
+ * @param {boolean} [options.skipCrossTabSync=false] if set, it should
+ * not notify other tabs from updating document thread state. This happens
+ * in case the `close` operation comes from local storage event.
*/
- close: function () {
+ close: function (options) {
this._super.apply(this, arguments);
+ if (options && options.skipCrossTabSync) {
+ return;
+ }
this.call('mail_service', 'updateDocumentThreadState', this._id, {
name: this.getName(),
windowState: 'closed',
@@ -75,9 +82,16 @@ var DocumentThread = Thread.extend({
* shared between tabs, and restored on F5.
*
* @override
+ * @param {Object} [options]
+ * @param {boolean} [options.skipCrossTabSync=false] if set, it should
+ * not notify other tabs from updating document thread state. This happens
+ * in case the `detach` operation comes from local storage event.
*/
- detach: function () {
+ detach: function (options) {
this._super.apply(this, arguments);
+ if (options && options.skipCrossTabSync) {
+ return;
+ }
var windowState = this._folded ? 'folded' : 'open';
this.call('mail_service', 'updateDocumentThreadState', this._id, {
name: this.getName(),
@@ -105,9 +119,16 @@ var DocumentThread = Thread.extend({
* shared between tabs, and restored on F5.
*
* @override
+ * @param {Object} [options]
+ * @param {boolean} [options.skipCrossTabSync=false] if set, it should
+ * not notify other tabs from updating document thread state. This happens
+ * in case the `detach` operation comes from local storage event.
*/
- fold: function () {
+ fold: function (folded, options) {
this._super.apply(this, arguments);
+ if (options && options.skipCrossTabSync) {
+ return;
+ }
var windowState = this._folded ? 'folded' : 'open';
this.call('mail_service', 'updateDocumentThreadState', this._id, {
name: this.getName(),