refactor(Chat): move send message logic out of status chat input
`StatusChatInput` ideally shouldn't rely on chatsModel and other global objects at all. Also, when using the component in different places, it can cause accidental sending of message when testing the component (because all the logic is already wired up)
This commit is contained in:
parent
0293f3eac1
commit
9745205302
|
@ -268,6 +268,21 @@ StackLayout {
|
|||
onStickerSelected: {
|
||||
chatsModel.stickers.send(hashId, packId)
|
||||
}
|
||||
onSendMessage: {
|
||||
if (chatInput.fileUrls.length > 0){
|
||||
chatsModel.sendImage(chatInput.fileUrls[0]);
|
||||
}
|
||||
var msg = chatsModel.plainText(Emoji.deparse(chatInput.textInput.text))
|
||||
if (msg.length > 0){
|
||||
msg = chatInput.interpretMessage(msg)
|
||||
chatsModel.sendMessage(msg, chatInput.isReply ? SelectedMessage.messageId : "", Utils.isOnlyEmoji(msg) ? Constants.emojiType : Constants.messageType);
|
||||
chatInput.textInput.text = "";
|
||||
if(event) event.accepted = true
|
||||
chatInput.messageSound.stop()
|
||||
Qt.callLater(chatInput.messageSound.play);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ Rectangle {
|
|||
signal sendTransactionCommandButtonClicked()
|
||||
signal receiveTransactionCommandButtonClicked()
|
||||
signal stickerSelected(string hashId, string packId)
|
||||
signal sendMessage(var event)
|
||||
|
||||
property bool emojiEvent: false;
|
||||
property bool paste: false;
|
||||
|
@ -37,6 +38,9 @@ Rectangle {
|
|||
property alias textInput: messageInputField
|
||||
property bool isStatusUpdateInput: chatType === Constants.chatTypeStatusUpdate
|
||||
|
||||
property var fileUrls: []
|
||||
property alias messageSound: sendMessageSound
|
||||
|
||||
height: {
|
||||
if (extendedArea.visible) {
|
||||
return messageInput.height + extendedArea.height + Style.current.bigPadding
|
||||
|
@ -71,7 +75,7 @@ Rectangle {
|
|||
messageInputField.insert(start, text.replace(/\n/g, "<br/>"));
|
||||
}
|
||||
|
||||
function interpretMessage(msg) {
|
||||
property var interpretMessage: function (msg) {
|
||||
if (msg.startsWith("/shrug")) {
|
||||
return msg.replace("/shrug", "") + " ¯\\\\\\_(ツ)\\_/¯"
|
||||
}
|
||||
|
@ -98,8 +102,12 @@ Rectangle {
|
|||
event.accepted = true;
|
||||
return
|
||||
}
|
||||
if (control.isStatusUpdateInput) {
|
||||
return // Status update require the send button to be clicked
|
||||
}
|
||||
if (messageInputField.length < messageLimit) {
|
||||
sendMsg(event);
|
||||
control.sendMessage(event)
|
||||
control.hideExtendedArea();
|
||||
return;
|
||||
}
|
||||
if(event) event.accepted = true
|
||||
|
@ -334,25 +342,10 @@ Rectangle {
|
|||
return true;
|
||||
}
|
||||
|
||||
function sendMsg(event){
|
||||
if(control.isImage){
|
||||
chatsModel.sendImage(imageArea.imageSource);
|
||||
}
|
||||
var msg = chatsModel.plainText(Emoji.deparse(messageInputField.text))
|
||||
if(msg.length > 0){
|
||||
msg = interpretMessage(msg)
|
||||
chatsModel.sendMessage(msg, control.isReply ? SelectedMessage.messageId : "", Utils.isOnlyEmoji(msg) ? Constants.emojiType : Constants.messageType);
|
||||
messageInputField.text = "";
|
||||
if(event) event.accepted = true
|
||||
sendMessageSound.stop()
|
||||
Qt.callLater(sendMessageSound.play);
|
||||
}
|
||||
control.hideExtendedArea();
|
||||
}
|
||||
|
||||
function hideExtendedArea() {
|
||||
isImage = false;
|
||||
isReply = false;
|
||||
control.fileUrls = []
|
||||
imageArea.imageSource = "";
|
||||
replyArea.userName = ""
|
||||
replyArea.identicon = ""
|
||||
|
@ -362,7 +355,8 @@ Rectangle {
|
|||
function showImageArea(imagePath) {
|
||||
isImage = true;
|
||||
isReply = false;
|
||||
imageArea.imageSource = imageDialog.fileUrls[0]
|
||||
control.fileUrls = imageDialog.fileUrls
|
||||
imageArea.imageSource = control.fileUrls[0]
|
||||
}
|
||||
|
||||
function showReplyArea(userName, message, identicon) {
|
||||
|
@ -582,6 +576,7 @@ Rectangle {
|
|||
anchors.topMargin: control.isStatusUpdateInput ? 0 : Style.current.halfPadding
|
||||
visible: isImage
|
||||
onImageRemoved: {
|
||||
control.fileUrls = []
|
||||
isImage = false
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue