changed itemcollection to support filtering by traits

This commit is contained in:
Edin Dazdarevic
2015-02-11 07:11:28 +01:00
parent 108f370bd0
commit 3986ac340c
4 changed files with 38 additions and 13 deletions

View File

@@ -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
});
},

View File

@@ -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);

View File

@@ -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;
}
});

View File

@@ -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: