59 lines
1.7 KiB
JavaScript
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;
|