diff --git a/app/assets/javascripts/admin/index_utils/directives/save_bar.js.coffee b/app/assets/javascripts/admin/index_utils/directives/save_bar.js.coffee index a991592d42..0b30499d1d 100644 --- a/app/assets/javascripts/admin/index_utils/directives/save_bar.js.coffee +++ b/app/assets/javascripts/admin/index_utils/directives/save_bar.js.coffee @@ -1,7 +1,8 @@ -angular.module("admin.indexUtils").directive "saveBar", -> +angular.module("admin.indexUtils").directive "saveBar", (StatusMessage) -> restrict: "E" scope: save: "&" - saving: "&" - dirty: "&" + form: "=" templateUrl: "admin/save_bar.html" + link: (scope, element, attrs) -> + scope.StatusMessage = StatusMessage diff --git a/app/assets/javascripts/admin/index_utils/services/status_message.js.coffee b/app/assets/javascripts/admin/index_utils/services/status_message.js.coffee index 9cc9547e39..5dd9fb7258 100644 --- a/app/assets/javascripts/admin/index_utils/services/status_message.js.coffee +++ b/app/assets/javascripts/admin/index_utils/services/status_message.js.coffee @@ -11,6 +11,9 @@ angular.module("admin.indexUtils").factory "StatusMessage", ($timeout) -> text: "" style: {} + active: -> + @statusMessage.text != '' + display: (type, text) -> @statusMessage.text = text @statusMessage.style = @types[type].style @@ -20,6 +23,7 @@ angular.module("admin.indexUtils").factory "StatusMessage", ($timeout) -> @statusMessage.timeout = $timeout => @clear() , timeout, true + null # So we don't return weird timeouts clear: -> @statusMessage.text = '' diff --git a/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee b/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee index 38c7f0ba33..c6709eb3b4 100644 --- a/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee +++ b/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee @@ -1,7 +1,6 @@ -angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout, $http, $q, Columns, Dereferencer, Orders, LineItems, Enterprises, OrderCycles, blankOption, VariantUnitManager, RequestMonitor) -> +angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout, $http, $q, StatusMessage, Columns, Dereferencer, Orders, LineItems, Enterprises, OrderCycles, blankOption, VariantUnitManager, RequestMonitor) -> $scope.initialized = false $scope.RequestMonitor = RequestMonitor - $scope.saving = false $scope.filteredLineItems = [] $scope.confirmDelete = true $scope.startDate = formatDate daysFromToday -7 @@ -55,6 +54,7 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout, Dereferencer.dereferenceAttr $scope.lineItems, "supplier", Enterprises.enterprisesByID Dereferencer.dereferenceAttr $scope.lineItems, "order", Orders.ordersByID $scope.bulk_order_form.$setPristine() + StatusMessage.clear() unless $scope.initialized $scope.initialized = true $timeout -> @@ -62,16 +62,20 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout, $scope.refreshData() - $scope.submit = => + $scope.$watch 'bulk_order_form.$dirty', (newVal, oldVal) -> + if newVal == true + StatusMessage.display 'notice', "You have unsaved changes" + + $scope.submit = -> if $scope.bulk_order_form.$valid - $scope.saving = true + StatusMessage.display 'progress', "Saving..." $q.all(LineItems.saveAll()).then(-> + StatusMessage.display 'success', "All changes saved" $scope.bulk_order_form.$setPristine() - $scope.saving = false ).catch -> - alert "Some errors must be resolved be before you can update orders.\nAny fields with red borders contain errors." + StatusMessage.display 'failure', "Fields with red borders contain errors." else - alert "Some errors must be resolved be before you can update orders.\nAny fields with red borders contain errors." + StatusMessage.display 'failure', "Fields with red borders contain errors." $scope.deleteLineItem = (lineItem) -> if ($scope.confirmDelete && confirm("Are you sure?")) || !$scope.confirmDelete diff --git a/app/assets/javascripts/admin/variant_overrides/controllers/variant_overrides_controller.js.coffee b/app/assets/javascripts/admin/variant_overrides/controllers/variant_overrides_controller.js.coffee index d3a57c572f..c179d9a6a8 100644 --- a/app/assets/javascripts/admin/variant_overrides/controllers/variant_overrides_controller.js.coffee +++ b/app/assets/javascripts/admin/variant_overrides/controllers/variant_overrides_controller.js.coffee @@ -1,4 +1,4 @@ -angular.module("admin.variantOverrides").controller "AdminVariantOverridesCtrl", ($scope, $timeout, Indexer, SpreeApiAuth, PagedFetcher, StatusMessage, hubs, producers, hubPermissions, VariantOverrides, DirtyVariantOverrides) -> +angular.module("admin.variantOverrides").controller "AdminVariantOverridesCtrl", ($scope, Indexer, SpreeApiAuth, PagedFetcher, StatusMessage, hubs, producers, hubPermissions, VariantOverrides, DirtyVariantOverrides) -> $scope.hubs = Indexer.index hubs $scope.hub = null $scope.products = [] @@ -52,9 +52,10 @@ angular.module("admin.variantOverrides").controller "AdminVariantOverridesCtrl", .success (updatedVos) -> DirtyVariantOverrides.clear() VariantOverrides.updateIds updatedVos - $timeout -> StatusMessage.display 'success', 'Changes saved.' + StatusMessage.display 'success', 'Changes saved.' + $scope.variant_overrides_form.$setPristine() .error (data, status) -> - $timeout -> StatusMessage.display 'failure', $scope.updateError(data, status) + StatusMessage.display 'failure', $scope.updateError(data, status) $scope.updateError = (data, status) -> diff --git a/app/assets/javascripts/templates/admin/save_bar.html.haml b/app/assets/javascripts/templates/admin/save_bar.html.haml index 62842f0bfb..618402cf2b 100644 --- a/app/assets/javascripts/templates/admin/save_bar.html.haml +++ b/app/assets/javascripts/templates/admin/save_bar.html.haml @@ -1,10 +1,6 @@ -#save-bar.animate-show{ ng: { show: 'dirty()' } } +#save-bar.animate-show{ ng: { show: 'form.$dirty || StatusMessage.active()' } } .twelve.columns.alpha - %h5{ ng: { show: "dirty() && !saving()" } } - You have unsaved changes - %h5{ ng: { hide: "dirty() || saving()" } } - All changes saved - %h5{ ng: { show: "saving()" } } - Saving... + %h5#status-messae{ ng: { style: 'StatusMessage.statusMessage.style' } } + {{ StatusMessage.statusMessage.text || " " }} .four.columns.omega.text-right - %input.red{type: "button", value: "Save Changes", ng: { click: "save()" } } + %input.red{type: "button", value: "Save Changes", ng: { disabled: '!form.$dirty', click: "save()" } } diff --git a/app/views/admin/variant_overrides/index.html.haml b/app/views/admin/variant_overrides/index.html.haml index 8d0a4670d7..2d202bac27 100644 --- a/app/views/admin/variant_overrides/index.html.haml +++ b/app/views/admin/variant_overrides/index.html.haml @@ -4,8 +4,6 @@ %div{ ng: { app: 'admin.variantOverrides', controller: 'AdminVariantOverridesCtrl', init: 'initialise()' } } = render 'admin/variant_overrides/filters' - %div{ng: {show: 'hub'}} - %h2 {{ hub.name }} - = render 'admin/variant_overrides/actions' - - = render 'admin/variant_overrides/products' + %form{ name: 'variant_overrides_form' } + %save-bar{ save: "update()", form: "variant_overrides_form" } + = render 'admin/variant_overrides/products' diff --git a/app/views/spree/admin/orders/bulk_management.html.haml b/app/views/spree/admin/orders/bulk_management.html.haml index dbcf9c97fd..083ae2f6c8 100644 --- a/app/views/spree/admin/orders/bulk_management.html.haml +++ b/app/views/spree/admin/orders/bulk_management.html.haml @@ -5,7 +5,7 @@ = render :partial => 'spree/admin/shared/order_sub_menu' %div{ ng: { app: 'admin.lineItems', controller: 'LineItemsCtrl' } } - %save-bar{ save: "submit()", saving: 'saving', dirty: "bulk_order_form.$dirty" } + %save-bar{ save: "submit()", form: "bulk_order_form" } .filters{ :class => "sixteen columns alpha" } .date_filter{ :class => "two columns alpha" } %label{ :for => 'start_date_filter' }Start Date diff --git a/spec/features/admin/bulk_order_management_spec.rb b/spec/features/admin/bulk_order_management_spec.rb index 5a51f396b3..f8f2eae34a 100644 --- a/spec/features/admin/bulk_order_management_spec.rb +++ b/spec/features/admin/bulk_order_management_spec.rb @@ -119,10 +119,9 @@ feature %q{ expect(page).to_not have_selector "#save-bar" fill_in "quantity", :with => 2 expect(page).to have_selector "input[name='quantity'].ng-dirty" - expect(page).to have_selector "#save-bar" - expect(page).to have_button "Save Changes" + expect(page).to have_selector "#save-bar", text: "You have unsaved changes" click_button "Save Changes" - expect(page).to_not have_selector "#save-bar" + expect(page).to have_selector "#save-bar", text: "All changes saved" expect(page).to_not have_selector "input[name='quantity'].ng-dirty" end end @@ -132,10 +131,9 @@ feature %q{ expect(page).to_not have_selector "#save-bar" fill_in "quantity", :with => li1.variant.on_hand + li1.quantity + 10 expect(page).to have_selector "input[name='quantity'].ng-dirty" - expect(page).to have_selector "#save-bar" - expect(page).to have_button "Save Changes" + expect(page).to have_selector "#save-bar", text: "You have unsaved changes" click_button "Save Changes" - expect(page).to have_selector "#save-bar" + expect(page).to have_selector "#save-bar", text: "Fields with red borders contain errors." expect(page).to have_selector "input[name='quantity'].ng-dirty.update-error" expect(page).to have_content "exceeds available stock. Please ensure line items have a valid quantity." end diff --git a/spec/features/admin/variant_overrides_spec.rb b/spec/features/admin/variant_overrides_spec.rb index ec8b754abe..c49e95c4ef 100644 --- a/spec/features/admin/variant_overrides_spec.rb +++ b/spec/features/admin/variant_overrides_spec.rb @@ -26,13 +26,6 @@ feature %q{ page.should have_select2 'hub_id', options: ['', hub.name, hub2.name] end - - it "displays the hub" do - visit '/admin/variant_overrides' - select2_select hub.name, from: 'hub_id' - - page.should have_selector 'h2', text: hub.name - end end context "when a hub is selected" do