status-desktop/ui/app/AppLayouts/Wallet/popups/AddAccountWithPrivateKeyMod...

168 lines
5.3 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 shared.panels 1.0
import shared.popups 1.0
import shared.controls 1.0
import "../stores"
// TODO: replace with StatusModal
ModalPopup {
id: popup
//% "Add account from private key"
title: qsTrId("add-private-key-account")
height: 600
property int marginBetweenInputs: 38
property string passwordValidationError: ""
property string privateKeyValidationError: ""
property string accountNameValidationError: ""
property bool loading: false
signal afterAddAccount()
function validate() {
if (passwordInput.text === "") {
//% "You need to enter a password"
passwordValidationError = qsTrId("you-need-to-enter-a-password")
} else if (passwordInput.text.length < 6) {
//% "Password needs to be 6 characters or more"
passwordValidationError = qsTrId("password-needs-to-be-6-characters-or-more")
} else {
passwordValidationError = ""
}
if (accountNameInput.text === "") {
//% "You need to enter an account name"
accountNameValidationError = qsTrId("you-need-to-enter-an-account-name")
} else {
accountNameValidationError = ""
}
if (accountPKeyInput.text === "") {
//% "You need to enter a private key"
privateKeyValidationError = qsTrId("you-need-to-enter-a-private-key")
} else if (!Utils.isPrivateKey(accountPKeyInput.text)) {
//% "Enter a valid private key (64 characters hexadecimal string)"
privateKeyValidationError = qsTrId("enter-a-valid-private-key-(64-characters-hexadecimal-string)")
} else {
privateKeyValidationError = ""
}
return passwordValidationError === "" && privateKeyValidationError === "" && accountNameValidationError === ""
}
onOpened: {
passwordInput.text = ""
accountPKeyInput.text = ""
accountNameInput.text = ""
passwordValidationError = ""
privateKeyValidationError = ""
accountNameValidationError = ""
accountColorInput.selectedColor = Style.current.accountColors[Math.floor(Math.random() * Style.current.accountColors.length)]
passwordInput.forceActiveFocus(Qt.MouseFocusReason)
}
Input {
id: passwordInput
//% "Enter your password…"
placeholderText: qsTrId("enter-your-password…")
//% "Password"
label: qsTrId("password")
textField.echoMode: TextInput.Password
validationError: popup.passwordValidationError
}
StyledTextArea {
id: accountPKeyInput
anchors.top: passwordInput.bottom
anchors.topMargin: marginBetweenInputs
//% "Paste the contents of your private key"
placeholderText: qsTrId("paste-the-contents-of-your-private-key")
//% "Private key"
label: qsTrId("private-key")
customHeight: 88
validationError: popup.privateKeyValidationError
}
Input {
id: accountNameInput
anchors.top: accountPKeyInput.bottom
anchors.topMargin: marginBetweenInputs
//% "Enter an account name..."
placeholderText: qsTrId("enter-an-account-name...")
//% "Account name"
label: qsTrId("account-name")
validationError: popup.accountNameValidationError
}
StatusWalletColorSelect {
id: accountColorInput
anchors.top: accountNameInput.bottom
anchors.topMargin: marginBetweenInputs
anchors.left: parent.left
anchors.right: parent.right
model: Theme.palette.accountColors
}
footer: StatusButton {
anchors.top: parent.top
anchors.right: parent.right
text: loading ?
//% "Loading..."
qsTrId("loading") :
//% "Add account"
qsTrId("add-account")
enabled: !loading && passwordInput.text !== "" && accountNameInput.text !== "" && accountPKeyInput.text !== ""
MessageDialog {
id: accountError
title: "Adding the account failed"
icon: StandardIcon.Critical
standardButtons: StandardButton.Ok
}
onClicked : {
// TODO the loaidng doesn't work because the function freezes th eview. Might need to use threads
loading = true
if (!validate()) {
return loading = false
}
const result = RootStore.addAccountsFromPrivateKey(accountPKeyInput.text, passwordInput.text, accountNameInput.text, accountColorInput.selectedColor)
loading = false
if (result) {
let resultJson = JSON.parse(result);
errorSound.play();
if (Utils.isInvalidPasswordMessage(resultJson.error)) {
//% "Wrong password"
popup.passwordValidationError = qsTrId("wrong-password")
} else {
accountError.text = resultJson.error
accountError.open()
}
return
}
popup.afterAddAccount()
popup.close();
}
}
}
/*##^##
Designer {
D{i:0;formeditorColor:"#ffffff";height:500;width:400}
}
##^##*/