kanno927's picture
feature(#134): finish UI Implementation for general chat, search images and contacts in Apple Watch
17afd55
import SwiftUI
public enum TypeChat: String {
case SEND = "SEND"
case RECEIVE = "RECEIVE"
case WIDGET = "WIDGET"
}
public enum TypeWidget: String {
case EMPTY = "EMPTY"
case CONTACT = "CONTACT"
case IMAGE = "IMAGE"
}
struct ChatMessage: Hashable {
let type: TypeChat
let message: String
let widgetType: TypeWidget
let widgetDesc: String
}
struct ChatBubble: Shape {
func path(in rect: CGRect) -> Path {
let path = UIBezierPath(roundedRect: rect,
byRoundingCorners: [.allCorners],
cornerRadii: CGSize(width: 9, height: 9))
return Path(path.cgPath)
}
}
struct ChatMessageRow: View {
let chatItem: ChatMessage
var body: some View {
HStack {
switch chatItem.type {
case TypeChat.SEND:
Spacer()
Text(chatItem.message)
.font(.system(size: 15))
.foregroundColor(.white)
.padding(5)
.background(Color.green)
.clipShape(ChatBubble())
case TypeChat.RECEIVE:
Text(chatItem.message)
.font(.system(size: 15))
.foregroundColor(.black)
.padding(5)
.background(Color.primary)
.clipShape(ChatBubble())
Spacer()
case TypeChat.WIDGET:
switch chatItem.widgetType {
case TypeWidget.CONTACT:
let contact = convertStringToContact(jsonData: chatItem.widgetDesc)
NavigationLink(destination: ContactView(contact: contact)){
ContactRow(contact: contact)
}
case TypeWidget.IMAGE:
ImageRow()
default:
EmptyView()
}
}
}.padding(5)
}
}
func convertStringToContact(jsonData: String) -> Contact {
do {
let jsonData = jsonData.data(using: .utf8)!
let contact = try JSONDecoder().decode(Contact.self, from: jsonData)
return contact
} catch {
print("Error converting JSON string to object: \(error)")
}
return Contact(contactId: "", displayName: "Empty", phoneNumbers: [])
}
struct ChatMessageRow_Previews: PreviewProvider {
static var previews: some View {
ChatMessageRow(chatItem:ChatMessage(
type: TypeChat.WIDGET,
message: "Hello!",
widgetType: TypeWidget.IMAGE,
widgetDesc: "Nothing"
)
)
}
}