We need to guarantee that the last petition done here is the finally used

When searching by text loadIssues can be called fastly with different parameters and
can be resolved in a different order than generated
stable
Alejandro Alonso 2014-10-16 10:52:59 +02:00
parent e289755d6c
commit 5df6386f59
3 changed files with 20 additions and 10 deletions

View File

@ -134,9 +134,10 @@ class RepositoryService extends taiga.Service
return @http.get(url, params, httpOptions).then (data) =>
return data.data
queryPaginated: (name, params) ->
queryPaginated: (name, params, options={}) ->
url = @urls.resolve(name)
return @http.get(url, params).then (data) =>
httpOptions = _.merge({headers: {}}, options)
return @http.get(url, params, httpOptions).then (data) =>
headers = data.headers()
result = {}
result.models = _.map(data.data, (x) => @model.make_model(name, x))

View File

@ -229,7 +229,12 @@ class IssuesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi
@.markSelectedFilters(@scope.filters, urlfilters)
@rootscope.$broadcast("filters:loaded", @scope.filters)
loadIssues: ->
# We need to guarantee that the last petition done here is the finally used
# When searching by text loadIssues can be called fastly with different parameters and
# can be resolved in a different order than generated
# We count the requests made and only if the callback is for the last one data is updated
loadIssuesRequests: 0
loadIssues: =>
@scope.urlFilters = @.getUrlFilters()
# Convert stored filters to http parameters
@ -255,7 +260,11 @@ class IssuesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi
name = "type"
@scope.httpParams[name] = values
return @rs.issues.list(@scope.projectId, @scope.httpParams).then (data) =>
promise = @rs.issues.list(@scope.projectId, @scope.httpParams)
@.loadIssuesRequests += 1
promise.index = @.loadIssuesRequests
promise.then (data) =>
if promise.index == @.loadIssuesRequests
@scope.issues = data.models
@scope.page = data.current
@scope.count = data.count

View File

@ -35,11 +35,11 @@ resourceProvider = ($repo, $http, $urls, $storage, $q) ->
params.project = projectId
return $repo.queryOne("issues", issueId, params)
service.list = (projectId, filters) ->
service.list = (projectId, filters, options) ->
params = {project: projectId}
params = _.extend({}, params, filters or {})
service.storeQueryParams(projectId, params)
return $repo.queryPaginated("issues", params)
return $repo.queryPaginated("issues", params, options)
service.bulkCreate = (projectId, data) ->
url = $urls.resolve("bulk-create-issues")