cart state for item in details page finnaly shows (arrggh worst kind of bugs)

This commit is contained in:
Senad Uka
2015-02-08 08:29:24 +01:00
parent 7770e59b81
commit 113b70e8fa
11 changed files with 139 additions and 37 deletions

View File

@@ -1,30 +1,60 @@
var AppDispatcher = require('../dispatcher/appDispatcher');
var EventEmitter = require('events').EventEmitter;
var CartConstants = require('../constants/cartConstants');
var CartActions = require('../actions/cartActions');
var ItemInCart = require('../models/itemInCart');
var ItemInCartCollection = require('../models/itemInCartCollection');
var _ = require('underscore');
var states = {
}
var states = {}
var _itemsInCart = new ItemInCartCollection();
var loadCart = function() {
_itemsInCart.fetch({
success: function() {
states = {}
for (var i = 0; i < _itemsInCart.models.length; i++) {
var itemInCart = _itemsInCart.models[i];
states[itemInCart.get('item_id')] = itemInCart;
}
CartActions.dataLoaded();
}
})
};
var addItem = function(itemId) {
// TODO: push state to server side
var state = states[itemId] || { count: 0 };
state.count++;
var state = states[itemId] || new ItemInCart({
item_id: itemId,
count: 0
})
state.set('count', state.get('count') + 1);
states[itemId] = state;
state.save({
success: function () {
CartActions.dataLoaded();
}
});
};
var takeItemOut = function(itemId) {
// TODO: push state to server side
var state = states[itemId] || { count: 0 };
if (state.count > 0) {
state.count--;
var state = states[itemId] || new ItemInCart({
item_id: itemId,
count: 0
})
if (state.get('count') > 0) {
state.set('count', state.get('count') - 1);
}
states[itemId] = state;
state.save({
success: function () {
CartActions.dataLoaded();
}
});
};
@@ -34,14 +64,18 @@ var takeItemOut = function(itemId) {
var CartStore = _.extend({}, EventEmitter.prototype, {
getStateFor: function(itemId) {
// TODO: get from server side ?
var state = states[itemId] || { count: 0 }
return state
// TODO: get from server side ?
var state = states[itemId] || new ItemInCart({
item_id: itemId,
count: 0
})
return state
},
// Emit Change event
emitChange: function() {
console.log("Emitting change!");
console.log("Emitting cart change!");
this.emit('change');
},
@@ -65,7 +99,7 @@ AppDispatcher.register(function(payload) {
switch (action.actionType) {
case CartConstants.LOAD:
case CartConstants.LOAD_CART_CONTENTS:
loadCart();
break;
@@ -76,6 +110,9 @@ AppDispatcher.register(function(payload) {
case CartConstants.TAKE_ITEM_OUT:
takeItemOut(action.itemId);
break;
case CartConstants.CART_DATA_LOADED:
// just emit change
break;
default:
return true;
@@ -87,4 +124,4 @@ AppDispatcher.register(function(payload) {
});
module.exports = CartStore;
module.exports = CartStore;

View File

@@ -29,9 +29,9 @@ var fetchItemWithDetails = function() {
var item = new ItemWithDetails({
id: id
});
_itemWithDetails = item;
item.fetch({
success: function() {
_itemWithDetails = item;
_images = (_itemWithDetails.get("multi_media_descriptions") || []).map(function(mmd) {
return mmd.url;
});