fix infinite scroll in large screen with few items at start
parent
71aeea39f8
commit
4fa7a6d639
|
@ -28,6 +28,7 @@ class UserTimelineController extends mixOf(taiga.Controller, taiga.PageMixin, ta
|
|||
"tgUserTimelineService"
|
||||
]
|
||||
|
||||
min: 20
|
||||
constructor: (@userTimelineService) ->
|
||||
@.timelineList = Immutable.List()
|
||||
@.page = 1
|
||||
|
@ -36,21 +37,27 @@ class UserTimelineController extends mixOf(taiga.Controller, taiga.PageMixin, ta
|
|||
loadTimeline: () ->
|
||||
@.scrollDisabled = true
|
||||
|
||||
promise = null
|
||||
|
||||
if @.projectId
|
||||
@userTimelineService
|
||||
promise = @userTimelineService
|
||||
.getProjectTimeline(@.projectId, @.page)
|
||||
.then (newTimelineList) =>
|
||||
@._timelineLoaded(newTimelineList)
|
||||
else if @.currentUser
|
||||
@userTimelineService
|
||||
promise = @userTimelineService
|
||||
.getProfileTimeline(@.user.get("id"), @.page)
|
||||
.then (newTimelineList) =>
|
||||
@._timelineLoaded(newTimelineList)
|
||||
else
|
||||
@userTimelineService
|
||||
promise = @userTimelineService
|
||||
.getUserTimeline(@.user.get("id"), @.page)
|
||||
.then (newTimelineList) =>
|
||||
@._timelineLoaded(newTimelineList)
|
||||
|
||||
promise.then (list) =>
|
||||
@._timelineLoaded(list)
|
||||
|
||||
if !@.scrollDisabled && @.timelineList.size < @.min
|
||||
return @.loadTimeline()
|
||||
|
||||
return @.timelineList
|
||||
|
||||
return promise
|
||||
|
||||
_timelineLoaded: (newTimelineList) ->
|
||||
@.timelineList = @.timelineList.concat(newTimelineList)
|
||||
|
|
|
@ -41,6 +41,22 @@ describe "UserTimelineController", ->
|
|||
|
||||
beforeEach () ->
|
||||
timelineList = Immutable.fromJS([
|
||||
{ fake: "fake"},
|
||||
{ fake: "fake"},
|
||||
{ fake: "fake"},
|
||||
{ fake: "fake"},
|
||||
{ fake: "fake"},
|
||||
{ fake: "fake"},
|
||||
{ fake: "fake"},
|
||||
{ fake: "fake"},
|
||||
{ fake: "fake"},
|
||||
{ fake: "fake"},
|
||||
{ fake: "fake"},
|
||||
{ fake: "fake"},
|
||||
{ fake: "fake"},
|
||||
{ fake: "fake"},
|
||||
{ fake: "fake"},
|
||||
{ fake: "fake"},
|
||||
{ fake: "fake"},
|
||||
{ fake: "fake"},
|
||||
{ fake: "fake"},
|
||||
|
@ -134,7 +150,32 @@ describe "UserTimelineController", ->
|
|||
|
||||
myCtrl._timelineLoaded(timelineList)
|
||||
myCtrl._timelineLoaded(timelineList)
|
||||
expect(myCtrl.timelineList.size).to.be.eql(8)
|
||||
expect(myCtrl.timelineList.size).to.be.eql(40)
|
||||
|
||||
it "call next page until reach de min items", (done) ->
|
||||
myCtrl = controller "UserTimeline"
|
||||
myCtrl.user = mockUser
|
||||
myCtrl.currentUser = true
|
||||
|
||||
mocks.userTimelineService.getProfileTimeline = sinon.stub().promise()
|
||||
|
||||
timelineList = Immutable.fromJS([
|
||||
{ fake: "fake"},
|
||||
{ fake: "fake"},
|
||||
{ fake: "fake"},
|
||||
{ fake: "fake"},
|
||||
{ fake: "fake"}
|
||||
])
|
||||
|
||||
promise = myCtrl.loadTimeline(timelineList)
|
||||
|
||||
myCtrl.loadTimeline = sinon.spy()
|
||||
|
||||
mocks.userTimelineService.getProfileTimeline.resolve(timelineList)
|
||||
|
||||
promise.then () ->
|
||||
expect(myCtrl.loadTimeline).to.be.calledOnce
|
||||
done()
|
||||
|
||||
it "project timeline items", () ->
|
||||
myCtrl = controller "UserTimeline"
|
||||
|
@ -153,5 +194,5 @@ describe "UserTimelineController", ->
|
|||
|
||||
thenStub.callArgWith(0, timelineList)
|
||||
|
||||
expect(myCtrl.timelineList.size).to.be.eql(4)
|
||||
expect(myCtrl.timelineList.size).to.be.eql(20)
|
||||
expect(myCtrl.page).to.equal(2)
|
||||
|
|
Loading…
Reference in New Issue