UNPKG

podchat-browser

Version:

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

118 lines (110 loc) 4.23 kB
import {RequestParamsManager} from "./requestParams"; import {HistoryItem} from "./historyItem"; function HistoryListManager() { let config = { list: {}, hasNext: {}, nextOrder: 0, }; let publicized = { /** * @param {Number} threadId */ get: function (threadId) { return config.list[threadId] || null; }, /** * * @param {Number} threadId * @param {Object} params * @param {Array} list * @param hasNext */ save: function (threadId, params, list, hasNext) { const item = config.list[threadId]; if (!item) { config.list[threadId] = new HistoryItem(threadId, params, list) } else { config.list[threadId].mergeArray(list) } config.list[threadId].sortDesc() if (params.fromTime && hasNext === false) { config.hasNext[threadId] = hasNext } }, saveMessage: function (threadId, message) { if (config.list[threadId]) { if (config.list[threadId].messageExists(message.id)) { config.list[threadId].updateMessage(message); } else { config.list[threadId].putAtBegin(message); } config.list[threadId].sortDesc() } }, updateSeen: function (threadId, lastSeenMessageTime) { if (config.list[threadId]) { const myList = config.list[threadId].get(); const filteredItems = myList.filter(item => item.timeMiliSeconds <= lastSeenMessageTime && item?.seen !== true) filteredItems.forEach(item =>{ config.list[threadId].updateSeenItem(item.id) }); } }, reset: function () { config.list = {}; }, /** * @param {Number} threadId */ remove(threadId) { if (config.list[threadId]) delete config.list[threadId]; }, removeMessage: function (threadId, messageId) { if (config.list[threadId]) { const list = config.list[threadId].get(); let deletedMessageIndex = list.findIndex(item => item.id == messageId); let otherMessages = publicized.findRepliedToMessages(messageId); otherMessages.forEach(item => { config.list[item.threadId].removeReplyInfoVO(item.messageId); }); if (deletedMessageIndex > -1) { const deletedPreviousId = list[deletedMessageIndex]['previousId']; const preMessageIndex = deletedMessageIndex - 1 const nextMessageIndex = deletedMessageIndex + 1 if (list[nextMessageIndex]) { config.list[threadId].remove(messageId); if (list[preMessageIndex]) { list[preMessageIndex]['previousId'] = deletedPreviousId } } } } }, hasNext(threadId) { if (config.hasNext[threadId] !== undefined) { return true return config.hasNext[threadId] } return true; }, exists(threadId) { return !!config.list[threadId]; }, findRepliedToMessages(messageId) { let repliedToMessages = []; for(let i of Object.keys(config.list)) { let list = config.list[i].get(); for(let j in list) { if(list[j] && list[j].replyInfo && list[j].replyInfo.repliedToMessageId == messageId) { repliedToMessages.push({threadId: i, messageId: list[j].id}); } } } return repliedToMessages; } } return publicized; } export {HistoryListManager}