153 lines
4.8 KiB
QML
153 lines
4.8 KiB
QML
import QtQuick 2.13
|
|
import QtQuick.Controls 2.13
|
|
import QtQuick.Dialogs 1.3
|
|
|
|
import utils 1.0
|
|
|
|
import StatusQ.Core 0.1
|
|
import StatusQ.Core.Theme 0.1
|
|
import StatusQ.Controls 0.1
|
|
import StatusQ.Popups 0.1
|
|
|
|
import shared.controls 1.0
|
|
import shared.views.chat 1.0
|
|
|
|
StatusModal {
|
|
id: root
|
|
|
|
property string senderPublicKey: ""
|
|
property string senderDisplayName: ""
|
|
property string senderIcon: ""
|
|
property string challengeText: ""
|
|
property string responseText: ""
|
|
property string messageTimestamp: ""
|
|
property string responseTimestamp: ""
|
|
|
|
signal verificationRefused(string senderPublicKey)
|
|
signal responseSent(string senderPublicKey, string response)
|
|
|
|
header.title: qsTr("%1 is asking you to verify your identity").arg(root.senderDisplayName)
|
|
|
|
x: Math.round(((parent ? parent.width : 0) - width) / 2)
|
|
y: Math.round(((parent ? parent.height : 0) - height) / 2)
|
|
|
|
width: 480
|
|
height: 230 + verificationMessage.height + verificationResponse.height
|
|
|
|
onOpened: {
|
|
verificationResponse.input.edit.forceActiveFocus(Qt.MouseFocusReason)
|
|
}
|
|
onClosed: {
|
|
root.destroy();
|
|
}
|
|
|
|
contentItem: Item {
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
anchors.leftMargin: Style.current.padding
|
|
anchors.rightMargin: Style.current.padding
|
|
|
|
StatusBaseText {
|
|
id: description
|
|
width: parent.width
|
|
color: Theme.palette.directColor1
|
|
wrapMode: Text.WordWrap
|
|
anchors.top: parent.top
|
|
anchors.topMargin: Style.current.padding
|
|
text: qsTr("%1 would like to verify your identity. Answer the question to prove your identity to %2")
|
|
.arg(root.senderDisplayName).arg(root.senderDisplayName)
|
|
font.pixelSize: 15
|
|
}
|
|
|
|
MessageView {
|
|
id: verificationMessage
|
|
anchors.top: description.bottom
|
|
anchors.topMargin: Style.current.padding
|
|
isMessage: true
|
|
shouldRepeatHeader: true
|
|
messageTimestamp: root.messageTimestamp
|
|
senderDisplayName: root.senderDisplayName
|
|
senderIcon: root.senderIcon
|
|
message: root.challengeText
|
|
messageContentType: Constants.messageContentType.messageType
|
|
placeholderMessage: true
|
|
}
|
|
|
|
StatusInput {
|
|
id: verificationResponse
|
|
visible: !responseText
|
|
anchors.top: verificationMessage.bottom
|
|
anchors.topMargin: 5
|
|
input.multiline: true
|
|
placeholderText: qsTr("Provide answer to verification request from this contact.")
|
|
minimumHeight: 152
|
|
maximumHeight: 152
|
|
width: parent.width
|
|
input.verticalAlignment: TextEdit.AlignTop
|
|
leftPadding: 0
|
|
rightPadding: 0
|
|
charLimit: 280
|
|
}
|
|
|
|
MessageView {
|
|
id: responseMessage
|
|
visible: !!root.responseText
|
|
anchors.top: verificationMessage.bottom
|
|
isMessage: true
|
|
shouldRepeatHeader: true
|
|
messageTimestamp: root.responseTimestamp
|
|
senderDisplayName: userProfile.name
|
|
senderIcon: userProfile.icon
|
|
message: root.responseText
|
|
messageContentType: Constants.messageContentType.messageType
|
|
placeholderMessage: true
|
|
}
|
|
|
|
StatusBaseText {
|
|
id: responseSent
|
|
visible: !!root.responseText
|
|
width: parent.width
|
|
color: Theme.palette.baseColor1
|
|
wrapMode: Text.WordWrap
|
|
anchors.top: responseMessage.bottom
|
|
anchors.topMargin: 58
|
|
text: qsTr("You're answer has been sent to %1.").arg(root.senderDisplayName)
|
|
font.pixelSize: 13
|
|
horizontalAlignment: Text.AlignHCenter
|
|
}
|
|
}
|
|
|
|
rightButtons: [
|
|
StatusButton {
|
|
visible: !root.responseText
|
|
text: qsTr("Refuse Verification")
|
|
onClicked: {
|
|
root.verificationRefused(root.senderPublicKey)
|
|
root.close();
|
|
}
|
|
},
|
|
StatusButton {
|
|
text: qsTr("Send Answer")
|
|
visible: !root.responseText
|
|
enabled: verificationResponse.text !== ""
|
|
onClicked: {
|
|
root.responseSent(root.senderPublicKey, Utils.escapeHtml(verificationResponse.text))
|
|
root.responseText = verificationResponse.text
|
|
root.responseTimestamp = Date.now()
|
|
}
|
|
},
|
|
StatusFlatButton {
|
|
visible: root.responseText
|
|
text: qsTr("Change answer")
|
|
onClicked: {
|
|
root.responseText = ""
|
|
}
|
|
},
|
|
StatusButton {
|
|
visible: root.responseText
|
|
text: qsTr("Close")
|
|
onClicked: root.close()
|
|
}
|
|
]
|
|
}
|