Open keyboard when replying to a message

This commit is contained in:
Benoit Martins 2025-07-28 23:55:45 +02:00
parent 1910536fd6
commit 5b4d1bee69
3 changed files with 22 additions and 9 deletions

View file

@ -444,8 +444,13 @@ struct ConversationFragment: View {
ZStack(alignment: .bottomTrailing) {
UIList(
geometryProxy: geometry,
sections: conversationViewModel.conversationMessagesSection
)
sections: conversationViewModel.conversationMessagesSection,
isMessageTextFocused: Binding(get: {
isMessageTextFocused
}, set: { newValue in
isMessageTextFocused = newValue
})
)
.environmentObject(conversationViewModel)
.environmentObject(conversationsListViewModel)
}
@ -1095,7 +1100,10 @@ struct ConversationFragment: View {
Button {
let indexMessage = conversationViewModel.conversationMessagesSection[0].rows.firstIndex(where: {$0.message.id == conversationViewModel.selectedMessage!.message.id})
conversationViewModel.selectedMessage = nil
conversationViewModel.replyToMessage(index: indexMessage ?? 0)
if !isMessageTextFocused {
isMessageTextFocused = true
}
conversationViewModel.replyToMessage(index: indexMessage ?? 0, isMessageTextFocused: isMessageTextFocused)
} label: {
HStack {
Text("menu_reply_to_chat_message")

View file

@ -108,6 +108,8 @@ struct UIList: UIViewRepresentable {
let geometryProxy: GeometryProxy
let sections: [MessagesSection]
@Binding var isMessageTextFocused: Bool
@State private var isScrolledToTop = false
@State private var isScrolledToBottom = true
@ -501,7 +503,10 @@ struct UIList: UIViewRepresentable {
func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let archiveAction = UIContextualAction(style: .normal, title: "") { _, _, completionHandler in
self.parent.conversationViewModel.replyToMessage(index: indexPath.row)
if !self.parent.isMessageTextFocused {
self.parent.isMessageTextFocused = true
}
self.parent.conversationViewModel.replyToMessage(index: indexPath.row, isMessageTextFocused: self.parent.isMessageTextFocused)
completionHandler(true)
}

View file

@ -1547,13 +1547,13 @@ class ConversationViewModel: ObservableObject {
conversationMessagesSection = []
}
func replyToMessage(index: Int) {
func replyToMessage(index: Int, isMessageTextFocused: Bool) {
coreContext.doOnCoreQueue { _ in
let messageToReplyTmp = self.conversationMessagesSection[0].rows[index]
DispatchQueue.main.async {
withAnimation(.linear(duration: 0.15)) {
self.messageToReply = messageToReplyTmp
}
DispatchQueue.main.asyncAfter(deadline: .now() + (isMessageTextFocused ? 0 : 0.22)){
withAnimation(.linear(duration: 0.15)) {
self.messageToReply = messageToReplyTmp
}
}
}
}