xmpp.chapril.org-conversejs/src/plugins/controlbox/model.js

53 lines
1.5 KiB
JavaScript

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;