Prevent pinned columns from scroll to top on URL changing (#3586)
This commit is contained in:
		@@ -15,6 +15,7 @@ class StatusList extends ImmutablePureComponent {
 | 
			
		||||
    onScrollToBottom: PropTypes.func,
 | 
			
		||||
    onScrollToTop: PropTypes.func,
 | 
			
		||||
    onScroll: PropTypes.func,
 | 
			
		||||
    trackScroll: PropTypes.bool,
 | 
			
		||||
    shouldUpdateScroll: PropTypes.func,
 | 
			
		||||
    isLoading: PropTypes.bool,
 | 
			
		||||
    isUnread: PropTypes.bool,
 | 
			
		||||
@@ -88,7 +89,7 @@ class StatusList extends ImmutablePureComponent {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  render () {
 | 
			
		||||
    const { statusIds, onScrollToBottom, scrollKey, shouldUpdateScroll, isLoading, isUnread, hasMore, prepend, emptyMessage } = this.props;
 | 
			
		||||
    const { statusIds, onScrollToBottom, scrollKey, trackScroll, shouldUpdateScroll, isLoading, isUnread, hasMore, prepend, emptyMessage } = this.props;
 | 
			
		||||
 | 
			
		||||
    let loadMore       = null;
 | 
			
		||||
    let scrollableArea = null;
 | 
			
		||||
@@ -126,11 +127,15 @@ class StatusList extends ImmutablePureComponent {
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
      <ScrollContainer scrollKey={scrollKey} shouldUpdateScroll={shouldUpdateScroll}>
 | 
			
		||||
        {scrollableArea}
 | 
			
		||||
      </ScrollContainer>
 | 
			
		||||
    );
 | 
			
		||||
    if (trackScroll) {
 | 
			
		||||
      return (
 | 
			
		||||
        <ScrollContainer scrollKey={scrollKey} shouldUpdateScroll={shouldUpdateScroll}>
 | 
			
		||||
          {scrollableArea}
 | 
			
		||||
        </ScrollContainer>
 | 
			
		||||
      );
 | 
			
		||||
    } else {
 | 
			
		||||
      return scrollableArea;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -124,6 +124,7 @@ class CommunityTimeline extends React.PureComponent {
 | 
			
		||||
 | 
			
		||||
        <StatusListContainer
 | 
			
		||||
          {...this.props}
 | 
			
		||||
          trackScroll={!pinned}
 | 
			
		||||
          scrollKey={`community_timeline-${columnId}`}
 | 
			
		||||
          type='community'
 | 
			
		||||
          emptyMessage={<FormattedMessage id='empty_column.community' defaultMessage='The local timeline is empty. Write something publicly to get the ball rolling!' />}
 | 
			
		||||
 
 | 
			
		||||
@@ -120,6 +120,7 @@ class HashtagTimeline extends React.PureComponent {
 | 
			
		||||
        />
 | 
			
		||||
 | 
			
		||||
        <StatusListContainer
 | 
			
		||||
          trackScroll={!pinned}
 | 
			
		||||
          scrollKey={`hashtag_timeline-${columnId}`}
 | 
			
		||||
          type='tag'
 | 
			
		||||
          id={id}
 | 
			
		||||
 
 | 
			
		||||
@@ -81,6 +81,7 @@ class HomeTimeline extends React.PureComponent {
 | 
			
		||||
 | 
			
		||||
        <StatusListContainer
 | 
			
		||||
          {...this.props}
 | 
			
		||||
          trackScroll={!pinned}
 | 
			
		||||
          scrollKey={`home_timeline-${columnId}`}
 | 
			
		||||
          type='home'
 | 
			
		||||
          emptyMessage={emptyMessage}
 | 
			
		||||
 
 | 
			
		||||
@@ -119,6 +119,7 @@ class Notifications extends React.PureComponent {
 | 
			
		||||
    let loadMore       = '';
 | 
			
		||||
    let scrollableArea = '';
 | 
			
		||||
    let unread         = '';
 | 
			
		||||
    let scrollContainer = '';
 | 
			
		||||
 | 
			
		||||
    if (!isLoading && notifications.size > 0) {
 | 
			
		||||
      loadMore = <LoadMore onClick={this.handleLoadMore} />;
 | 
			
		||||
@@ -149,6 +150,16 @@ class Notifications extends React.PureComponent {
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (pinned) {
 | 
			
		||||
      scrollContainer = scrollableArea;
 | 
			
		||||
    } else {
 | 
			
		||||
      scrollContainer = (
 | 
			
		||||
        <ScrollContainer scrollKey={`notifications-${columnId}`} shouldUpdateScroll={shouldUpdateScroll}>
 | 
			
		||||
          {scrollableArea}
 | 
			
		||||
        </ScrollContainer>
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.scrollableArea = scrollableArea;
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
@@ -166,9 +177,7 @@ class Notifications extends React.PureComponent {
 | 
			
		||||
          <ColumnSettingsContainer />
 | 
			
		||||
        </ColumnHeader>
 | 
			
		||||
 | 
			
		||||
        <ScrollContainer scrollKey={`notifications-${columnId}`} shouldUpdateScroll={shouldUpdateScroll}>
 | 
			
		||||
          {scrollableArea}
 | 
			
		||||
        </ScrollContainer>
 | 
			
		||||
        {scrollContainer}
 | 
			
		||||
      </Column>
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -125,6 +125,7 @@ class PublicTimeline extends React.PureComponent {
 | 
			
		||||
        <StatusListContainer
 | 
			
		||||
          {...this.props}
 | 
			
		||||
          type='public'
 | 
			
		||||
          trackScroll={!pinned}
 | 
			
		||||
          scrollKey={`public_timeline-${columnId}`}
 | 
			
		||||
          emptyMessage={<FormattedMessage id='empty_column.public' defaultMessage='There is nothing here! Write something publicly, or manually follow users from other instances to fill it up' />}
 | 
			
		||||
        />
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user