diff --git a/front-ui/app/actions/itemActions.js b/front-ui/app/actions/itemActions.js
index 6e823af..e24752d 100644
--- a/front-ui/app/actions/itemActions.js
+++ b/front-ui/app/actions/itemActions.js
@@ -4,6 +4,12 @@ var ItemConstants = require('../constants/itemConstants');
// Define action methods
var ItemActions = {
+ loadByCategory: function(categoryId) {
+ AppDispatcher.handleAction({
+ actionType: ItemConstants.LOAD_BY_CATEGORY,
+ categoryId : categoryId
+ });
+ },
loadFrontPageItems: function() {
AppDispatcher.handleAction({
diff --git a/front-ui/app/components/browsing/byCategory.js b/front-ui/app/components/browsing/byCategory.js
index 9dc54c4..34c93df 100644
--- a/front-ui/app/components/browsing/byCategory.js
+++ b/front-ui/app/components/browsing/byCategory.js
@@ -1,13 +1,61 @@
-var React = require('react');
+var React = require('react'),
+ Router = require('react-router'),
+ Category = require('../../models/category'),
+ ItemCollection = require('../../models/itemCollection'),
+ ItemActions = require('../../actions/itemActions.js'),
+ ItemStore = require('../../stores/itemStore'),
+ NavigationStore = require('../../stores/navigationStore'),
+ ItemList = require('../items/itemList'),
+ NavigationActions = require('../../actions/navigationActions');
var ByCategory = React.createClass({
- render: function() {
- return (
-
-
Browse products by category
-
- );
- }
+ mixins: [Router.State],
+ getInitialState: function() {
+ var category = new Category();
+ var items = new ItemCollection();
+ return {
+ category: category,
+ items: items
+ };
+ },
+ render: function() {
+ return (
+
+
+ Here goes section for refining search, by section
+
+
+
+
+
Browse products by category
+ Number of items in this category: {this.state.items.length}
+
+
+
+ );
+ },
+ componentWillReceiveProps: function() {
+ var categoryId = this.getParams().id;
+ ItemActions.loadByCategory(categoryId);
+ // TODO: load category details
+ },
+ componentDidMount: function() {
+ var categoryId = this.getParams().id;
+ ItemActions.loadByCategory(categoryId);
+
+ ItemStore.addChangeListener(this._onChange);
+ },
+ componentWillUnmount: function() {
+ ItemStore.removeChangeListener(this._onChange);
+ },
+ _onChange: function() {
+ if(this.isMounted()) {
+ this.setState({
+ items: ItemStore.getItemsForCategory()
+ });
+ }
+ }
+
});
module.exports = ByCategory;
diff --git a/front-ui/app/components/browsing/bySection.js b/front-ui/app/components/browsing/bySection.js
index edd0aac..5196ee9 100644
--- a/front-ui/app/components/browsing/bySection.js
+++ b/front-ui/app/components/browsing/bySection.js
@@ -37,8 +37,11 @@ var BySection = React.createClass({
return (
+
+
- {category.name}
+{category.name}
+
{category.sub_categories.map(function(sc) {
return (- {sc.name}
)
@@ -71,6 +74,10 @@ var BySection = React.createClass({
SectionStore.addChangeListener(this._onSectionChange);
ItemStore.addChangeListener(this._onChange);
},
+ componentWillUnmount: function() {
+ SectionStore.removeChangeListener(this._onSectionChange);
+ ItemStore.removeChangeListener(this._onChange);
+ },
_onSectionChange: function() {
if(this.isMounted()) {
this.setState({
diff --git a/front-ui/app/constants/itemConstants.js b/front-ui/app/constants/itemConstants.js
index 703e1d9..9d0d9a6 100644
--- a/front-ui/app/constants/itemConstants.js
+++ b/front-ui/app/constants/itemConstants.js
@@ -3,5 +3,6 @@ var keyMirror = require('react/lib/keyMirror');
// Define action constants
module.exports = keyMirror({
LOAD_FOR_FRONTPAGE: null,
- LOAD_BSI_FOR_SECTION: null
+ LOAD_BSI_FOR_SECTION: null,
+ LOAD_BY_CATEGORY: null
});
diff --git a/front-ui/app/models/category.js b/front-ui/app/models/category.js
new file mode 100644
index 0000000..58577c9
--- /dev/null
+++ b/front-ui/app/models/category.js
@@ -0,0 +1,12 @@
+var Backbone = require('backbone');
+var Globals = require('../globals');
+
+var Category = Backbone.Model.extend({
+ urlRoot : Globals.ApiUrl + '/category',
+ defaults : {
+ name: ''
+ }
+});
+
+
+module.exports = Category;
diff --git a/front-ui/app/models/categoryCollection.js b/front-ui/app/models/categoryCollection.js
new file mode 100644
index 0000000..e69de29
diff --git a/front-ui/app/stores/itemStore.js b/front-ui/app/stores/itemStore.js
index 75090cb..f8a8da4 100644
--- a/front-ui/app/stores/itemStore.js
+++ b/front-ui/app/stores/itemStore.js
@@ -8,7 +8,8 @@ var _ = require('underscore');
// Define initial data points
var _items = new ItemCollection(),
_itemWithDetails = new ItemWithDetails(),
- _bestSellingForSection = new ItemCollection();
+ _bestSellingForSection = new ItemCollection(),
+ _itemsByCategory = new ItemCollection();
var loadItemsForFrontpage = function() {
@@ -50,6 +51,19 @@ var fetchItemWithDetails = function() {
}
}
+var fetchItemsByCategory = function(categoryId) {
+ var items = _itemsByCategory;
+ items.setClassificationType(2);
+ items.setClassificationId(categoryId);
+ items.setLimit(30);
+ items.setOffset(0);
+
+ items.fetch({
+ success: function() {
+ ItemStore.emitChange();
+ }});
+};
+
var fetchBestSellingItemsForSection = function(sectionId) {
console.log('getting section', sectionId);
var items = _bestSellingForSection;
@@ -70,6 +84,9 @@ var fetchBestSellingItemsForSection = function(sectionId) {
// Extend ItemStore with EventEmitter to add eventing capabilities
var ItemStore = _.extend({}, EventEmitter.prototype, {
+ getItemsForCategory: function() {
+ return _itemsByCategory;
+ },
getBestSellingForSection: function() {
return _bestSellingForSection;
@@ -122,6 +139,9 @@ AppDispatcher.register(function(payload) {
case ItemConstants.LOAD_FOR_FRONTPAGE:
loadItemsForFrontpage();
break;
+ case ItemConstants.LOAD_BY_CATEGORY:
+ fetchItemsByCategory(action.categoryId);
+ break;
default:
return true;