changed itemcollection to support filtering by traits
This commit is contained in:
@@ -4,10 +4,11 @@ var ItemConstants = require('../constants/itemConstants');
|
||||
// Define action methods
|
||||
var ItemActions = {
|
||||
|
||||
loadByCategory: function(categoryId) {
|
||||
loadByCategory: function(categoryId, query) {
|
||||
AppDispatcher.handleAction({
|
||||
actionType: ItemConstants.LOAD_BY_CATEGORY,
|
||||
categoryId : categoryId
|
||||
categoryId : categoryId,
|
||||
query : query
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
@@ -25,7 +25,6 @@ var ByCategory = React.createClass({
|
||||
|
||||
var q = {};
|
||||
q[fc.field_name] = fcv.filter_value;
|
||||
// TODO: fix this, clean this up
|
||||
var section = new Section(this.state.category.get('section'));
|
||||
var category = this.state.category;
|
||||
NavigationActions.goToCategory(category, section, q)
|
||||
@@ -70,12 +69,13 @@ var ByCategory = React.createClass({
|
||||
},
|
||||
componentWillReceiveProps: function() {
|
||||
var categoryId = this.getParams().id;
|
||||
ItemActions.loadByCategory(categoryId);
|
||||
ItemActions.loadByCategory(categoryId, this.getQuery());
|
||||
CategoryActions.loadCategoryDetails(categoryId);
|
||||
},
|
||||
componentDidMount: function() {
|
||||
var categoryId = this.getParams().id;
|
||||
ItemActions.loadByCategory(categoryId);
|
||||
ItemActions.loadByCategory(categoryId, this.getQuery());
|
||||
|
||||
CategoryActions.loadCategoryDetails(categoryId);
|
||||
|
||||
ItemStore.addChangeListener(this._onChange);
|
||||
|
||||
@@ -4,6 +4,10 @@ var Backbone = require('backbone'),
|
||||
|
||||
var ItemCollection = Backbone.Collection.extend({
|
||||
|
||||
addFilter : function(name, value) {
|
||||
this.filters = this.filters || {};
|
||||
this.filters[name] = value;
|
||||
},
|
||||
setLimit: function(limit) {
|
||||
this.queryLimit = limit;
|
||||
},
|
||||
@@ -24,14 +28,28 @@ var ItemCollection = Backbone.Collection.extend({
|
||||
|
||||
model: Item,
|
||||
url: function() {
|
||||
var path = '/item'
|
||||
var path = '/item'
|
||||
if(this.classificationType > 0) {
|
||||
// eg. http://localhost:4567/item/section/1/offset/0/limit/10
|
||||
var urlPart = this.classificationTypeUrlParts[this.classificationType];
|
||||
path += "/" + urlPart + "/" + this.classificationId
|
||||
// eg. http://localhost:4567/item/section/1/offset/0/limit/10
|
||||
var urlPart = this.classificationTypeUrlParts[this.classificationType];
|
||||
path += "/" + urlPart + "/" + this.classificationId;
|
||||
} // else eg. http://localhost:4567/item/offset/0/limit/10
|
||||
path += "/offset/" + this.offset + "/limit/" + this.queryLimit;
|
||||
return Globals.ApiUrl + path;
|
||||
path += "/offset/" + this.offset + "/limit/" + this.queryLimit;
|
||||
|
||||
var queryParts = [];
|
||||
|
||||
for(var key in this.filters) {
|
||||
if (this.filters.hasOwnProperty(key)) {
|
||||
queryParts.push(key + '=' + this.filters[key]);
|
||||
}
|
||||
}
|
||||
var query = '';
|
||||
|
||||
if (queryParts.length > 0) {
|
||||
query = '?' + queryParts.join('&');
|
||||
}
|
||||
|
||||
return Globals.ApiUrl + path + query;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -51,13 +51,19 @@ var fetchItemWithDetails = function() {
|
||||
}
|
||||
}
|
||||
|
||||
var fetchItemsByCategory = function(categoryId) {
|
||||
var fetchItemsByCategory = function(categoryId, query) {
|
||||
var items = _itemsByCategory;
|
||||
items.setClassificationType(2);
|
||||
items.setClassificationId(categoryId);
|
||||
items.setLimit(30);
|
||||
items.setOffset(0);
|
||||
|
||||
for(var key in query) {
|
||||
if (query.hasOwnProperty(key)) {
|
||||
items.addFilter(key, query[key]);
|
||||
}
|
||||
}
|
||||
|
||||
items.fetch({
|
||||
success: function() {
|
||||
ItemStore.emitChange();
|
||||
@@ -140,7 +146,7 @@ AppDispatcher.register(function(payload) {
|
||||
loadItemsForFrontpage();
|
||||
break;
|
||||
case ItemConstants.LOAD_BY_CATEGORY:
|
||||
fetchItemsByCategory(action.categoryId);
|
||||
fetchItemsByCategory(action.categoryId, action.query);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user