diff --git a/app/assets/javascripts/darkswarm/directives/shipping_type_selector.js.coffee b/app/assets/javascripts/darkswarm/directives/shipping_type_selector.js.coffee new file mode 100644 index 0000000000..b634fc167c --- /dev/null +++ b/app/assets/javascripts/darkswarm/directives/shipping_type_selector.js.coffee @@ -0,0 +1,7 @@ +Darkswarm.directive "shippingTypeSelector", -> + restrict: 'E' + templateUrl: 'shipping_type_selector.html' + link: (scope, elem, attr)-> + scope.shippingTypes = + pickup: false + delivery: false diff --git a/app/assets/javascripts/darkswarm/directives/taxon_selector.js.coffee b/app/assets/javascripts/darkswarm/directives/taxon_selector.js.coffee index d4b93a3cdb..c9ccb1af1a 100644 --- a/app/assets/javascripts/darkswarm/directives/taxon_selector.js.coffee +++ b/app/assets/javascripts/darkswarm/directives/taxon_selector.js.coffee @@ -1,6 +1,8 @@ Darkswarm.directive "taxonSelector", (TaxonSelector) -> restrict: 'E' - scope: {} + scope: + enterprises: "=" templateUrl: "taxon_selector.html" link: (scope, elem, attr)-> scope.TaxonSelector = TaxonSelector + TaxonSelector.collectTaxons scope.enterprises diff --git a/app/assets/javascripts/darkswarm/filters/taxons.js.coffee b/app/assets/javascripts/darkswarm/filters/taxons.js.coffee index 01c7d98057..9fccd20c11 100644 --- a/app/assets/javascripts/darkswarm/filters/taxons.js.coffee +++ b/app/assets/javascripts/darkswarm/filters/taxons.js.coffee @@ -3,10 +3,9 @@ Darkswarm.filter 'taxons', (Matcher)-> (objects, ids) -> objects ||= [] ids ?= [] - console.log ids if ids.length == 0 objects else objects.filter (obj)-> - obj.primary_taxon?.id in ids || obj.taxons.some (taxon)-> + obj.primary_taxon?.id in ids || (obj.taxons.concat obj.supplied_taxons).some (taxon)-> taxon.id in ids diff --git a/app/assets/javascripts/darkswarm/services/enterprises.js.coffee b/app/assets/javascripts/darkswarm/services/enterprises.js.coffee index 84a3c2e7c2..50143e006b 100644 --- a/app/assets/javascripts/darkswarm/services/enterprises.js.coffee +++ b/app/assets/javascripts/darkswarm/services/enterprises.js.coffee @@ -18,3 +18,4 @@ Darkswarm.factory 'Enterprises', (enterprises, CurrentHub, Taxons, Dereferencer) dereferenceTaxons: -> for enterprise in @enterprises Dereferencer.dereference enterprise.taxons, Taxons.taxons_by_id + Dereferencer.dereference enterprise.supplied_taxons, Taxons.taxons_by_id diff --git a/app/assets/javascripts/darkswarm/services/selectors/taxon_selector.js.coffee b/app/assets/javascripts/darkswarm/services/selectors/taxon_selector.js.coffee new file mode 100644 index 0000000000..4ba42f3aa2 --- /dev/null +++ b/app/assets/javascripts/darkswarm/services/selectors/taxon_selector.js.coffee @@ -0,0 +1,19 @@ +Darkswarm.factory 'TaxonSelector', -> + new class TaxonSelector + selectors: [] + # Collect all taxons on the supplied enterprises + collectTaxons: (enterprises)-> + taxons = {} + for enterprise in enterprises + for taxon in (enterprise.taxons.concat enterprise.supplied_taxons) + taxons[taxon.id] = taxon + for id, taxon of taxons + @selectors.push + active: false + taxon: taxon + + active: -> + @selectors.filter (selector)-> + selector.active + .map (selector)-> + selector.taxon.id diff --git a/app/assets/javascripts/darkswarm/services/taxon_selector.js.coffee b/app/assets/javascripts/darkswarm/services/taxon_selector.js.coffee deleted file mode 100644 index 4628e79f11..0000000000 --- a/app/assets/javascripts/darkswarm/services/taxon_selector.js.coffee +++ /dev/null @@ -1,14 +0,0 @@ -Darkswarm.factory 'TaxonSelector', (Taxons)-> - new class TaxonSelector - selectors: [] - constructor: -> - for taxon in Taxons.taxons - @selectors.push - active: false - taxon: taxon - - active: -> - @selectors.filter (selector)-> - selector.active - .map (selector)-> - selector.taxon.id diff --git a/app/assets/javascripts/templates/shipping_type_selector.html.haml b/app/assets/javascripts/templates/shipping_type_selector.html.haml new file mode 100644 index 0000000000..80e70d1c8d --- /dev/null +++ b/app/assets/javascripts/templates/shipping_type_selector.html.haml @@ -0,0 +1,7 @@ +%ul.small-block-grid-4 + %li{"ng-class" => "{active: shippingTypes['delivery']}"} + %a{"ng-click" => "shippingTypes['delivery'] = !shippingTypes['delivery']"} + Delivery + %li{"ng-class" => "{active: shippingTypes['pickup']}"} + %a{"ng-click" => "shippingTypes['pickup'] = !shippingTypes['pickup']"} + Pickup diff --git a/app/views/producers/_filters.html.haml b/app/views/producers/_filters.html.haml index fa8046d3c2..db23606cc2 100644 --- a/app/views/producers/_filters.html.haml +++ b/app/views/producers/_filters.html.haml @@ -16,4 +16,7 @@ Something .row .small-12.large-6.columns - %taxon-selector + %taxon-selector{enterprises: "Producers.visible"} + + .small-12.large-6.columns + %shipping-type-selector diff --git a/app/views/producers/index.html.haml b/app/views/producers/index.html.haml index a84d0a050f..386f0e2b5f 100644 --- a/app/views/producers/index.html.haml +++ b/app/views/producers/index.html.haml @@ -25,7 +25,7 @@ .active_table %producer.active_table_node.row.animate-repeat{id: "{{producer.path}}", "scroll-after-load" => true, - "ng-repeat" => "producer in filteredProducers = (Producers.visible | filterProducers:query | taxons:TaxonSelector.active())", + "ng-repeat" => "producer in filteredProducers = (Producers.visible | filterProducers:query | taxons:TaxonSelector.active() | shipping:shippingTypes)", "ng-controller" => "ProducerNodeCtrl", "ng-class" => "{'closed' : !open(), 'open' : open(), 'inactive' : !producer.active}", id: "{{producer.hash}}"} diff --git a/spec/javascripts/unit/darkswarm/filters/shipping_spec.js.coffee b/spec/javascripts/unit/darkswarm/filters/shipping_spec.js.coffee index bfb5ffe606..1bb436017a 100644 --- a/spec/javascripts/unit/darkswarm/filters/shipping_spec.js.coffee +++ b/spec/javascripts/unit/darkswarm/filters/shipping_spec.js.coffee @@ -28,3 +28,6 @@ describe 'filtering by shipping method', -> it "filters to none", -> expect(filterByShippingMethod(objects, {pickup: false, delivery: false})).toBe objects + + it "filters to none with empty", -> + expect(filterByShippingMethod(objects, {})).toBe objects diff --git a/spec/javascripts/unit/darkswarm/filters/taxons_spec.js.coffee b/spec/javascripts/unit/darkswarm/filters/taxons_spec.js.coffee index 8c9002f53c..1313229ef6 100644 --- a/spec/javascripts/unit/darkswarm/filters/taxons_spec.js.coffee +++ b/spec/javascripts/unit/darkswarm/filters/taxons_spec.js.coffee @@ -3,6 +3,7 @@ describe 'filtering by taxons', -> objects = [ { taxons: [] + supplied_taxons: [] primary_taxon: name: "frogs" id: 1 @@ -12,6 +13,7 @@ describe 'filtering by taxons', -> {name: "kittens", id: 2} {name: "puppies", id: 3} ] + supplied_taxons: [] } ]