diff --git a/src/components/user_profile/user_profile.js b/src/components/user_profile/user_profile.js
index f779b823..b4c604f8 100644
--- a/src/components/user_profile/user_profile.js
+++ b/src/components/user_profile/user_profile.js
@@ -7,6 +7,7 @@ import TabSwitcher from 'src/components/tab_switcher/tab_switcher.jsx'
import RichContent from 'src/components/rich_content/rich_content.jsx'
import List from '../list/list.vue'
import withLoadMore from '../../hocs/with_load_more/with_load_more'
+import { debounce } from 'lodash'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
faCircleNotch
@@ -40,7 +41,9 @@ const UserProfile = {
error: false,
userId: null,
tab: defaultTabKey,
- footerRef: null
+ footerRef: null,
+ note: null,
+ noteLoading: false
}
},
created () {
@@ -110,9 +113,13 @@ const UserProfile = {
const user = this.$store.getters.findUser(userNameOrId)
if (user) {
loadById(user.id)
+ this.note = user.relationship.note
} else {
this.$store.dispatch('fetchUser', userNameOrId)
- .then(({ id }) => loadById(id))
+ .then(({ id, relationship }) => {
+ this.note = relationship.note
+ return loadById(id)
+ })
.catch((reason) => {
const errorMessage = get(reason, 'error.error')
if (errorMessage === 'No user with such user_id') { // Known error
@@ -145,7 +152,15 @@ const UserProfile = {
if (target.tagName === 'A') {
window.open(target.href, '_blank')
}
- }
+ },
+ setNote () {
+ this.noteLoading = true
+ this.debounceSetNote()
+ },
+ debounceSetNote: debounce(function () {
+ this.$store.dispatch('setNote', { id: this.userId, note: this.note })
+ this.noteLoading = false
+ }, 1500)
},
watch: {
'$route.params.id': function (newVal) {
diff --git a/src/components/user_profile/user_profile.vue b/src/components/user_profile/user_profile.vue
index b1a20269..7e3599f7 100644
--- a/src/components/user_profile/user_profile.vue
+++ b/src/components/user_profile/user_profile.vue
@@ -40,6 +40,27 @@
+
{
.then(() => store.commit('removeDomainMute', domain))
}
+const setNote = (store, { id, note }) => {
+ return store.rootState.api.backendInteractor.setNote({ id, note })
+ .then((relationship) => store.commit('updateUserRelationship', [relationship]))
+}
+
export const mutations = {
tagUser (state, { user: { id }, tag }) {
const user = state.usersObject[id]
@@ -366,6 +371,9 @@ const users = {
unmuteDomains (store, domain = []) {
return Promise.all(domain.map(domain => unmuteDomain(store, domain)))
},
+ setNote (store, { id, note }) {
+ return setNote(store, { id, note })
+ },
fetchFriends ({ rootState, commit }, id) {
const user = rootState.users.usersObject[id]
const maxId = last(user.friendIds)
diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js
index fa3439e9..b9be5eb0 100644
--- a/src/services/api/api.service.js
+++ b/src/services/api/api.service.js
@@ -47,7 +47,7 @@ const MASTODON_PUBLIC_TIMELINE = '/api/v1/timelines/public'
const MASTODON_USER_HOME_TIMELINE_URL = '/api/v1/timelines/home'
const MASTODON_STATUS_URL = id => `/api/v1/statuses/${id}`
const MASTODON_STATUS_CONTEXT_URL = id => `/api/v1/statuses/${id}/context`
-const MASTODON_USER_URL = '/api/v1/accounts'
+const MASTODON_USER_URL = id => `/api/v1/accounts/${id}?with_relationships=true`
const MASTODON_USER_RELATIONSHIPS_URL = '/api/v1/accounts/relationships'
const MASTODON_USER_TIMELINE_URL = id => `/api/v1/accounts/${id}/statuses`
const MASTODON_LIST_URL = id => `/api/v1/lists/${id}`
@@ -63,6 +63,7 @@ const MASTODON_MUTE_USER_URL = id => `/api/v1/accounts/${id}/mute`
const MASTODON_UNMUTE_USER_URL = id => `/api/v1/accounts/${id}/unmute`
const MASTODON_SUBSCRIBE_USER = id => `/api/v1/pleroma/accounts/${id}/subscribe`
const MASTODON_UNSUBSCRIBE_USER = id => `/api/v1/pleroma/accounts/${id}/unsubscribe`
+const MASTODON_SET_NOTE_URL = id => `/api/v1/accounts/${id}/note`
const MASTODON_BOOKMARK_STATUS_URL = id => `/api/v1/statuses/${id}/bookmark`
const MASTODON_UNBOOKMARK_STATUS_URL = id => `/api/v1/statuses/${id}/unbookmark`
const MASTODON_POST_STATUS_URL = '/api/v1/statuses'
@@ -310,7 +311,7 @@ const denyUser = ({ id, credentials }) => {
}
const fetchUser = ({ id, credentials }) => {
- let url = `${MASTODON_USER_URL}/${id}`
+ const url = MASTODON_USER_URL(id)
return promisedRequest({ url, credentials })
.then((data) => parseUser(data))
}
@@ -948,6 +949,18 @@ const unmuteUser = ({ id, credentials }) => {
return promisedRequest({ url: MASTODON_UNMUTE_USER_URL(id), credentials, method: 'POST' })
}
+const setNote = ({ id, note, credentials }) => {
+ const form = new FormData()
+
+ form.append('comment', note)
+
+ return fetch(MASTODON_SET_NOTE_URL(id), {
+ body: form,
+ headers: authHeaders(credentials),
+ method: 'POST'
+ }).then((data) => data.json())
+}
+
const fetchMascot = ({ credentials }) => {
return promisedRequest({ url: MASTODON_MASCOT_URL, credentials })
}
@@ -1405,6 +1418,7 @@ const apiService = {
fetchMutes,
muteUser,
unmuteUser,
+ setNote,
subscribeUser,
unsubscribeUser,
fetchBlocks,