You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.4 KiB
61 lines
1.4 KiB
module.exports = new MessageManager()
|
|
|
|
function MessageManager(opts) {
|
|
this.messages = []
|
|
}
|
|
|
|
MessageManager.prototype.getMsgList = function() {
|
|
return this.messages
|
|
}
|
|
|
|
MessageManager.prototype.unconfirmedMsgs = function() {
|
|
var messages = this.getMsgList()
|
|
return messages.filter(msg => msg.status === 'unconfirmed')
|
|
.reduce((result, msg) => { result[msg.id] = msg; return result }, {})
|
|
}
|
|
|
|
MessageManager.prototype._saveMsgList = function(msgList) {
|
|
this.messages = msgList
|
|
}
|
|
|
|
MessageManager.prototype.addMsg = function(msg) {
|
|
var messages = this.getMsgList()
|
|
messages.push(msg)
|
|
this._saveMsgList(messages)
|
|
}
|
|
|
|
MessageManager.prototype.getMsg = function(msgId) {
|
|
var messages = this.getMsgList()
|
|
var matching = messages.filter(msg => msg.id === msgId)
|
|
return matching.length > 0 ? matching[0] : null
|
|
}
|
|
|
|
MessageManager.prototype.confirmMsg = function(msgId) {
|
|
this._setMsgStatus(msgId, 'confirmed')
|
|
}
|
|
|
|
MessageManager.prototype.rejectMsg = function(msgId) {
|
|
this._setMsgStatus(msgId, 'rejected')
|
|
}
|
|
|
|
MessageManager.prototype._setMsgStatus = function(msgId, status) {
|
|
var msg = this.getMsg(msgId)
|
|
if (msg) msg.status = status
|
|
this.updateMsg(msg)
|
|
}
|
|
|
|
MessageManager.prototype.updateMsg = function(msg) {
|
|
var messages = this.getMsgList()
|
|
var found, index
|
|
messages.forEach((otherMsg, i) => {
|
|
if (otherMsg.id === msg.id) {
|
|
found = true
|
|
index = i
|
|
}
|
|
})
|
|
if (found) {
|
|
messages[index] = msg
|
|
}
|
|
this._saveMsgList(messages)
|
|
}
|
|
|
|
|