aboutsummaryrefslogtreecommitdiff
path: root/src/components/user_card_content/user_card_content.js
diff options
context:
space:
mode:
authorHenry Jameson <me@hjkos.com>2018-12-04 12:50:29 +0300
committerHenry Jameson <me@hjkos.com>2018-12-04 12:50:29 +0300
commitca190251870c239d49c45d245a2a219fe4169625 (patch)
tree45a107ce038f2b220fd3f1dde3e6c1d3eb6a0252 /src/components/user_card_content/user_card_content.js
parent480f617c098c831e095a686abb319f4e467e15e4 (diff)
Added support for async following including delayed confirmation if we followed
user or not
Diffstat (limited to 'src/components/user_card_content/user_card_content.js')
-rw-r--r--src/components/user_card_content/user_card_content.js46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/components/user_card_content/user_card_content.js b/src/components/user_card_content/user_card_content.js
index b5dd9b91..235cfb49 100644
--- a/src/components/user_card_content/user_card_content.js
+++ b/src/components/user_card_content/user_card_content.js
@@ -5,6 +5,8 @@ export default {
props: [ 'user', 'switcher', 'selected', 'hideBio' ],
data () {
return {
+ followRequestInProgress: false,
+ followRequestSent: false,
hideUserStatsLocal: typeof this.$store.state.config.hideUserStats === 'undefined'
? this.$store.state.instance.hideUserStats
: this.$store.state.config.hideUserStats
@@ -70,13 +72,57 @@ export default {
methods: {
followUser () {
const store = this.$store
+ this.followRequestInProgress = true
store.state.api.backendInteractor.followUser(this.user.id)
.then((followedUser) => store.commit('addNewUsers', [followedUser]))
+ .then(() => {
+ if (this.user.following) {
+ this.followRequestInProgress = false
+ return
+ }
+ if (!this.user.locked) {
+ let attemptsLeft = 3
+ const fetchUser = () => new Promise((resolve, reject) => {
+ setTimeout(() => {
+ store.state.api.backendInteractor.fetchUser({ id: this.user.id })
+ .then((user) => store.commit('addNewUsers', [user]))
+ .then(() => resolve(this.user.following))
+ .catch((e) => reject(e))
+ }, 500)
+ }).then((confirmed) => {
+ if (!confirmed && attemptsLeft > 0) {
+ attemptsLeft--
+ return fetchUser()
+ } else if (confirmed) {
+ return true
+ } else {
+ return false
+ }
+ })
+
+ return fetchUser()
+ .then((successfulConfirmation) => {
+ if (successfulConfirmation) {
+ this.followRequestInProgress = false
+ } else {
+ this.followRequestInProgress = false
+ this.followRequestSent = true
+ }
+ })
+ } else {
+ this.followRequestInProgress = false
+ this.followRequestSent = true
+ }
+ })
},
unfollowUser () {
const store = this.$store
+ this.followRequestInProgress = true
store.state.api.backendInteractor.unfollowUser(this.user.id)
.then((unfollowedUser) => store.commit('addNewUsers', [unfollowedUser]))
+ .then(() => {
+ this.followRequestInProgress = false
+ })
},
blockUser () {
const store = this.$store