diff --git a/app/javascript/mastodon/components/status_list.js b/app/javascript/mastodon/components/status_list.js index 9ee3af4d1e5becd2dd4cd7f602975e2493072abf..39909d98bd83a976c2bd363c7b58ba2919c6bf61 100644 --- a/app/javascript/mastodon/components/status_list.js +++ b/app/javascript/mastodon/components/status_list.js @@ -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; + } } } diff --git a/app/javascript/mastodon/features/community_timeline/index.js b/app/javascript/mastodon/features/community_timeline/index.js index 6d25811410507792cf4abe0bbb89c63173ac3c2f..1dd8a08ab3ed18608ab0cdd71c9e5cb5571ea4a5 100644 --- a/app/javascript/mastodon/features/community_timeline/index.js +++ b/app/javascript/mastodon/features/community_timeline/index.js @@ -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!' />} diff --git a/app/javascript/mastodon/features/hashtag_timeline/index.js b/app/javascript/mastodon/features/hashtag_timeline/index.js index 7f7b3e075b7cab3ef1e5906224c6cc0148f273cd..da43e9403310d273dc0a3888a046413910c1f22c 100644 --- a/app/javascript/mastodon/features/hashtag_timeline/index.js +++ b/app/javascript/mastodon/features/hashtag_timeline/index.js @@ -120,6 +120,7 @@ class HashtagTimeline extends React.PureComponent { /> <StatusListContainer + trackScroll={!pinned} scrollKey={`hashtag_timeline-${columnId}`} type='tag' id={id} diff --git a/app/javascript/mastodon/features/home_timeline/index.js b/app/javascript/mastodon/features/home_timeline/index.js index a0a62eaf633757c61ddce81793f5bbdca694e6bd..a8d2133402760e9e97e7c1f91b0d432984fa5855 100644 --- a/app/javascript/mastodon/features/home_timeline/index.js +++ b/app/javascript/mastodon/features/home_timeline/index.js @@ -81,6 +81,7 @@ class HomeTimeline extends React.PureComponent { <StatusListContainer {...this.props} + trackScroll={!pinned} scrollKey={`home_timeline-${columnId}`} type='home' emptyMessage={emptyMessage} diff --git a/app/javascript/mastodon/features/notifications/index.js b/app/javascript/mastodon/features/notifications/index.js index 60d8fff95e0fd2fdf9455e339fd7061ca5baf076..357c80c6616f4c2c1d6e9e450b8622f1464ca6e7 100644 --- a/app/javascript/mastodon/features/notifications/index.js +++ b/app/javascript/mastodon/features/notifications/index.js @@ -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> ); } diff --git a/app/javascript/mastodon/features/public_timeline/index.js b/app/javascript/mastodon/features/public_timeline/index.js index 001632004a2fa188a42cd3c136b270e5c46c50cc..988e5a059ccd0804cb53b08a6bf0011d00ca770b 100644 --- a/app/javascript/mastodon/features/public_timeline/index.js +++ b/app/javascript/mastodon/features/public_timeline/index.js @@ -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' />} />