From 578475a403d856aa0701b60c8db568267de04aab Mon Sep 17 00:00:00 2001 From: Rob Harrington Date: Fri, 6 Mar 2015 16:14:11 +1100 Subject: [PATCH] Filter products list on shop by active properties --- .../controllers/products_controller.js.coffee | 9 +++++++-- .../darkswarm/filters/properties.js.coffee | 16 ++++++++++++++++ .../templates/single_line_selectors.html.haml | 2 +- .../stylesheets/darkswarm/_shop-filters.css.sass | 6 +++++- app/views/shop/products/_form.html.haml | 6 ++++-- 5 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 app/assets/javascripts/darkswarm/filters/properties.js.coffee diff --git a/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee index 458e500d99..8443301765 100644 --- a/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee +++ b/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee @@ -1,4 +1,4 @@ -Darkswarm.controller "ProductsCtrl", ($scope, $rootScope, Products, OrderCycle, FilterSelectorsService, Cart, Taxons) -> +Darkswarm.controller "ProductsCtrl", ($scope, $rootScope, Products, OrderCycle, FilterSelectorsService, Cart, Taxons, Properties) -> $scope.Products = Products $scope.Cart = Cart $scope.totalActive = FilterSelectorsService.totalActive @@ -21,11 +21,16 @@ Darkswarm.controller "ProductsCtrl", ($scope, $rootScope, Products, OrderCycle, if code == 13 e.preventDefault() - $scope.appliedTaxonsList = () -> + $scope.appliedTaxonsList = -> $scope.activeTaxons.map( (taxon_id) -> Taxons.taxons_by_id[taxon_id].name ).join(" & ") if $scope.activeTaxons? + $scope.appliedPropertiesList = -> + $scope.activeProperties.map( (property_id) -> + Properties.properties_by_id[property_id].name + ).join(" & ") if $scope.activeProperties? + $scope.clearAll = -> $scope.query = "" FilterSelectorsService.clearAll() diff --git a/app/assets/javascripts/darkswarm/filters/properties.js.coffee b/app/assets/javascripts/darkswarm/filters/properties.js.coffee new file mode 100644 index 0000000000..51b02e6634 --- /dev/null +++ b/app/assets/javascripts/darkswarm/filters/properties.js.coffee @@ -0,0 +1,16 @@ +Darkswarm.filter 'properties', ()-> + # Filter anything that responds to object.properties + (objects, ids) -> + objects ||= [] + ids ?= [] + if ids.length == 0 + # No properties selected, pass all objects through. + objects + else + objects.filter (obj)-> + properties = obj.properties + # Combine object properties with supplied properties, if they exist. + # properties = properties.concat obj.supplied_properties if obj.supplied_properties + # Match property array. + properties.some (property)-> + property.id in ids diff --git a/app/assets/javascripts/templates/single_line_selectors.html.haml b/app/assets/javascripts/templates/single_line_selectors.html.haml index 5be7e4f7bc..5e9aa57915 100644 --- a/app/assets/javascripts/templates/single_line_selectors.html.haml +++ b/app/assets/javascripts/templates/single_line_selectors.html.haml @@ -7,7 +7,7 @@ %span + {{ overFlowSelectors().length }} more %i.ofn-i_052-point-down - .f-dropdown.content#show-more + .f-dropdown.right.text-left.medium.content#show-more %ul %active-selector{ ng: { repeat: "selector in overFlowSelectors()", hide: "selector.fits" } } %render-svg{path: "{{selector.object.icon}}"} diff --git a/app/assets/stylesheets/darkswarm/_shop-filters.css.sass b/app/assets/stylesheets/darkswarm/_shop-filters.css.sass index a714c4a361..554a6ce703 100644 --- a/app/assets/stylesheets/darkswarm/_shop-filters.css.sass +++ b/app/assets/stylesheets/darkswarm/_shop-filters.css.sass @@ -27,10 +27,14 @@ .filter-box.filter-box-shopfront, .filter-box.property-box-shopfront background: transparent - single-line-selector + single-line-selectors overflow-x: hidden white-space: nowrap + .f-dropdown + overflow-x: auto + white-space: normal + ul margin: 0 ul, ul li diff --git a/app/views/shop/products/_form.html.haml b/app/views/shop/products/_form.html.haml index 33d566ee1b..df20bb660f 100644 --- a/app/views/shop/products/_form.html.haml +++ b/app/views/shop/products/_form.html.haml @@ -10,8 +10,10 @@ %i.ofn-i_009-close %span.filter-label Showing: + %span{ ng: { show: "!query && !appliedPropertiesList() && !appliedTaxonsList()"} } + All %span.applied-properties - Certified Organic + {{ appliedPropertiesList() }} %span.applied-taxons {{ appliedTaxonsList() }} %span.applied-search{ ng: { hide: "!query"} } @@ -28,7 +30,7 @@ %div.pad-top{bindonce: true} %product.animate-repeat{"ng-controller" => "ProductNodeCtrl", - "ng-repeat" => "product in filteredProducts = (Products.products | products:query | taxons:activeTaxons) track by product.id ", "id" => "product-{{ product.id }}"} + "ng-repeat" => "product in filteredProducts = (Products.products | products:query | taxons:activeTaxons | properties: activeProperties) track by product.id ", "id" => "product-{{ product.id }}"} = render partial: "shop/products/summary" %shop-variant{variant: 'product.master', "bo-if" => "!product.hasVariants", "id" => "variant-{{ product.master.id }}"} %shop-variant{variant: 'variant', "ng-repeat" => "variant in product.variants track by variant.id", "id" => "variant-{{ variant.id }}"}