Adds infinite scrolling to channels list

pull/2397/head
Marcelo Schmidt 10 years ago
parent 74727bba8e
commit ce5d8d4bb6
  1. 24
      packages/rocketchat-ui-sidenav/side-nav/listChannelsFlex.coffee
  2. 9
      packages/rocketchat-ui-sidenav/side-nav/listChannelsFlex.html
  3. 8
      server/methods/channelsList.coffee

@ -1,6 +1,8 @@
Template.listChannelsFlex.helpers
channel: ->
return Template.instance().channelsList?.get()
hasMore: ->
return Template.instance().hasMore.get()
Template.listChannelsFlex.events
'click header': ->
@ -19,11 +21,19 @@ Template.listChannelsFlex.events
'mouseleave header': ->
SideNav.leaveArrow()
Template.listChannelsFlex.onCreated ->
instance = this
instance.channelsList = new ReactiveVar []
Meteor.call 'channelsList', (err, result) ->
if result
instance.channelsList.set result.channels
'scroll .content': _.throttle (e, t) ->
if e.target.scrollTop >= e.target.scrollHeight - e.target.clientHeight
t.limit.set(t.limit.get() + 50)
, 200
Template.listChannelsFlex.onCreated ->
@channelsList = new ReactiveVar []
@hasMore = new ReactiveVar true
@limit = new ReactiveVar 50
@autorun =>
Meteor.call 'channelsList', @limit.get(), (err, result) =>
if result
@channelsList.set result.channels
if result.length < @limit.get()
@hasMore.set false

@ -16,6 +16,15 @@
</a>
</li>
{{/each}}
{{#if hasMore}}
<li class="load-more">
{{#if Template.subscriptionsReady}}
<a href="">{{_ "Has_more"}}...</a>
{{else}}
<div class="load-more-loading">{{_ "Loading..."}}</div>
{{/if}}
</li>
{{/if}}
</ul>
</div>
</div>

@ -1,3 +1,7 @@
Meteor.methods
channelsList: ->
return { channels: RocketChat.models.Rooms.findByTypeAndArchivationState('c', false, { sort: { msgs:-1 } }).fetch() }
channelsList: (limit) ->
options = { sort: { msgs:-1 } }
if _.isNumber limit
options.limit = limit
return { channels: RocketChat.models.Rooms.findByTypeAndArchivationState('c', false, options).fetch() }

Loading…
Cancel
Save