const mapDispatchToProps = (dispatch, { intl }) => ({
onFollow (account) {
- if (account.getIn(['relationship', 'following'])) {
+ 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> }} />,
const messages = defineMessages({
unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' },
follow: { id: 'account.follow', defaultMessage: 'Follow' },
- requested: { id: 'account.requested', defaultMessage: 'Awaiting approval' },
+ requested: { id: 'account.requested', defaultMessage: 'Awaiting approval. Click to cancel follow request' },
});
const makeMapStateToProps = () => {
if (account.getIn(['relationship', 'requested'])) {
actionBtn = (
<div className='account--action-button'>
- <IconButton size={26} disabled icon='hourglass' title={intl.formatMessage(messages.requested)} />
+ <IconButton size={26} active icon='hourglass' title={intl.formatMessage(messages.requested)} onClick={this.props.onFollow} />
</div>
);
} else if (!account.getIn(['relationship', 'blocking'])) {
const mapDispatchToProps = (dispatch, { intl }) => ({
onFollow (account) {
- if (account.getIn(['relationship', 'following'])) {
+ 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> }} />,
"id": "account.follow"
},
{
- "defaultMessage": "Awaiting approval",
+ "defaultMessage": "Awaiting approval. Click to cancel follow request",
"id": "account.requested"
},
{
"account.mute": "Mute @{name}",
"account.posts": "Posts",
"account.report": "Report @{name}",
- "account.requested": "Awaiting approval",
+ "account.requested": "Awaiting approval. Click to cancel follow request",
"account.share": "Share @{name}'s profile",
"account.unblock": "Unblock @{name}",
"account.unblock_domain": "Unhide {domain}",
if @account.following?(target_account)
@account.unfollow!(target_account)
+ elsif @account.requested?(target_account)
+ FollowRequest.find_by(account: @account, target_account: target_account)&.destroy
else
delete_later!(object_uri)
end
def follow!(account, target_account)
follow = account.follow!(target_account)
+ FollowRequest.find_by(account: account, target_account: target_account)&.destroy
NotifyService.new.call(target_account, follow)
end
def follow_request!(account, target_account)
+ return if account.requested?(target_account)
+
follow_request = FollowRequest.create!(account: account, target_account: target_account)
NotifyService.new.call(target_account, follow_request)
end
def unfollow!(account, target_account)
account.unfollow!(target_account)
+ FollowRequest.find_by(account: account, target_account: target_account)&.destroy
end
def reflect_block!(account, target_account)
# @param [Account] source_account Where to unfollow from
# @param [Account] target_account Which to unfollow
def call(source_account, target_account)
- follow = source_account.unfollow!(target_account)
+ @source_account = source_account
+ @target_account = target_account
+
+ unfollow! || undo_follow_request!
+ end
+
+ private
+
+ def unfollow!
+ follow = Follow.find_by(account: @source_account, target_account: @target_account)
+
return unless follow
- create_notification(follow) unless target_account.local?
- UnmergeWorker.perform_async(target_account.id, source_account.id)
+
+ follow.destroy!
+ create_notification(follow) unless @target_account.local?
+ UnmergeWorker.perform_async(@target_account.id, @source_account.id)
follow
end
- private
+ def undo_follow_request!
+ follow_request = FollowRequest.find_by(account: @source_account, target_account: @target_account)
+
+ return unless follow_request
+
+ follow_request.destroy!
+ create_notification(follow_request) unless @target_account.local?
+ follow_request
+ end
def create_notification(follow)
if follow.target_account.ostatus?