diff --git a/apps/ios/Shared/Model/ChatModel.swift b/apps/ios/Shared/Model/ChatModel.swift index 20449299eb..ef93304852 100644 --- a/apps/ios/Shared/Model/ChatModel.swift +++ b/apps/ios/Shared/Model/ChatModel.swift @@ -85,6 +85,7 @@ final class ChatModel: ObservableObject { // current chat @Published var chatId: String? var chatItemStatuses: Dictionary = [:] + @Published var chatToTop: String? @Published var groupMembers: [GMember] = [] @Published var groupMembersIndexes: Dictionary = [:] // groupMemberId to index in groupMembers list @Published var membersLoaded = false @@ -300,7 +301,7 @@ final class ChatModel: ObservableObject { if chatId != c.chatInfo.id { popChat_(j, to: i) } else if i == 0 { - popChatCollector.addChat(c.chatInfo.id) + chatToTop = c.chatInfo.id } } } else { @@ -336,7 +337,11 @@ final class ChatModel: ObservableObject { increaseUnreadCounter(user: currentUser!) } if i > 0 { - popChatCollector.addChat(cInfo.id) + if chatId == cInfo.id { + chatToTop = cInfo.id + } else { + popChatCollector.addChat(cInfo.id) + } } } else { addChat(Chat(chatInfo: cInfo, chatItems: [cItem])) @@ -762,6 +767,12 @@ final class ChatModel: ObservableObject { return (prevMember, memberIds.count) } + func popChat(_ id: String) { + if let i = getChatIndex(id) { + popChat_(i) + } + } + private func popChat_(_ i: Int, to position: Int = 0) { let chat = chats.remove(at: i) chats.insert(chat, at: position) diff --git a/apps/ios/Shared/Views/ChatList/ChatListView.swift b/apps/ios/Shared/Views/ChatList/ChatListView.swift index e75538fb3a..dfaaf1f192 100644 --- a/apps/ios/Shared/Views/ChatList/ChatListView.swift +++ b/apps/ios/Shared/Views/ChatList/ChatListView.swift @@ -158,9 +158,10 @@ struct ChatListView: View { .offset(x: -8) } } - .onChange(of: chatModel.chatId) { chatId in - if chatId == nil { - chatModel.popChatCollector.popRecentChats() + .onChange(of: chatModel.chatId) { chId in + if chId == nil, let chatId = chatModel.chatToTop { + chatModel.chatToTop = nil + chatModel.popChat(chatId) } stopAudioPlayer() }