Browse Source

Set `hidden` to `true` by default for chats in singleton mode.

However, when a new chat is created due to an incoming message, and
there aren't any other chats visible, then show it.
JC Brand 7 years ago
parent
commit
d4d03925b8
3 changed files with 48 additions and 18 deletions
  1. 24 9
      dist/converse.js
  2. 10 7
      src/converse-chatboxes.js
  3. 14 2
      src/converse-singleton.js

+ 24 - 9
dist/converse.js

@@ -62326,13 +62326,16 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
         comparator: 'time'
       });
       _converse.ChatBox = _converse.ModelWithVCardAndPresence.extend({
-        defaults: {
-          'bookmarked': false,
-          'chat_state': undefined,
-          'num_unread': 0,
-          'type': 'chatbox',
-          'message_type': 'chat',
-          'url': ''
+        defaults() {
+          return {
+            'bookmarked': false,
+            'chat_state': undefined,
+            'num_unread': 0,
+            'type': 'chatbox',
+            'message_type': 'chat',
+            'url': '',
+            'hidden': _.includes(['mobile', 'fullscreen'], _converse.view_mode)
+          };
         },
 
         initialize() {
@@ -76610,8 +76613,20 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
       // new functions which don't exist yet can also be added.
       ChatBoxes: {
         chatBoxMayBeShown(chatbox) {
-          if (_.includes(['mobile', 'fullscreen', 'embedded'], this.__super__._converse.view_mode)) {
-            return !chatbox.get('hidden');
+          const _converse = this.__super__._converse;
+
+          if (chatbox.get('id') === 'controlbox') {
+            return true;
+          }
+
+          if (_.includes(['mobile', 'fullscreen', 'embedded'], _converse.view_mode)) {
+            const any_chats_visible = _converse.chatboxes.filter(cb => cb.get('id') != 'controlbox').filter(cb => !cb.get('hidden')).length > 0;
+
+            if (any_chats_visible) {
+              return !chatbox.get('hidden');
+            } else {
+              return true;
+            }
           } else {
             return this.__super__.chatBoxMayBeShown.apply(this, arguments);
           }

+ 10 - 7
src/converse-chatboxes.js

@@ -245,13 +245,16 @@
 
 
             _converse.ChatBox = _converse.ModelWithVCardAndPresence.extend({
-                defaults: {
-                    'bookmarked': false,
-                    'chat_state': undefined,
-                    'num_unread': 0,
-                    'type': 'chatbox',
-                    'message_type': 'chat',
-                    'url': ''
+                defaults () {
+                    return {
+                        'bookmarked': false,
+                        'chat_state': undefined,
+                        'num_unread': 0,
+                        'type': 'chatbox',
+                        'message_type': 'chat',
+                        'url': '',
+                        'hidden': _.includes(['mobile', 'fullscreen'], _converse.view_mode)
+                    }
                 },
 
                 initialize () {

+ 14 - 2
src/converse-singleton.js

@@ -46,8 +46,20 @@
             ChatBoxes: {
 
                 chatBoxMayBeShown (chatbox) {
-                    if (_.includes(['mobile', 'fullscreen', 'embedded'], this.__super__._converse.view_mode)) {
-                        return !chatbox.get('hidden');
+                    const { _converse } = this.__super__;
+                    if (chatbox.get('id') === 'controlbox') {
+                        return true;
+                    }
+                    if (_.includes(['mobile', 'fullscreen', 'embedded'], _converse.view_mode)) {
+                        const any_chats_visible = _converse.chatboxes
+                            .filter((cb) => cb.get('id') != 'controlbox')
+                            .filter((cb) => !cb.get('hidden')).length > 0;
+
+                        if (any_chats_visible) {
+                            return !chatbox.get('hidden');
+                        } else {
+                            return true;
+                        }
                     } else {
                         return this.__super__.chatBoxMayBeShown.apply(this, arguments);
                     }