From c0528baba79af1863085b4e2ac77d224e0d4f627 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Tue, 10 May 2022 08:04:18 +0100 Subject: [PATCH] ios: show spinners when connecting contacts (#628) * ios: show spinners when connecting contacts * move status to the corner --- apps/ios/Shared/Model/ChatModel.swift | 3 +- .../Views/ChatList/ChatPreviewView.swift | 59 +++++++++++-------- 2 files changed, 35 insertions(+), 27 deletions(-) diff --git a/apps/ios/Shared/Model/ChatModel.swift b/apps/ios/Shared/Model/ChatModel.swift index 63b9f04ff8..578552a992 100644 --- a/apps/ios/Shared/Model/ChatModel.swift +++ b/apps/ios/Shared/Model/ChatModel.swift @@ -276,10 +276,11 @@ final class Chat: ObservableObject, Identifiable { self.chatStats = cData.chatStats } - init(chatInfo: ChatInfo, chatItems: [ChatItem] = [], chatStats: ChatStats = ChatStats()) { + init(chatInfo: ChatInfo, chatItems: [ChatItem] = [], chatStats: ChatStats = ChatStats(), serverInfo: ServerInfo = ServerInfo(networkStatus: .unknown)) { self.chatInfo = chatInfo self.chatItems = chatItems self.chatStats = chatStats + self.serverInfo = serverInfo } var id: ChatId { get { chatInfo.id } } diff --git a/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift b/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift index d039f6eeb3..fc61520166 100644 --- a/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift +++ b/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift @@ -17,15 +17,9 @@ struct ChatPreviewView: View { let cItem = chat.chatItems.last let unread = chat.chatStats.unreadCount return HStack(spacing: 8) { - ZStack(alignment: .bottomLeading) { - ChatInfoImage(chat: chat) - .frame(width: 63, height: 63) - if case .direct = chat.chatInfo { - chatStatusImage() - .padding([.bottom, .leading], 1) - } - } - .padding(.leading, 4) + ChatInfoImage(chat: chat) + .frame(width: 63, height: 63) + .padding(.leading, 4) VStack(spacing: 0) { HStack(alignment: .top) { @@ -45,10 +39,10 @@ struct ChatPreviewView: View { .padding(.top, 4) .padding(.horizontal, 8) - if let cItem = cItem { - ZStack(alignment: .topTrailing) { + ZStack(alignment: .topTrailing) { + if let cItem = cItem { (itemStatusMark(cItem) + messageText(cItem.text, cItem.formattedText, cItem.memberDisplayName, preview: true)) - .frame(minWidth: 0, maxWidth: .infinity, minHeight: 44, maxHeight: 44, alignment: .topLeading) + .frame(maxWidth: .infinity, minHeight: 44, maxHeight: 44, alignment: .topLeading) .padding(.leading, 8) .padding(.trailing, 36) .padding(.bottom, 4) @@ -61,15 +55,21 @@ struct ChatPreviewView: View { .background(Color.accentColor) .cornerRadius(10) } + } else if case let .direct(contact) = chat.chatInfo, !contact.ready { + Text("Connecting...") + .frame(maxWidth: .infinity, minHeight: 44, maxHeight: 44, alignment: .topLeading) + .padding([.leading, .trailing], 8) + .padding(.bottom, 4) + } + if case .direct = chat.chatInfo { + chatStatusImage() + .padding(.top, 24) + .padding(.bottom, 4) + .frame(maxWidth: .infinity, alignment: .trailing) } - .padding(.trailing, 8) - } - else if case let .direct(contact) = chat.chatInfo, !contact.ready { - Text("Connecting...") - .frame(minWidth: 0, maxWidth: .infinity, minHeight: 44, maxHeight: 44, alignment: .topLeading) - .padding([.leading, .trailing], 8) - .padding(.bottom, 4) } + + .padding(.trailing, 8) } } } @@ -92,17 +92,13 @@ struct ChatPreviewView: View { switch chat.serverInfo.networkStatus { case .connected: EmptyView() case .error: - Image(systemName: "circle.fill") + Image(systemName: "exclamationmark.circle") .resizable() .scaledToFit() - .frame(maxHeight: 5) + .frame(width: 17, height: 17) .foregroundColor(.secondary) default: - Image(systemName: "ellipsis") - .resizable() - .scaledToFit() - .frame(maxWidth: 10) - .foregroundColor(.secondary) + ProgressView() } } } @@ -118,6 +114,17 @@ struct ChatPreviewView_Previews: PreviewProvider { chatInfo: ChatInfo.sampleData.direct, chatItems: [ChatItem.getSample(1, .directSnd, .now, "hello", .sndSent)] )) + ChatPreviewView(chat: Chat( + chatInfo: ChatInfo.sampleData.direct, + chatItems: [ChatItem.getSample(1, .directSnd, .now, "hello", .sndSent)], + chatStats: ChatStats(unreadCount: 11, minUnreadItemId: 0) + )) + ChatPreviewView(chat: Chat( + chatInfo: ChatInfo.sampleData.direct, + chatItems: [ChatItem.getSample(1, .directSnd, .now, "hello", .sndSent)], + chatStats: ChatStats(unreadCount: 3, minUnreadItemId: 0), + serverInfo: Chat.ServerInfo(networkStatus: .error("status")) + )) ChatPreviewView(chat: Chat( chatInfo: ChatInfo.sampleData.group, chatItems: [ChatItem.getSample(1, .directSnd, .now, "Lorem ipsum dolor sit amet, d. consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.")],