mirror of
https://github.com/status-im/status-desktop.git
synced 2025-01-10 06:16:32 +00:00
9374be5857
Fixes #670. Component spec based on https://www.notion.so/emizzle/Wallet-transaction-components-2003b78a8d0d41c4ab3d21eb2496fb20. Changes the current Select shared component to a model databound component. This means we can bind directly to `QAbstractListModel`'s coming from Nim instead of needing manipulating the data in to javascript objects. The changes to the Select component will be used for the upcoming Asset selector shared component.
145 lines
4.5 KiB
QML
145 lines
4.5 KiB
QML
import QtQuick 2.13
|
|
import QtQuick.Controls 2.13
|
|
import QtQuick.Dialogs 1.3
|
|
import "../../../../imports"
|
|
import "../../../../shared"
|
|
|
|
ModalPopup {
|
|
id: popup
|
|
height: 600
|
|
|
|
property int marginBetweenInputs: 38
|
|
property string passwordValidationError: ""
|
|
property string seedValidationError: ""
|
|
property string accountNameValidationError: ""
|
|
property bool loading: false
|
|
|
|
function validate() {
|
|
if (passwordInput.text === "") {
|
|
//% "You need to enter a password"
|
|
passwordValidationError = qsTrId("you-need-to-enter-a-password")
|
|
} else if (passwordInput.text.length < 4) {
|
|
//% "Password needs to be 4 characters or more"
|
|
passwordValidationError = qsTrId("password-needs-to-be-4-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 (accountSeedInput.text === "") {
|
|
//% "You need to enter a seed phrase"
|
|
seedValidationError = qsTrId("you-need-to-enter-a-seed-phrase")
|
|
} else if (!Utils.isMnemonic(accountSeedInput.text)) {
|
|
//% "Enter a valid mnemonic"
|
|
seedValidationError = qsTrId("enter-a-valid-mnemonic")
|
|
} else {
|
|
seedValidationError = ""
|
|
}
|
|
|
|
return passwordValidationError === "" && seedValidationError === "" && accountNameValidationError === ""
|
|
}
|
|
|
|
onOpened: {
|
|
passwordInput.text = ""
|
|
passwordInput.forceActiveFocus(Qt.MouseFocusReason)
|
|
}
|
|
|
|
//% "Add account with a seed phrase"
|
|
title: qsTrId("add-seed-account")
|
|
|
|
Input {
|
|
id: passwordInput
|
|
//% "Enter your password…"
|
|
placeholderText: qsTrId("enter-your-password…")
|
|
//% "Password"
|
|
label: qsTrId("password")
|
|
textField.echoMode: TextInput.Password
|
|
validationError: popup.passwordValidationError
|
|
}
|
|
|
|
|
|
StyledTextArea {
|
|
id: accountSeedInput
|
|
anchors.top: passwordInput.bottom
|
|
anchors.topMargin: marginBetweenInputs
|
|
//% "Enter your seed phrase, separate words with commas or spaces..."
|
|
placeholderText: qsTrId("enter-your-seed-phrase,-separate-words-with-commas-or-spaces...")
|
|
//% "Seed phrase"
|
|
label: qsTrId("recovery-phrase")
|
|
customHeight: 88
|
|
validationError: popup.seedValidationError
|
|
}
|
|
|
|
Input {
|
|
id: accountNameInput
|
|
anchors.top: accountSeedInput.bottom
|
|
anchors.topMargin: marginBetweenInputs
|
|
//% "Enter an account name..."
|
|
placeholderText: qsTrId("enter-an-account-name...")
|
|
//% "Account name"
|
|
label: qsTrId("account-name")
|
|
validationError: popup.accountNameValidationError
|
|
}
|
|
|
|
ColorSelector {
|
|
id: accountColorInput
|
|
selectedColor: Constants.accountColors[0]
|
|
model: Constants.accountColors
|
|
anchors.top: accountNameInput.bottom
|
|
anchors.topMargin: marginBetweenInputs
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
}
|
|
|
|
footer: StyledButton {
|
|
anchors.top: parent.top
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: Style.current.padding
|
|
label: loading ?
|
|
//% "Loading..."
|
|
qsTrId("loading") :
|
|
//% "Add account >"
|
|
qsTrId("add-account")
|
|
|
|
disabled: loading || passwordInput.text === "" || accountNameInput.text === "" || accountSeedInput.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()) {
|
|
errorSound.play()
|
|
return loading = false
|
|
}
|
|
|
|
const error = walletModel.addAccountsFromSeed(accountSeedInput.text, passwordInput.text, accountNameInput.text, accountColorInput.selectedColor)
|
|
loading = false
|
|
if (error) {
|
|
errorSound.play()
|
|
accountError.text = error
|
|
return accountError.open()
|
|
}
|
|
|
|
popup.close();
|
|
}
|
|
}
|
|
}
|
|
|
|
/*##^##
|
|
Designer {
|
|
D{i:0;formeditorColor:"#ffffff";height:500;width:400}
|
|
}
|
|
##^##*/
|