import throttle from 'lodash.throttle' import { openModal } from '../actions/modal' import { defineMessages, injectIntl } from 'react-intl' import { MODAL_HOME_TIMELINE_SETTINGS } from '../constants' import { me } from '../initial_state' import PageTitle from '../features/ui/util/page_title' import DefaultLayout from '../layouts/default_layout' import TimelineComposeBlock from '../components/timeline_compose_block' import Divider from '../components/divider' import PullToRefresher from '../components/pull_to_refresher' import WrappedBundle from '../features/ui/util/wrapped_bundle' import { UserPanel, GroupsPanel, LinkFooter, ListsPanel, TrendsPanel, WhoToFollowPanel, ProPanel, ShopPanel, ProgressPanel, } from '../features/ui/util/async_components' const messages = defineMessages({ home: { id: 'home', defaultMessage: 'Home' }, }) const mapStateToProps = (state) => ({ totalQueuedItemsCount: state.getIn(['timelines', 'home', 'totalQueuedItemsCount']), isPro: state.getIn(['accounts', me, 'is_pro']), }) const mapDispatchToProps = (dispatch) => ({ onOpenHomePageSettingsModal() { dispatch(openModal(MODAL_HOME_TIMELINE_SETTINGS)) }, }) export default @injectIntl @connect(mapStateToProps, mapDispatchToProps) class HomePage extends PureComponent { static propTypes = { children: PropTypes.node.isRequired, intl: PropTypes.object.isRequired, onOpenHomePageSettingsModal: PropTypes.func.isRequired, totalQueuedItemsCount: PropTypes.number.isRequired, isPro: PropTypes.bool, } state = { lazyLoaded: false, } componentDidMount() { this.window = window this.documentElement = document.scrollingElement || document.documentElement this.window.addEventListener('scroll', this.handleScroll) } componentWillUnmount() { this.detachScrollListener() } detachScrollListener = () => { this.window.removeEventListener('scroll', this.handleScroll) } handleScroll = throttle(() => { if (this.window) { const { scrollTop } = this.documentElement if (scrollTop > 25 && !this.state.lazyLoaded) { this.setState({ lazyLoaded: true }) this.detachScrollListener() } } }, 150, { trailing: true, }) render() { const { intl, children, totalQueuedItemsCount, onOpenHomePageSettingsModal, isPro, } = this.props const { lazyLoaded } = this.state return ( , TrendsPanel, , , , , LinkFooter, ]} > {children} ) } }