From 7e4d33777333d83a7bb24c2eac0d4fe322039355 Mon Sep 17 00:00:00 2001 From: Rohan Mitchell Date: Wed, 10 Sep 2014 16:42:20 +1000 Subject: [PATCH] Extract DisplayProperties to a service Conflicts: app/assets/javascripts/admin/bulk_product_update.js.coffee --- .../admin/bulk_product_update.js.coffee | 9 +++------ .../admin/directives/toggle_variants.js.coffee | 11 ++++++----- .../admin/services/display_properties.js.coffee | 14 ++++++++++++++ .../bulk_edit/_products_variant.html.haml | 2 +- .../services/display_properties_spec.js.coffee | 17 +++++++++++++++++ 5 files changed, 41 insertions(+), 12 deletions(-) create mode 100644 app/assets/javascripts/admin/services/display_properties.js.coffee create mode 100644 spec/javascripts/unit/admin/services/display_properties_spec.js.coffee diff --git a/app/assets/javascripts/admin/bulk_product_update.js.coffee b/app/assets/javascripts/admin/bulk_product_update.js.coffee index 9694ff761e..fdb1e3be13 100644 --- a/app/assets/javascripts/admin/bulk_product_update.js.coffee +++ b/app/assets/javascripts/admin/bulk_product_update.js.coffee @@ -1,4 +1,4 @@ -angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout, $http, BulkProducts, dataFetcher, DirtyProducts, VariantUnitManager, producers, Taxons, SpreeApiKey) -> +angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout, $http, BulkProducts, DisplayProperties, dataFetcher, DirtyProducts, VariantUnitManager, producers, Taxons, SpreeApiKey) -> $scope.loading = true $scope.updateStatusMessage = @@ -42,7 +42,7 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout $scope.limit = 15 $scope.productsWithUnsavedVariants = [] $scope.query = "" - $scope.displayProperties = {} + $scope.DisplayProperties = DisplayProperties $scope.initialise = -> authorise_api_reponse = "" @@ -70,9 +70,6 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout $scope.resetProducts = -> DirtyProducts.clear() $scope.setMessage $scope.updateStatusMessage, "", {}, false - for product in $scope.products - $scope.displayProperties[product.id] ||= showVariants: false - # $scope.matchProducer = (product) -> # for producer in $scope.producers @@ -125,7 +122,7 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout on_hand: null price: null $scope.productsWithUnsavedVariants.push product - $scope.displayProperties[product.id].showVariants = true + DisplayProperties.setShowVariants product.id, true $scope.nextVariantId = -> diff --git a/app/assets/javascripts/admin/directives/toggle_variants.js.coffee b/app/assets/javascripts/admin/directives/toggle_variants.js.coffee index 879942d698..410df8d7e9 100644 --- a/app/assets/javascripts/admin/directives/toggle_variants.js.coffee +++ b/app/assets/javascripts/admin/directives/toggle_variants.js.coffee @@ -1,18 +1,19 @@ -angular.module("ofn.admin").directive "ofnToggleVariants", -> +angular.module("ofn.admin").directive "ofnToggleVariants", (DisplayProperties) -> link: (scope, element, attrs) -> - if scope.displayProperties[scope.product.id].showVariants + if DisplayProperties.showVariants scope.product.id element.removeClass "icon-chevron-right" element.addClass "icon-chevron-down" else element.removeClass "icon-chevron-down" element.addClass "icon-chevron-right" + element.on "click", -> scope.$apply -> - if scope.displayProperties[scope.product.id].showVariants - scope.displayProperties[scope.product.id].showVariants = false + if DisplayProperties.showVariants scope.product.id + DisplayProperties.setShowVariants scope.product.id, false element.removeClass "icon-chevron-down" element.addClass "icon-chevron-right" else - scope.displayProperties[scope.product.id].showVariants = true + DisplayProperties.setShowVariants scope.product.id, true element.removeClass "icon-chevron-right" element.addClass "icon-chevron-down" \ No newline at end of file diff --git a/app/assets/javascripts/admin/services/display_properties.js.coffee b/app/assets/javascripts/admin/services/display_properties.js.coffee new file mode 100644 index 0000000000..7288706032 --- /dev/null +++ b/app/assets/javascripts/admin/services/display_properties.js.coffee @@ -0,0 +1,14 @@ +angular.module("ofn.admin").factory "DisplayProperties", -> + new class DisplayProperties + displayProperties: {} + + showVariants: (product_id) -> + @initProduct product_id + @displayProperties[product_id].showVariants + + setShowVariants: (product_id, showVariants) -> + @initProduct product_id + @displayProperties[product_id].showVariants = showVariants + + initProduct: (product_id) -> + @displayProperties[product_id] ||= {showVariants: false} diff --git a/app/views/spree/admin/products/bulk_edit/_products_variant.html.haml b/app/views/spree/admin/products/bulk_edit/_products_variant.html.haml index 6369da0d99..28f6ed6321 100644 --- a/app/views/spree/admin/products/bulk_edit/_products_variant.html.haml +++ b/app/views/spree/admin/products/bulk_edit/_products_variant.html.haml @@ -1,4 +1,4 @@ -%tr.variant{ :id => "v_{{variant.id}}", 'ng-repeat' => 'variant in product.variants', 'ng-show' => 'displayProperties[product.id].showVariants', 'ng-class-even' => "'even'", 'ng-class-odd' => "'odd'" } +%tr.variant{ :id => "v_{{variant.id}}", 'ng-repeat' => 'variant in product.variants', 'ng-show' => 'DisplayProperties.showVariants(product.id)', 'ng-class-even' => "'even'", 'ng-class-odd' => "'odd'" } %td.left-actions %a{ :class => "variant-item icon-caret-right", 'ng-hide' => "$last" } %a{ :class => "add-variant icon-plus-sign", 'ng-click' => "addVariant(product)", 'ng-show' => "$last" } diff --git a/spec/javascripts/unit/admin/services/display_properties_spec.js.coffee b/spec/javascripts/unit/admin/services/display_properties_spec.js.coffee new file mode 100644 index 0000000000..e2a5433903 --- /dev/null +++ b/spec/javascripts/unit/admin/services/display_properties_spec.js.coffee @@ -0,0 +1,17 @@ +describe "DisplayProperties", -> + DisplayProperties = null + + beforeEach -> + module "ofn.admin" + + beforeEach inject (_DisplayProperties_) -> + DisplayProperties = _DisplayProperties_ + + it "defaults showVariants to false", -> + expect(DisplayProperties.showVariants(123)).toEqual false + + it "sets the showVariants value", -> + DisplayProperties.setShowVariants(123, true) + expect(DisplayProperties.showVariants(123)).toEqual true + DisplayProperties.setShowVariants(123, false) + expect(DisplayProperties.showVariants(123)).toEqual false