xmpp.chapril.org-conversejs/src/plugins/controlbox/model.js
2020-12-08 09:50:17 +01:00

59 lines
1.7 KiB
JavaScript

import { _converse, api, converse } from '@converse/headless/core';
const { dayjs } = converse.env;
/**
* Mixin which turns a ChatBox model into a ControlBox model.
*
* 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 ControlBoxMixin = {
defaults () {
return {
'bookmarked': false,
'box_id': 'controlbox',
'chat_state': undefined,
'closed': !api.settings.get('show_controlbox_by_default'),
'num_unread': 0,
'time_opened': this.get('time_opened') || new Date().getTime(),
'type': _converse.CONTROLBOX_TYPE,
'url': ''
};
},
initialize () {
if (this.get('id') === 'controlbox') {
this.set({ 'time_opened': dayjs(0).valueOf() });
} else {
_converse.ChatBox.prototype.initialize.apply(this, arguments);
}
},
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: function onReconnection () {}
};
export default ControlBoxMixin;