|
|
@ -13,6 +13,7 @@ import ColumnSettingsContainer from './containers/column_settings_container'; |
|
|
|
import { createSelector } from 'reselect'; |
|
|
|
import Immutable from 'immutable'; |
|
|
|
import LoadMore from '../../components/load_more'; |
|
|
|
import { debounce } from 'lodash'; |
|
|
|
|
|
|
|
const messages = defineMessages({ |
|
|
|
title: { id: 'column.notifications', defaultMessage: 'Notifications' }, |
|
|
@ -50,19 +51,27 @@ export default class Notifications extends React.PureComponent { |
|
|
|
trackScroll: true, |
|
|
|
}; |
|
|
|
|
|
|
|
dispatchExpandNotifications = debounce(() => { |
|
|
|
this.props.dispatch(expandNotifications()); |
|
|
|
}, 300, { leading: true }); |
|
|
|
|
|
|
|
dispatchScrollToTop = debounce((top) => { |
|
|
|
this.props.dispatch(scrollTopNotifications(top)); |
|
|
|
}, 100); |
|
|
|
|
|
|
|
handleScroll = (e) => { |
|
|
|
const { scrollTop, scrollHeight, clientHeight } = e.target; |
|
|
|
const offset = scrollHeight - scrollTop - clientHeight; |
|
|
|
this._oldScrollPosition = scrollHeight - scrollTop; |
|
|
|
|
|
|
|
if (250 > offset && !this.props.isLoading) { |
|
|
|
if (this.props.hasMore) { |
|
|
|
this.props.dispatch(expandNotifications()); |
|
|
|
} |
|
|
|
} else if (scrollTop < 100) { |
|
|
|
this.props.dispatch(scrollTopNotifications(true)); |
|
|
|
if (250 > offset && this.props.hasMore && !this.props.isLoading) { |
|
|
|
this.dispatchExpandNotifications(); |
|
|
|
} |
|
|
|
|
|
|
|
if (scrollTop < 100) { |
|
|
|
this.dispatchScrollToTop(true); |
|
|
|
} else { |
|
|
|
this.props.dispatch(scrollTopNotifications(false)); |
|
|
|
this.dispatchScrollToTop(false); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -74,7 +83,7 @@ export default class Notifications extends React.PureComponent { |
|
|
|
|
|
|
|
handleLoadMore = (e) => { |
|
|
|
e.preventDefault(); |
|
|
|
this.props.dispatch(expandNotifications()); |
|
|
|
this.dispatchExpandNotifications(); |
|
|
|
} |
|
|
|
|
|
|
|
handlePin = () => { |
|
|
|