import React from 'react'; import PropTypes from 'prop-types'; import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { connect } from 'react-redux'; import { FormattedMessage } from 'react-intl'; import { fetchSuggestions } from 'mastodon/actions/suggestions'; import { changeSetting, saveSettings } from 'mastodon/actions/settings'; import { requestBrowserPermission } from 'mastodon/actions/notifications'; import { markAsPartial } from 'mastodon/actions/timelines'; import Column from 'mastodon/features/ui/components/column'; import Account from './components/account'; import imageGreeting from 'mastodon/../images/elephant_ui_greeting.svg'; import Button from 'mastodon/components/button'; import { Helmet } from 'react-helmet'; const mapStateToProps = state => ({ suggestions: state.getIn(['suggestions', 'items']), isLoading: state.getIn(['suggestions', 'isLoading']), }); export default @connect(mapStateToProps) class FollowRecommendations extends ImmutablePureComponent { static contextTypes = { router: PropTypes.object.isRequired, }; static propTypes = { dispatch: PropTypes.func.isRequired, suggestions: ImmutablePropTypes.list, isLoading: PropTypes.bool, }; componentDidMount () { const { dispatch, suggestions } = this.props; // Don't re-fetch if we're e.g. navigating backwards to this page, // since we don't want followed accounts to disappear from the list if (suggestions.size === 0) { dispatch(fetchSuggestions(true)); } } componentWillUnmount () { const { dispatch } = this.props; // Force the home timeline to be reloaded when the user navigates // to it; if the user is new, it would've been empty before dispatch(markAsPartial('home')); } handleDone = () => { const { dispatch } = this.props; const { router } = this.context; dispatch(requestBrowserPermission((permission) => { if (permission === 'granted') { dispatch(changeSetting(['notifications', 'alerts', 'follow'], true)); dispatch(changeSetting(['notifications', 'alerts', 'favourite'], true)); dispatch(changeSetting(['notifications', 'alerts', 'reblog'], true)); dispatch(changeSetting(['notifications', 'alerts', 'mention'], true)); dispatch(changeSetting(['notifications', 'alerts', 'poll'], true)); dispatch(changeSetting(['notifications', 'alerts', 'status'], true)); dispatch(saveSettings()); } })); router.history.push('/home'); } render () { const { suggestions, isLoading } = this.props; return (

{!isLoading && (
{suggestions.size > 0 ? suggestions.map(suggestion => ( )) : (
)}
)}
); } }