Converse converse.js

Source: plugins/controlbox/model.js

import { _converse, api, converse } from '@converse/headless/core';
import { Model } from '@converse/skeletor/src/model.js';

const { dayjs } = converse.env;

/**
 * The ControlBox is the section of the chat that contains the open groupchats,
 * bookmarks and roster.
 *
 * In `overlayed` `view_mode` it's a box like the chat boxes, in `fullscreen`
 * `view_mode` it's a left-aligned sidebar.
 * @mixin
 */
const ControlBox = Model.extend({

    defaults () {
        return {
            'bookmarked': false,
            'box_id': 'controlbox',
            'chat_state': undefined,
            'closed': !api.settings.get('show_controlbox_by_default'),
            'num_unread': 0,
            'time_opened': dayjs(0).valueOf(),
            'type': _converse.CONTROLBOX_TYPE,
            'url': ''
        };
    },

    validate (attrs) {
        if (attrs.type === _converse.CONTROLBOX_TYPE) {
            if (api.settings.get('view_mode') === 'embedded' && api.settings.get('singleton')) {
                return 'Controlbox not relevant in embedded view mode';
            }
            return;
        }
        return _converse.ChatBox.prototype.validate.call(this, attrs);
    },

    maybeShow (force) {
        if (!force && this.get('id') === 'controlbox') {
            // Must return the chatbox
            return this;
        }
        return _converse.ChatBox.prototype.maybeShow.call(this, force);
    },

    onReconnection () {
        this.save('connected', true);
    }
});

export default ControlBox;