diff options
| author | taehoon <th.dev91@gmail.com> | 2019-04-30 08:20:19 -0400 |
|---|---|---|
| committer | taehoon <th.dev91@gmail.com> | 2019-05-15 12:04:26 -0400 |
| commit | 110c9d3b26e3871c8fc8157458be201ed4316d49 (patch) | |
| tree | 015983caadbf9ca650ae172bb5fd6c85734becef | |
| parent | 87de130ee56fdd448934c8f442342302982ec579 (diff) | |
improve performance by caching pinned status ids into user object
| -rw-r--r-- | src/components/user_profile/user_profile.js | 3 | ||||
| -rw-r--r-- | src/components/user_profile/user_profile.vue | 16 | ||||
| -rw-r--r-- | src/modules/statuses.js | 6 | ||||
| -rw-r--r-- | src/modules/users.js | 17 | ||||
| -rw-r--r-- | src/services/entity_normalizer/entity_normalizer.service.js | 2 |
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 } |
