diff --git a/src/components/user_card_content/user_card_content.vue b/src/components/user_card_content/user_card_content.vue index 7ad86e63..d9e661a9 100644 --- a/src/components/user_card_content/user_card_content.vue +++ b/src/components/user_card_content/user_card_content.vue @@ -6,6 +6,24 @@
{{user.name}}
@{{user.screen_name}}
+
+
+ Follows you! +
+
+ + Following them! + + + + + +
+
@@ -37,6 +55,21 @@ color: `#${this.user.profile_link_color}`, 'background-image': `url(${this.user.cover_photo})` } + }, + isOtherUser () { + return this.user !== this.$store.state.users.currentUser + } + }, + methods: { + followUser () { + const store = this.$store + store.state.api.backendInteractor.followUser(this.user.id) + .then((followedUser) => store.commit('addNewUsers', [followedUser])) + }, + unfollowUser () { + const store = this.$store + store.state.api.backendInteractor.unfollowUser(this.user.id) + .then((unfollowedUser) => store.commit('addNewUsers', [unfollowedUser])) } } } diff --git a/src/components/user_profile/user_profile.vue b/src/components/user_profile/user_profile.vue index eaa5396d..2ceb13ec 100644 --- a/src/components/user_profile/user_profile.vue +++ b/src/components/user_profile/user_profile.vue @@ -5,3 +5,20 @@ + + diff --git a/src/modules/users.js b/src/modules/users.js index 1821e0f2..8ba365f3 100644 --- a/src/modules/users.js +++ b/src/modules/users.js @@ -1,6 +1,6 @@ import timelineFetcher from '../services/timeline_fetcher/timeline_fetcher.service.js' import backendInteractorService from '../services/backend_interactor_service/backend_interactor_service.js' -import { map, each, find, merge } from 'lodash' +import { compact, map, each, find, merge } from 'lodash' // TODO: Unify with mergeOrAdd in statuses.js export const mergeOrAdd = (arr, item) => { @@ -44,7 +44,9 @@ const users = { actions: { addNewStatuses (store, { statuses }) { const users = map(statuses, 'user') + const retweetedUsers = compact(map(statuses, 'retweeted_status.user')) store.commit('addNewUsers', users) + store.commit('addNewUsers', retweetedUsers) }, loginUser (store, userCredentials) { const commit = store.commit diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index a78ab5c9..87a7e2e5 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -13,6 +13,9 @@ const MEDIA_UPLOAD_URL = '/api/statusnet/media/upload' const CONVERSATION_URL = '/api/statusnet/conversation' const MENTIONS_URL = '/api/statuses/mentions.json' const FRIENDS_URL = '/api/statuses/friends.json' +const FOLLOWING_URL = '/api/friendships/create.json' +const UNFOLLOWING_URL = '/api/friendships/destroy.json' +// const USER_URL = '/api/users/show.json' const oldfetch = window.fetch @@ -30,6 +33,22 @@ const authHeaders = (user) => { } } +const followUser = ({id, credentials}) => { + let url = `${FOLLOWING_URL}?user_id=${id}` + return fetch(url, { + headers: authHeaders(credentials), + method: 'POST' + }).then((data) => data.json()) +} + +const unfollowUser = ({id, credentials}) => { + let url = `${UNFOLLOWING_URL}?user_id=${id}` + return fetch(url, { + headers: authHeaders(credentials), + method: 'POST' + }).then((data) => data.json()) +} + const fetchFriends = ({credentials}) => { return fetch(FRIENDS_URL, { headers: authHeaders(credentials) }) .then((data) => data.json()) @@ -143,6 +162,8 @@ const apiService = { fetchStatus, fetchMentions, fetchFriends, + followUser, + unfollowUser, favorite, unfavorite, retweet, diff --git a/src/services/backend_interactor_service/backend_interactor_service.js b/src/services/backend_interactor_service/backend_interactor_service.js index 36a1ff3b..746776bf 100644 --- a/src/services/backend_interactor_service/backend_interactor_service.js +++ b/src/services/backend_interactor_service/backend_interactor_service.js @@ -17,11 +17,21 @@ const backendInteractorService = (credentials) => { return apiService.fetchFriends({credentials}) } + const followUser = (id) => { + return apiService.followUser({credentials, id}) + } + + const unfollowUser = (id) => { + return apiService.unfollowUser({credentials, id}) + } + const backendInteractorServiceInstance = { fetchStatus, fetchConversation, fetchMentions, fetchFriends, + followUser, + unfollowUser, verifyCredentials: apiService.verifyCredentials }