Skip to content

Instantly share code, notes, and snippets.

@goatslacker
Created April 12, 2015 05:23
Show Gist options
  • Save goatslacker/f7dc04d23a8aafdd6304 to your computer and use it in GitHub Desktop.
Save goatslacker/f7dc04d23a8aafdd6304 to your computer and use it in GitHub Desktop.
var alt = require('../alt')
var ChatThreadActionCreators = require('../actions/ChatThreadActionCreators')
var ChatServerActionCreators = require('../actions/ChatServerActionCreators')
var ChatMessageActionCreators = require('../actions/ChatMessageActionCreators')
var ThreadStore = require('../stores/ThreadStore')
var ChatMessageDataUtils = require('../utils/ChatMessageDataUtils')
var ChatMessageUtils = require('../utils/ChatMessageUtils')
function MessageStore() {
this.bindActions(ChatThreadActionCreators)
this.bindActions(ChatMessageActionCreators)
this.bindActions(ChatServerActionCreators)
this.messages = {}
this.exportPublicMethods({
getAllForThread: function (threadID) {
var threadMessages = []
var _messages = this.getState().messages
for (var id in _messages) {
if (_messages[id].threadID === threadID) {
threadMessages.push(_messages[id])
}
}
threadMessages.sort(function(a, b) {
if (a.date < b.date) {
return -1
} else if (a.date > b.date) {
return 1
}
return 0
})
return threadMessages
},
getAllForCurrentThread: function () {
return this.getAllForThread(ThreadStore.getCurrentID())
},
get: function (id) {
return this.getState().messages[id]
},
getAll: function () {
return this.getState().messages
}
})
}
MessageStore.prototype.onCreateMessage = function (text) {
var message = ChatMessageDataUtils.getCreatedMessageData(text)
this.messages[message.id] = message
}
MessageStore.prototype.onReceiveAll = function (rawMessages) {
this._addMessages(rawMessages)
this.waitFor([ThreadStore.dispatchToken])
this._markAllInThreadRead(ThreadStore.getCurrentID())
}
MessageStore.prototype.onClickThread = function () {
this.waitFor([ThreadStore.dispatchToken])
this._markAllInThreadRead(ThreadStore.getCurrentID())
}
MessageStore.prototype._addMessages = function (rawMessages) {
rawMessages.forEach(function (message) {
if (!this.messages[message.id]) {
this.messages[message.id] = ChatMessageUtils.convertRawMessage(
message,
ThreadStore.getCurrentID()
)
}
}, this)
}
MessageStore.prototype._markAllInThreadRead = function (threadID) {
for (var id in this.messages) {
if (this.messages[id].threadID === threadID) {
this.messages[id].isRead = true
}
}
}
module.exports = alt.createStore(MessageStore, 'MessageStore')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment