var AppDispatcher = require('../dispatcher/appDispatcher'); var EventEmitter = require('events').EventEmitter; var CartConstants = require('../constants/cartConstants'); var _ = require('underscore'); var states = { } var loadCart = function() { }; var addItem = function(itemId) { // TODO: push state to server side var state = states[itemId] || { count: 0 }; state.count++; states[itemId] = state; }; var takeItemOut = function(itemId) { // TODO: push state to server side var state = states[itemId] || { count: 0 }; if (state.count > 0) { state.count--; } states[itemId] = state; }; // Extend CartStore with EventEmitter to add eventing capabilities var CartStore = _.extend({}, EventEmitter.prototype, { getStateFor: function(itemId) { // TODO: get from server side ? var state = states[itemId] || { count: 0 } return state }, // Emit Change event emitChange: function() { console.log("Emitting change!"); this.emit('change'); }, // Add change listener addChangeListener: function(callback) { this.on('change', callback); }, // Remove change listener removeChangeListener: function(callback) { this.removeListener('change', callback); } }); // Register callback with AppDispatcher AppDispatcher.register(function(payload) { var action = payload.action; var text; switch (action.actionType) { case CartConstants.LOAD: loadCart(); break; case CartConstants.ADD_ITEM: addItem(action.itemId); break; case CartConstants.TAKE_ITEM_OUT: takeItemOut(action.itemId); break; default: return true; } // If action was responded to, emit change event CartStore.emitChange(); return true; }); module.exports = CartStore;