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"
|
"tgUserTimelineService"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
min: 20
|
||||||
constructor: (@userTimelineService) ->
|
constructor: (@userTimelineService) ->
|
||||||
@.timelineList = Immutable.List()
|
@.timelineList = Immutable.List()
|
||||||
@.page = 1
|
@.page = 1
|
||||||
|
@ -36,21 +37,27 @@ class UserTimelineController extends mixOf(taiga.Controller, taiga.PageMixin, ta
|
||||||
loadTimeline: () ->
|
loadTimeline: () ->
|
||||||
@.scrollDisabled = true
|
@.scrollDisabled = true
|
||||||
|
|
||||||
|
promise = null
|
||||||
|
|
||||||
if @.projectId
|
if @.projectId
|
||||||
@userTimelineService
|
promise = @userTimelineService
|
||||||
.getProjectTimeline(@.projectId, @.page)
|
.getProjectTimeline(@.projectId, @.page)
|
||||||
.then (newTimelineList) =>
|
|
||||||
@._timelineLoaded(newTimelineList)
|
|
||||||
else if @.currentUser
|
else if @.currentUser
|
||||||
@userTimelineService
|
promise = @userTimelineService
|
||||||
.getProfileTimeline(@.user.get("id"), @.page)
|
.getProfileTimeline(@.user.get("id"), @.page)
|
||||||
.then (newTimelineList) =>
|
|
||||||
@._timelineLoaded(newTimelineList)
|
|
||||||
else
|
else
|
||||||
@userTimelineService
|
promise = @userTimelineService
|
||||||
.getUserTimeline(@.user.get("id"), @.page)
|
.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) ->
|
_timelineLoaded: (newTimelineList) ->
|
||||||
@.timelineList = @.timelineList.concat(newTimelineList)
|
@.timelineList = @.timelineList.concat(newTimelineList)
|
||||||
|
|
|
@ -41,6 +41,22 @@ describe "UserTimelineController", ->
|
||||||
|
|
||||||
beforeEach () ->
|
beforeEach () ->
|
||||||
timelineList = Immutable.fromJS([
|
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"},
|
{ fake: "fake"},
|
||||||
{ fake: "fake"},
|
{ fake: "fake"},
|
||||||
|
@ -134,7 +150,32 @@ describe "UserTimelineController", ->
|
||||||
|
|
||||||
myCtrl._timelineLoaded(timelineList)
|
myCtrl._timelineLoaded(timelineList)
|
||||||
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", () ->
|
it "project timeline items", () ->
|
||||||
myCtrl = controller "UserTimeline"
|
myCtrl = controller "UserTimeline"
|
||||||
|
@ -153,5 +194,5 @@ describe "UserTimelineController", ->
|
||||||
|
|
||||||
thenStub.callArgWith(0, timelineList)
|
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)
|
expect(myCtrl.page).to.equal(2)
|
||||||
|
|
Loading…
Reference in New Issue