podchat-browser
Version:
Javascript SDK to use POD's Chat Service - Browser Only
138 lines (121 loc) • 3.97 kB
JavaScript
;
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;
}