fix(Chat): ensure cursor is set correctly in when selecting suggestion
This commit fixes a regression that was introduced in: https://github.com/status-im/nim-status-client/commit/459de8cd1 where the cursor position in the chat input was calculated incorrectly. It also introduced a bug in the text processing which is described in #769 Partly fixes #769
This commit is contained in:
parent
858a5b467d
commit
de5b62030b
|
@ -207,8 +207,11 @@ StackLayout {
|
||||||
cursorPosition: chatInput.textInput.cursorPosition
|
cursorPosition: chatInput.textInput.cursorPosition
|
||||||
property: "ensName, alias"
|
property: "ensName, alias"
|
||||||
onItemSelected: function (item, lastAtPosition, lastCursorPosition) {
|
onItemSelected: function (item, lastAtPosition, lastCursorPosition) {
|
||||||
let currentText = chatsModel.plainText(Emoji.deparse(chatInput.textInput.text))
|
let hasEmoji = Emoji.hasEmoji(chatInput.textInput.text)
|
||||||
let lastAt = currentText.lastIndexOf("@")
|
let currentText = hasEmoji ?
|
||||||
|
chatsModel.plainText(Emoji.deparse(chatInput.textInput.text)) :
|
||||||
|
chatsModel.plainText(chatInput.textInput.text);
|
||||||
|
|
||||||
let aliasName = item[suggestionsBox.property.split(",").map(p => p.trim()).find(p => !!item[p])]
|
let aliasName = item[suggestionsBox.property.split(",").map(p => p.trim()).find(p => !!item[p])]
|
||||||
let nameLen = aliasName.length + 2 // We're doing a +2 here because of the `@` and the trailing whitespace
|
let nameLen = aliasName.length + 2 // We're doing a +2 here because of the `@` and the trailing whitespace
|
||||||
let position = 0;
|
let position = 0;
|
||||||
|
@ -218,13 +221,13 @@ StackLayout {
|
||||||
position = nameLen
|
position = nameLen
|
||||||
text = "@" + aliasName + " "
|
text = "@" + aliasName + " "
|
||||||
} else {
|
} else {
|
||||||
let left = currentText.substring(0, lastAt)
|
let left = currentText.substring(0, lastAtPosition)
|
||||||
let right = currentText.substring(lastAt + 1)
|
let right = currentText.substring(hasEmoji ? lastCursorPosition + 2 : lastCursorPosition)
|
||||||
text = `${left} @${aliasName} ${right}`
|
text = `${left} @${aliasName} ${right}`
|
||||||
}
|
}
|
||||||
|
|
||||||
chatInput.textInput.text = Emoji.parse(text, "26x26")
|
chatInput.textInput.text = hasEmoji ? Emoji.parse(text, "26x26") : text
|
||||||
chatInput.textInput.cursorPosition = lastCursorPosition + aliasName.length
|
chatInput.textInput.cursorPosition = lastAtPosition + aliasName.length + 2
|
||||||
suggestionsBox.suggestionsModel.clear()
|
suggestionsBox.suggestionsModel.clear()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,4 +17,8 @@ QtObject {
|
||||||
function deparse(value){
|
function deparse(value){
|
||||||
return value.replace(/<img src=\"qrc:\/imports\/twemoji\/.+?" alt=\"(.+?)\" \/>/g, "$1");
|
return value.replace(/<img src=\"qrc:\/imports\/twemoji\/.+?" alt=\"(.+?)\" \/>/g, "$1");
|
||||||
}
|
}
|
||||||
|
function hasEmoji(value) {
|
||||||
|
let match = value.match(/<img src=\"qrc:\/imports\/twemoji\/.+?" alt=\"(.+?)\" \/>/g)
|
||||||
|
return match && match.length > 0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue