From 388c66c74453e8a80d819ee42505779210288021 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Wed, 14 Sep 2022 14:10:26 +0200
Subject: [PATCH] Show message status in ChatView

---
 .../Sources/ChatFeature/ChatFeature.swift     |  8 ++++++--
 .../Sources/ChatFeature/ChatView.swift        | 20 ++++++++++++++++---
 .../ChatFeatureTests/ChatFeatureTests.swift   |  6 ++++--
 3 files changed, 27 insertions(+), 7 deletions(-)

diff --git a/Examples/xx-messenger/Sources/ChatFeature/ChatFeature.swift b/Examples/xx-messenger/Sources/ChatFeature/ChatFeature.swift
index 26757d71..9d5c3df0 100644
--- a/Examples/xx-messenger/Sources/ChatFeature/ChatFeature.swift
+++ b/Examples/xx-messenger/Sources/ChatFeature/ChatFeature.swift
@@ -17,18 +17,21 @@ public struct ChatState: Equatable, Identifiable {
       id: Int64,
       date: Date,
       senderId: Data,
-      text: String
+      text: String,
+      status: XXModels.Message.Status
     ) {
       self.id = id
       self.date = date
       self.senderId = senderId
       self.text = text
+      self.status = status
     }
 
     public var id: Int64
     public var date: Date
     public var senderId: Data
     public var text: String
+    public var status: XXModels.Message.Status
   }
 
   public init(
@@ -118,7 +121,8 @@ public let chatReducer = Reducer<ChatState, ChatAction, ChatEnvironment>
               id: id,
               date: message.date,
               senderId: message.senderId,
-              text: message.text
+              text: message.text,
+              status: message.status
             )
           }
         }
diff --git a/Examples/xx-messenger/Sources/ChatFeature/ChatView.swift b/Examples/xx-messenger/Sources/ChatFeature/ChatView.swift
index 5905931f..fed16ae9 100644
--- a/Examples/xx-messenger/Sources/ChatFeature/ChatView.swift
+++ b/Examples/xx-messenger/Sources/ChatFeature/ChatView.swift
@@ -95,7 +95,7 @@ public struct ChatView: View {
 
     var body: some View {
       VStack {
-        Text("\(message.date.formatted())")
+        Text("\(message.date.formatted()), \(statusText)")
           .foregroundColor(.secondary)
           .font(.footnote)
           .frame(maxWidth: .infinity, alignment: alignment)
@@ -112,6 +112,18 @@ public struct ChatView: View {
       }
       .padding(.horizontal)
     }
+
+    var statusText: String {
+      switch message.status {
+      case .sending: return "Sending"
+      case .sendingTimedOut: return "Sending timed out"
+      case .sendingFailed: return "Failed"
+      case .sent: return "Sent"
+      case .receiving: return "Receiving"
+      case .receivingFailed: return "Receiving failed"
+      case .received: return "Received"
+      }
+    }
   }
 }
 
@@ -128,13 +140,15 @@ public struct ChatView_Previews: PreviewProvider {
               id: 1,
               date: Date(),
               senderId: "contact-id".data(using: .utf8)!,
-              text: "Hello!"
+              text: "Hello!",
+              status: .received
             ),
             .init(
               id: 2,
               date: Date(),
               senderId: "my-contact-id".data(using: .utf8)!,
-              text: "Hi!"
+              text: "Hi!",
+              status: .sent
             ),
           ]
         ),
diff --git a/Examples/xx-messenger/Tests/ChatFeatureTests/ChatFeatureTests.swift b/Examples/xx-messenger/Tests/ChatFeatureTests/ChatFeatureTests.swift
index 89f0658d..f0bde787 100644
--- a/Examples/xx-messenger/Tests/ChatFeatureTests/ChatFeatureTests.swift
+++ b/Examples/xx-messenger/Tests/ChatFeatureTests/ChatFeatureTests.swift
@@ -87,13 +87,15 @@ final class ChatFeatureTests: XCTestCase {
         id: 1,
         date: Date(timeIntervalSince1970: 1),
         senderId: contactId,
-        text: "Message 1"
+        text: "Message 1",
+        status: .received
       ),
       .init(
         id: 2,
         date: Date(timeIntervalSince1970: 2),
         senderId: myContactId,
-        text: "Message 2"
+        text: "Message 2",
+        status: .sent
       ),
     ])
 
-- 
GitLab