Accept current autocorrection/suggestion before sending a message (#3219)

* Fixes #3216 - Accept current autocorrection/suggestion before sending a message.

* Switch from a temporary textField to `inputDelegate` selection changes
This commit is contained in:
Stefan Ceriu
2024-09-02 16:33:40 +03:00
committed by GitHub
parent 302df1879e
commit 062811cac4
4 changed files with 56 additions and 7 deletions
@@ -137,7 +137,7 @@ struct ComposerToolbar: View {
private var sendButton: some View {
Button {
context.send(viewAction: .sendMessage)
sendMessage()
} label: {
CompoundIcon(context.viewState.composerMode.isEdit ? \.check : \.sendSolid)
.scaledPadding(6, relativeTo: .title)
@@ -156,12 +156,13 @@ struct ComposerToolbar: View {
private var messageComposer: some View {
MessageComposer(plainComposerText: $context.plainComposerText,
presendCallback: $context.presendCallback,
composerView: composerView,
mode: context.viewState.composerMode,
composerFormattingEnabled: context.composerFormattingEnabled,
showResizeGrabber: context.composerFormattingEnabled,
isExpanded: $context.composerExpanded) {
context.send(viewAction: .sendMessage)
sendMessage()
} editAction: {
context.send(viewAction: .editLastMessage)
} pasteAction: { provider in
@@ -205,6 +206,17 @@ struct ComposerToolbar: View {
}
}
private func sendMessage() {
// Allow the inner TextField do apply any final processing before
// sending e.g. accepting current autocorrection.
// Fixes https://github.com/element-hq/element-x-ios/issues/3216
context.presendCallback?()
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
context.send(viewAction: .sendMessage)
}
}
private var placeholder: String {
switch context.viewState.composerMode {
case .reply(_, _, let isThread):