2020-03-27 13:59:38 -07:00
import React from 'react' ;
2022-01-10 14:01:24 -08:00
import { defineMessages , injectIntl , FormattedMessage } from 'react-intl' ;
2020-03-27 13:59:38 -07:00
import { connect } from 'react-redux' ;
2022-01-10 14:25:06 -08:00
2022-05-27 11:08:41 -07:00
import { initAccountNoteModal } from 'soapbox/actions/account-notes' ;
2022-02-26 06:57:09 -08:00
import {
followAccount ,
unfollowAccount ,
blockAccount ,
unblockAccount ,
unmuteAccount ,
pinAccount ,
unpinAccount ,
subscribeAccount ,
unsubscribeAccount ,
2022-05-17 04:05:01 -07:00
removeFromFollowers ,
2022-02-26 06:57:09 -08:00
} from 'soapbox/actions/accounts' ;
2022-01-10 14:01:24 -08:00
import {
verifyUser ,
unverifyUser ,
2022-04-24 15:27:08 -07:00
setDonor ,
removeDonor ,
2022-01-10 14:01:24 -08:00
promoteToAdmin ,
promoteToModerator ,
demoteToUser ,
suggestUsers ,
unsuggestUsers ,
} from 'soapbox/actions/admin' ;
2022-01-10 14:17:52 -08:00
import { launchChat } from 'soapbox/actions/chats' ;
2022-02-26 06:57:09 -08:00
import {
mentionCompose ,
directCompose ,
} from 'soapbox/actions/compose' ;
import { blockDomain , unblockDomain } from 'soapbox/actions/domain_blocks' ;
import { openModal } from 'soapbox/actions/modals' ;
2022-01-10 14:17:52 -08:00
import { deactivateUserModal , deleteUserModal } from 'soapbox/actions/moderation' ;
2022-02-26 06:57:09 -08:00
import { initMuteModal } from 'soapbox/actions/mutes' ;
import { initReport } from 'soapbox/actions/reports' ;
2022-01-10 14:17:52 -08:00
import { getSettings } from 'soapbox/actions/settings' ;
2022-01-10 14:01:24 -08:00
import snackbar from 'soapbox/actions/snackbar' ;
2022-02-26 06:57:09 -08:00
import { makeGetAccount } from 'soapbox/selectors' ;
2022-01-10 14:25:06 -08:00
2022-01-10 14:17:52 -08:00
import Header from '../components/header' ;
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' } ,
2022-04-24 15:27:08 -07:00
setDonor : { id : 'admin.users.set_donor_message' , defaultMessage : '@{acct} was set as a donor' } ,
removeDonor : { id : 'admin.users.remove_donor_message' , defaultMessage : '@{acct} was removed as a donor' } ,
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' } ,
2021-11-26 21:36:17 -08:00
userSuggested : { id : 'admin.users.user_suggested_message' , defaultMessage : '@{acct} was suggested' } ,
userUnsuggested : { id : 'admin.users.user_unsuggested_message' , defaultMessage : '@{acct} was unsuggested' } ,
2022-05-17 04:05:01 -07:00
removeFromFollowersConfirm : { id : 'confirmations.remove_from_followers.confirm' , defaultMessage : 'Remove' } ,
2020-03-27 13:59:38 -07:00
} ) ;
const makeMapStateToProps = ( ) => {
const getAccount = makeGetAccount ( ) ;
const mapStateToProps = ( state , { accountId } ) => ( {
account : getAccount ( state , accountId ) ,
} ) ;
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' , {
2021-12-30 08:38:57 -08:00
icon : require ( '@tabler/icons/icons/ban.svg' ) ,
heading : < FormattedMessage id = 'confirmations.block.heading' defaultMessage = 'Block @{name}' values = { { name : account . get ( 'acct' ) } } / > ,
2020-03-27 13:59:38 -07:00
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' ] ) ) {
2021-12-30 07:13:45 -08:00
dispatch ( followAccount ( account . get ( 'id' ) , { reblogs : false } ) ) ;
2020-03-27 13:59:38 -07:00
} else {
2021-12-30 07:13:45 -08:00
dispatch ( followAccount ( account . get ( 'id' ) , { reblogs : true } ) ) ;
2020-03-27 13:59:38 -07:00
}
} ,
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' ) ) ) ;
}
} ,
2021-12-30 07:13:45 -08:00
onNotifyToggle ( account ) {
if ( account . getIn ( [ 'relationship' , 'notifying' ] ) ) {
dispatch ( followAccount ( account . get ( 'id' ) , { notify : false } ) ) ;
} else {
dispatch ( followAccount ( account . get ( 'id' ) , { notify : true } ) ) ;
}
} ,
2022-01-10 12:19:38 -08: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' , {
2021-12-30 08:38:57 -08:00
icon : require ( '@tabler/icons/icons/ban.svg' ) ,
heading : < FormattedMessage id = 'confirmations.domain_block.heading' defaultMessage = 'Block {domain}' values = { { domain } } / > ,
2021-12-13 08:33:23 -08:00
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.' values = { { domain : < strong > { domain } < /strong> }} / > ,
2020-03-27 13:59:38 -07:00
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 ) {
2021-10-14 10:23:51 -07:00
dispatch ( launchChat ( account . get ( 'id' ) , router ) ) ;
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
2022-04-24 15:27:08 -07:00
onSetDonor ( account ) {
const message = intl . formatMessage ( messages . setDonor , { acct : account . get ( 'acct' ) } ) ;
dispatch ( setDonor ( account . get ( 'id' ) ) )
. then ( ( ) => dispatch ( snackbar . success ( message ) ) )
. catch ( ( ) => { } ) ;
} ,
onRemoveDonor ( account ) {
const message = intl . formatMessage ( messages . removeDonor , { acct : account . get ( 'acct' ) } ) ;
dispatch ( removeDonor ( account . get ( 'id' ) ) )
. then ( ( ) => dispatch ( snackbar . success ( message ) ) )
. catch ( ( ) => { } ) ;
} ,
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 ) {
2022-04-01 17:35:57 -07:00
const messageType = account . admin ? messages . demotedToModerator : messages . promotedToModerator ;
2021-07-13 10:21:12 -07:00
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 ( ( ) => { } ) ;
} ,
2021-11-26 21:36:17 -08:00
onSuggestUser ( account ) {
const message = intl . formatMessage ( messages . userSuggested , { acct : account . get ( 'acct' ) } ) ;
dispatch ( suggestUsers ( [ account . get ( 'id' ) ] ) )
. then ( ( ) => dispatch ( snackbar . success ( message ) ) )
. catch ( ( ) => { } ) ;
} ,
onUnsuggestUser ( account ) {
const message = intl . formatMessage ( messages . userUnsuggested , { acct : account . get ( 'acct' ) } ) ;
dispatch ( unsuggestUsers ( [ account . get ( 'id' ) ] ) )
. then ( ( ) => dispatch ( snackbar . success ( message ) ) )
. catch ( ( ) => { } ) ;
} ,
2022-02-26 06:57:09 -08:00
onShowNote ( account ) {
dispatch ( initAccountNoteModal ( account ) ) ;
} ,
2022-05-17 04:05:01 -07:00
onRemoveFromFollowers ( account ) {
dispatch ( ( _ , getState ) => {
const unfollowModal = getSettings ( getState ( ) ) . get ( 'unfollowModal' ) ;
if ( unfollowModal ) {
dispatch ( openModal ( 'CONFIRM' , {
message : < FormattedMessage id = 'confirmations.remove_from_followers.message' defaultMessage = 'Are you sure you want to remove {name} from your followers?' values = { { name : < strong > @ { account . get ( 'acct' ) } < /strong> }} / > ,
confirm : intl . formatMessage ( messages . removeFromFollowersConfirm ) ,
onConfirm : ( ) => dispatch ( removeFromFollowers ( account . get ( 'id' ) ) ) ,
} ) ) ;
} else {
dispatch ( removeFromFollowers ( account . get ( 'id' ) ) ) ;
}
} ) ;
} ,
2020-03-27 13:59:38 -07:00
} ) ;
export default injectIntl ( connect ( makeMapStateToProps , mapDispatchToProps ) ( Header ) ) ;