mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-05 22:26:07 +00:00
Extract fetch-by-page from BPE to service
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
angular.module("ofn.admin").factory "BulkProducts", (dataFetcher) ->
|
||||
angular.module("ofn.admin").factory "BulkProducts", (PagedFetcher, dataFetcher) ->
|
||||
new class BulkProducts
|
||||
products: []
|
||||
|
||||
@@ -6,13 +6,9 @@ angular.module("ofn.admin").factory "BulkProducts", (dataFetcher) ->
|
||||
queryString = filters.reduce (qs,f) ->
|
||||
return qs + "q[#{f.property.db_column}_#{f.predicate.predicate}]=#{f.value};"
|
||||
, ""
|
||||
return dataFetcher("/api/products/bulk_products?page=1;per_page=20;#{queryString}").then (data) =>
|
||||
@addProducts data.products
|
||||
|
||||
if data.pages > 1
|
||||
for page in [2..data.pages]
|
||||
dataFetcher("/api/products/bulk_products?page=#{page};per_page=20;#{queryString}").then (data) =>
|
||||
@addProducts data.products
|
||||
url = "/api/products/bulk_products?page=::page::;per_page=20;#{queryString}"
|
||||
PagedFetcher.fetch url, (data) => @addProducts data.products
|
||||
|
||||
cloneProduct: (product) ->
|
||||
dataFetcher("/admin/products/" + product.permalink_live + "/clone.json").then (data) =>
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
angular.module("ofn.admin").factory "PagedFetcher", (dataFetcher) ->
|
||||
new class PagedFetcher
|
||||
# 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) ->
|
||||
dataFetcher(@urlForPage(url, 1)).then (data) =>
|
||||
processData data
|
||||
|
||||
if data.pages > 1
|
||||
for page in [2..data.pages]
|
||||
dataFetcher(@urlForPage(url, page)).then (data) ->
|
||||
processData data
|
||||
|
||||
urlForPage: (url, page) ->
|
||||
url.replace("::page::", page)
|
||||
13
spec/javascripts/unit/admin/services/paged_fetcher.js.coffee
Normal file
13
spec/javascripts/unit/admin/services/paged_fetcher.js.coffee
Normal file
@@ -0,0 +1,13 @@
|
||||
describe "PagedFetcher service", ->
|
||||
PagedFetcher = null
|
||||
|
||||
beforeEach ->
|
||||
module "ofn.admin"
|
||||
|
||||
beforeEach inject (_PagedFetcher_) ->
|
||||
PagedFetcher = _PagedFetcher_
|
||||
|
||||
describe "substituting a page in the URL", ->
|
||||
it "replaces ::page:: with the given page number", ->
|
||||
expect(PagedFetcher.urlForPage("http://example.com/foo?page=::page::&per_page=20", 12)).
|
||||
toEqual "http://example.com/foo?page=12&per_page=20"
|
||||
Reference in New Issue
Block a user