diff options
| author | lambadalambda <gitgud@rogerbraun.net> | 2017-01-01 12:11:55 -0500 |
|---|---|---|
| committer | lambadalambda <gitgud@rogerbraun.net> | 2017-01-01 12:11:55 -0500 |
| commit | eac8fe0c337360ecc766b1920a8d868bd8291213 (patch) | |
| tree | 963af0fad040cf01fb5a4e431b08241775aceee8 /src | |
| parent | 0db25bdca0c40a0d3e769b6b503cdadda4962126 (diff) | |
| parent | 8f494b14f0917cabfa584e9a9b3b4521c598c7bb (diff) | |
Merge branch 'feature/follow' into 'develop'
Feature/follow
See merge request !11
Diffstat (limited to 'src')
| -rw-r--r-- | src/components/user_card_content/user_card_content.vue | 33 | ||||
| -rw-r--r-- | src/components/user_profile/user_profile.vue | 17 | ||||
| -rw-r--r-- | src/modules/users.js | 4 | ||||
| -rw-r--r-- | src/services/api/api.service.js | 21 | ||||
| -rw-r--r-- | src/services/backend_interactor_service/backend_interactor_service.js | 10 |
5 files changed, 84 insertions, 1 deletions
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 @@ <span class="glyphicon glyphicon-user"></span> <div class='user-name'>{{user.name}}</div> <div class='user-screen-name'>@{{user.screen_name}}</div> + <div v-if="isOtherUser" class="following-info"> + <div v-if="user.follows_you" class="following"> + Follows you! + </div> + <div class="followed"> + <span v-if="user.following"> + Following them! + <button @click="unfollowUser"> + Unfollow! + </button> + </span> + <span v-if="!user.following" > + <button @click="followUser"> + Follow! + </button> + </span> + </div> + </div> </div> </div> <div class="panel-body"> @@ -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 @@ </template> <script src="./user_profile.js"></script> + +<style lang="scss"> + .user-profile { + flex: 2; + flex-basis: 500px; + } + + .user-info { + .following-info { + display: flex; + + div { + flex: 1; + } + } + } +</style> 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 } |
