@ -1,6 +1,6 @@
import { useCallback , useEffect } from 'react' ;
import { useIntl , defineMessages } from 'react-intl' ;
import { useIntl , defineMessages , FormattedMessage } from 'react-intl' ;
import { useIdentity } from '@/mastodon/identity_context' ;
import {
@ -19,10 +19,6 @@ const messages = defineMessages({
follow : { id : 'account.follow' , defaultMessage : 'Follow' } ,
followBack : { id : 'account.follow_back' , defaultMessage : 'Follow back' } ,
mutual : { id : 'account.mutual' , defaultMessage : 'Mutual' } ,
cancel_follow_request : {
id : 'account.cancel_follow_request' ,
defaultMessage : 'Withdraw follow request' ,
} ,
edit_profile : { id : 'account.edit_profile' , defaultMessage : 'Edit profile' } ,
} ) ;
@ -65,11 +61,28 @@ export const FollowButton: React.FC<{
if ( accountId === me ) {
return ;
} else if ( relationship . following || relationship . requested ) {
dispatch ( unfollowAccount ( accountId ) ) ;
dispatch (
openModal ( {
modalType : 'CONFIRM' ,
modalProps : {
message : (
< FormattedMessage
id = 'confirmations.unfollow.message'
defaultMessage = 'Are you sure you want to unfollow {name}?'
values = { { name : < strong > @ { account ? . acct } < / strong > } }
/ >
) ,
confirm : intl.formatMessage ( messages . unfollow ) ,
onConfirm : ( ) = > {
dispatch ( unfollowAccount ( accountId ) ) ;
} ,
} ,
} ) ,
) ;
} else {
dispatch ( followAccount ( accountId ) ) ;
}
} , [ dispatch , accountId , relationship , account , signedIn ] ) ;
} , [ dispatch , intl, accountId, relationship , account , signedIn ] ) ;
let label ;
@ -79,13 +92,11 @@ export const FollowButton: React.FC<{
label = intl . formatMessage ( messages . edit_profile ) ;
} else if ( ! relationship ) {
label = < LoadingIndicator / > ;
} else if ( relationship . requested ) {
label = intl . formatMessage ( messages . cancel_follow_request ) ;
} else if ( relationship . following && relationship . followed_by ) {
label = intl . formatMessage ( messages . mutual ) ;
} else if ( ! relationship . following && relationship . followed_by ) {
label = intl . formatMessage ( messages . followBack ) ;
} else if ( relationship . following ) {
} else if ( relationship . following || relationship . requested ) {
label = intl . formatMessage ( messages . unfollow ) ;
} else {
label = intl . formatMessage ( messages . follow ) ;