Files
old-ribica/front-ui/app/stores/cartStore.js
2015-02-05 07:05:06 +01:00

91 lines
1.9 KiB
JavaScript

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;