UNPKG

podchat-browser

Version:

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

138 lines (121 loc) 3.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.HistoryListManager = HistoryListManager; var _requestParams = require("./requestParams"); var _historyItem = require("./historyItem"); function HistoryListManager() { var config = { list: {}, hasNext: {}, nextOrder: 0 }; var publicized = { /** * @param {Number} threadId */ get: function get(threadId) { return config.list[threadId] || null; }, /** * * @param {Number} threadId * @param {Object} params * @param {Array} list * @param hasNext */ save: function save(threadId, params, list, hasNext) { var item = config.list[threadId]; if (!item) { config.list[threadId] = new _historyItem.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 saveMessage(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 updateSeen(threadId, lastSeenMessageTime) { if (config.list[threadId]) { var myList = config.list[threadId].get(); var filteredItems = myList.filter(function (item) { return item.timeMiliSeconds <= lastSeenMessageTime && (item === null || item === void 0 ? void 0 : item.seen) !== true; }); filteredItems.forEach(function (item) { config.list[threadId].updateSeenItem(item.id); }); } }, reset: function reset() { config.list = {}; }, /** * @param {Number} threadId */ remove: function remove(threadId) { if (config.list[threadId]) delete config.list[threadId]; }, removeMessage: function removeMessage(threadId, messageId) { if (config.list[threadId]) { var list = config.list[threadId].get(); var deletedMessageIndex = list.findIndex(function (item) { return item.id == messageId; }); var otherMessages = publicized.findRepliedToMessages(messageId); otherMessages.forEach(function (item) { config.list[item.threadId].removeReplyInfoVO(item.messageId); }); if (deletedMessageIndex > -1) { var deletedPreviousId = list[deletedMessageIndex]['previousId']; var preMessageIndex = deletedMessageIndex - 1; var nextMessageIndex = deletedMessageIndex + 1; if (list[nextMessageIndex]) { config.list[threadId].remove(messageId); if (list[preMessageIndex]) { list[preMessageIndex]['previousId'] = deletedPreviousId; } } } } }, hasNext: function hasNext(threadId) { if (config.hasNext[threadId] !== undefined) { return true; return config.hasNext[threadId]; } return true; }, exists: function exists(threadId) { return !!config.list[threadId]; }, findRepliedToMessages: function findRepliedToMessages(messageId) { var repliedToMessages = []; for (var _i = 0, _Object$keys = Object.keys(config.list); _i < _Object$keys.length; _i++) { var i = _Object$keys[_i]; var list = config.list[i].get(); for (var 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; }