From dfb510debe60f61cebde8ec8ddf18d3de3127801 Mon Sep 17 00:00:00 2001 From: luisramos0 Date: Thu, 28 Jun 2018 23:17:42 +0100 Subject: [PATCH] admin page fetcher is now receiving a onLastPageComplete function that is used to show "no results" messages only after the last page is fetched --- .../javascripts/admin/bulk_product_update.js.coffee | 6 +++++- .../admin/index_utils/services/paged_fetcher.js.coffee | 8 ++++++-- .../javascripts/admin/services/bulk_products.js.coffee | 3 ++- .../spree/admin/products/index/_indicators.html.haml | 4 ++-- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/app/assets/javascripts/admin/bulk_product_update.js.coffee b/app/assets/javascripts/admin/bulk_product_update.js.coffee index a9f2f20d14..2a3497898b 100644 --- a/app/assets/javascripts/admin/bulk_product_update.js.coffee +++ b/app/assets/javascripts/admin/bulk_product_update.js.coffee @@ -1,5 +1,6 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout, $http, $window, BulkProducts, DisplayProperties, dataFetcher, DirtyProducts, VariantUnitManager, StatusMessage, producers, Taxons, SpreeApiAuth, Columns, tax_categories) -> $scope.loading = true + $scope.loadingAllPages = true $scope.StatusMessage = StatusMessage @@ -49,7 +50,10 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout $scope.fetchProducts = -> $scope.loading = true - BulkProducts.fetch($scope.currentFilters).then -> + $scope.loadingAllPages = true + BulkProducts.fetch($scope.currentFilters, -> + $scope.loadingAllPages = false + ).then -> $scope.resetProducts() $scope.loading = false diff --git a/app/assets/javascripts/admin/index_utils/services/paged_fetcher.js.coffee b/app/assets/javascripts/admin/index_utils/services/paged_fetcher.js.coffee index d65887bb2c..82487996ae 100644 --- a/app/assets/javascripts/admin/index_utils/services/paged_fetcher.js.coffee +++ b/app/assets/javascripts/admin/index_utils/services/paged_fetcher.js.coffee @@ -3,14 +3,18 @@ angular.module("admin.indexUtils").factory "PagedFetcher", (dataFetcher) -> # Given a URL like http://example.com/foo?page=::page::&per_page=20 # And the response includes an attribute pages with the number of pages to fetch # Fetch each page async, and call the processData callback with the resulting data - fetch: (url, processData) -> + fetch: (url, processData, onLastPageComplete) -> dataFetcher(@urlForPage(url, 1)).then (data) => processData data if data.pages > 1 for page in [2..data.pages] - dataFetcher(@urlForPage(url, page)).then (data) -> + lastPromise = dataFetcher(@urlForPage(url, page)).then (data) -> processData data + onLastPageComplete && lastPromise.then onLastPageComplete + return + else + onLastPageComplete && onLastPageComplete() urlForPage: (url, page) -> url.replace("::page::", page) diff --git a/app/assets/javascripts/admin/services/bulk_products.js.coffee b/app/assets/javascripts/admin/services/bulk_products.js.coffee index 022345e9d8..a528c522ca 100644 --- a/app/assets/javascripts/admin/services/bulk_products.js.coffee +++ b/app/assets/javascripts/admin/services/bulk_products.js.coffee @@ -8,7 +8,8 @@ angular.module("ofn.admin").factory "BulkProducts", (PagedFetcher, dataFetcher, , "" url = "/api/products/bulk_products?page=::page::;per_page=20;#{queryString}" - PagedFetcher.fetch url, (data) => @addProducts data.products + processData = (data) => @addProducts data.products + PagedFetcher.fetch url, processData, onComplete cloneProduct: (product) -> $http.post("/api/products/" + product.id + "/clone").success (data) => diff --git a/app/views/spree/admin/products/index/_indicators.html.haml b/app/views/spree/admin/products/index/_indicators.html.haml index bfdd104690..5cf28af7de 100644 --- a/app/views/spree/admin/products/index/_indicators.html.haml +++ b/app/views/spree/admin/products/index/_indicators.html.haml @@ -5,10 +5,10 @@ %img.spinner{ src: "/assets/spinning-circles.svg" } %h1= t('.title') -%div.sixteen.columns.alpha{ 'ng-show' => '!loading && filteredProducts.length == 0 && query.length==0' } +%div.sixteen.columns.alpha{ 'ng-show' => '!loadingAllPages && filteredProducts.length == 0 && query.length==0' } %h1#no_results= t('.no_products') -%div.sixteen.columns.alpha{ 'ng-show' => '!loading && filteredProducts.length == 0 && query.length!=0' } +%div.sixteen.columns.alpha{ 'ng-show' => '!loadingAllPages && filteredProducts.length == 0 && query.length!=0' } %h1#no_results = t('.no_results') '