diff --git a/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee index 59da50958b..96f40509df 100644 --- a/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee +++ b/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee @@ -4,15 +4,18 @@ angular.module('Darkswarm').controller "ProductsCtrl", ($scope, $sce, $filter, $ $scope.query = "" $scope.taxonSelectors = FilterSelectorsService.createSelectors() $scope.propertySelectors = FilterSelectorsService.createSelectors() + $scope.producerPropertySelectors = FilterSelectorsService.createSelectors() $scope.filtersActive = true $scope.page = 1 $scope.per_page = 10 $scope.order_cycle = OrderCycle.order_cycle $scope.supplied_taxons = null $scope.supplied_properties = null + $scope.supplied_producer_properties = null $scope.showFilterSidebar = false $scope.activeTaxons = [] $scope.activeProperties = [] + $scope.activeProducerProperties = [] # Update filters after initial load of shop tab $timeout => @@ -45,6 +48,12 @@ angular.module('Darkswarm').controller "ProductsCtrl", ($scope, $sce, $filter, $ $scope.supplied_properties[property.id] = Properties.properties_by_id[property.id] ) + OrderCycleResource.producerProperties params, (data)=> + $scope.supplied_producer_properties = {} + data.map( (property) -> + $scope.supplied_producer_properties[property.id] = Properties.properties_by_id[property.id] + ) + $scope.loadMore = -> if ($scope.page * $scope.per_page) <= Products.products.length $scope.loadMoreProducts() @@ -52,6 +61,7 @@ angular.module('Darkswarm').controller "ProductsCtrl", ($scope, $sce, $filter, $ $scope.$watch 'query', (newValue, oldValue) -> $scope.loadProducts() if newValue != oldValue $scope.$watchCollection 'activeTaxons', (newValue, oldValue) -> $scope.loadProducts() if newValue != oldValue $scope.$watchCollection 'activeProperties', (newValue, oldValue) -> $scope.loadProducts() if newValue != oldValue + $scope.$watchCollection 'activeProducerProperties', (newValue, oldValue) -> $scope.loadProducts() if newValue != oldValue $scope.loadProducts = -> $scope.page = 1 @@ -67,7 +77,8 @@ angular.module('Darkswarm').controller "ProductsCtrl", ($scope, $sce, $filter, $ page: page || $scope.page, per_page: $scope.per_page, 'q[name_or_meta_keywords_or_variants_display_as_or_variants_display_name_or_variants_supplier_name_cont]': $scope.query, - 'q[with_variants_supplier_properties][]': $scope.activeProperties, + 'q[with_properties][]': $scope.activeProperties, + 'q[with_variants_supplier_properties][]': $scope.activeProducerProperties, 'q[variants_primary_taxon_id_in_any][]': $scope.activeTaxons } @@ -86,6 +97,12 @@ angular.module('Darkswarm').controller "ProductsCtrl", ($scope, $sce, $filter, $ Properties.properties_by_id[property_id].name ).join($scope.filtersJoinWord()) if $scope.activeProperties? + $scope.appliedProducerPropertiesList = -> + $scope.activeProducerProperties.map( (property_id) -> + Properties.properties_by_id[property_id].name + ).join($scope.filtersJoinWord()) if $scope.activeProducerProperties? + + $scope.filtersJoinWord = -> $sce.trustAsHtml(" #{t('products_or')} ") @@ -99,6 +116,7 @@ angular.module('Darkswarm').controller "ProductsCtrl", ($scope, $sce, $filter, $ $scope.clearFilters = -> $scope.taxonSelectors.clearAll() $scope.propertySelectors.clearAll() + $scope.producerPropertySelectors.clearAll() $scope.refreshStaleData = -> # If the products template has already been loaded but the controller is being initialized @@ -109,7 +127,7 @@ angular.module('Darkswarm').controller "ProductsCtrl", ($scope, $sce, $filter, $ $scope.loadProducts() $scope.filtersCount = () -> - $scope.taxonSelectors.totalActive() + $scope.propertySelectors.totalActive() + $scope.taxonSelectors.totalActive() + $scope.propertySelectors.totalActive() + $scope.producerPropertySelectors.totalActive() $scope.toggleFilterSidebar = -> $scope.showFilterSidebar = !$scope.showFilterSidebar diff --git a/app/assets/javascripts/darkswarm/services/order_cycle_resource.js.coffee b/app/assets/javascripts/darkswarm/services/order_cycle_resource.js.coffee index 092ea51345..5eb3e7b420 100644 --- a/app/assets/javascripts/darkswarm/services/order_cycle_resource.js.coffee +++ b/app/assets/javascripts/darkswarm/services/order_cycle_resource.js.coffee @@ -18,4 +18,11 @@ angular.module('Darkswarm').factory 'OrderCycleResource', ($resource) -> url: '/api/v0/order_cycles/:id/properties.json' params: id: '@id' + 'producerProperties': + method: 'GET' + isArray: true + url: '/api/v0/order_cycles/:id/producer_properties.json' + params: + id: '@id' + }) diff --git a/app/views/shop/products/_applied_filters_feedback.haml b/app/views/shop/products/_applied_filters_feedback.haml index 2eb647b3b5..1d21075b38 100644 --- a/app/views/shop/products/_applied_filters_feedback.haml +++ b/app/views/shop/products/_applied_filters_feedback.haml @@ -1,10 +1,12 @@ = cache_with_locale do - %span{ "ng-show" => "query && ( appliedPropertiesList() || appliedTaxonsList() )" } + %span{ "ng-show" => "query && ( appliedPropertiesList() || appliedProducerPropertiesList() || appliedTaxonsList() )" } = t :products_filters_in - %span.applied-properties{'ng-bind-html' => 'appliedPropertiesList()'} + %span{ "ng-show" => "appliedPropertiesList() && appliedProducerPropertiesList()" } + = t :products_or + %span.applied-properties{'ng-bind-html' => 'appliedProducerPropertiesList()'} - %span{ "ng-show" => "appliedPropertiesList() && appliedTaxonsList()" } + %span{ "ng-show" => "(appliedPropertiesList() || appliedProducerPropertiesList()) && appliedTaxonsList()" } = t :products_and %span.applied-taxons{'ng-bind-html' => 'appliedTaxonsList()'} diff --git a/app/views/shop/products/_filters.html.haml b/app/views/shop/products/_filters.html.haml index 8a929af886..c9f5455e95 100644 --- a/app/views/shop/products/_filters.html.haml +++ b/app/views/shop/products/_filters.html.haml @@ -4,3 +4,7 @@ .filter-shopfront.property-selectors{ "ng-show": 'supplied_properties != null' } %filter-selector{ 'selector-set' => "propertySelectors", objects: "supplied_properties", "active-selectors" => "activeProperties"} + + .filter-shopfront.property-selectors{ng: {show: 'supplied_producer_properties != null'}} + %filter-selector{ 'selector-set' => "producerPropertySelectors", objects: "supplied_producer_properties", "active-selectors" => "activeProducerProperties"} + diff --git a/app/views/shop/products/_search_feedback.haml b/app/views/shop/products/_search_feedback.haml index eb71015376..d0511135d8 100644 --- a/app/views/shop/products/_search_feedback.haml +++ b/app/views/shop/products/_search_feedback.haml @@ -1,5 +1,5 @@ = cache_with_locale do - .row.animate-slide{ "ng-show" => "query || appliedPropertiesList() || appliedTaxonsList()" } + .row.animate-slide{ "ng-show" => "query || appliedPropertiesList() || appliedProducerPropertiesList() || appliedTaxonsList()" } .small-12.columns .alert-box.search-alert.ng-scope %div{"ng-show" => "Products.products.length > 0"}