Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80698 views
1
/**
2
* This file is provided by Facebook for testing and evaluation purposes
3
* only. Facebook reserves all rights not expressly granted.
4
*
5
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
6
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
7
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
8
* FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
9
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
10
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
11
*/
12
13
var ChatAppDispatcher = require('../dispatcher/ChatAppDispatcher');
14
var ChatConstants = require('../constants/ChatConstants');
15
var EventEmitter = require('events').EventEmitter;
16
var MessageStore = require('../stores/MessageStore');
17
var ThreadStore = require('../stores/ThreadStore');
18
var assign = require('object-assign');
19
20
var ActionTypes = ChatConstants.ActionTypes;
21
var CHANGE_EVENT = 'change';
22
23
var UnreadThreadStore = assign({}, EventEmitter.prototype, {
24
25
emitChange: function() {
26
this.emit(CHANGE_EVENT);
27
},
28
29
/**
30
* @param {function} callback
31
*/
32
addChangeListener: function(callback) {
33
this.on(CHANGE_EVENT, callback);
34
},
35
36
/**
37
* @param {function} callback
38
*/
39
removeChangeListener: function(callback) {
40
this.removeListener(CHANGE_EVENT, callback);
41
},
42
43
getCount: function() {
44
var threads = ThreadStore.getAll();
45
var unreadCount = 0;
46
for (var id in threads) {
47
if (!threads[id].lastMessage.isRead) {
48
unreadCount++;
49
}
50
}
51
return unreadCount;
52
}
53
54
});
55
56
UnreadThreadStore.dispatchToken = ChatAppDispatcher.register(function(action) {
57
ChatAppDispatcher.waitFor([
58
ThreadStore.dispatchToken,
59
MessageStore.dispatchToken
60
]);
61
62
switch (action.type) {
63
64
case ActionTypes.CLICK_THREAD:
65
UnreadThreadStore.emitChange();
66
break;
67
68
case ActionTypes.RECEIVE_RAW_MESSAGES:
69
UnreadThreadStore.emitChange();
70
break;
71
72
default:
73
// do nothing
74
}
75
});
76
77
module.exports = UnreadThreadStore;
78
79