conversations-classic-ios/ConversationsClassic/View/Screens/Conversation/ConversationTextInput.swift

104 lines
4.1 KiB
Swift
Raw Normal View History

2024-06-27 11:39:41 +00:00
import SwiftUI
import UIKit
struct ConversationTextInput: View {
@EnvironmentObject var store: AppStore
@State private var messageStr = ""
@FocusState private var isFocused: Bool
var body: some View {
VStack(spacing: 0) {
Rectangle()
.foregroundColor(.Main.separator)
.frame(height: 0.5)
.padding(.bottom, 8)
if !replyText.isEmpty {
VStack(spacing: 0) {
HStack(alignment: .top) {
Text(replyText)
.font(.body3)
.foregroundColor(Color.Main.black)
.multilineTextAlignment(/*@START_MENU_TOKEN@*/ .leading/*@END_MENU_TOKEN@*/)
.lineLimit(3)
.padding(8)
Spacer()
Image(systemName: "xmark")
.font(.title2)
.foregroundColor(.Tango.blueLight)
.padding(.leading, 8)
.tappablePadding(.symmetric(8)) {
store.dispatch(.conversationAction(.setReplyText("")))
}
.padding(8)
}
.frame(maxWidth: .infinity)
.background(RoundedRectangle(cornerRadius: 4)
.foregroundColor(.Main.backgroundLight)
.shadow(radius: 0.5)
)
.padding(.bottom, 8)
.padding(.horizontal, 8)
}
.padding(.horizontal, 8)
}
HStack {
Image(systemName: "paperclip")
.font(.title2)
.foregroundColor(.Tango.blueLight)
.padding(.leading, 8)
.tappablePadding(.symmetric(8)) {
print("Attach file")
}
TextField(L10n.Chat.textfieldPrompt, text: $messageStr)
.font(.body1)
.focused($isFocused)
.padding(.horizontal, 8)
.padding(.vertical, 4)
.background(Color.Main.white)
.clipShape(RoundedRectangle(cornerRadius: 8))
.padding(.vertical, 4)
let img = messageStr.isEmpty ? "paperplane" : "paperplane.fill"
Image(systemName: img)
.font(.title2)
.foregroundColor(messageStr.isEmpty ? .Main.separator : .Tango.blueLight)
.padding(.trailing, 8)
.tappablePadding(.symmetric(8)) {
if !messageStr.isEmpty {
guard let acc = store.state.conversationsState.currentChat?.account else { return }
guard let contact = store.state.conversationsState.currentChat?.participant else { return }
store.dispatch(.conversationAction(.sendMessage(
from: acc,
to: contact,
body: composedMessage
)))
messageStr = ""
2024-07-01 10:05:39 +00:00
// UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
2024-06-27 11:39:41 +00:00
store.dispatch(.conversationAction(.setReplyText("")))
}
}
}
}
.padding(.bottom, 8)
.background(Color.Main.backgroundDark)
.onChange(of: store.state.conversationsState.replyText) { new in
if !new.isEmpty {
isFocused = true
}
}
}
private var replyText: String {
store.state.conversationsState.replyText
}
private var composedMessage: String {
var result = ""
if !replyText.isEmpty {
2024-07-01 11:54:43 +00:00
result += replyText + "\n\n"
2024-06-27 11:39:41 +00:00
}
result += messageStr
return result
}
}