stable
Juanfran 2015-06-17 15:30:17 +02:00
parent b5fbaa402d
commit 3b0db5e951
3 changed files with 115 additions and 33 deletions

View File

@ -1,4 +1,6 @@
Resource = (urlsService, http) ->
pagination = () ->
Resource = (urlsService, http, paginateResponseService) ->
service = {}
service.getProjectBySlug = (projectSlug) ->
@ -40,12 +42,14 @@ Resource = (urlsService, http) ->
url = "#{url}/#{projectId}"
return http.get(url, params).then (result) ->
return Immutable.fromJS(result.data)
result = Immutable.fromJS(result)
return paginateResponseService(result)
return () ->
return {"projects": service}
Resource.$inject = ["$tgUrls", "$tgHttp"]
Resource.$inject = ["$tgUrls", "$tgHttp", "tgPaginateResponseService"]
module = angular.module("taigaResources2")
module.factory("tgProjectsResources", Resource)

View File

@ -28,43 +28,63 @@ class UserTimelineController extends mixOf(taiga.Controller, taiga.PageMixin, ta
"tgUserTimelineService"
]
min: 20
constructor: (@userTimelineService) ->
@.timelineList = Immutable.List()
@.page = 1
@.scrollDisabled = false
@.timeline = null
if @.projectId
@.timeline = @userTimelineService.getProjectTimeline(@.projectId)
else if @.currentUser
@.timeline = @userTimelineService.getProfileTimeline(@.user.get("id"))
else
@.timeline = @userTimelineService.getUserTimeline(@.user.get("id"))
loadTimeline: () ->
@.scrollDisabled = true
promise = null
return @.timeline
.next()
.then (result) =>
@.timelineList = @.timelineList.concat(result)
if @.projectId
promise = @userTimelineService
.getProjectTimeline(@.projectId, @.page)
else if @.currentUser
promise = @userTimelineService
.getProfileTimeline(@.user.get("id"), @.page)
else
promise = @userTimelineService
.getUserTimeline(@.user.get("id"), @.page)
promise.then (list) =>
@._timelineLoaded(list)
if !@.scrollDisabled && @.timelineList.size < @.min
return @.loadTimeline()
if result.size
@.scrollDisabled = false
return @.timelineList
return promise
# loadTimeline: () ->
# @.scrollDisabled = true
_timelineLoaded: (newTimelineList) ->
@.timelineList = @.timelineList.concat(newTimelineList)
@.page++
# promise = null
if newTimelineList.size
@.scrollDisabled = false
# if @.projectId
# promise = @userTimelineService
# .getProjectTimeline(@.projectId, @.page)
# else if @.currentUser
# promise = @userTimelineService
# .getProfileTimeline(@.user.get("id"), @.page)
# else
# promise = @userTimelineService
# .getUserTimeline(@.user.get("id"), @.page)
# promise.then (result) =>
# @._timelineLoaded(result)
# if !@.scrollDisabled && @.timelineList.size < @.min
# return @.loadTimeline()
# return @.timelineList
# return promise
# _timelineLoaded: (result) ->
# @.timelineList = @.timelineList.concat(result.get("data"))
# @.page++
# if result.get("next")
# @.scrollDisabled = false
angular.module("taigaUserTimeline")
.controller("UserTimeline", UserTimelineController)

View File

@ -1,9 +1,9 @@
taiga = @.taiga
class UserTimelineService extends taiga.Service
@.$inject = ["tgResources"]
@.$inject = ["tgResources", "tgPaginationSequenceService"]
constructor: (@rs) ->
constructor: (@rs, @paginationSequenceService) ->
_invalid: [
{# Items with only invalid fields
@ -82,10 +82,68 @@ class UserTimelineService extends taiga.Service
return result.filterNot (timeline) =>
return @._isInValidTimeline(timeline)
getProjectTimeline: (projectId, page) ->
getProjectTimeline: (projectId) ->
config = {}
config.fetch = (page) =>
return @rs.projects.getTimeline(projectId, page)
.then (result) =>
return result.filterNot (timeline) =>
return @._isInValidTimeline(timeline)
config.filter = (result) =>
return result.filterNot (item) => @._isInValidTimeline(item)
config.items = 20
return @paginationSequenceService(config)
# return @rs.projects.getTimeline(projectId, page)
# .then (result) =>
# timeline = Immutable.Map()
# data = result.get("data").filterNot (item) =>
# return @._isInValidTimeline(item)
# timeline = timeline.set("data", data)
# timeline = timeline.set("next", !!result.get("headers")("x-pagination-next"))
# return timeline
angular.module("taigaUserTimeline").service("tgUserTimelineService", UserTimelineService)
PaginationSequence = () ->
return (config) ->
page = 1
obj = {}
obj.next = () ->
config.fetch(page).then (response) ->
page++
data = response.get("data")
if config.filter
data = config.filter(response.get("data"))
if data.size < config.items && response.get("next")
return obj.next()
return data
return obj
angular.module("taigaCommon").factory("tgPaginationSequenceService", PaginationSequence)
PaginateResponse = () ->
return (result) ->
paginateResponse = Immutable.Map()
paginateResponse = paginateResponse.set("data", result.get("data"))
paginateResponse = paginateResponse.set("next", !!result.get("headers")("x-pagination-next"))
paginateResponse = paginateResponse.set("prev", !!result.get("headers")("x-pagination-prev"))
paginateResponse = paginateResponse.set("current", result.get("headers")("x-pagination-current"))
paginateResponse = paginateResponse.set("count", result.get("headers")("x-pagination-count"))
return paginateResponse
angular.module("taigaCommon").factory("tgPaginateResponseService", PaginateResponse)