logo

pleroma-fe

My custom branche(s) on git.pleroma.social/pleroma/pleroma-fe
commit: 590782701df0e903e3193c827d5dd74244bdccf8
parent: c1d0b04105b34f10c1dc0c592d16228053ba39b1
Author: Roger Braun <roger@rogerbraun.net>
Date:   Sun,  1 Jan 2017 18:12:20 +0100

Merge branch 'develop' of ssh.gitgud.io:lambadalambda/pleroma-fe into develop

Diffstat:

Msrc/components/user_card_content/user_card_content.vue33+++++++++++++++++++++++++++++++++
Msrc/components/user_profile/user_profile.vue17+++++++++++++++++
Msrc/modules/users.js4+++-
Msrc/services/api/api.service.js21+++++++++++++++++++++
Msrc/services/backend_interactor_service/backend_interactor_service.js10++++++++++
5 files changed, 84 insertions(+), 1 deletion(-)

diff --git 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 @@ -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 @@ -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 @@ -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 @@ -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 }