From 80f0108b41fe6f5ff774b26024d9237a9757bbb0 Mon Sep 17 00:00:00 2001 From: JRoberts <8711996+jr-simplex@users.noreply.github.com> Date: Fri, 30 Dec 2022 21:47:11 +0400 Subject: [PATCH] ios: correctly update chat when opening from another chat via notification (#1667) --- apps/ios/Shared/Views/Chat/ChatView.swift | 7 ++++--- apps/ios/Shared/Views/ChatList/ChatListView.swift | 12 +++++------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/apps/ios/Shared/Views/Chat/ChatView.swift b/apps/ios/Shared/Views/Chat/ChatView.swift index 258ea217c6..affd9fe797 100644 --- a/apps/ios/Shared/Views/Chat/ChatView.swift +++ b/apps/ios/Shared/Views/Chat/ChatView.swift @@ -15,7 +15,7 @@ private let memberImageSize: CGFloat = 34 struct ChatView: View { @EnvironmentObject var chatModel: ChatModel @Environment(\.colorScheme) var colorScheme - @ObservedObject var chat: Chat + @State @ObservedObject var chat: Chat @State private var showChatInfoSheet: Bool = false @State private var showAddMembersSheet: Bool = false @State private var composeState = ComposeState() @@ -253,9 +253,10 @@ struct ChatView: View { loadChat(chat: chat, search: searchText) } .onChange(of: chatModel.chatId) { _ in - if let chatId = chatModel.chatId, let chat = chatModel.getChat(chatId) { + if let chatId = chatModel.chatId, let c = chatModel.getChat(chatId) { + chat = c showChatInfoSheet = false - loadChat(chat: chat) + loadChat(chat: c) DispatchQueue.main.async { scrollToBottom(proxy) } diff --git a/apps/ios/Shared/Views/ChatList/ChatListView.swift b/apps/ios/Shared/Views/ChatList/ChatListView.swift index 95c603ae97..f121cacb91 100644 --- a/apps/ios/Shared/Views/ChatList/ChatListView.swift +++ b/apps/ios/Shared/Views/ChatList/ChatListView.swift @@ -14,7 +14,6 @@ struct ChatListView: View { // not really used in this view @State private var showSettings = false @State private var searchText = "" - @State private var selectedChat: ChatId? @State private var showAddChat = false var body: some View { @@ -42,7 +41,6 @@ struct ChatListView: View { } } .onChange(of: chatModel.chatId) { _ in - selectedChat = chatModel.chatId if chatModel.chatId == nil, let chatId = chatModel.chatToTop { chatModel.chatToTop = nil chatModel.popChat(chatId) @@ -79,10 +77,10 @@ struct ChatListView: View { } .background( NavigationLink( - destination: chatView(selectedChat), + destination: chatView(), isActive: Binding( - get: { selectedChat != nil }, - set: { _, _ in selectedChat = nil } + get: { chatModel.chatId != nil }, + set: { _, _ in chatModel.chatId = nil } ) ) { EmptyView() } ) @@ -131,8 +129,8 @@ struct ChatListView: View { .clipShape(RoundedRectangle(cornerRadius: 16)) } - @ViewBuilder private func chatView(_ chatId: ChatId?) -> some View { - if let chatId = chatId, let chat = chatModel.getChat(chatId) { + @ViewBuilder private func chatView() -> some View { + if let chatId = chatModel.chatId, let chat = chatModel.getChat(chatId) { ChatView(chat: chat).onAppear { loadChat(chat: chat) }