status-desktop/ui/onboarding/CreatePasswordModal.qml

169 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
2020-06-12 20:47:44 +00:00
import QtQuick.Dialogs 1.3
import StatusQ.Controls 0.1
2020-06-12 20:47:44 +00:00
import "../imports"
import "../shared"
ModalPopup {
property bool loading: false
property bool firstPasswordFieldValid: false
property bool repeatPasswordFieldValid: false
property string passwordValidationError: ""
property string repeatPasswordValidationError: ""
2020-06-12 20:47:44 +00:00
id: popup
//% "Create a password"
title: qsTrId("intro-wizard-title-alt4")
2020-06-12 20:47:44 +00:00
height: 500
onOpened: {
firstPasswordField.text = "";
firstPasswordField.forceActiveFocus(Qt.MouseFocusReason)
}
2020-06-12 20:47:44 +00:00
Input {
id: firstPasswordField
anchors.rightMargin: 56
anchors.leftMargin: 56
anchors.top: parent.top
anchors.topMargin: 88
//% "New password..."
placeholderText: qsTrId("new-password...")
2020-06-12 20:47:44 +00:00
textField.echoMode: TextInput.Password
onTextChanged: {
[firstPasswordFieldValid, passwordValidationError] =
2020-12-04 14:53:00 +00:00
Utils.validatePasswords("first", firstPasswordField, repeatPasswordField);
}
2020-06-12 20:47:44 +00:00
}
Input {
id: repeatPasswordField
enabled: firstPasswordFieldValid
2020-06-12 20:47:44 +00:00
anchors.rightMargin: 0
anchors.leftMargin: 0
anchors.right: firstPasswordField.right
anchors.left: firstPasswordField.left
anchors.top: firstPasswordField.bottom
anchors.topMargin: Style.current.xlPadding
//% "Confirm password…"
placeholderText: qsTrId("confirm-password…")
2020-06-12 20:47:44 +00:00
textField.echoMode: TextInput.Password
Keys.onReturnPressed: function(event) {
if (submitBtn.enabled) {
submitBtn.clicked(event)
}
2020-06-12 20:47:44 +00:00
}
onTextChanged: {
[repeatPasswordFieldValid, repeatPasswordValidationError] =
2020-12-04 14:53:00 +00:00
Utils.validatePasswords("repeat", firstPasswordField, repeatPasswordField);
}
2020-06-12 20:47:44 +00:00
}
2020-12-05 21:00:28 +00:00
StyledText {
id: validationError
text: {
if (passwordValidationError !== "") return passwordValidationError;
if (repeatPasswordValidationError !== "") return repeatPasswordValidationError;
return "";
}
anchors.top: repeatPasswordField.bottom
anchors.topMargin: 20
anchors.right: parent.right
anchors.rightMargin: Style.current.xlPadding
anchors.left: parent.left
anchors.leftMargin: Style.current.xlPadding
horizontalAlignment: Text.AlignHCenter
color: Style.current.danger
font.pixelSize: 11
}
StyledText {
//% "At least 6 characters. You will use this password to unlock status on this device & sign transactions."
text: qsTrId("at-least-6-characters-you-will-use-this-password-to-unlock-status-on-this-device-sign-transactions.")
2020-06-12 20:47:44 +00:00
wrapMode: Text.WordWrap
anchors.right: parent.right
anchors.rightMargin: Style.current.xlPadding
2020-06-12 20:47:44 +00:00
anchors.left: parent.left
anchors.leftMargin: Style.current.xlPadding
2020-06-12 20:47:44 +00:00
horizontalAlignment: Text.AlignHCenter
anchors.bottom: parent.bottom
anchors.bottomMargin: 0
color: Style.current.secondaryText
2020-06-12 20:47:44 +00:00
font.pixelSize: 12
}
2020-06-22 19:32:00 +00:00
footer: Item {
width: parent.width
height: submitBtn.height
2020-06-12 20:47:44 +00:00
StatusButton {
2020-06-22 19:32:00 +00:00
id: submitBtn
anchors.bottom: parent.bottom
anchors.topMargin: Style.current.padding
2020-06-22 19:32:00 +00:00
anchors.right: parent.right
state: loading ? "pending" : "default"
//% "Create password"
text: qsTrId("create-password")
2020-06-12 20:47:44 +00:00
enabled: firstPasswordFieldValid && repeatPasswordFieldValid && !loading
2020-06-22 19:32:00 +00:00
MessageDialog {
id: importError
//% "Error importing account"
title: qsTrId("error-importing-account")
//% "An error occurred while importing your account: "
text: qsTrId("an-error-occurred-while-importing-your-account:-")
2020-06-22 19:32:00 +00:00
icon: StandardIcon.Critical
standardButtons: StandardButton.Ok
onVisibilityChanged: {
loading = false
}
2020-06-12 20:47:44 +00:00
}
2020-06-22 19:32:00 +00:00
MessageDialog {
id: importLoginError
//% "Login failed"
title: qsTrId("login-failed")
//% "Login failed. Please re-enter your password and try again."
text: qsTrId("login-failed.-please-re-enter-your-password-and-try-again.")
2020-06-22 19:32:00 +00:00
icon: StandardIcon.Critical
standardButtons: StandardButton.Ok
onVisibilityChanged: {
2020-06-12 20:47:44 +00:00
loading = false
}
}
2020-06-22 19:32:00 +00:00
Connections {
target: onboardingModel
ignoreUnknownSignals: true
onLoginResponseChanged: {
if (error) {
loading = false
importLoginError.open()
}
}
2020-06-12 20:47:44 +00:00
}
2020-06-22 19:32:00 +00:00
onClicked: {
2020-06-22 19:32:00 +00:00
loading = true
loginModel.isCurrentFlow = false;
onboardingModel.isCurrentFlow = true;
2020-06-22 19:32:00 +00:00
const result = onboardingModel.storeDerivedAndLogin(repeatPasswordField.text);
const error = JSON.parse(result).error
if (error) {
importError.text += error
return importError.open()
}
onboardingModel.firstTimeLogin = true
2020-06-12 20:47:44 +00:00
}
}
}
}
/*##^##
Designer {
D{i:0;formeditorColor:"#ffffff";height:500;width:400}
}
##^##*/