|
@@ -15,7 +15,7 @@ extension CGFloat {
|
|
|
|
|
|
struct ChatView: View, KeyboardReadable {
|
|
|
|
|
|
- @ObservedObject var viewModel: ChatViewModel
|
|
|
+ @StateObject var viewModel: ChatViewModel
|
|
|
|
|
|
@State private var isKeyboardVisible = false
|
|
|
|
|
@@ -29,17 +29,19 @@ struct ChatView: View, KeyboardReadable {
|
|
|
HStack {
|
|
|
if message.fromID == XMPPController.shared.xmppStream.myJID?.bare {
|
|
|
Spacer(minLength: 40)
|
|
|
- MessageView(text: message.body ?? "-", time: "", isSelf: true)
|
|
|
+ MessageView(text: message.body, time: "", isSelf: true)
|
|
|
} else {
|
|
|
- MessageView(text: message.body ?? "-", time: "", isSelf: false)
|
|
|
+ MessageView(text: message.body, time: "", isSelf: false)
|
|
|
Spacer(minLength: 40)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
.onChange(of: viewModel.messages) { _ in
|
|
|
- withAnimation {
|
|
|
- value.scrollTo(viewModel.messages.count - 1, anchor: .bottomTrailing)
|
|
|
- }
|
|
|
+ DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
|
|
|
+ withAnimation {
|
|
|
+ value.scrollTo(viewModel.messages.count - 1, anchor: .bottomTrailing)
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
.onReceive(keyboardPublisher) { newIsKeyboardVisible in
|
|
|
isKeyboardVisible = newIsKeyboardVisible
|