From 49f7c84e3f4c17415fb5b4f17fd789d76fff05f4 Mon Sep 17 00:00:00 2001
From: Henry Jameson <me@hjkos.com>
Date: Tue, 17 Nov 2020 15:25:38 +0200
Subject: [PATCH] Fix pinned statuses and perhaps some other stuff

---
 src/modules/users.js                                 |  6 ++++--
 .../entity_normalizer/entity_normalizer.service.js   | 12 +++++++++---
 2 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/src/modules/users.js b/src/modules/users.js
index 9245db5c..655db4c7 100644
--- a/src/modules/users.js
+++ b/src/modules/users.js
@@ -137,11 +137,11 @@ export const mutations = {
   },
   saveFriendIds (state, { id, friendIds }) {
     const user = state.usersObject[id]
-    user.friendIds = uniq(concat(user.friendIds, friendIds))
+    user.friendIds = uniq(concat(user.friendIds || [], friendIds))
   },
   saveFollowerIds (state, { id, followerIds }) {
     const user = state.usersObject[id]
-    user.followerIds = uniq(concat(user.followerIds, followerIds))
+    user.followerIds = uniq(concat(user.followerIds || [], followerIds))
   },
   // Because frontend doesn't have a reason to keep these stuff in memory
   // outside of viewing someones user profile.
@@ -202,7 +202,9 @@ export const mutations = {
   },
   setPinnedToUser (state, status) {
     const user = state.usersObject[status.user.id]
+    user.pinnedStatusIds = user.pinnedStatusIds || []
     const index = user.pinnedStatusIds.indexOf(status.id)
+
     if (status.pinned && index === -1) {
       user.pinnedStatusIds.push(status.id)
     } else if (!status.pinned && index !== -1) {
diff --git a/src/services/entity_normalizer/entity_normalizer.service.js b/src/services/entity_normalizer/entity_normalizer.service.js
index a4c1a1bf..e3a52489 100644
--- a/src/services/entity_normalizer/entity_normalizer.service.js
+++ b/src/services/entity_normalizer/entity_normalizer.service.js
@@ -2,6 +2,15 @@ import escape from 'escape-html'
 import parseLinkHeader from 'parse-link-header'
 import { isStatusNotification } from '../notification_utils/notification_utils.js'
 
+/** NOTICE! **
+ * Do not initialize UI-generated data here.
+ * It will override existing data.
+ *
+ * i.e. user.pinnedStatusIds was set to [] here
+ * UI code would update it with data but upon next user fetch
+ * it would be reverted back to []
+ */
+
 const qvitterStatusType = (status) => {
   if (status.is_post_verb) {
     return 'status'
@@ -173,9 +182,6 @@ export const parseUser = (data) => {
   output.locked = data.locked
   output.followers_count = data.followers_count
   output.statuses_count = data.statuses_count
-  output.friendIds = []
-  output.followerIds = []
-  output.pinnedStatusIds = []
 
   if (data.pleroma) {
     output.follow_request_count = data.pleroma.follow_request_count