From c4aae14148f1c5450d714e796709fc36b1ee9682 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 26 Aug 2020 20:20:14 -0500 Subject: [PATCH] Chats: handle null last_message --- app/soapbox/actions/importer/normalizer.js | 5 +++-- .../features/account_timeline/components/header.js | 1 + app/soapbox/reducers/chat_message_lists.js | 9 +++++++-- app/soapbox/reducers/chat_messages.js | 5 ++++- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/app/soapbox/actions/importer/normalizer.js b/app/soapbox/actions/importer/normalizer.js index c867e52e1..bcf6c3aea 100644 --- a/app/soapbox/actions/importer/normalizer.js +++ b/app/soapbox/actions/importer/normalizer.js @@ -83,9 +83,10 @@ export function normalizePoll(poll) { export function normalizeChat(chat, normalOldChat) { const normalChat = { ...chat }; + const { account, last_message: lastMessage } = chat; - normalChat.account = chat.account.id; - normalChat.last_message = chat.last_message.id; + if (account) normalChat.account = account.id; + if (lastMessage) normalChat.last_message = lastMessage.id; return normalChat; } diff --git a/app/soapbox/features/account_timeline/components/header.js b/app/soapbox/features/account_timeline/components/header.js index 5f775743b..c0c30b759 100644 --- a/app/soapbox/features/account_timeline/components/header.js +++ b/app/soapbox/features/account_timeline/components/header.js @@ -100,6 +100,7 @@ export default class Header extends ImmutablePureComponent { onBlock={this.handleBlock} onMention={this.handleMention} onDirect={this.handleDirect} + onMessage={this.handleMessage} onReblogToggle={this.handleReblogToggle} onReport={this.handleReport} onMute={this.handleMute} diff --git a/app/soapbox/reducers/chat_message_lists.js b/app/soapbox/reducers/chat_message_lists.js index f4b2a8bfc..788e13e9e 100644 --- a/app/soapbox/reducers/chat_message_lists.js +++ b/app/soapbox/reducers/chat_message_lists.js @@ -26,14 +26,19 @@ const importMessages = (state, chatMessages) => ( const importLastMessages = (state, chats) => state.withMutations(mutable => - chats.forEach(chat => importMessage(mutable, chat.last_message))); + chats.forEach(chat => { + if (chat.last_message) importMessage(mutable, chat.last_message); + })); export default function chatMessageLists(state = initialState, action) { switch(action.type) { case CHATS_FETCH_SUCCESS: return importLastMessages(state, action.chats); case STREAMING_CHAT_UPDATE: - return importMessages(state, [action.chat.last_message]); + if (action.chat.last_message) + return importMessages(state, [action.chat.last_message]); + else + return state; case CHAT_MESSAGES_FETCH_SUCCESS: return updateList(state, action.chatId, action.chatMessages.map(chat => chat.id).reverse()); case CHAT_MESSAGE_SEND_SUCCESS: diff --git a/app/soapbox/reducers/chat_messages.js b/app/soapbox/reducers/chat_messages.js index 766935886..886e463b0 100644 --- a/app/soapbox/reducers/chat_messages.js +++ b/app/soapbox/reducers/chat_messages.js @@ -18,7 +18,10 @@ const importMessages = (state, messages) => const importLastMessages = (state, chats) => state.withMutations(mutable => - chats.forEach(chat => importMessage(mutable, chat.get('last_message')))); + chats.forEach(chat => { + if (chat.get('last_message')) + importMessage(mutable, chat.get('last_message')); + })); export default function chatMessages(state = initialState, action) { switch(action.type) {