@@ -200,7 +200,9 @@ struct ChatView: View {
200200 guard let newMLMessage = MLXMPPManager . sharedInstance ( ) . sendMessageAndAddToHistory ( message: draft. text, havingType: kMessageTypeText, toContact: self . contact. obj, isEncrypted: self . contact. isEncrypted, uploadInfo: nil ) else {
201201 return
202202 }
203- messages. append ( ChatViewMessage ( newMLMessage) )
203+ messages. append ( ChatViewMessage ( ObservableKVOWrapper ( newMLMessage) ) )
204+ } messageBuilder: { message, viewModel, positionInUserGroup, positionInMessagesSection, positionInCommentsGroup, showContextMenuClosure, messageActionClosure, showAttachmentClosure in
205+ MessageView ( message: ( message as! ChatViewMessage ) . message, viewModel: viewModel, positionInUserGroup: positionInUserGroup, positionInMessagesSection: positionInMessagesSection)
204206 }
205207 . showNetworkConnectionProblem ( false )
206208// .enableLoadMore(pageSize: 3) { message in
@@ -350,7 +352,7 @@ struct ChatView: View {
350352 if messages. isEmpty {
351353 let dbMessages = DataLayer . sharedInstance ( ) . messages ( forContact: contact. contactJid, forAccount: contact. accountID) as! [ MLMessage ]
352354 for msg in dbMessages {
353- messages. append ( ChatViewMessage ( msg) )
355+ messages. append ( ChatViewMessage ( ObservableKVOWrapper ( msg) ) )
354356 }
355357 }
356358 ChatViewHelpers . refreshCounter ( for: self . contact. obj)
@@ -408,7 +410,7 @@ struct ChatView: View {
408410 if message. isEqual ( to: self . contact. obj) {
409411 // Do not insert based on delay timestamp because that
410412 // would make it possible to fake history entries.
411- messages. append ( ChatViewMessage ( message) )
413+ messages. append ( ChatViewMessage ( ObservableKVOWrapper ( message) ) )
412414 }
413415 ChatViewHelpers . refreshCounter ( for: self . contact. obj)
414416 }
@@ -419,9 +421,9 @@ struct ChatView: View {
419421}
420422
421423class ChatViewMessage : ExyteChat . Message {
422- @ Published public var message : MLMessage
423-
424- init ( _ message: MLMessage ) {
424+ let message : ObservableKVOWrapper < MLMessage >
425+
426+ init ( _ message: ObservableKVOWrapper < MLMessage > ) {
425427 self . message = message
426428 let user = ExyteChat . User ( id: message. senderID, name: message. contactDisplayName, avatarURL: nil , isCurrentUser: !message. inbound)
427429 super. init ( id: message. id, user: user, createdAt: message. timestamp, text: message. messageText)
@@ -481,3 +483,32 @@ public extension ExyteChat.MessageView {
481483// }
482484 }
483485}*/
486+ struct MessageView : View {
487+ @StateObject var message : ObservableKVOWrapper < MLMessage >
488+ @ObservedObject var viewModel : ExyteChat . ChatViewModel
489+ let positionInUserGroup : PositionInUserGroup
490+ let positionInMessagesSection : PositionInMessagesSection
491+ init ( message: ObservableKVOWrapper < MLMessage > , viewModel: ChatViewModel , positionInUserGroup: PositionInUserGroup , positionInMessagesSection: PositionInMessagesSection ) {
492+ _message = StateObject ( wrappedValue: message)
493+ self . viewModel = viewModel
494+ self . positionInUserGroup = positionInUserGroup
495+ self . positionInMessagesSection = positionInMessagesSection
496+ }
497+ var body : some View {
498+ ExyteChat . MessageView (
499+ viewModel: viewModel,
500+ message: ChatViewMessage ( message) ,
501+ positionInUserGroup: positionInUserGroup,
502+ positionInMessagesSection: positionInMessagesSection,
503+ chatType: . conversation,
504+ avatarSize: 32 ,
505+ tapAvatarClosure: nil ,
506+ messageStyler: AttributedString . init,
507+ shouldShowLinkPreview: { _ in true } ,
508+ isDisplayingMessageMenu: false ,
509+ showMessageTimeView: true ,
510+ messageLinkPreviewLimit: 8 ,
511+ font: UIFontMetrics . default. scaledFont ( for: UIFont . systemFont ( ofSize: 15 ) )
512+ )
513+ }
514+ }
0 commit comments