import React from 'react' import PropTypes from 'prop-types' import ImmutablePropTypes from 'react-immutable-proptypes' import ImmutablePureComponent from 'react-immutable-pure-component' import { BREAKPOINT_EXTRA_SMALL } from '../constants' import Sticky from 'react-stickynode' import throttle from 'lodash.throttle' import { me } from '../initial_state' import { CX, LAZY_LOAD_SCROLL_OFFSET, } from '../constants' import DefaultNavigationBar from '../components/navigation_bar/default_navigation_bar' import FooterBar from '../components/footer_bar' import ProfileHeader from '../components/profile_header' import FloatingActionButton from '../components/floating_action_button' import ProfileNavigationBar from '../components/navigation_bar/profile_navigation_bar' import LoggedOutNavigationBar from '../components/navigation_bar/logged_out_navigation_bar' import Responsive from '../features/ui/util/responsive_component' import Divider from '../components/divider' import WrappedBundle from '../features/ui/util/wrapped_bundle' import { LinkFooter, ProfileStatsPanel, ProfileInfoPanel, MediaGalleryPanel, SignUpPanel, SidebarXS, } from '../features/ui/util/async_components' class ProfileLayout extends ImmutablePureComponent { 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 > LAZY_LOAD_SCROLL_OFFSET && !this.state.lazyLoaded) { this.setState({ lazyLoaded: true }) this.detachScrollListener() } } }, 150, { trailing: true }) render() { const { account, children, titleHTML, unavailable, noSidebar, } = this.props const { lazyLoaded } = this.state const mainContentClasses = CX({ d: 1, w645PX: !noSidebar, w1015PX: noSidebar, z1: 1, }) return (
{ !!me && } { !me && }
{children}
{ me && } { !me && }
{ !noSidebar &&
{ !unavailable && } { !me && }
}
{children}
) } } ProfileLayout.propTypes = { account: ImmutablePropTypes.map, children: PropTypes.node.isRequired, titleHTML: PropTypes.string, unavailable: PropTypes.bool, noSidebar: PropTypes.bool, } export default ProfileLayout