import React from 'react' ;
import { connect } from 'react-redux' ;
import { makeGetAccount } from '../../../selectors' ;
import Header from '../components/header' ;
import {
followAccount ,
unfollowAccount ,
blockAccount ,
unblockAccount ,
unmuteAccount ,
} from '../../../actions/accounts' ;
import { mentionCompose } from '../../../actions/compose' ;
import { initMuteModal } from '../../../actions/mutes' ;
import { initReport } from '../../../actions/reports' ;
import { openModal } from '../../../actions/modal' ;
import { blockDomain , unblockDomain } from '../../../actions/domain_blocks' ;
import { defineMessages , injectIntl , FormattedMessage } from 'react-intl' ;
const messages = defineMessages ( {
unfollowConfirm : { id : 'confirmations.unfollow.confirm' , defaultMessage : 'Unfollow' } ,
blockConfirm : { id : 'confirmations.block.confirm' , defaultMessage : 'Block' } ,
blockDomainConfirm : { id : 'confirmations.domain_block.confirm' , defaultMessage : 'Hide entire domain' } ,
} ) ;
const makeMapStateToProps = ( ) => {
const getAccount = makeGetAccount ( ) ;
const mapStateToProps = ( state , { accountId } ) => ( {
account : getAccount ( state , Number ( accountId ) ) ,
me : state . getIn ( [ 'meta' , 'me' ] ) ,
unfollowModal : state . getIn ( [ 'meta' , 'unfollow_modal' ] ) ,
} ) ;
return mapStateToProps ;
} ;
const mapDispatchToProps = ( dispatch , { intl } ) => ( {
onFollow ( account ) {
if ( account . getIn ( [ 'relationship' , 'following' ] ) || account . getIn ( [ 'relationship' , 'requested' ] ) ) {
if ( this . unfollowModal ) {
dispatch ( openModal ( 'CONFIRM' , {
message : < FormattedMessage id = 'confirmations.unfollow.message' defaultMessage = 'Are you sure you want to unfollow {name}?' values = { { name : < strong > @ { account . get ( 'acct' ) } < /strong> }} / > ,
confirm : intl . formatMessage ( messages . unfollowConfirm ) ,
onConfirm : ( ) => dispatch ( unfollowAccount ( account . get ( 'id' ) ) ) ,
} ) ) ;
} else {
dispatch ( unfollowAccount ( account . get ( 'id' ) ) ) ;
}
} else {
dispatch ( followAccount ( account . get ( 'id' ) ) ) ;
}
} ,
onBlock ( account ) {
if ( account . getIn ( [ 'relationship' , 'blocking' ] ) ) {
dispatch ( unblockAccount ( account . get ( 'id' ) ) ) ;
} else {
dispatch ( openModal ( 'CONFIRM' , {
message : < FormattedMessage id = 'confirmations.block.message' defaultMessage = 'Are you sure you want to block {name}?' values = { { name : < strong > @ { account . get ( 'acct' ) } < /strong> }} / > ,
confirm : intl . formatMessage ( messages . blockConfirm ) ,
onConfirm : ( ) => dispatch ( blockAccount ( account . get ( 'id' ) ) ) ,
} ) ) ;
}
} ,
onMention ( account , router ) {
dispatch ( mentionCompose ( account , router ) ) ;
} ,
onReport ( account ) {
dispatch ( initReport ( account ) ) ;
} ,
onMute ( account ) {
if ( account . getIn ( [ 'relationship' , 'muting' ] ) ) {
dispatch ( unmuteAccount ( account . get ( 'id' ) ) ) ;
} else {
dispatch ( initMuteModal ( account ) ) ;
}
} ,
onBlockDomain ( domain , accountId ) {
dispatch ( openModal ( 'CONFIRM' , {
message : < FormattedMessage id = 'confirmations.domain_block.message' defaultMessage = 'Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.' values = { { domain : < strong > { domain } < /strong> }} / > ,
confirm : intl . formatMessage ( messages . blockDomainConfirm ) ,
onConfirm : ( ) => dispatch ( blockDomain ( domain , accountId ) ) ,
} ) ) ;
} ,
onUnblockDomain ( domain , accountId ) {
dispatch ( unblockDomain ( domain , accountId ) ) ;
} ,
} ) ;
export default injectIntl ( connect ( makeMapStateToProps , mapDispatchToProps ) ( Header ) ) ;