Files
old-ribica/front-ui/app/stores/initializationStore.js

145 lines
3.4 KiB
JavaScript

var AppDispatcher = require('../dispatcher/appDispatcher');
var EventEmitter = require('events').EventEmitter;
var Cart = require('../models/cart');
var LinkBannerCollection = require('../models/linkBannerCollection');
var InitializationConstants = require('../constants/initializationConstants')
var _ = require('underscore');
var banners = {};
var state = {
isEverythingReadyToStartTheShow: false
};
var initializeTheShop = function () {
// for now only guarantee that cart is created
var cart = new Cart();
cart.save(null, {
success: function () {
state.isEverythingReadyToStartTheShow = true;
InitializationStore.emitChange();
}
})
initializeBanners();
};
var putBannerOnItsPlace = function(banners, lb) {
if(lb.get('start_page')) banners['startPage'].push(lb);
if(lb.get('thank_you_page')) banners['thankYouPage'].push(lb);
if(lb.get('search_result_page')) banners['searchResultPage'].push(lb);
if(lb.get('checkout_page')) banners['checkoutPage'].push(lb);
var itemId = lb.get('item_id');
if (itemId) {
banners['item'][itemId] = banners['item'][itemId] || [];
banners['item'][itemId].push(lb);
}
var sectionId = lb.get('section_id');
if (sectionId) {
banners['section'][sectionId] = banners['section'][sectionId] || [];
banners['section'][sectionId].push(lb);
}
var categoryId = lb.get('category_id');
if (categoryId) {
banners['category'][categoryId] = banners['category'][categoryId] || [];
banners['category'][categoryId].push(lb);
}
var subCategoryId = lb.get('sub_category_id');
if (subCategoryId) {
banners['subCategory'][subCategoryId] = banners['subCategory'][subCategoryId] || [];
banners['subCategory'][subCategoryId].push(lb);
}
};
var initializeBanners = function() {
banners["startPage"] = [];
banners["searchResultPage"] = [];
banners["thankYouPage"] = [];
banners["checkoutPage"] = [];
banners["header"] = [];
banners["footer"] = [];
banners["section"] = {};
banners["category"] = {};
banners["subCategory"] = {};
banners["item"] = {};
var lbc = new LinkBannerCollection();
lbc.fetch({
success: function() {
lbc.each(function(linkBanner) {
putBannerOnItsPlace( banners, linkBanner );
} );
InitializationStore.emitChange();
}
});
};
// Extend ItemStore with EventEmitter to add eventing capabilities
var InitializationStore = _.extend({}, EventEmitter.prototype, {
getState: function() {
return state;
},
getBanners: function() {
return banners;
},
// Emit Change event
emitChange: function() {
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
InitializationStore.dispatchToken = AppDispatcher.register(function(payload) {
var action = payload.action;
switch (action.actionType) {
case InitializationConstants.INITIALIZE:
initializeTheShop();
break;
default:
return true;
}
// If action was responded to, emit change event
InitializationStore.emitChange();
return true;
});
module.exports = InitializationStore;