From 1a47a7486e62cd743ec77c57ba3066d940ca6e4b Mon Sep 17 00:00:00 2001 From: Will Marshall Date: Fri, 30 May 2014 11:58:22 +1000 Subject: [PATCH] Automatically closing the accordion if the form is already valid --- .../checkout/accordion_controller.js.coffee | 7 ++- .../checkout/details_controller.js.coffee | 9 +--- .../services/checkout_form_state.js.coffee | 2 +- .../admin/orders_controller_decorator.rb | 3 +- .../accordion_controller_spec.js.coffee | 43 ++++++++++++++----- 5 files changed, 41 insertions(+), 23 deletions(-) diff --git a/app/assets/javascripts/darkswarm/controllers/checkout/accordion_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/checkout/accordion_controller.js.coffee index b6f533e751..38f41c6f6b 100644 --- a/app/assets/javascripts/darkswarm/controllers/checkout/accordion_controller.js.coffee +++ b/app/assets/javascripts/darkswarm/controllers/checkout/accordion_controller.js.coffee @@ -1,4 +1,4 @@ -Darkswarm.controller "AccordionCtrl", ($scope, storage) -> +Darkswarm.controller "AccordionCtrl", ($scope, storage, $timeout) -> $scope.accordion = details: true shipping: false @@ -9,3 +9,8 @@ Darkswarm.controller "AccordionCtrl", ($scope, storage) -> $scope.show = (name)-> $scope.accordion[name] = true + $timeout => + if $scope.checkout.$valid + for k, v of $scope.accordion + $scope.accordion[k] = false + diff --git a/app/assets/javascripts/darkswarm/controllers/checkout/details_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/checkout/details_controller.js.coffee index c9d559a0d0..8153c24f92 100644 --- a/app/assets/javascripts/darkswarm/controllers/checkout/details_controller.js.coffee +++ b/app/assets/javascripts/darkswarm/controllers/checkout/details_controller.js.coffee @@ -1,5 +1,6 @@ Darkswarm.controller "DetailsCtrl", ($scope) -> angular.extend(this, new FieldsetMixin($scope)) + $scope.name = "details" $scope.nextPanel = "billing" @@ -11,11 +12,3 @@ Darkswarm.controller "DetailsCtrl", ($scope) -> $scope.fullName = -> [$scope.order.bill_address.firstname ? null, $scope.order.bill_address.lastname ? null].join(" ").trim() - - - #$scope.$watch -> - #$scope.detailsValid() - #, (valid)-> - #if valid - #$scope.show("billing") - diff --git a/app/assets/javascripts/darkswarm/services/checkout_form_state.js.coffee b/app/assets/javascripts/darkswarm/services/checkout_form_state.js.coffee index 9d68efba64..6fedb6b3c6 100644 --- a/app/assets/javascripts/darkswarm/services/checkout_form_state.js.coffee +++ b/app/assets/javascripts/darkswarm/services/checkout_form_state.js.coffee @@ -1,3 +1,3 @@ Darkswarm.factory 'CheckoutFormState', ()-> - # Just a singleton place to store data about the form statr + # Just a singleton place to store data about the form state new class CheckoutFormState diff --git a/app/controllers/spree/admin/orders_controller_decorator.rb b/app/controllers/spree/admin/orders_controller_decorator.rb index 51c7acba09..27d9a36943 100644 --- a/app/controllers/spree/admin/orders_controller_decorator.rb +++ b/app/controllers/spree/admin/orders_controller_decorator.rb @@ -15,11 +15,10 @@ Spree::Admin::OrdersController.class_eval do per(params[:per_page] || Spree::Config[:orders_per_page]) } } } - private def load_spree_api_key current_user.generate_spree_api_key! unless spree_current_user.spree_api_key @spree_api_key = spree_current_user.spree_api_key end -end \ No newline at end of file +end diff --git a/spec/javascripts/unit/darkswarm/controllers/checkout/accordion_controller_spec.js.coffee b/spec/javascripts/unit/darkswarm/controllers/checkout/accordion_controller_spec.js.coffee index 1c0c199351..d35fb93e86 100644 --- a/spec/javascripts/unit/darkswarm/controllers/checkout/accordion_controller_spec.js.coffee +++ b/spec/javascripts/unit/darkswarm/controllers/checkout/accordion_controller_spec.js.coffee @@ -1,19 +1,40 @@ describe "AccordionCtrl", -> ctrl = null - scope = scope + scope = null beforeEach -> module "Darkswarm" localStorage.clear() - inject ($controller, $rootScope) -> - scope = $rootScope.$new() - scope.order = - id: 129 - ctrl = $controller 'AccordionCtrl', {$scope: scope} - it "defaults the details accordion to visible", -> - expect(scope.accordion.details).toEqual true + describe "loading incomplete form", -> + beforeEach -> + inject ($controller, $rootScope) -> + scope = $rootScope.$new() + scope.order = + id: 129 + ctrl = $controller 'AccordionCtrl', {$scope: scope} - it "changes accordion", -> - scope.show "shipping" - expect(scope.accordion["shipping"]).toEqual true + it "defaults the details accordion to visible", -> + expect(scope.accordion.details).toEqual true + + it "changes accordion", -> + scope.show "shipping" + expect(scope.accordion["shipping"]).toEqual true + + describe "loading complete form", -> + beforeEach -> + inject ($controller, $rootScope) -> + scope = $rootScope.$new() + scope.checkout = + $valid: true + scope.order = + id: 129 + ctrl = $controller 'AccordionCtrl', {$scope: scope} + + it "automatically closes all sections if the entire form is valid", -> + waitsFor -> + (scope.accordion.details and + scope.accordion.shipping and + scope.accordion.payment and + scope.accordion.billing) == false + , "the accordion to close", 100