forked from AkkomaGang/akkoma-fe
improve performance by caching pinned status ids into user object
This commit is contained in:
parent
87de130ee5
commit
110c9d3b26
5 changed files with 29 additions and 15 deletions
|
@ -42,9 +42,6 @@ const UserProfile = {
|
|||
timeline () {
|
||||
return this.$store.state.statuses.timelines.user
|
||||
},
|
||||
pinnedStatuses () {
|
||||
return filter(this.timeline.statuses, { pinned: true })
|
||||
},
|
||||
favorites () {
|
||||
return this.$store.state.statuses.timelines.favorites
|
||||
},
|
||||
|
|
|
@ -5,13 +5,15 @@
|
|||
<tab-switcher :renderOnlyFocused="true" ref="tabSwitcher">
|
||||
<div :label="$t('user_card.statuses')" :disabled="!user.statuses_count">
|
||||
<div class="timeline">
|
||||
<template v-for="statusId in user.pinnedStatuseIds">
|
||||
<Conversation
|
||||
v-for="status in pinnedStatuses"
|
||||
v-if="timeline.statusesObject[statusId]"
|
||||
class="status-fadein"
|
||||
:key="status.id"
|
||||
:statusoid="status"
|
||||
:key="statusId"
|
||||
:statusoid="timeline.statusesObject[statusId]"
|
||||
:collapsable="true"
|
||||
/>
|
||||
</template>
|
||||
</div>
|
||||
<Timeline
|
||||
:count="user.statuses_count"
|
||||
|
|
|
@ -424,7 +424,7 @@ export const mutations = {
|
|||
newStatus.favoritedBy.push(user)
|
||||
}
|
||||
},
|
||||
setPinned (state, { status }) {
|
||||
setPinned (state, status) {
|
||||
const newStatus = state.allStatusesObject[status.id]
|
||||
newStatus.pinned = status.pinned
|
||||
},
|
||||
|
@ -543,11 +543,11 @@ const statuses = {
|
|||
},
|
||||
pinStatus ({ rootState, commit }, statusId) {
|
||||
return rootState.api.backendInteractor.pinOwnStatus(statusId)
|
||||
.then((status) => commit('setPinned', { status }))
|
||||
.then((status) => commit('setPinned', status))
|
||||
},
|
||||
unpinStatus ({ rootState, commit }, statusId) {
|
||||
rootState.api.backendInteractor.unpinOwnStatus(statusId)
|
||||
.then((status) => commit('setPinned', { status }))
|
||||
.then((status) => commit('setPinned', status))
|
||||
},
|
||||
retweet ({ rootState, commit }, status) {
|
||||
// Optimistic retweeting...
|
||||
|
|
|
@ -165,6 +165,15 @@ export const mutations = {
|
|||
state.currentUser.muteIds.push(muteId)
|
||||
}
|
||||
},
|
||||
setPinned (state, status) {
|
||||
const user = state.usersObject[status.user.id]
|
||||
const index = user.pinnedStatuseIds.indexOf(status.id)
|
||||
if (status.pinned && index === -1) {
|
||||
user.pinnedStatuseIds.push(status.id)
|
||||
} else if (!status.pinned && index !== -1) {
|
||||
user.pinnedStatuseIds.splice(index, 1)
|
||||
}
|
||||
},
|
||||
setUserForStatus (state, status) {
|
||||
status.user = state.usersObject[status.user.id]
|
||||
},
|
||||
|
@ -318,13 +327,17 @@ const users = {
|
|||
store.commit('addNewUsers', users)
|
||||
store.commit('addNewUsers', retweetedUsers)
|
||||
|
||||
// Reconnect users to statuses
|
||||
each(statuses, (status) => {
|
||||
// Reconnect users to statuses
|
||||
store.commit('setUserForStatus', status)
|
||||
// Set pinned statuses to user
|
||||
store.commit('setPinned', status)
|
||||
})
|
||||
// Reconnect users to retweets
|
||||
each(compact(map(statuses, 'retweeted_status')), (status) => {
|
||||
// Reconnect users to retweets
|
||||
store.commit('setUserForStatus', status)
|
||||
// Set pinned retweets to user
|
||||
store.commit('setPinned', status)
|
||||
})
|
||||
},
|
||||
addNewNotifications (store, { notifications }) {
|
||||
|
|
|
@ -131,6 +131,8 @@ export const parseUser = (data) => {
|
|||
output.statuses_count = data.statuses_count
|
||||
output.friendIds = []
|
||||
output.followerIds = []
|
||||
output.pinnedStatuseIds = []
|
||||
|
||||
if (data.pleroma) {
|
||||
output.follow_request_count = data.pleroma.follow_request_count
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue