]> cat aescling's git repositories - mastodon.git/commitdiff
Keep scroll position when scrolled down and new content is added
authorEugen Rochko <eugen@zeonfederated.com>
Mon, 7 Nov 2016 01:02:55 +0000 (02:02 +0100)
committerEugen Rochko <eugen@zeonfederated.com>
Mon, 7 Nov 2016 01:02:55 +0000 (02:02 +0100)
app/assets/javascripts/components/components/status_list.jsx

index 488d42dbab50bc1464d9c5e49255cba202036a16..633f068168d3e59341598503d08233ede196618c 100644 (file)
@@ -38,11 +38,23 @@ const StatusList = React.createClass({
   handleScroll (e) {
     const { scrollTop, scrollHeight, clientHeight } = e.target;
 
+    this._oldScrollPosition = scrollHeight - scrollTop;
+
     if (scrollTop === scrollHeight - clientHeight) {
       this.props.onScrollToBottom();
     }
   },
 
+  componentDidUpdate (prevProps) {
+    if (prevProps.statusIds.size < this.props.statusIds.size && this._oldScrollPosition) {
+      const node = ReactDOM.findDOMNode(this);
+
+      if (node.scrollTop > 0) {
+        node.scrollTop = node.scrollHeight - this._oldScrollPosition;
+      }
+    }
+  },
+
   render () {
     const { statusIds, onScrollToBottom, trackScroll } = this.props;