UNPKG

podchat-browser

Version:

Javascript SDK to use POD's Chat Service - Browser Only

140 lines (123 loc) 4.66 kB
import {CallUser, CallScreenShare} from "./callUser"; function CallUsers({app, callId}) { const config = { list: {}, callId }; function getHTMLElements() { return Object.values(config.list).map(item => item.getHTMLElements()) } function getUser(userId) { return config.list[userId]; } const publicized = { addItem(memberObject, type = "user") { if (type == 'user') config.list[memberObject.userId] = new CallUser(app, memberObject); else if (type == 'screenShare') { config.list[memberObject.userId] = new CallScreenShare(app, memberObject); } }, async removeItem(userId) { if (config.list[userId]) { await config.list[userId].destroy(); delete config.list[userId]; } }, get: getUser, getAll() { return config.list }, userExists(userId) { return !! config.list[userId]; }, getHTMLElements, generateCallUIList: function () { let me = app.store.user.get().id , callUIElements = {}; if (!app.callsManager.get(config.callId)) return; for (let i in config.list) { let tags = {}; let HTMLElements = config.list[i].getHTMLElements(); if (config.list[i] && HTMLElements) { tags.container = HTMLElements.container; if ((i === 'screenShare' && app.call.currentCall().screenShareInfo.isStarted()) || i != 'screenShare' && config.list[i].user().video && HTMLElements[config.list[i].user().videoTopicName]) { tags.video = HTMLElements[config.list[i].user().videoTopicName]; tags.videoStream = config.list[i].getVideoStream(); } callUIElements[i] = tags; } } return { uiElements: callUIElements, }; }, generateCallStreamsList() { let me = app.store.user.get().id , callUIElements = {}; if (!app.call.currentCall()) return; for (let i in config.list) { let tags = {}; if (config.list[i]) { if ( (i === 'screenShare' && app.call.currentCall().screenShareInfo.isStarted()) || i != 'screenShare' && config.list[i].user().video ) { tags.video = config.list[i].getVideoStream(); } callUIElements[i] = tags; } } return { streams: callUIElements, }; }, findUserIdByTopic(topic) { for (let i in config.list) { if (config.list[i] && (config.list[i].user().videoTopicName === topic || config.list[i].user().audioTopicName === topic)) { return i; } } }, destroy() { return new Promise(resolve => { let promises = []; for (let i in config.list) { let user = config.list[i]; if (user) { promises.push(user.destroy()) } // delete config.list[i]; } Promise.all(promises).then(() => { for (let i in config.list) { delete config.list[i]; } resolve(); }) }) }, switchSpeakers(deviceId, callback) { let audioFound = false; for (let i in config.list) { let user = config.list[i]; if (user && !user.isMe()) { if(!user.isScreenShare() && user.audioTopicManager()) { audioFound = true user?.switchSpeaker(deviceId); } } } if(!audioFound) { throw new Error('[SDK] No active audio receiver found.'); } else { callback && callback({hasError: false}); } } } return publicized; } export default CallUsers