From 280a2e2edbd9c50f6c3fcd4b66fbad154c104c25 Mon Sep 17 00:00:00 2001 From: Edin Dazdarevic Date: Sat, 7 Feb 2015 15:43:24 +0100 Subject: [PATCH] started to work on filters on the frontend --- front-api/controllers/category.rb | 7 ++-- front-ui/app/actions/navigationActions.js | 16 +++++++-- .../app/components/browsing/byCategory.js | 35 ++++++++++++++++++- front-ui/app/models/category.js | 4 ++- 4 files changed, 54 insertions(+), 8 deletions(-) diff --git a/front-api/controllers/category.rb b/front-api/controllers/category.rb index fa6a47d..4a7630a 100644 --- a/front-api/controllers/category.rb +++ b/front-api/controllers/category.rb @@ -1,10 +1,11 @@ get '/category' do - Category.order(:name).all.to_json(include: :sub_categories) + Category.order(:name).all.to_json(:include => [:sub_categories, :filter_criterias =>{:include => :filter_criteria_values} ]) + end get '/category/:id' do id = params[:id].to_i - Category.find(id).to_json(include: :sub_categories) -end \ No newline at end of file + Category.find(id).to_json(:include => [:sub_categories, :filter_criterias =>{:include => :filter_criteria_values} ]) +end diff --git a/front-ui/app/actions/navigationActions.js b/front-ui/app/actions/navigationActions.js index 14c583d..02c5de7 100644 --- a/front-ui/app/actions/navigationActions.js +++ b/front-ui/app/actions/navigationActions.js @@ -21,11 +21,21 @@ var NavigationActions = { }); }, - goToCategory: function(category,section) { + goToCategory: function(category,section, query) { console.log("Going to item details"); + var url ='/sekcija/' + section.get('name') +'/kategorija/'+ category.id + '/' + category.name; + + var q = '?'; + if(query) { + for(var key in query) { + if (query.hasOwnProperty(key)) { + q += "&" + key + '=' + query[key]; + } + } + } AppDispatcher.handleAction({ actionType: NavigationConstants.CHANGE_URL, - url: '/sekcija/' + section.get('name') +'/kategorija/'+ category.id + '/' + category.name + url: (url + q) }); }, @@ -40,4 +50,4 @@ var NavigationActions = { }; -module.exports = NavigationActions; \ No newline at end of file +module.exports = NavigationActions; diff --git a/front-ui/app/components/browsing/byCategory.js b/front-ui/app/components/browsing/byCategory.js index a848f2b..da355a5 100644 --- a/front-ui/app/components/browsing/byCategory.js +++ b/front-ui/app/components/browsing/byCategory.js @@ -1,6 +1,7 @@ var React = require('react'), Router = require('react-router'), Category = require('../../models/category'), + Section = require('../../models/section'), ItemCollection = require('../../models/itemCollection'), ItemActions = require('../../actions/itemActions.js'), CategoryActions = require('../../actions/categoryActions.js'), @@ -20,17 +21,49 @@ var ByCategory = React.createClass({ items: items }; }, + onFCClick: function(fc, fcv) { + + alert(fc.field_name); + var q = {}; + q[fc.field_name] = fcv.filter_value; + // TODO: fix this, clean this up + var s = new Section({name: 'meho'}); +var c = this.state.category; + NavigationActions.goToCategory({id: c.get('id'), name: c.get('name')}, s, q) + }, render: function() { + var self = this; return (
- Here goes section for refining search, by section +
{this.state.category.get('name')}
+
Podkategorije
+
    + {(this.state.category.get('sub_categories') || []).map(function(sc) { + return (
  • {sc.name}
  • ) + })} +
+ + {this.state.category.get('filter_criterias').map(function(fc) { + return (
+ +
{fc.title}
+
    + {fc.filter_criteria_values.map(function(fcv) { + return (
  • + {fcv.filter_text} +
  • ) + })} +
+
) + })}

Browse products by category : {this.state.category.get('name')}

Number of items in this category: {this.state.items.length} +
need to filter brand: {this.getQuery().brand}
diff --git a/front-ui/app/models/category.js b/front-ui/app/models/category.js index 58577c9..8e71470 100644 --- a/front-ui/app/models/category.js +++ b/front-ui/app/models/category.js @@ -4,7 +4,9 @@ var Globals = require('../globals'); var Category = Backbone.Model.extend({ urlRoot : Globals.ApiUrl + '/category', defaults : { - name: '' + name: '', + filter_criterias: [], + sub_categories: [] } });