diff --git a/app/assets/javascripts/admin/controllers/override_variants_controller.js.coffee b/app/assets/javascripts/admin/controllers/override_variants_controller.js.coffee index 663c6b467f..c84a1e1541 100644 --- a/app/assets/javascripts/admin/controllers/override_variants_controller.js.coffee +++ b/app/assets/javascripts/admin/controllers/override_variants_controller.js.coffee @@ -30,5 +30,8 @@ angular.module("ofn.admin").controller "AdminOverrideVariantsCtrl", ($scope, Ind $scope.hub = (hub for hub in hubs when hub.id == $scope.hub_id)[0] + $scope.displayDirty = -> + + $scope.update = -> StatusMessage.display 'success', 'Changes saved.' \ No newline at end of file diff --git a/app/assets/javascripts/admin/directives/track_variant_override.js.coffee b/app/assets/javascripts/admin/directives/track_variant_override.js.coffee new file mode 100644 index 0000000000..bb8117a757 --- /dev/null +++ b/app/assets/javascripts/admin/directives/track_variant_override.js.coffee @@ -0,0 +1,9 @@ +angular.module("ofn.admin").directive "ofnTrackVariantOverride", (DirtyVariantOverrides) -> + require: "ngModel" + link: (scope, element, attrs, ngModel) -> + ngModel.$parsers.push (viewValue) -> + if ngModel.$dirty + variantOverride = scope.variantOverrides[scope.hub.id][scope.variant.id] + DirtyVariantOverrides.add variantOverride + scope.displayDirty() + viewValue diff --git a/app/assets/javascripts/admin/services/dirty_variant_overrides.js.coffee b/app/assets/javascripts/admin/services/dirty_variant_overrides.js.coffee new file mode 100644 index 0000000000..68a6a923b7 --- /dev/null +++ b/app/assets/javascripts/admin/services/dirty_variant_overrides.js.coffee @@ -0,0 +1,7 @@ +angular.module("ofn.admin").factory "DirtyVariantOverrides", -> + new class DirtyVariantOverrides + dirtyVariantOverrides: {} + + add: (vo) -> + @dirtyVariantOverrides[vo.hub_id] ||= {} + @dirtyVariantOverrides[vo.hub_id][vo.variant_id] = vo diff --git a/app/views/spree/admin/products/override_variants/_products_variants.html.haml b/app/views/spree/admin/products/override_variants/_products_variants.html.haml index 371f0db30e..8af837901e 100644 --- a/app/views/spree/admin/products/override_variants/_products_variants.html.haml +++ b/app/views/spree/admin/products/override_variants/_products_variants.html.haml @@ -2,7 +2,7 @@ %td %td {{ variant.options_text }} %td - %input{name: 'variant-overrides-{{ variant.id }}-price', type: 'text', ng: {model: 'variantOverrides[hub.id][variant.id].price'}, placeholder: '{{ variant.price }}'} + %input{name: 'variant-overrides-{{ variant.id }}-price', type: 'text', ng: {model: 'variantOverrides[hub.id][variant.id].price'}, placeholder: '{{ variant.price }}', 'ofn-track-variant-override' => 'price'} %td - %input{name: 'variant-overrides-{{ variant.id }}-count-on-hand', type: 'text', ng: {model: 'variantOverrides[hub.id][variant.id].count_on_hand'}, placeholder: '{{ variant.on_hand }}'} + %input{name: 'variant-overrides-{{ variant.id }}-count-on-hand', type: 'text', ng: {model: 'variantOverrides[hub.id][variant.id].count_on_hand'}, placeholder: '{{ variant.on_hand }}', 'ofn-track-variant-override' => 'price'} diff --git a/spec/javascripts/unit/admin/services/dirty_variant_overrides_spec.js.coffee b/spec/javascripts/unit/admin/services/dirty_variant_overrides_spec.js.coffee new file mode 100644 index 0000000000..bae955fd20 --- /dev/null +++ b/spec/javascripts/unit/admin/services/dirty_variant_overrides_spec.js.coffee @@ -0,0 +1,40 @@ +describe "maintaining a list of dirty variant overrides", -> + DirtyVariantOverrides = null + variantOverride = + variant_id: 1 + hub_id: 2 + price: 3 + count_on_hand: 4 + + beforeEach -> + module "ofn.admin" + + beforeEach inject (_DirtyVariantOverrides_) -> + DirtyVariantOverrides = _DirtyVariantOverrides_ + + it "adds new dirty variant overrides", -> + DirtyVariantOverrides.add variantOverride + expect(DirtyVariantOverrides.dirtyVariantOverrides).toEqual + 2: + 1: + variant_id: 1 + hub_id: 2 + price: 3 + count_on_hand: 4 + + it "updates existing dirty variant overrides", -> + DirtyVariantOverrides.dirtyVariantOverrides = + 2: + 1: + variant_id: 5 + hub_id: 6 + price: 7 + count_on_hand: 8 + DirtyVariantOverrides.add variantOverride + expect(DirtyVariantOverrides.dirtyVariantOverrides).toEqual + 2: + 1: + variant_id: 1 + hub_id: 2 + price: 3 + count_on_hand: 4