mirror of
https://github.com/status-im/status-desktop.git
synced 2025-01-09 05:52:41 +00:00
6cba8810e0
1. Don't allow mention invalidation by altering mention with mouse or keyboard 2. Don't allow mention duplication on the same position 3. Clean mentions after text with mentions changes 4. Fix mention selection 5. Make sure mention is separated by text with valid separators (we're using only space) 6. Cursor will consider the mention as an object and will jump over it as it would be a single character (placing cursor inside leaves room for mention invalidation)
128 lines
3.8 KiB
QML
128 lines
3.8 KiB
QML
import QtQuick 2.14
|
|
import QtQuick.Controls 2.14
|
|
import QtQuick.Layouts 1.14
|
|
|
|
import Storybook 1.0
|
|
import Models 1.0
|
|
|
|
import utils 1.0
|
|
import shared.status 1.0
|
|
import shared.stores 1.0
|
|
|
|
SplitView {
|
|
id: root
|
|
|
|
Logs { id: logs }
|
|
|
|
QtObject {
|
|
id: globalUtilsMock
|
|
|
|
property bool ready: false
|
|
property var globalUtils: QtObject {
|
|
function plainText(htmlText) {
|
|
return htmlText.replace(/(?:<style[^]+?>[^]+?<\/style>|[\n]|<script[^]+?>[^]+?<\/script>|<(?:!|\/?[a-zA-Z]+).*?\/?>)/g,'')
|
|
}
|
|
function isCompressedPubKey(publicKey) {
|
|
return false
|
|
}
|
|
}
|
|
Component.onCompleted: {
|
|
Utils.globalUtilsInst = globalUtilsMock.globalUtils
|
|
Global.dragArea = null
|
|
globalUtilsMock.ready = true
|
|
}
|
|
}
|
|
|
|
QtObject {
|
|
id: rootStoreMock
|
|
|
|
property bool ready: false
|
|
|
|
readonly property ListModel gifColumnA: ListModel {}
|
|
|
|
readonly property var formationChars: (["*", "`", "~"])
|
|
|
|
function getSelectedTextWithFormationChars(messageInputField) {
|
|
let i = 1
|
|
let text = ""
|
|
while (true) {
|
|
if (messageInputField.selectionStart - i < 0 && messageInputField.selectionEnd + i > messageInputField.length) {
|
|
break
|
|
}
|
|
|
|
text = messageInputField.getText(messageInputField.selectionStart - i, messageInputField.selectionEnd + i)
|
|
|
|
if (!formationChars.includes(text.charAt(0)) ||
|
|
!formationChars.includes(text.charAt(text.length - 1))) {
|
|
break
|
|
}
|
|
i++
|
|
}
|
|
return text
|
|
}
|
|
|
|
Component.onCompleted: {
|
|
RootStore.isGifWidgetEnabled = true
|
|
RootStore.isWalletEnabled = true
|
|
RootStore.isTenorWarningAccepted = true
|
|
RootStore.getSelectedTextWithFormationChars = rootStoreMock.getSelectedTextWithFormationChars
|
|
RootStore.gifColumnA = rootStoreMock.gifColumnA
|
|
rootStoreMock.ready = true
|
|
}
|
|
}
|
|
|
|
UsersModel {
|
|
id: fakeUsersModel
|
|
}
|
|
|
|
SplitView {
|
|
orientation: Qt.Vertical
|
|
SplitView.fillWidth: true
|
|
//dummy item to position chatInput at the bottom
|
|
Item {
|
|
SplitView.fillHeight: true
|
|
SplitView.fillWidth: true
|
|
}
|
|
|
|
Loader {
|
|
active: rootStoreMock.ready && globalUtilsMock.ready
|
|
sourceComponent: StatusChatInput {
|
|
id: chatInput
|
|
property var globalUtils: globalUtilsMock.globalUtils
|
|
usersStore: QtObject {
|
|
readonly property var usersModel: fakeUsersModel
|
|
}
|
|
onSendMessage: {
|
|
logs.logEvent("StatusChatInput::sendMessage", ["MessageWithPk"], [chatInput.getTextWithPublicKeys()])
|
|
logs.logEvent("StatusChatInput::sendMessage", ["PlainText"], [globalUtilsMock.globalUtils.plainText(chatInput.getTextWithPublicKeys())])
|
|
logs.logEvent("StatusChatInput::sendMessage", ["RawText"], [chatInput.textInput.text])
|
|
}
|
|
}
|
|
}
|
|
|
|
LogsAndControlsPanel {
|
|
id: logsAndControlsPanel
|
|
|
|
SplitView.minimumHeight: 100
|
|
SplitView.preferredHeight: 200
|
|
|
|
logsView.logText: logs.logText
|
|
}
|
|
}
|
|
|
|
Pane {
|
|
SplitView.minimumWidth: 300
|
|
SplitView.preferredWidth: 300
|
|
|
|
UsersModelEditor {
|
|
id: modelEditor
|
|
anchors.fill: parent
|
|
model: fakeUsersModel
|
|
|
|
onRemoveClicked: fakeUsersModel.remove(index, 1)
|
|
onRemoveAllClicked: fakeUsersModel.clear()
|
|
onAddClicked: fakeUsersModel.append(modelEditor.getNewUser(fakeUsersModel.count))
|
|
}
|
|
}
|
|
}
|