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:
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
}