diff --git a/Meshtastic/Views/Messages/ChannelMessageList.swift b/Meshtastic/Views/Messages/ChannelMessageList.swift index 681c3a46..4134d4ec 100644 --- a/Meshtastic/Views/Messages/ChannelMessageList.swift +++ b/Meshtastic/Views/Messages/ChannelMessageList.swift @@ -60,12 +60,22 @@ struct ChannelMessageList: View { } var body: some View { + // Cast allPrivateMessages to an array for easier indexing and ForEach. + let messages: [MessageEntity] = Array(allPrivateMessages) + + // Precompute previous message + let previousByID: [Int64: MessageEntity?] = { + var dict = [Int64: MessageEntity?]() + var prev: MessageEntity? + for m in messages { dict[m.messageId] = prev; prev = m } + return dict + }() + ScrollViewReader { scrollView in ScrollView { LazyVStack { - ForEach(allPrivateMessages.indices, id: \.self) { index in - let message = allPrivateMessages[index] - let previousMessage = index > 0 ? allPrivateMessages[index - 1] : nil + ForEach(messages, id: \.messageId) { message in + let previousMessage: MessageEntity? = previousByID[message.messageId] ?? nil ChannelMessageRow( message: message, diff --git a/Meshtastic/Views/Messages/UserMessageList.swift b/Meshtastic/Views/Messages/UserMessageList.swift index ba741f90..79cc4b38 100644 --- a/Meshtastic/Views/Messages/UserMessageList.swift +++ b/Meshtastic/Views/Messages/UserMessageList.swift @@ -58,15 +58,22 @@ struct UserMessageList: View { var body: some View { // Cast user.messageList to an array for easier indexing and ForEach. - let messages = allPrivateMessages.compactMap { $0 as MessageEntity } + let messages: [MessageEntity] = Array(allPrivateMessages) + + // Precompute previous message + let previousByID: [Int64: MessageEntity?] = { + var dict = [Int64: MessageEntity?]() + var prev: MessageEntity? + for m in messages { dict[m.messageId] = prev; prev = m } + return dict + }() VStack { ScrollViewReader { scrollView in ScrollView { LazyVStack { - ForEach(messages.indices, id: \.self) { index in - let message = messages[index] - let previousMessage = index > 0 ? messages[index - 1] : nil + ForEach(messages, id: \.messageId) { message in + let previousMessage: MessageEntity? = previousByID[message.messageId] ?? nil UserMessageRow( message: message,