From 4a88fb0626dc91c9a2fc35ac69123dbf42043863 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Fri, 26 Oct 2018 21:00:26 +0100 Subject: [PATCH] Use simpler array for selected ids --- .../controllers/orders_controller.js.coffee | 32 ++++++++++--------- app/views/spree/admin/orders/index.html.haml | 4 +-- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee b/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee index a89c97791f..a882def796 100644 --- a/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee +++ b/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee @@ -8,7 +8,8 @@ angular.module("admin.orders").controller "ordersCtrl", ($scope, RequestMonitor, {id: 50, name: t('js.admin.orders.index.per_page', results: 50)}, {id: 100, name: t('js.admin.orders.index.per_page', results: 100)} ] - $scope.selected_orders = {} + $scope.selected_orders = [] + $scope.checkboxes = {} $scope.selected = false $scope.select_all = false @@ -41,13 +42,24 @@ angular.module("admin.orders").controller "ordersCtrl", ($scope, RequestMonitor, }) $scope.resetSelected = -> - $scope.selected_orders = {} + $scope.selected_orders.length = 0 $scope.selected = false $scope.select_all = false + $scope.checkboxes = {} + + $scope.toggleSelection = (id) -> + index = $scope.selected_orders.indexOf(id) + + if index == -1 + $scope.selected_orders.push(id) + else + $scope.selected_orders.splice(index, 1) $scope.toggleAll = -> + $scope.selected_orders.length = 0 $scope.orders.forEach (order) -> - $scope.selected_orders[order.id] = $scope.select_all + $scope.checkboxes[order.id] = $scope.select_all + $scope.selected_orders.push order.id if $scope.select_all $scope.$watch 'sortOptions', (sort) -> if sort && sort.predicate != "" @@ -56,24 +68,14 @@ angular.module("admin.orders").controller "ordersCtrl", ($scope, RequestMonitor, $scope.fetchResults() , true - $scope.$watchCollection 'selected_orders', (selected_orders) -> - if selected_orders - orders_selected = false - angular.forEach selected_orders, (checked, order_id) -> - if checked - orders_selected = true - return - - $scope.selected = orders_selected - $scope.changePage = (newPage) -> $scope.page = newPage $scope.fetchResults(newPage) $scope.bulkInvoice = -> params = '' - angular.forEach $scope.selected_orders, (selected, order_id) -> - params += 'order_ids[]='+order_id+'&' if selected + angular.forEach $scope.selected_orders, (order_id) -> + params += 'order_ids[]='+order_id+'&' $window.open('/admin/orders/bulk_invoice?'+params) true diff --git a/app/views/spree/admin/orders/index.html.haml b/app/views/spree/admin/orders/index.html.haml index 114c177d22..559f93eb72 100644 --- a/app/views/spree/admin/orders/index.html.haml +++ b/app/views/spree/admin/orders/index.html.haml @@ -19,7 +19,7 @@ .row.index-controls{'ng-show' => '!RequestMonitor.loading && orders.length > 0'} = render partial: 'per_page_controls' - %button{'ng-click' => 'bulkInvoice()', 'ng-disabled' => '!selected'} + %button{'ng-click' => 'bulkInvoice()', 'ng-disabled' => 'selected_orders.length == 0'} = t('.print_invoices') %table#listing_orders.index.responsive{width: "100%", 'ng-init' => 'initialise()', 'ng-show' => "!RequestMonitor.loading && orders.length > 0" } @@ -45,7 +45,7 @@ %tbody %tr{ng: {repeat: 'order in orders track by $index', class: {even: "'even'", odd: "'odd'"}}, 'ng-class' => "'state-{{order.state}}'"} %td.align-center - %input{type: 'checkbox', 'ng-model' => 'selected_orders[order.id]'} + %input{type: 'checkbox', 'ng-model' => 'checkboxes[order.id]', 'ng-change' => 'toggleSelection(order.id)'} %td.align-center {{order.distributor_name}} %td.align-center