From df266b9356f9020b18e16735ee11a3baa0c60327 Mon Sep 17 00:00:00 2001
From: Joel Oksanen <joel.oksanen17@imperial.ac.uk>
Date: Tue, 25 Feb 2020 14:31:28 +0000
Subject: [PATCH] Finished messaging MVP on client

---
 ADAbot/ADAbot.xcodeproj/project.pbxproj       |  10 ++-
 .../UserInterfaceState.xcuserstate            | Bin 47753 -> 48454 bytes
 .../xcdebugger/Breakpoints_v2.xcbkptlist      |  18 ----
 ADAbot/ADAbot/Chat/ADAMessage.swift           |   6 +-
 ADAbot/ADAbot/Chat/Argument.swift             |   9 +-
 ADAbot/ADAbot/Chat/ArgumentQuery.swift        |   6 ++
 ADAbot/ADAbot/Chat/ChatManager.swift          |  39 ++++++++
 ADAbot/ADAbot/Chat/ChatView.swift             |  13 +--
 ADAbot/ADAbot/Chat/FeatureView.swift          |  84 ++++++++++++------
 ADAbot/ADAbot/Chat/MessageView.swift          |  63 ++++++++++---
 ADAbot/ADAbot/Chat/QueryOptionView.swift      |  23 +++++
 ADAbot/ADAbot/Chat/UserMessage.swift          |  17 +++-
 ADAbot/ADAbot/ConnectionManager.swift         |   5 +-
 ADAbot/ADAbot/ContentView.swift               |   6 +-
 ADAbot/ADAbot/Product/ProductView.swift       |   2 +-
 15 files changed, 228 insertions(+), 73 deletions(-)
 create mode 100644 ADAbot/ADAbot/Chat/ChatManager.swift
 create mode 100644 ADAbot/ADAbot/Chat/QueryOptionView.swift

diff --git a/ADAbot/ADAbot.xcodeproj/project.pbxproj b/ADAbot/ADAbot.xcodeproj/project.pbxproj
index f82e371..595bcb4 100644
--- a/ADAbot/ADAbot.xcodeproj/project.pbxproj
+++ b/ADAbot/ADAbot.xcodeproj/project.pbxproj
@@ -27,6 +27,8 @@
 		9449FE4924042D6500025F70 /* FeatureView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9449FE4824042D6500025F70 /* FeatureView.swift */; };
 		9449FE4B24042E8800025F70 /* Argument.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9449FE4A24042E8800025F70 /* Argument.swift */; };
 		9449FE4D2404561400025F70 /* ArgumentQuery.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9449FE4C2404561400025F70 /* ArgumentQuery.swift */; };
