2020-03-27 13:59:38 -07:00
import React from 'react' ;
import { connect } from 'react-redux' ;
import { makeGetAccount } from '../../../selectors' ;
import Header from '../components/header' ;
import {
followAccount ,
unfollowAccount ,
blockAccount ,
unblockAccount ,
unmuteAccount ,
2020-08-15 22:23:06 -07:00
// pinAccount,
// unpinAccount,
2021-06-27 09:52:12 -07:00
subscribeAccount ,
unsubscribeAccount ,
2020-03-27 13:59:38 -07:00
} from '../../../actions/accounts' ;
import {
mentionCompose ,
directCompose ,
} 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' ;
import { List as ImmutableList } from 'immutable' ;
2020-05-28 15:52:07 -07:00
import { getSettings } from 'soapbox/actions/settings' ;
2020-08-28 13:06:55 -07:00
import { startChat , openChat } from 'soapbox/actions/chats' ;
2021-01-18 13:27:35 -08:00
import { deactivateUserModal , deleteUserModal } from 'soapbox/actions/moderation' ;
2021-07-13 10:21:12 -07:00
import {
2021-07-13 10:26:56 -07:00
verifyUser ,
unverifyUser ,
2021-07-13 10:21:12 -07:00
promoteToAdmin ,
promoteToModerator ,
demoteToUser ,
} from 'soapbox/actions/admin' ;
import { isAdmin } from 'soapbox/utils/accounts' ;
2021-03-15 19:50:16 -07:00
import snackbar from 'soapbox/actions/snackbar' ;
2020-03-27 13:59:38 -07:00
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' } ,
blockAndReport : { id : 'confirmations.block.block_and_report' , defaultMessage : 'Block & Report' } ,
2021-03-15 19:50:16 -07:00
userVerified : { id : 'admin.users.user_verified_message' , defaultMessage : '@{acct} was verified' } ,
userUnverified : { id : 'admin.users.user_unverified_message' , defaultMessage : '@{acct} was unverified' } ,
2021-07-13 10:21:12 -07:00
promotedToAdmin : { id : 'admin.users.actions.promote_to_admin_message' , defaultMessage : '@{acct} was promoted to an admin' } ,
promotedToModerator : { id : 'admin.users.actions.promote_to_moderator_message' , defaultMessage : '@{acct} was promoted to a moderator' } ,
demotedToModerator : { id : 'admin.users.actions.demote_to_moderator_message' , defaultMessage : '@{acct} was demoted to a moderator' } ,
demotedToUser : { id : 'admin.users.actions.demote_to_user_message' , defaultMessage : '@{acct} was demoted to a regular user' } ,
2020-03-27 13:59:38 -07:00
} ) ;
2021-06-01 08:21:24 -07:00
const isMobile = width => width <= 1190 ;
2020-03-27 13:59:38 -07:00
const makeMapStateToProps = ( ) => {
const getAccount = makeGetAccount ( ) ;
const mapStateToProps = ( state , { accountId } ) => ( {
account : getAccount ( state , accountId ) ,
identity _proofs : state . getIn ( [ 'identity_proofs' , accountId ] , ImmutableList ( ) ) ,
} ) ;
return mapStateToProps ;
} ;
const mapDispatchToProps = ( dispatch , { intl } ) => ( {
2020-04-14 14:47:35 -07:00
onFollow ( account ) {
2020-04-21 12:41:13 -07:00
dispatch ( ( _ , getState ) => {
2020-04-28 11:49:39 -07:00
const unfollowModal = getSettings ( getState ( ) ) . get ( 'unfollowModal' ) ;
2020-04-21 12:41:13 -07:00
if ( account . getIn ( [ 'relationship' , 'following' ] ) || account . getIn ( [ 'relationship' , 'requested' ] ) ) {
if ( 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' ) ) ) ;
}
2020-03-27 13:59:38 -07:00
} else {
2020-04-21 12:41:13 -07:00
dispatch ( followAccount ( account . get ( 'id' ) ) ) ;
2020-03-27 13:59:38 -07:00
}
2020-04-21 12:41:13 -07:00
} ) ;
2020-03-27 13:59:38 -07:00
} ,
2020-04-14 14:47:35 -07:00
onBlock ( account ) {
2020-03-27 13:59:38 -07:00
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' ) ) ) ,
secondary : intl . formatMessage ( messages . blockAndReport ) ,
onSecondary : ( ) => {
dispatch ( blockAccount ( account . get ( 'id' ) ) ) ;
dispatch ( initReport ( account ) ) ;
} ,
} ) ) ;
}
} ,
2020-04-14 14:47:35 -07:00
onMention ( account , router ) {
2020-03-27 13:59:38 -07:00
dispatch ( mentionCompose ( account , router ) ) ;
} ,
2020-04-14 14:47:35 -07:00
onDirect ( account , router ) {
2020-03-27 13:59:38 -07:00
dispatch ( directCompose ( account , router ) ) ;
} ,
2020-04-14 14:47:35 -07:00
onReblogToggle ( account ) {
2020-03-27 13:59:38 -07:00
if ( account . getIn ( [ 'relationship' , 'showing_reblogs' ] ) ) {
dispatch ( followAccount ( account . get ( 'id' ) , false ) ) ;
} else {
dispatch ( followAccount ( account . get ( 'id' ) , true ) ) ;
}
} ,
2021-06-27 09:52:12 -07:00
onSubscriptionToggle ( account ) {
if ( account . getIn ( [ 'relationship' , 'subscribing' ] ) ) {
dispatch ( unsubscribeAccount ( account . get ( 'id' ) ) ) ;
} else {
dispatch ( subscribeAccount ( account . get ( 'id' ) ) ) ;
}
} ,
2020-08-15 22:23:06 -07:00
// onEndorseToggle(account) {
// if (account.getIn(['relationship', 'endorsed'])) {
// dispatch(unpinAccount(account.get('id')));
// } else {
// dispatch(pinAccount(account.get('id')));
// }
// },
2020-03-27 13:59:38 -07:00
2020-04-14 14:47:35 -07:00
onReport ( account ) {
2020-03-27 13:59:38 -07:00
dispatch ( initReport ( account ) ) ;
} ,
2020-04-14 14:47:35 -07:00
onMute ( account ) {
2020-03-27 13:59:38 -07:00
if ( account . getIn ( [ 'relationship' , 'muting' ] ) ) {
dispatch ( unmuteAccount ( account . get ( 'id' ) ) ) ;
} else {
dispatch ( initMuteModal ( account ) ) ;
}
} ,
2020-04-14 14:47:35 -07:00
onBlockDomain ( domain ) {
2020-03-27 13:59:38 -07:00
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. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.' values = { { domain : < strong > { domain } < /strong> }} / > ,
confirm : intl . formatMessage ( messages . blockDomainConfirm ) ,
onConfirm : ( ) => dispatch ( blockDomain ( domain ) ) ,
} ) ) ;
} ,
2020-04-14 14:47:35 -07:00
onUnblockDomain ( domain ) {
2020-03-27 13:59:38 -07:00
dispatch ( unblockDomain ( domain ) ) ;
} ,
2020-08-28 13:06:55 -07:00
onAddToList ( account ) {
2020-03-27 13:59:38 -07:00
dispatch ( openModal ( 'LIST_ADDER' , {
accountId : account . get ( 'id' ) ,
} ) ) ;
} ,
2020-08-27 11:32:52 -07:00
onChat ( account , router ) {
2020-08-28 13:06:55 -07:00
// TODO make this faster
dispatch ( startChat ( account . get ( 'id' ) ) ) . then ( chat => {
if ( isMobile ( window . innerWidth ) ) {
router . push ( ` /chats/ ${ chat . id } ` ) ;
} else {
dispatch ( openChat ( chat . id ) ) ;
}
} ) . catch ( ( ) => { } ) ;
2020-08-26 17:46:23 -07:00
} ,
2021-01-18 13:27:35 -08:00
onDeactivateUser ( account ) {
dispatch ( deactivateUserModal ( intl , account . get ( 'id' ) ) ) ;
} ,
onDeleteUser ( account ) {
dispatch ( deleteUserModal ( intl , account . get ( 'id' ) ) ) ;
} ,
2021-03-15 19:50:16 -07:00
onVerifyUser ( account ) {
const message = intl . formatMessage ( messages . userVerified , { acct : account . get ( 'acct' ) } ) ;
2021-07-13 10:26:56 -07:00
dispatch ( verifyUser ( account . get ( 'id' ) ) )
. then ( ( ) => dispatch ( snackbar . success ( message ) ) )
. catch ( ( ) => { } ) ;
2021-03-15 19:50:16 -07:00
} ,
onUnverifyUser ( account ) {
const message = intl . formatMessage ( messages . userUnverified , { acct : account . get ( 'acct' ) } ) ;
2021-07-13 10:26:56 -07:00
dispatch ( unverifyUser ( account . get ( 'id' ) ) )
. then ( ( ) => dispatch ( snackbar . success ( message ) ) )
. catch ( ( ) => { } ) ;
2021-03-15 19:50:16 -07:00
} ,
2021-07-13 10:21:12 -07:00
onPromoteToAdmin ( account ) {
const message = intl . formatMessage ( messages . promotedToAdmin , { acct : account . get ( 'acct' ) } ) ;
dispatch ( promoteToAdmin ( account . get ( 'id' ) ) )
. then ( ( ) => dispatch ( snackbar . success ( message ) ) )
. catch ( ( ) => { } ) ;
} ,
onPromoteToModerator ( account ) {
const messageType = isAdmin ( account ) ? messages . demotedToModerator : messages . promotedToModerator ;
const message = intl . formatMessage ( messageType , { acct : account . get ( 'acct' ) } ) ;
dispatch ( promoteToModerator ( account . get ( 'id' ) ) )
. then ( ( ) => dispatch ( snackbar . success ( message ) ) )
. catch ( ( ) => { } ) ;
} ,
onDemoteToUser ( account ) {
const message = intl . formatMessage ( messages . demotedToUser , { acct : account . get ( 'acct' ) } ) ;
dispatch ( demoteToUser ( account . get ( 'id' ) ) )
. then ( ( ) => dispatch ( snackbar . success ( message ) ) )
. catch ( ( ) => { } ) ;
} ,
2020-03-27 13:59:38 -07:00
} ) ;
export default injectIntl ( connect ( makeMapStateToProps , mapDispatchToProps ) ( Header ) ) ;