53 lines
1.5 KiB
JavaScript
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;
|