Fix messages list in iOS 15

This commit is contained in:
Benoit Martins 2024-03-14 15:09:10 +01:00
parent 75ae95007b
commit f3d2f1cf6a
3 changed files with 47 additions and 39 deletions

View file

@ -35,11 +35,11 @@ struct ChatBubbleView: View {
Spacer() Spacer()
} }
VStack { VStack(alignment: message.isOutgoing ? .trailing : .leading) {
if !message.attachments.isEmpty { if !message.attachments.isEmpty {
if message.attachments.count == 1 { if message.attachments.count == 1 {
let result = imageDimensions(url: message.attachments.first!.full.absoluteString)
if message.attachments.first!.type == .image || message.attachments.first!.type == .gif { if message.attachments.first!.type == .image || message.attachments.first!.type == .gif {
let result = imageDimensions(url: message.attachments.first!.full.absoluteString)
if message.attachments.first!.type != .gif { if message.attachments.first!.type != .gif {
AsyncImage(url: message.attachments.first!.full) { image in AsyncImage(url: message.attachments.first!.full) { image in
image.resizable() image.resizable()
@ -96,8 +96,8 @@ struct ChatBubbleView: View {
if !message.text.isEmpty { if !message.text.isEmpty {
Text(message.text) Text(message.text)
.foregroundStyle(Color.grayMain2c700) .foregroundStyle(Color.grayMain2c700)
.default_text_style(styleSize: 16) .default_text_style(styleSize: 16)
} }
} }
.padding(.all, 15) .padding(.all, 15)
@ -126,17 +126,17 @@ struct ChatBubbleView: View {
} }
enum URLType { enum URLType {
case name(String) // local file name of gif case name(String) // local file name of gif
case url(URL) // remote url case url(URL) // remote url
var url: URL? { var url: URL? {
switch self { switch self {
case .name(let name): case .name(let name):
return Bundle.main.url(forResource: name, withExtension: "gif") return Bundle.main.url(forResource: name, withExtension: "gif")
case .url(let remoteURL): case .url(let remoteURL):
return remoteURL return remoteURL
}
} }
}
} }
struct GifImageView: UIViewRepresentable { struct GifImageView: UIViewRepresentable {

View file

@ -217,23 +217,26 @@ struct ConversationFragment: View {
conversationViewModel.resetMessage() conversationViewModel.resetMessage()
} }
} else { } else {
/*
ScrollViewReader { proxy in ScrollViewReader { proxy in
List { List {
ForEach(0..<conversationViewModel.conversationMessagesList.count, id: \.self) { index in ForEach(0..<conversationViewModel.conversationMessagesList.count, id: \.self) { index in
ChatBubbleView(conversationViewModel: conversationViewModel, message: conversationViewModel.conversationMessagesSection.first!.rows[index]) if index < conversationViewModel.conversationMessagesSection.first!.rows.count {
.id(conversationViewModel.conversationMessagesList[index]) ChatBubbleView(conversationViewModel: conversationViewModel, message: conversationViewModel.conversationMessagesSection.first!.rows[index], geometryProxy: geometry)
.listRowInsets(EdgeInsets(top: 2, leading: 10, bottom: 2, trailing: 10)) .id(conversationViewModel.conversationMessagesList[index])
.listRowSeparator(.hidden) .listRowInsets(EdgeInsets(top: 2, leading: 10, bottom: 2, trailing: 10))
.onAppear { .listRowSeparator(.hidden)
if index == 0 && conversationViewModel.displayedConversationHistorySize > conversationViewModel.conversationMessagesList.count { .scaleEffect(x: 1, y: -1, anchor: .center)
//DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) { .onAppear {
conversationViewModel.getOldMessages() if index == conversationViewModel.conversationMessagesList.count - 1 && conversationViewModel.displayedConversationHistorySize > conversationViewModel.conversationMessagesList.count {
//} DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
} conversationViewModel.getOldMessages()
} }
}
}
}
} }
} }
.scaleEffect(x: 1, y: -1, anchor: .center)
.listStyle(.plain) .listStyle(.plain)
.onTapGesture { .onTapGesture {
UIApplication.shared.endEditing() UIApplication.shared.endEditing()
@ -242,23 +245,26 @@ struct ConversationFragment: View {
conversationViewModel.getMessages() conversationViewModel.getMessages()
} }
.onChange(of: conversationViewModel.conversationMessagesList) { _ in .onChange(of: conversationViewModel.conversationMessagesList) { _ in
if conversationViewModel.conversationMessagesList.count <= 30 { /*
proxy.scrollTo( DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
conversationViewModel.conversationMessagesList.last, anchor: .top if conversationViewModel.conversationMessagesList.count <= 30 {
) proxy.scrollTo(
} else if conversationViewModel.conversationMessagesList.count >= conversationViewModel.displayedConversationHistorySize { conversationViewModel.conversationMessagesList.first, anchor: .top
proxy.scrollTo( )
conversationViewModel.conversationMessagesList[conversationViewModel.displayedConversationHistorySize%30], anchor: .top } else if conversationViewModel.conversationMessagesList.count >= conversationViewModel.displayedConversationHistorySize {
) proxy.scrollTo(
} else { conversationViewModel.conversationMessagesList[conversationViewModel.displayedConversationHistorySize%30], anchor: .top
proxy.scrollTo(30, anchor: .top) )
} else {
proxy.scrollTo(30, anchor: .top)
}
} }
*/
} }
.onDisappear { .onDisappear {
conversationViewModel.resetMessage() conversationViewModel.resetMessage()
} }
} }
*/
} }
HStack(spacing: 0) { HStack(spacing: 0) {

View file

@ -116,8 +116,10 @@ class ConversationViewModel: ObservableObject {
if content.filePath == nil || content.filePath!.isEmpty { if content.filePath == nil || content.filePath!.isEmpty {
self.downloadContent(chatMessage: eventLog.chatMessage!, content: content) self.downloadContent(chatMessage: eventLog.chatMessage!, content: content)
} else { } else {
let attachment = Attachment(id: UUID().uuidString, url: URL(string: self.getNewFilePath(name: content.name ?? ""))!, type: (content.name?.lowercased().hasSuffix("gif"))! ? .gif : .image) if URL(string: self.getNewFilePath(name: content.name ?? "")) != nil {
attachmentList.append(attachment) let attachment = Attachment(id: UUID().uuidString, url: URL(string: self.getNewFilePath(name: content.name ?? ""))!, type: (content.name?.lowercased().hasSuffix("gif"))! ? .gif : .image)
attachmentList.append(attachment)
}
} }
} }
} }