import { defineMessages, injectIntl } from 'react-intl' import ImmutablePureComponent from 'react-immutable-pure-component' import ImmutablePropTypes from 'react-immutable-proptypes' import { expandAccountMediaTimeline } from '../../actions/timelines' import { getAccountGallery } from '../../selectors' import PanelLayout from './panel_layout' import MediaItem from '../media_item' import MediaGalleryPanelPlaceholder from '../placeholder/media_gallery_panel_placeholder' const messages = defineMessages({ title: { id: 'media_gallery_panel.title', defaultMessage: 'Media' }, show_all: { id: 'media_gallery_panel.all', defaultMessage: 'Show all' }, }) const mapStateToProps = (state, { account }) => { const accountId = !!account ? account.get('id') : -1 return { accountId, isLoading: state.getIn(['timelines', `account:${accountId}:media`, 'isLoading'], true), attachments: getAccountGallery(state, accountId), } } export default @connect(mapStateToProps) @injectIntl class MediaGalleryPanel extends ImmutablePureComponent { static propTypes = { dispatch: PropTypes.func.isRequired, accountId: PropTypes.string, account: ImmutablePropTypes.map, isLoading: PropTypes.bool, attachments: ImmutablePropTypes.list.isRequired, intl: PropTypes.object.isRequired, } componentDidMount() { const { accountId } = this.props if (accountId && accountId !== -1) { this.props.dispatch(expandAccountMediaTimeline(accountId, { limit: 8 })) } } componentWillReceiveProps(nextProps) { if (nextProps.accountId && nextProps.accountId !== this.props.accountId) { this.props.dispatch(expandAccountMediaTimeline(nextProps.accountId, { limit: 8 })) } } render() { const { account, attachments, intl, isLoading, } = this.props if (!attachments) return null return (
{ !!account && attachments.size > 0 && attachments.slice(0, 16).map((attachment, i) => ( )) } { !account || (attachments.size === 0 && isLoading) &&
}
) } }