aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortaehoon <th.dev91@gmail.com>2019-04-30 08:20:19 -0400
committertaehoon <th.dev91@gmail.com>2019-05-15 12:04:26 -0400
commit110c9d3b26e3871c8fc8157458be201ed4316d49 (patch)
tree015983caadbf9ca650ae172bb5fd6c85734becef /src
parent87de130ee56fdd448934c8f442342302982ec579 (diff)
improve performance by caching pinned status ids into user object
Diffstat (limited to 'src')
-rw-r--r--src/components/user_profile/user_profile.js3
-rw-r--r--src/components/user_profile/user_profile.vue16
-rw-r--r--src/modules/statuses.js6
-rw-r--r--src/modules/users.js17
-rw-r--r--src/services/entity_normalizer/entity_normalizer.service.js2
5 files changed, 29 insertions, 15 deletions
diff --git a/src/components/user_profile/user_profile.js b/src/components/user_profile/user_profile.js
index 176ec228..8d660780 100644
--- a/src/components/user_profile/user_profile.js
+++ b/src/components/user_profile/user_profile.js
@@ -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
},
diff --git a/src/components/user_profile/user_profile.vue b/src/components/user_profile/user_profile.vue
index 1e104403..36d75b9e 100644
--- a/src/components/user_profile/user_profile.vue
+++ b/src/components/user_profile/user_profile.vue
@@ -5,13 +5,15 @@
<tab-switcher :renderOnlyFocused="true" ref="tabSwitcher">
<div :label="$t('user_card.statuses')" :disabled="!user.statuses_count">
<div class="timeline">
- <Conversation
- v-for="status in pinnedStatuses"
- class="status-fadein"
- :key="status.id"
- :statusoid="status"
- :collapsable="true"
- />
+ <template v-for="statusId in user.pinnedStatuseIds">
+ <Conversation
+ v-if="timeline.statusesObject[statusId]"
+ class="status-fadein"
+ :key="statusId"
+ :statusoid="timeline.statusesObject[statusId]"
+ :collapsable="true"
+ />
+ </template>
</div>
<Timeline
:count="user.statuses_count"
diff --git a/src/modules/statuses.js b/src/modules/statuses.js
index 0650a86b..e6ee5447 100644
--- a/src/modules/statuses.js
+++ b/src/modules/statuses.js
@@ -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...
diff --git a/src/modules/users.js b/src/modules/users.js
index adcab233..e72a657c 100644
--- a/src/modules/users.js
+++ b/src/modules/users.js
@@ -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 }) {
diff --git a/src/services/entity_normalizer/entity_normalizer.service.js b/src/services/entity_normalizer/entity_normalizer.service.js
index 5b8ad8a4..e3d1646a 100644
--- a/src/services/entity_normalizer/entity_normalizer.service.js
+++ b/src/services/entity_normalizer/entity_normalizer.service.js
@@ -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
}