import { requestFollow, requestUnfollow, } from '../../services/follow_manipulate/follow_manipulate' import ConfirmModal from '../confirm_modal/confirm_modal.vue' import { useSyncConfigStore } from 'src/stores/sync_config.js' export default { props: ['relationship', 'user', 'labelFollowing', 'buttonClass'], components: { ConfirmModal, }, data() { return { inProgress: false, showingConfirmUnfollow: false, } }, computed: { shouldConfirmUnfollow() { return useSyncConfigStore().mergedConfig.modalOnUnfollow }, isPressed() { return this.inProgress || this.relationship.following }, title() { if (this.inProgress || this.relationship.following) { return this.$t('user_card.follow_unfollow') } else if (this.relationship.requested) { return this.$t('user_card.follow_cancel') } else { return this.$t('user_card.follow') } }, label() { if (this.inProgress) { return this.$t('user_card.follow_progress') } else if (this.relationship.following) { return this.labelFollowing || this.$t('user_card.following') } else if (this.relationship.requested) { return this.$t('user_card.follow_sent') } else { return this.$t('user_card.follow') } }, disabled() { return this.inProgress || this.user.deactivated }, }, methods: { showConfirmUnfollow() { this.showingConfirmUnfollow = true }, hideConfirmUnfollow() { this.showingConfirmUnfollow = false }, onClick() { this.relationship.following || this.relationship.requested ? this.unfollow() : this.follow() }, follow() { this.inProgress = true requestFollow(this.relationship.id, this.$store).then(() => { this.inProgress = false }) }, unfollow() { if (this.shouldConfirmUnfollow) { this.showConfirmUnfollow() } else { this.doUnfollow() } }, doUnfollow() { const store = this.$store this.inProgress = true requestUnfollow(this.relationship.id, store).then(() => { this.inProgress = false store.commit('removeStatus', { timeline: 'friends', userId: this.relationship.id, }) }) this.hideConfirmUnfollow() }, }, }