From d1e2fe22ce2b21bb2a5d297e66174abfbedc53cb Mon Sep 17 00:00:00 2001 From: Avently Date: Wed, 24 Jan 2024 08:21:04 -0800 Subject: [PATCH] ios: events ordering --- apps/ios/Shared/Model/ChatModel.swift | 7 +++++-- apps/ios/Shared/Views/Chat/ChatItemView.swift | 4 +++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/ios/Shared/Model/ChatModel.swift b/apps/ios/Shared/Model/ChatModel.swift index c31ad579ab..d5aa8efe55 100644 --- a/apps/ios/Shared/Model/ChatModel.swift +++ b/apps/ios/Shared/Model/ChatModel.swift @@ -556,9 +556,10 @@ final class ChatModel: ObservableObject { } // this function analyses "connected" events and assumes that each member will be there only once - func getConnectedMemberNames(_ chatItem: ChatItem) -> (Int, [String]) { + func getConnectedMemberNames(_ chatItem: ChatItem) -> (Int, [String], String?) { var count = 0 var ns: [String] = [] + var lastNonConnectedEvent: String? = nil if let ciCategory = chatItem.mergeCategory, var i = getChatItemIndex(chatItem) { while i < reversedChatItems.count { @@ -566,12 +567,14 @@ final class ChatModel: ObservableObject { if ci.mergeCategory != ciCategory { break } if let m = ci.memberConnected { ns.append(m.displayName) + } else if count == 0 { + lastNonConnectedEvent = if let name = ci.memberDisplayName { name + " " + ci.text } else { ci.text } } count += 1 i += 1 } } - return (count, ns) + return (count, ns, lastNonConnectedEvent) } // returns the index of the passed item and the next item (it has smaller index) diff --git a/apps/ios/Shared/Views/Chat/ChatItemView.swift b/apps/ios/Shared/Views/Chat/ChatItemView.swift index 8f67a8f737..7b7c92e43e 100644 --- a/apps/ios/Shared/Views/Chat/ChatItemView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItemView.swift @@ -149,7 +149,7 @@ struct ChatItemContentView: View { } private var mergedGroupEventText: Text? { - let (count, ns) = chatModel.getConnectedMemberNames(chatItem) + let (count, ns, lastNonConnectedEvent) = chatModel.getConnectedMemberNames(chatItem) let members: LocalizedStringKey = switch ns.count { case 1: "\(ns[0]) connected" @@ -162,6 +162,8 @@ struct ChatItemContentView: View { } return if count <= 1 { nil + } else if let last = lastNonConnectedEvent { + Text(last) + Text(" ") + Text("and \(count - ns.count) other events") } else if ns.count == 0 { Text("\(count) group events") } else if count > ns.count {