status-desktop/ui/app/AppLayouts/Chat/components/PrivateChatPopup.qml

146 lines
3.9 KiB
QML
Raw Normal View History

2020-06-17 19:18:31 +00:00
import QtQuick 2.13
import QtQuick.Controls 2.13
import QtQuick.Layouts 1.13
2020-05-28 12:56:43 +00:00
import "../../../../imports"
import "../../../../shared"
import "./"
2020-05-29 16:27:50 +00:00
ModalPopup {
property string validationError: ""
2020-06-25 13:26:58 +00:00
property string pubKey : "";
property string ensUsername : "";
function validate() {
2020-06-25 13:26:58 +00:00
if (!Utils.isChatKey(chatKey.text) && !Utils.isValidETHNamePrefix(chatKey.text)) {
validationError = "This needs to be a valid chat key or ENS username"
pubKey = "";
ensUsername = "";
} else {
validationError = ""
}
return validationError === ""
}
2020-06-25 13:26:58 +00:00
function onKeyReleased(){
ensUsername.text = "";
if (!validate()) return;
chatKey.text = chatKey.text.trim();
2020-06-25 13:26:58 +00:00
if(Utils.isChatKey(chatKey.text)){
pubKey = chatKey.text;
return;
}
2020-06-25 13:26:58 +00:00
pubKey = chatsModel.resolveENS(chatKey.text)
if(pubKey == ""){
//% "User not found"
ensUsername.text = qsTrId("user-not-found");
2020-06-25 13:26:58 +00:00
} else {
ensUsername.text = chatsModel.formatENSUsername(chatKey.text) + " • " + Utils.compactAddress(pubKey, 4)
}
}
function doJoin() {
if (!validate() || pubKey.trim() === "") return;
chatsModel.joinChat(pubKey, Constants.chatTypeOneToOne);
popup.close();
}
2020-05-28 12:56:43 +00:00
id: popup
//% "New chat"
title: qsTrId("new-chat")
2020-05-29 16:27:50 +00:00
2020-05-29 18:38:11 +00:00
onOpened: {
chatKey.text = "";
2020-06-25 13:26:58 +00:00
pubKey = "";
ensUsername = "";
2020-05-29 18:38:11 +00:00
chatKey.forceActiveFocus(Qt.MouseFocusReason)
}
Input {
id: chatKey
//% "Enter ENS username or chat key"
placeholderText: qsTrId("enter-contact-code")
Keys.onEnterPressed: doJoin()
Keys.onReturnPressed: doJoin()
validationError: popup.validationError
2020-06-25 13:26:58 +00:00
Keys.onReleased: {
onKeyReleased();
}
2020-05-29 16:27:50 +00:00
}
2020-06-25 13:26:58 +00:00
Text {
id: ensUsername
anchors.top: chatKey.bottom
anchors.topMargin: Style.current.padding
color: Style.current.darkGrey
2020-06-25 13:26:58 +00:00
font.pixelSize: 12
}
Item {
anchors.top: ensUsername.bottom
anchors.topMargin: 32
anchors.fill: parent
ScrollView {
anchors.fill: parent
Layout.fillWidth: true
Layout.fillHeight: true
ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
ScrollBar.vertical.policy: contactListView.contentHeight > contactListView.height ? ScrollBar.AlwaysOn : ScrollBar.AlwaysOff
2020-05-28 12:56:43 +00:00
2020-06-25 13:26:58 +00:00
ListView {
anchors.fill: parent
spacing: 0
clip: true
id: contactListView
model: profileModel.contactList
delegate: Contact {
showCheckbox: false
pubKey: model.pubKey
isContact: model.isContact
isUser: false
2020-06-25 13:26:58 +00:00
name: model.name
address: model.address
identicon: model.identicon
showListSelector: true
onItemChecked: function(pubKey, itemChecked){
chatsModel.joinChat(pubKey, Constants.chatTypeOneToOne);
popup.close()
}
}
}
}
}
2020-05-29 16:27:50 +00:00
footer: Button {
width: 44
height: 44
anchors.bottom: parent.bottom
anchors.right: parent.right
SVGImage {
2020-06-25 13:26:58 +00:00
source: pubKey === "" ? "../../../img/arrow-button-inactive.svg" : "../../../img/arrow-btn-active.svg"
width: 50
height: 50
2020-05-28 12:56:43 +00:00
}
2020-05-29 16:27:50 +00:00
background: Rectangle {
color: "transparent"
2020-05-28 12:56:43 +00:00
}
2020-05-29 16:27:50 +00:00
MouseArea {
id: btnMAnewChat
cursorShape: Qt.PointingHandCursor
anchors.fill: parent
onClicked : doJoin()
2020-05-28 12:56:43 +00:00
}
}
}
/*##^##
Designer {
D{i:0;height:300;width:300}
}
##^##*/