Spaces:
Runtime error
Runtime error
| 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" | |
| ) | |
| ) | |
| } | |
| } | |