57 lines
1.6 KiB
JavaScript
57 lines
1.6 KiB
JavaScript
|
import MatrixClientPeg from '../MatrixClientPeg';
|
||
|
|
||
|
/**
|
||
|
* Get all widgets (user and room) for the current user
|
||
|
* @param {object} room The room to get widgets for
|
||
|
* @return {[object]} Array containing current / active room and user widget state events
|
||
|
*/
|
||
|
function getWidgets(room) {
|
||
|
const widgets = getRoomWidgets(room);
|
||
|
widgets.concat(getUserWidgets());
|
||
|
return widgets;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get room specific widgets
|
||
|
* @param {object} room The room to get widgets force
|
||
|
* @return {[object]} Array containing current / active room widgets
|
||
|
*/
|
||
|
function getRoomWidgets(room) {
|
||
|
const appsStateEvents = room.currentState.getStateEvents('im.vector.modular.widgets');
|
||
|
if (!appsStateEvents) {
|
||
|
return [];
|
||
|
}
|
||
|
|
||
|
return appsStateEvents.filter((ev) => {
|
||
|
return ev.getContent().type && ev.getContent().url;
|
||
|
});
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get user specific widgets (not linked to a specific room)
|
||
|
* @return {[object]} Array containing current / active user widgets
|
||
|
*/
|
||
|
function getUserWidgets() {
|
||
|
const client = MatrixClientPeg.get();
|
||
|
if (!client) {
|
||
|
throw new Error('User not logged in');
|
||
|
}
|
||
|
const userWidgets = client.getAccountData('m.widgets').getContent() || {};
|
||
|
return Object.keys(userWidgets).map((key) => userWidgets[key]);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get active stickerpack widgets (stickerpacks are user widgets by nature)
|
||
|
* @return {[object]} Array containing current / active stickerpack widgets
|
||
|
*/
|
||
|
function getStickerpackWidgets() {
|
||
|
return getUserWidgets().filter((widget) => widget.type='stickerpack');
|
||
|
}
|
||
|
|
||
|
export default {
|
||
|
getWidgets,
|
||
|
getRoomWidgets,
|
||
|
getUserWidgets,
|
||
|
getStickerpackWidgets,
|
||
|
};
|