+		9449FE4F240533FD00025F70 /* QueryOptionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9449FE4E240533FD00025F70 /* QueryOptionView.swift */; };
+		9449FE5124053DA500025F70 /* ChatManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9449FE5024053DA500025F70 /* ChatManager.swift */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXFileReference section */
@@ -52,6 +54,8 @@
 		9449FE4824042D6500025F70 /* FeatureView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeatureView.swift; sourceTree = "<group>"; };
 		9449FE4A24042E8800025F70 /* Argument.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Argument.swift; sourceTree = "<group>"; };
 		9449FE4C2404561400025F70 /* ArgumentQuery.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArgumentQuery.swift; sourceTree = "<group>"; };
+		9449FE4E240533FD00025F70 /* QueryOptionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QueryOptionView.swift; sourceTree = "<group>"; };
+		9449FE5024053DA500025F70 /* ChatManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatManager.swift; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -109,16 +113,18 @@
 		9449FE3E2403EDB400025F70 /* Chat */ = {
 			isa = PBXGroup;
 			children = (
+				9449FE5024053DA500025F70 /* ChatManager.swift */,
 				9449FE442403F0A600025F70 /* Sender.swift */,
 				9449FE382403E9A400025F70 /* Message.swift */,
 				9449FE3A2403EC3800025F70 /* ADAMessage.swift */,
 				9449FE4A24042E8800025F70 /* Argument.swift */,
 				9449FE4C2404561400025F70 /* ArgumentQuery.swift */,
 				9449FE3C2403ED0200025F70 /* UserMessage.swift */,
+				9449FE422403F02500025F70 /* MessageBubble.swift */,
 				9449FE302402C90800025F70 /* ChatView.swift */,
 				9449FE402403EF5A00025F70 /* MessageView.swift */,
-				9449FE422403F02500025F70 /* MessageBubble.swift */,
 				9449FE4824042D6500025F70 /* FeatureView.swift */,
+				9449FE4E240533FD00025F70 /* QueryOptionView.swift */,
 			);
 			name = Chat;
 			path = ADAbot/Chat;
@@ -209,6 +215,7 @@
 				9449FE3B2403EC3800025F70 /* ADAMessage.swift in Sources */,
 				9449FE3D2403ED0200025F70 /* UserMessage.swift in Sources */,
 				9449FE2F2402C8C500025F70 /* ProductView.swift in Sources */,
+				9449FE4F240533FD00025F70 /* QueryOptionView.swift in Sources */,
 				9449FE4B24042E8800025F70 /* Argument.swift in Sources */,
 				9449FE372402D29E00025F70 /* Product.swift in Sources */,
 				9449FE432403F02500025F70 /* MessageBubble.swift in Sources */,
@@ -218,6 +225,7 @@
 				9449FE4D2404561400025F70 /* ArgumentQuery.swift in Sources */,
 				9449FE4924042D6500025F70 /* FeatureView.swift in Sources */,
 				9449FE312402C90800025F70 /* ChatView.swift in Sources */,
+				9449FE5124053DA500025F70 /* ChatManager.swift in Sources */,
 				9449FE352402CCDA00025F70 /* ConnectionManager.swift in Sources */,
 				9449FE1D2402C84F00025F70 /* SceneDelegate.swift in Sources */,
 				9449FE1F2402C84F00025F70 /* ContentView.swift in Sources */,
diff --git a/ADAbot/ADAbot.xcodeproj/project.xcworkspace/xcuserdata/joeloksanen.xcuserdatad/UserInterfaceState.xcuserstate b/ADAbot/ADAbot.xcodeproj/project.xcworkspace/xcuserdata/joeloksanen.xcuserdatad/UserInterfaceState.xcuserstate
index da7af78889fe5c2a08258edb7e01a0ab8616562c..340987542d5d28546f80ba13fdd7337f16270485 100644
GIT binary patch
delta 21429
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

delta 21293
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

diff --git a/ADAbot/ADAbot.xcodeproj/xcuserdata/joeloksanen.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/ADAbot/ADAbot.xcodeproj/xcuserdata/joeloksanen.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
index e00cd34..5e4eda7 100644
--- a/ADAbot/ADAbot.xcodeproj/xcuserdata/joeloksanen.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
+++ b/ADAbot/ADAbot.xcodeproj/xcuserdata/joeloksanen.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
@@ -3,22 +3,4 @@
    uuid = "91D35F8C-89D0-4137-A5A5-FAFC5B6FE3BA"
    type = "1"
    version = "2.0">
-   <Breakpoints>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "01922009-364B-4C8F-87E5-58886FB47FAA"
-            shouldBeEnabled = "No"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "ADAbot/Chat/MessageView.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "34"
-            endingLineNumber = "34"
-            landmarkName = "body"
-            landmarkType = "24">
-         </BreakpointContent>
-      </BreakpointProxy>
-   </Breakpoints>
 </Bucket>
diff --git a/ADAbot/ADAbot/Chat/ADAMessage.swift b/ADAbot/ADAbot/Chat/ADAMessage.swift
index 191bbea..5d899ce 100644
--- a/ADAbot/ADAbot/Chat/ADAMessage.swift
+++ b/ADAbot/ADAbot/Chat/ADAMessage.swift
@@ -8,11 +8,15 @@
 
 import UIKit
 
-struct ADAMessage: Message, Decodable {
+struct ADAMessage: Message, Decodable, Equatable {
   
   let id = UUID()
   let sender = Sender.ADA
   let text: String
   let arguments: [Argument]
   
+  static func == (lhs: ADAMessage, rhs: ADAMessage) -> Bool {
+    lhs.id == rhs.id
+  }
+  
 }
diff --git a/ADAbot/ADAbot/Chat/Argument.swift b/ADAbot/ADAbot/Chat/Argument.swift
index f9b6e45..1c857c6 100644
--- a/ADAbot/ADAbot/Chat/Argument.swift
+++ b/ADAbot/ADAbot/Chat/Argument.swift
@@ -8,10 +8,15 @@
 
 import UIKit
 
-struct Argument: Codable {
+struct Argument: Codable, Equatable {
   
   let id = UUID()
   let name: String
-  let queries = [ArgumentQuery]()
+  let queries = [ArgumentQuery(argumentID: 1, queryID: 1, text: "Why was the lens considered to be good?"),
+                 ArgumentQuery(argumentID: 1, queryID: 2, text: "What did users say about the lens being good?")]
+  
+  static func == (lhs: Argument, rhs: Argument) -> Bool {
+    lhs.id == rhs.id
+  }
   
 }
diff --git a/ADAbot/ADAbot/Chat/ArgumentQuery.swift b/ADAbot/ADAbot/Chat/ArgumentQuery.swift
index 3d34e74..e9b036a 100644
--- a/ADAbot/ADAbot/Chat/ArgumentQuery.swift
+++ b/ADAbot/ADAbot/Chat/ArgumentQuery.swift
@@ -10,8 +10,14 @@ import UIKit
 
 struct ArgumentQuery: Codable {
   
+  let id = UUID()
   let argumentID: Int
   let queryID: Int
   let text: String
+  var message: UserMessage {
+    get {
+      return UserMessage(query: self)
+    }
+  }
   
 }
diff --git a/ADAbot/ADAbot/Chat/ChatManager.swift b/ADAbot/ADAbot/Chat/ChatManager.swift
new file mode 100644
index 0000000..83cf0d7
--- /dev/null
+++ b/ADAbot/ADAbot/Chat/ChatManager.swift
@@ -0,0 +1,39 @@
+//
+//  ChatManager.swift
+//  ADAbot
+//
+//  Created by Joel Oksanen on 25.2.2020.
+//  Copyright © 2020 Joel Oksanen. All rights reserved.
+//
+
+import SwiftUI
+
+class ChatManager: ObservableObject {
+  @Published var sent = false
+  @Published var showingOptionsForMessage: ADAMessage?
+  
+  let connectionManager: ConnectionManager
+  
+  init(connectionManager: ConnectionManager) {
+    self.connectionManager = connectionManager
+  }
+  
+  func sendQuery(query: ArgumentQuery) {
+    sent = true
+    DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
+      self.sent = false
+      self.connectionManager.addMessage(message: query.message)
+      self.showingOptionsForMessage = nil
+    }
+  }
+  
+  func showOptionsFor(_ message: ADAMessage) {
+    showingOptionsForMessage = message
+  }
+  
+  func showingOptionsFor(_ message: Message) -> Bool {
+    return message is ADAMessage && (message as! ADAMessage) == showingOptionsForMessage
+  }
+  
+}
+
diff --git a/ADAbot/ADAbot/Chat/ChatView.swift b/ADAbot/ADAbot/Chat/ChatView.swift
index 85ca0df..a10b339 100644
--- a/ADAbot/ADAbot/Chat/ChatView.swift
+++ b/ADAbot/ADAbot/Chat/ChatView.swift
@@ -9,7 +9,13 @@
 import SwiftUI
 
 struct ChatView: View {
-  @ObservedObject var connectionManager = ConnectionManager()
+  @ObservedObject var connectionManager: ConnectionManager
+  @ObservedObject var chatManager: ChatManager
+  
+  init(connectionManager: ConnectionManager) {
+    self.connectionManager = connectionManager
+    self.chatManager = ChatManager(connectionManager: connectionManager)
+  }
   
   var body: some View {
     ZStack {
@@ -19,11 +25,8 @@ struct ChatView: View {
       ScrollView {
         VStack(spacing: 0) {
           ForEach(connectionManager.messages, id: \.id) { message in
-            MessageView(message: message)
-              .padding(EdgeInsets(top: 0, leading: 20, bottom: 15, trailing: 20))
+            MessageView(chatManager: self.chatManager, message: message)
           }
-          FeatureView(arguments: connectionManager.messages.last!.arguments)
-            .padding(EdgeInsets(top: 0, leading: 20, bottom: 0, trailing: 0))
         }
         .padding(EdgeInsets(top: 30, leading: 0, bottom: 30, trailing: 0))
       }
diff --git a/ADAbot/ADAbot/Chat/FeatureView.swift b/ADAbot/ADAbot/Chat/FeatureView.swift
index 4042e7c..6351f7c 100644
--- a/ADAbot/ADAbot/Chat/FeatureView.swift
+++ b/ADAbot/ADAbot/Chat/FeatureView.swift
@@ -9,44 +9,70 @@
 import SwiftUI
 
 struct FeatureView: View {
+  @ObservedObject var chatManager: ChatManager
 
+  static let bubbleColor = Color(red: 75/255, green: 90/255, blue: 116/255)
   let arguments: [Argument]
-  let bubbleColor = Color(red: 75/255, green: 90/255, blue: 116/255)
+  @State var showingQueryOptionsForArgument: Argument?
   
   var body: some View {
-    HStack(spacing: 0) {
-      Spacer()
-      
-      Text("ASK ABOUT")
-        .foregroundColor(self.bubbleColor)
-        .font(Font.custom("Gill Sans", size: 11))
-        .fixedSize(horizontal: true, vertical: false)
-        .padding(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 10))
-        
-      Capsule()
-        .foregroundColor(self.bubbleColor)
-        .frame(width: 1, height: 38)
-      
-      ScrollView(.horizontal, showsIndicators: false) {
+    VStack(spacing: 0) {
+      if (!chatManager.sent) {
         HStack(spacing: 0) {
           Spacer()
-            .frame(width: 10)
-          ForEach(self.arguments, id: \.id) { argument in
-            Text(argument.name)
-              .foregroundColor(Color.white)
-              .font(Font.custom("Helvetica Neue", size: 12))
-              .fixedSize(horizontal: true, vertical: true)
-              .padding(EdgeInsets(top: 10, leading: 20, bottom: 10, trailing: 20))
-              .background(Capsule().foregroundColor(self.bubbleColor))
-              .padding(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 10))
+          
+          Text("ASK ABOUT")
+            .foregroundColor(FeatureView.bubbleColor)
+            .font(Font.custom("Gill Sans", size: 11))
+            .fixedSize(horizontal: true, vertical: false)
+            .padding(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 10))
+            
+          Capsule()
+            .foregroundColor(FeatureView.bubbleColor)
+            .frame(width: 1, height: 38)
+          
+          ScrollView(.horizontal, showsIndicators: false) {
+            HStack(spacing: 0) {
+              Spacer()
+                .frame(width: 10)
+              ForEach(self.arguments, id: \.id) { argument in
+                FeatureBubble(argument: argument,
+                              showingQueryOptionsForArgument: self.$showingQueryOptionsForArgument)
+                  .onTapGesture { self.showingQueryOptionsForArgument = argument }
+              }
+              Spacer()
+                .frame(width: 10)
+            }
           }
-          Spacer()
-            .frame(width: 10)
+          .frame(maxWidth: 280)
+          .fixedSize(horizontal: true, vertical: false)
+          .zIndex(-1)
         }
+        .padding(EdgeInsets(top: 0, leading: 0, bottom: 15, trailing: 0))
+      }
+      
+      if showingQueryOptionsForArgument != nil {
+        QueryOptionView(chatManager: chatManager, queries: showingQueryOptionsForArgument!.queries)
       }
-      .frame(maxWidth: 280)
-      .fixedSize(horizontal: true, vertical: false)
-      .zIndex(-1)
     }
+    .frame(width: UIScreen.main.bounds.width)
+  }
+}
+
+struct FeatureBubble: View {
+  let argument: Argument
+  @Binding var showingQueryOptionsForArgument: Argument?
+  
+  var body: some View {
+    Text(argument.name)
+      .foregroundColor(self.showingQueryOptionsForArgument == argument ? Color.white : FeatureView.bubbleColor)
+      .font(Font.custom("Helvetica Neue", size: 12))
+      .fixedSize(horizontal: true, vertical: true)
+      .padding(EdgeInsets(top: 10, leading: 20, bottom: 10, trailing: 20))
+      .background(self.showingQueryOptionsForArgument == argument ?
+        AnyView(Capsule().foregroundColor(FeatureView.bubbleColor)) :
+        AnyView(Capsule().strokeBorder(FeatureView.bubbleColor))
+      )
+      .padding(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 10))
   }
 }
diff --git a/ADAbot/ADAbot/Chat/MessageView.swift b/ADAbot/ADAbot/Chat/MessageView.swift
index 2d08815..aec1e13 100644
--- a/ADAbot/ADAbot/Chat/MessageView.swift
+++ b/ADAbot/ADAbot/Chat/MessageView.swift
@@ -9,6 +9,8 @@
 import SwiftUI
 
 struct MessageView: View {
+  @ObservedObject var chatManager: ChatManager
+  
   let bubbleColors = [
     Sender.ADA: Color(red: 242/255, green: 159/255, blue: 31/255),
     Sender.USER: Color(red: 35/255, green: 45/255, blue: 62/255)
@@ -16,23 +18,60 @@ struct MessageView: View {
   let maxWidth: CGFloat = 300
   
   let message: Message
+  let query: ArgumentQuery?
+  @State var sent: Bool
+  
+  init(chatManager: ChatManager, message: Message) {
+    self.chatManager = chatManager
+    self.message = message
+    self.query = nil
+    _sent = State(initialValue: true)
+  }
+  
+  init(chatManager: ChatManager, query: ArgumentQuery) {
+    self.chatManager = chatManager
+    self.message = query.message
+    self.query = query
+    _sent = State(initialValue: false)
+  }
   
   var body: some View {
-    HStack(spacing: 0) {
-      if message.sender == .USER {
-        Spacer()
+    VStack(spacing: 0) {
+      if !chatManager.sent || self.sent {
+        HStack(spacing: 0) {
+          if message.sender == .USER {
+            Spacer()
+          }
+          
+          Text(message.text)
+            .foregroundColor(Color.white)
+            .font(Font.custom("Helvetica Neue", size: 14))
+            .fixedSize(horizontal: false, vertical: true)
+            .padding(EdgeInsets(top: 10, leading: 20, bottom: 10, trailing: 20))
+            .background(MessageBubble(sender: message.sender).foregroundColor(sent ? bubbleColors[message.sender] : FeatureView.bubbleColor))
+            .frame(minWidth: 0, maxWidth: maxWidth, alignment: message.sender == .ADA ? .leading : .trailing)
+            .onTapGesture {
+              if self.message.sender == .ADA {
+                self.chatManager.showOptionsFor(self.message as! ADAMessage)
+              } else if !self.sent {
+                withAnimation(Animation.easeInOut(duration: 0.3)) {
+                  self.chatManager.sendQuery(query: self.query!)
+                  self.sent = true
+                }
+              }
+            }
+          
+          if message.sender == .ADA {
+            Spacer()
+          }
+        }
+        .padding(EdgeInsets(top: 0, leading: 20, bottom: 15, trailing: 20))
       }
       
-      Text(message.text)
-        .foregroundColor(Color.white)
-        .font(Font.custom("Helvetica Neue", size: 14))
-        .padding(EdgeInsets(top: 10, leading: 20, bottom: 10, trailing: 20))
-        .background(MessageBubble(sender: message.sender).foregroundColor(bubbleColors[message.sender]))
-        .frame(minWidth: 0, maxWidth: maxWidth, alignment: message.sender == .ADA ? .leading : .trailing)
-      
-      if message.sender == .ADA {
-        Spacer()
+      if chatManager.showingOptionsFor(message) {
+        FeatureView(chatManager: chatManager, arguments: message.arguments)
       }
     }
+    .frame(width: UIScreen.main.bounds.width)
   }
 }
diff --git a/ADAbot/ADAbot/Chat/QueryOptionView.swift b/ADAbot/ADAbot/Chat/QueryOptionView.swift
new file mode 100644
index 0000000..d15f4c6
--- /dev/null
+++ b/ADAbot/ADAbot/Chat/QueryOptionView.swift
@@ -0,0 +1,23 @@
+//
+//  QueryOptionView.swift
+//  ADAbot
+//
+//  Created by Joel Oksanen on 25.2.2020.
+//  Copyright © 2020 Joel Oksanen. All rights reserved.
+//
+
+import SwiftUI
+
+struct QueryOptionView: View {
+  @ObservedObject var chatManager: ChatManager
+  let queries: [ArgumentQuery]
+  
+  var body: some View {
+    VStack(spacing: 0) {
+      ForEach(queries, id: \.id) { query in
+        MessageView(chatManager: self.chatManager, query: query)
+      }
+    }
+  }
+}
+
diff --git a/ADAbot/ADAbot/Chat/UserMessage.swift b/ADAbot/ADAbot/Chat/UserMessage.swift
index cccac3d..b9c7b01 100644
--- a/ADAbot/ADAbot/Chat/UserMessage.swift
+++ b/ADAbot/ADAbot/Chat/UserMessage.swift
@@ -8,11 +8,26 @@
 
 import UIKit
 
-struct UserMessage: Message {
+struct UserMessage: Message, Equatable {
   
   let id = UUID()
   let sender = Sender.USER
   let text: String
   let arguments = [Argument]()
+  let sent: Bool
+  
+  init(text: String) {
+    self.text = text
+    self.sent = true
+  }
+  
+  init(query: ArgumentQuery) {
+    self.text = query.text
+    self.sent = false
+  }
+  
+  static func == (lhs: UserMessage, rhs: UserMessage) -> Bool {
+    lhs.id == rhs.id
+  }
   
 }
diff --git a/ADAbot/ADAbot/ConnectionManager.swift b/ADAbot/ADAbot/ConnectionManager.swift
index 69d052a..7b60563 100644
--- a/ADAbot/ADAbot/ConnectionManager.swift
+++ b/ADAbot/ADAbot/ConnectionManager.swift
@@ -51,7 +51,10 @@ class ConnectionManager: ObservableObject {
       }
     }
     task.resume()
-    
+  }
+  
+  func addMessage(message: Message) {
+    messages.append(message)
   }
   
 }
diff --git a/ADAbot/ADAbot/ContentView.swift b/ADAbot/ADAbot/ContentView.swift
index 2ad81b5..0599447 100644
--- a/ADAbot/ADAbot/ContentView.swift
+++ b/ADAbot/ADAbot/ContentView.swift
@@ -9,11 +9,13 @@
 import SwiftUI
 
 struct ContentView: View {
+  @ObservedObject var connectionManager = ConnectionManager()
+  
   var body: some View {
     VStack(spacing: 0) {
-      ProductView()
+      ProductView(connectionManager: connectionManager)
         .zIndex(10)
-      ChatView()
+      ChatView(connectionManager: connectionManager)
         .zIndex(0)
     }
     .edgesIgnoringSafeArea(.all)
diff --git a/ADAbot/ADAbot/Product/ProductView.swift b/ADAbot/ADAbot/Product/ProductView.swift
index 4b0a0b5..09eff76 100644
--- a/ADAbot/ADAbot/Product/ProductView.swift
+++ b/ADAbot/ADAbot/Product/ProductView.swift
@@ -9,7 +9,7 @@
 import SwiftUI
 
 struct ProductView: View {
-  @ObservedObject var connectionManager = ConnectionManager()
+  @ObservedObject var connectionManager: ConnectionManager
   let height: CGFloat = 200
   
   var body: some View {
-- 
GitLab