From 3b0db5e951228ca9fb9a41bf2d4866aa16643956 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Wed, 17 Jun 2015 15:30:17 +0200 Subject: [PATCH] tmp --- .../projects-resource.service.coffee | 10 ++- .../user-timeline.controller.coffee | 66 +++++++++++------ .../user-timeline.service.coffee | 72 +++++++++++++++++-- 3 files changed, 115 insertions(+), 33 deletions(-) diff --git a/app/modules/resources/projects-resource.service.coffee b/app/modules/resources/projects-resource.service.coffee index 2a9d847f..bc3c0073 100644 --- a/app/modules/resources/projects-resource.service.coffee +++ b/app/modules/resources/projects-resource.service.coffee @@ -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) diff --git a/app/modules/user-timeline/user-timeline/user-timeline.controller.coffee b/app/modules/user-timeline/user-timeline/user-timeline.controller.coffee index bea5652a..8eca9f11 100644 --- a/app/modules/user-timeline/user-timeline/user-timeline.controller.coffee +++ b/app/modules/user-timeline/user-timeline/user-timeline.controller.coffee @@ -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) + if result.size + @.scrollDisabled = false - promise.then (list) => - @._timelineLoaded(list) + return @.timelineList - if !@.scrollDisabled && @.timelineList.size < @.min - return @.loadTimeline() + # loadTimeline: () -> + # @.scrollDisabled = true - return @.timelineList + # promise = null - return promise + # 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) - _timelineLoaded: (newTimelineList) -> - @.timelineList = @.timelineList.concat(newTimelineList) - @.page++ + # promise.then (result) => + # @._timelineLoaded(result) - if newTimelineList.size - @.scrollDisabled = false + # 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) diff --git a/app/modules/user-timeline/user-timeline/user-timeline.service.coffee b/app/modules/user-timeline/user-timeline/user-timeline.service.coffee index 93841005..11f3f0c6 100644 --- a/app/modules/user-timeline/user-timeline/user-timeline.service.coffee +++ b/app/modules/user-timeline/user-timeline/user-timeline.service.coffee @@ -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) -> - return @rs.projects.getTimeline(projectId, page) - .then (result) => - return result.filterNot (timeline) => - return @._isInValidTimeline(timeline) + getProjectTimeline: (projectId) -> + config = {} + + config.fetch = (page) => + return @rs.projects.getTimeline(projectId, page) + + 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)