diff --git a/packages/rocketchat-ui-sidenav/side-nav/listChannelsFlex.coffee b/packages/rocketchat-ui-sidenav/side-nav/listChannelsFlex.coffee index 1e9aa4f4c6b..652dcc5948d 100644 --- a/packages/rocketchat-ui-sidenav/side-nav/listChannelsFlex.coffee +++ b/packages/rocketchat-ui-sidenav/side-nav/listChannelsFlex.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 diff --git a/packages/rocketchat-ui-sidenav/side-nav/listChannelsFlex.html b/packages/rocketchat-ui-sidenav/side-nav/listChannelsFlex.html index 86ee731e9b0..cfe3cfdec51 100644 --- a/packages/rocketchat-ui-sidenav/side-nav/listChannelsFlex.html +++ b/packages/rocketchat-ui-sidenav/side-nav/listChannelsFlex.html @@ -16,6 +16,15 @@ {{/each}} + {{#if hasMore}} +
  • + {{#if Template.subscriptionsReady}} + {{_ "Has_more"}}... + {{else}} +
    {{_ "Loading..."}}
    + {{/if}} +
  • + {{/if}} diff --git a/server/methods/channelsList.coffee b/server/methods/channelsList.coffee index c57d66e3a54..7f875c06a96 100644 --- a/server/methods/channelsList.coffee +++ b/server/methods/channelsList.coffee @@ -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() }