70 lines
2.7 KiB
JavaScript
70 lines
2.7 KiB
JavaScript
import { _converse, api } from "@converse/headless/core";
|
|
|
|
export default {
|
|
/**
|
|
* The "roomviews" namespace groups methods relevant to chatroom
|
|
* (aka groupchats) views.
|
|
*
|
|
* @namespace _converse.api.roomviews
|
|
* @memberOf _converse.api
|
|
*/
|
|
roomviews: {
|
|
/**
|
|
* Retrieves a groupchat (aka chatroom) view. The chat should already be open.
|
|
*
|
|
* @method _converse.api.roomviews.get
|
|
* @param {String|string[]} name - e.g. 'coven@conference.shakespeare.lit' or
|
|
* ['coven@conference.shakespeare.lit', 'cave@conference.shakespeare.lit']
|
|
* @returns {View} View representing the groupchat
|
|
*
|
|
* @example
|
|
* // To return a single view, provide the JID of the groupchat
|
|
* const view = _converse.api.roomviews.get('coven@conference.shakespeare.lit');
|
|
*
|
|
* @example
|
|
* // To return an array of views, provide an array of JIDs:
|
|
* const views = _converse.api.roomviews.get(['coven@conference.shakespeare.lit', 'cave@conference.shakespeare.lit']);
|
|
*
|
|
* @example
|
|
* // To return views of all open groupchats, call the method without any parameters::
|
|
* const views = _converse.api.roomviews.get();
|
|
*
|
|
*/
|
|
get (jids) {
|
|
if (Array.isArray(jids)) {
|
|
const views = api.chatviews.get(jids);
|
|
return views.filter(v => v.model.get('type') === _converse.CHATROOMS_TYPE)
|
|
} else {
|
|
const view = api.chatviews.get(jids);
|
|
if (view.model.get('type') === _converse.CHATROOMS_TYPE) {
|
|
return view;
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
},
|
|
/**
|
|
* Lets you close open chatrooms.
|
|
*
|
|
* You can call this method without any arguments to close
|
|
* all open chatrooms, or you can specify a single JID or
|
|
* an array of JIDs.
|
|
*
|
|
* @method _converse.api.roomviews.close
|
|
* @param {(String[]|String)} jids The JID or array of JIDs of the chatroom(s)
|
|
* @returns { Promise } - Promise which resolves once the views have been closed.
|
|
*/
|
|
close (jids) {
|
|
let views;
|
|
if (jids === undefined) {
|
|
views = _converse.chatboxviews;
|
|
} else if (typeof jids === 'string') {
|
|
views = [_converse.chatboxviews.get(jids)].filter(v => v);
|
|
} else if (Array.isArray(jids)) {
|
|
views = jids.map(jid => _converse.chatboxviews.get(jid));
|
|
}
|
|
return Promise.all(views.map(v => (v.is_chatroom && v.model && v.close())))
|
|
}
|
|
}
|
|
}
|