Browse Source

Call minimize on the model

Fix minimizing by listening to change event

Fixes around showing/hiding and minimizing/maximizing

Don't trigger a `show` event on the model to show a chat, instead rely
on the `hidden` attribute which causes a rerender and will show/hide
chats.
JC Brand 4 years ago
parent
commit
05c00c5e1c

+ 2 - 0
spec/mock.js

@@ -641,6 +641,8 @@ window.addEventListener('converse-loaded', () => {
             'view_mode': mock.view_mode
         }, settings || {}));
 
+        window._converse = _converse;
+
         _converse.api.vcard.get = function (model, force) {
             let jid;
             if (typeof model === 'string' || model instanceof String) {

+ 3 - 2
src/headless/plugins/chat/model.js

@@ -910,11 +910,12 @@ const ChatBox = ModelWithContact.extend({
             }
             u.safeSave(this, {'hidden': false});
         }
-        if (_converse.isUniView() && this.get('hidden')) {
+        if (_converse.isUniView()) {
             return;
         } else {
-            return this.trigger("show");
+            u.safeSave(this, {'hidden': false});
         }
+        return this;
     },
 
     /**

+ 3 - 2
src/plugins/chatboxviews/view.js

@@ -9,11 +9,12 @@ class ConverseChats extends ElementView {
 
     initialize () {
         this.model = _converse.chatboxes;
-        this.listenTo(this.model, 'destroy', this.render);
         this.listenTo(this.model, 'add', this.render);
-        this.listenTo(this.model, 'change:hidden', this.render);
         this.listenTo(this.model, 'change:closed', this.render);
+        this.listenTo(this.model, 'change:hidden', this.render);
         this.listenTo(this.model, 'change:jid', this.render);
+        this.listenTo(this.model, 'change:minimized', this.render);
+        this.listenTo(this.model, 'destroy', this.render);
 
         const bg = document.getElementById('conversejs-bg');
         if (bg && !bg.innerHTML.trim()) {

+ 2 - 2
src/plugins/chatview/view.js

@@ -44,9 +44,9 @@ export default class ChatView extends BaseChatView {
         api.listen.on('windowStateChanged', this.onWindowStateChanged);
 
         this.listenTo(this.model, 'change:composing_spoiler', this.renderMessageForm);
-        this.listenTo(this.model, 'change:hidden', m => (!m.get('hidden') && this.show()));
+        this.listenTo(this.model, 'change:hidden', () => this.afterShown());
+        this.listenTo(this.model, 'change:minimized', () => this.afterShown());
         this.listenTo(this.model, 'change:status', this.onStatusMessageChanged);
-        this.listenTo(this.model, 'show', this.show);
         this.listenTo(this.model, 'vcard:change', this.renderHeading);
 
         if (this.model.contact) {

+ 4 - 2
src/plugins/controlbox/api.js

@@ -1,4 +1,6 @@
-import { _converse, api } from "@converse/headless/core";
+import { _converse, api, converse } from "@converse/headless/core";
+
+const { u } = converse.env;
 
 export default {
     /**
@@ -18,7 +20,7 @@ export default {
             await api.waitUntil('chatBoxesFetched');
             const model = await api.chatboxes.get('controlbox') ||
               api.chatboxes.create('controlbox', {}, _converse.Controlbox);
-            model.trigger('show');
+            u.safeSave(model, {'closed': false});
             return model;
         },
 

+ 1 - 5
src/plugins/controlbox/toggle.js

@@ -27,11 +27,7 @@ class ControlBoxToggle extends ElementView {
         if (!controlbox) {
             controlbox = addControlBox();
         }
-        if (api.connection.connected()) {
-            controlbox.save({'closed': false});
-        } else {
-            controlbox.trigger('show');
-        }
+        u.safeSave(controlbox, {'closed': false});
     }
 
     onClick (e) {

+ 1 - 11
src/plugins/minimize/index.js

@@ -50,7 +50,7 @@ converse.plugins.add('converse-minimize', {
         ChatBox: {
             initialize () {
                 this.__super__.initialize.apply(this, arguments);
-                this.on('show', this.maximize, this);
+                this.on('change:hidden', m => !m.get('hidden') && this.maximize(), this);
 
                 if (this.get('id') === 'controlbox') {
                     return;
@@ -75,16 +75,6 @@ converse.plugins.add('converse-minimize', {
         },
 
         ChatBoxView: {
-            show () {
-                const { _converse } = this.__super__;
-                if (_converse.api.settings.get("view_mode") === 'overlayed' && this.model.get('minimized')) {
-                    this.model.minimize();
-                    return this;
-                } else {
-                    return this.__super__.show.apply(this, arguments);
-                }
-            },
-
             isNewMessageHidden () {
                 return this.model.get('minimized') ||
                     this.__super__.isNewMessageHidden.apply(this, arguments);

+ 2 - 0
src/plugins/minimize/mixins.js

@@ -5,6 +5,7 @@ const u = converse.env.utils;
 export const minimizableChatBox = {
     maximize () {
         u.safeSave(this, {
+            'hidden': false,
             'minimized': false,
             'time_opened': new Date().getTime()
         });
@@ -12,6 +13,7 @@ export const minimizableChatBox = {
 
     minimize () {
         u.safeSave(this, {
+            'hidden': true,
             'minimized': true,
             'time_minimized': new Date().toISOString()
         });

+ 2 - 2
src/plugins/minimize/utils.js

@@ -104,7 +104,7 @@ function getOldestMaximizedChat (exclude_ids) {
 export function addMinimizeButtonToChat (view, buttons) {
     const data = {
         'a_class': 'toggle-chatbox-button',
-        'handler': ev => view.minimize(ev),
+        'handler': ev => view.model.minimize(ev),
         'i18n_text': __('Minimize'),
         'i18n_title': __('Minimize this chat'),
         'icon_class': "fa-minus",
@@ -119,7 +119,7 @@ export function addMinimizeButtonToChat (view, buttons) {
 export function addMinimizeButtonToMUC (view, buttons) {
     const data = {
         'a_class': 'toggle-chatbox-button',
-        'handler': ev => view.minimize(ev),
+        'handler': ev => view.model.minimize(ev),
         'i18n_text': __('Minimize'),
         'i18n_title': __('Minimize this groupchat'),
         'icon_class': "fa-minus",

+ 6 - 5
src/plugins/muc-views/muc.js

@@ -89,6 +89,8 @@ export default class MUCView extends BaseChatView {
             debounce(() => this.renderHeading(), 250)
         );
         this.listenTo(this.model, 'change:composing_spoiler', this.renderMessageForm);
+        this.listenTo(this.model, 'change:hidden', () => this.afterShown());
+        this.listenTo(this.model, 'change:minimized', () => this.afterShown());
         this.listenTo(this.model, 'change:hidden_occupants', this.onSidebarToggle);
         this.listenTo(this.model, 'configurationNeeded', this.getAndRenderConfigurationForm);
         this.listenTo(this.model, 'show', this.show);
@@ -695,11 +697,10 @@ export default class MUCView extends BaseChatView {
      * @method _converse.ChatRoomView#afterShown
      */
     afterShown () {
-        // Override from converse-chatview, specifically to avoid
-        // the 'active' chat state from being sent out prematurely.
-        // This is instead done in `onConnectionStatusChanged` below.
-        this.model.clearUnreadMsgCounter();
-        this.scrollDown();
+        if (!this.model.get('hidden') && !this.model.get('minimized')) {
+            this.model.clearUnreadMsgCounter();
+            this.scrollDown();
+        }
     }
 
     onConnectionStatusChanged () {