diff --git a/app/modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.coffee b/app/modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.coffee index 7c8e08ec..98eef64e 100644 --- a/app/modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.coffee +++ b/app/modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.coffee @@ -18,7 +18,10 @@ UserTimelinePaginationSequence = () -> data = response.get("data") if config.filter - data = config.filter(response.get("data")) + data = config.filter(data) + + if config.map + data = data.map(config.map) items = items.concat(data) diff --git a/app/modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.spec.coffee b/app/modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.spec.coffee index 95585d5c..3db2162a 100644 --- a/app/modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.spec.coffee +++ b/app/modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.spec.coffee @@ -107,3 +107,31 @@ describe "tgUserTimelinePaginationSequenceService", -> expect(result.next).to.be.true done() + + + it "map items", (done) -> + config = {} + + page1 = Immutable.Map({ + next: false, + data: [1, 2, 3] + }) + + promise = sinon.stub() + promise.withArgs(1).promise().resolve(page1) + + config.fetch = (page) -> + return promise(page) + + config.minItems = 1 + + config.map = (item) => item + 1; + + seq = userTimelinePaginationSequenceService.generate(config) + + seq.next().then (result) -> + result = result.toJS() + + expect(result.items).to.be.eql([2, 3, 4]) + + done() 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 6f4b4c52..da71fa62 100644 --- a/app/modules/user-timeline/user-timeline/user-timeline.service.coffee +++ b/app/modules/user-timeline/user-timeline/user-timeline.service.coffee @@ -113,13 +113,11 @@ class UserTimelineService extends taiga.Service return timeline # - create a entry per every item in the values_diff - # - add extra attributes to each entry _parseTimeline: (response) -> newdata = Immutable.List() response.get('data').forEach (item) => event = @._parseEventType(item.get('event_type')) - type = @userTimelineItemType.getType(item, event) data = item.get('data') values_diff = data.get('values_diff') @@ -142,15 +140,19 @@ class UserTimelineService extends taiga.Service newItem = item.setIn(['data', 'value_diff'], obj) newItem = newItem.deleteIn(['data', 'values_diff']) - newItem = @._attachExtraInfoToTimelineEntry(newItem, event, type) newdata = newdata.push(newItem) else newItem = item.deleteIn(['data', 'values_diff']) - newItem = @._attachExtraInfoToTimelineEntry(newItem, event, type) newdata = newdata.push(newItem) return response.set('data', newdata) + _addEntyAttributes: (item) -> + event = @._parseEventType(item.get('event_type')) + type = @userTimelineItemType.getType(item, event) + + return @._attachExtraInfoToTimelineEntry(item, event, type) + getProfileTimeline: (userId) -> config = {} @@ -159,6 +161,8 @@ class UserTimelineService extends taiga.Service .then (response) => return @._parseTimeline(response) + config.map = (obj) => @._addEntyAttributes(obj) + config.filter = (items) => return items.filterNot (item) => @._isInValidTimeline(item) @@ -172,6 +176,8 @@ class UserTimelineService extends taiga.Service .then (response) => return @._parseTimeline(response) + config.map = (obj) => @._addEntyAttributes(obj) + config.filter = (items) => return items.filterNot (item) => @._isInValidTimeline(item) @@ -184,6 +190,8 @@ class UserTimelineService extends taiga.Service return @rs.projects.getTimeline(projectId, page) .then (response) => return @._parseTimeline(response) + config.map = (obj) => @._addEntyAttributes(obj) + config.filter = (items) => return items.filterNot (item) => @._isInValidTimeline(item) diff --git a/app/modules/user-timeline/user-timeline/user-timeline.service.spec.coffee b/app/modules/user-timeline/user-timeline/user-timeline.service.spec.coffee index 80b41000..654f1944 100644 --- a/app/modules/user-timeline/user-timeline/user-timeline.service.spec.coffee +++ b/app/modules/user-timeline/user-timeline/user-timeline.service.spec.coffee @@ -237,32 +237,29 @@ describe "tgUserTimelineService", -> it "all timeline extra fields filled", () -> timeline = Immutable.fromJS({ - data: [{ - event_type: 'issues.issue.created', - data: { - user: 'user_fake', - project: 'project_fake', - milestone: 'milestone_fake', - created: new Date().getTime(), - issue: { - id: 2 - }, - value_diff: { - key: 'attachments', - value: { - new: "fakeAttachment" - } + event_type: 'issues.issue.created', + data: { + user: 'user_fake', + project: 'project_fake', + milestone: 'milestone_fake', + created: new Date().getTime(), + issue: { + id: 2 + }, + value_diff: { + key: 'attachments', + value: { + new: "fakeAttachment" } } - }] + } }) mocks.userTimelineItemTitle.getTitle.returns("fakeTitle") mocks.getType.description.returns("fakeDescription") mocks.getType.member.returns("fakeMember") - timeline = userTimelineService._parseTimeline(timeline) - timelineEntry = timeline.get('data').get(0) + timelineEntry = userTimelineService._addEntyAttributes(timeline) expect(timelineEntry.get('title_html')).to.be.equal("fakeTitle") expect(timelineEntry.get('obj')).to.be.equal(timelineEntry.getIn(["data", "issue"]))