status-desktop/ui/app/AppLayouts/Wallet/AccountSettingsModal.qml

193 lines
5.6 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
import QtQuick.Dialogs 1.3
import "../../../imports"
import "../../../shared"
import "../../../sounds"
ModalPopup {
property var currentAccount: walletModel.currentAccount
2020-06-10 20:21:23 +00:00
property var changeSelectedAccount
id: popup
// TODO add icon when we have that feature
title: qsTr("Status account settings")
height: 635
property int marginBetweenInputs: 35
property string selectedColor: currentAccount.iconColor
property string accountNameValidationError: ""
function validate() {
if (accountNameInput.text === "") {
accountNameValidationError = qsTr("You need to enter an account name")
} else {
accountNameValidationError = ""
}
return accountNameValidationError === ""
}
onOpened: {
accountNameInput.forceActiveFocus(Qt.MouseFocusReason)
}
Item {
ErrorSound {
id: errorSound
}
}
Input {
id: accountNameInput
placeholderText: qsTr("Enter an account name...")
label: qsTr("Account name")
text: currentAccount.name
validationError: popup.accountNameValidationError
}
Select {
id: accountColorInput
anchors.top: accountNameInput.bottom
anchors.topMargin: marginBetweenInputs
bgColor: selectedColor
label: qsTr("Account color")
selectOptions: Constants.accountColors.map(color => {
return {
text: "",
bgColor: color,
height: 52,
onClicked: function () {
selectedColor = color
}
}
})
}
TextWithLabel {
id: typeText
label: qsTr("Type")
text: {
var result = ""
switch (currentAccount.walletType) {
case Constants.watchWalletType: result = qsTr("Watch-only"); break;
case Constants.keyWalletType:
case Constants.seedWalletType: result = qsTr("Off Status tree"); break;
default: result = qsTr("On Status tree")
}
return result
}
anchors.top: accountColorInput.bottom
anchors.topMargin: marginBetweenInputs
}
TextWithLabel {
id: addressText
label: qsTr("Wallet address")
text: currentAccount.address
fontFamily: Style.current.fontHexRegular.name
anchors.top: typeText.bottom
anchors.topMargin: marginBetweenInputs
}
TextWithLabel {
id: pathText
label: qsTr("Derivation path")
text: currentAccount.path
anchors.top: addressText.bottom
anchors.topMargin: marginBetweenInputs
}
TextWithLabel {
id: storageText
visible: currentAccount.walletType !== Constants.watchWalletType
label: qsTr("Storage")
text: qsTr("This device")
anchors.top: pathText.bottom
anchors.topMargin: marginBetweenInputs
}
footer: Item {
anchors.fill: parent
StyledButton {
anchors.top: parent.top
anchors.right: saveBtn.left
anchors.rightMargin: Style.current.padding
label: qsTr("Delete account")
btnColor: Style.current.white
textColor: Style.current.red
2020-06-10 20:21:23 +00:00
MessageDialog {
id: deleteError
title: "Deleting account failed"
icon: StandardIcon.Critical
standardButtons: StandardButton.Ok
2020-06-10 20:21:23 +00:00
}
MessageDialog {
id: confirmationDialog
title: qsTr("Are you sure?")
text: qsTr("A deleted account cannot be retrieved later. Only press yes if you backed up your key/seed or don't care about this account anymore")
icon: StandardIcon.Warning
standardButtons: StandardButton.Yes | StandardButton.No
onAccepted: {
const error = walletModel.deleteAccount(currentAccount.address);
if (error) {
errorSound.play()
deleteError.text = error
deleteError.open()
return
}
// Change active account to the first
changeSelectedAccount(0)
popup.close();
2020-06-10 20:21:23 +00:00
}
}
2020-06-10 20:21:23 +00:00
onClicked : {
confirmationDialog.open()
}
}
StyledButton {
id: saveBtn
anchors.top: parent.top
anchors.right: parent.right
anchors.rightMargin: Style.current.padding
label: qsTr("Save changes")
disabled: accountNameInput.text === ""
MessageDialog {
id: changeError
title: "Changing settings failed"
icon: StandardIcon.Critical
standardButtons: StandardButton.Ok
}
onClicked : {
if (!validate()) {
return
}
const error = walletModel.changeAccountSettings(currentAccount.address, accountNameInput.text, selectedColor);
if (error) {
errorSound.play()
changeError.text = error
changeError.open()
return
}
popup.close();
}
}
}
}
/*##^##
Designer {
D{i:0;formeditorColor:"#ffffff";height:500;width:400}
}
##^##*/