import ImmutablePropTypes from 'react-immutable-proptypes' import ImmutablePureComponent from 'react-immutable-pure-component' import { defineMessages, injectIntl } from 'react-intl' import Sticky from 'react-stickynode' import { CX, POPOVER_PROFILE_OPTIONS, PLACEHOLDER_MISSING_HEADER_SRC, MODAL_EDIT_PROFILE, BREAKPOINT_EXTRA_SMALL, } from '../constants' import { openModal } from '../actions/modal' import { openPopover } from '../actions/popover' import { me } from '../initial_state' import AccountActionButton from './account_action_button' import Avatar from './avatar' import Button from './button' import DisplayName from './display_name' import Image from './image' import MovedNote from './moved_note' import TabBar from './tab_bar' import Text from './text' import Responsive from '../features/ui/util/responsive_component'; import ProfileHeaderXSPlaceholder from './placeholder/profile_header_xs_placeholder' const messages = defineMessages({ followers: { id: 'account.followers', defaultMessage: 'Followers' }, follows: { id: 'account.follows', defaultMessage: 'Following' }, profile: { id: 'account.profile', defaultMessage: 'Profile' }, headerPhoto: { id: 'header_photo', defaultMessage: 'Header photo' }, timeline: { id: 'timeline', defaultMessage: 'Timeline' }, comments: { id: 'comments', defaultMessage: 'Comments' }, photos: { id: 'photos', defaultMessage: 'Photos' }, videos: { id: 'videos', defaultMessage: 'Videos' }, bookmarks: { id: 'bookmarks', defaultMessage: 'Bookmarks' }, accountFollowsYou: { id: 'account.follows_you', defaultMessage: 'Follows you' }, editProfile: { id: "account.edit_profile", defaultMessage: "Edit profile" }, }) const mapDispatchToProps = (dispatch) => ({ openProfileOptionsPopover(props) { dispatch(openPopover(POPOVER_PROFILE_OPTIONS, props)) }, onEditProfile() { dispatch(openModal(MODAL_EDIT_PROFILE)) }, }); export default @connect(null, mapDispatchToProps) @injectIntl class ProfileHeader extends ImmutablePureComponent { static propTypes = { account: ImmutablePropTypes.map, children: PropTypes.any, intl: PropTypes.object.isRequired, onEditProfile: PropTypes.func.isRequired, openProfileOptionsPopover: PropTypes.func.isRequired, isXS: PropTypes.bool, } state = { stickied: false, } handleOnEditProfile = () => { this.props.onEditProfile() } handleOpenMore = () => { const { openProfileOptionsPopover, account } = this.props openProfileOptionsPopover({ account, targetRef: this.openMoreNode, position: 'left', }) } onStickyStateChange = (status) => { if (status.status === Sticky.STATUS_FIXED) { this.setState({ stickied: true }) } else { this.setState({ stickied: false }) } } setOpenMoreNodeRef = (n) => { this.openMoreNode = n } render() { const { account, children, intl, isXS } = this.props const { stickied } = this.state if (isXS && !account) { return (