From 0b6d5de75372b390312d8bd30b0f7375cd03429f Mon Sep 17 00:00:00 2001 From: Scott Nonnenberg Date: Thu, 1 Jun 2017 11:30:14 -0700 Subject: [PATCH] Update the scroll position when 'fetch more messages' is complete FREEBIE --- js/views/conversation_view.js | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/js/views/conversation_view.js b/js/views/conversation_view.js index 2ebfa9771..e860ddc49 100644 --- a/js/views/conversation_view.js +++ b/js/views/conversation_view.js @@ -156,7 +156,7 @@ 'focus .send-message': 'focusBottomBar', 'change .file-input': 'toggleMicrophone', 'blur .send-message': 'unfocusBottomBar', - 'loadMore .message-list': 'fetchMessages', + 'loadMore .message-list': 'loadMoreMessages', 'newOffscreenMessage .message-list': 'addScrollDownButtonWithCount', 'atBottom .message-list': 'hideScrollDownButton', 'farFromBottom .message-list': 'addScrollDownButton', @@ -312,6 +312,27 @@ this.$messageField.focus(); }, + loadMoreMessages: function() { + if (this.inProgressFetch) { + return; + } + + this.view.measureScrollPosition(); + var startingHeight = this.view.scrollHeight; + + this.fetchMessages().then(function() { + // We delay this work to let scrolling/layout settle down first + setTimeout(function() { + this.view.measureScrollPosition(); + var endingHeight = this.view.scrollHeight; + var delta = endingHeight - startingHeight; + + var newScrollPosition = this.view.scrollPosition + delta - this.view. + this.view.$el.scrollTop(newScrollPosition); + }.bind(this), 1); + }.bind(this)); + }, + fetchMessages: function() { console.log('fetchMessages'); this.$('.bar-container').show();