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 "../imports"
|
|
|
|
import "../shared"
|
2020-09-29 06:39:29 +00:00
|
|
|
import "../shared/status"
|
2020-06-12 20:47:44 +00:00
|
|
|
|
|
|
|
ModalPopup {
|
|
|
|
property bool loading: false
|
2020-12-03 22:26:05 +00:00
|
|
|
property bool firstPasswordFieldValid: false
|
|
|
|
property bool repeatPasswordFieldValid: false
|
2020-06-23 19:31:35 +00:00
|
|
|
property string passwordValidationError: ""
|
|
|
|
property string repeatPasswordValidationError: ""
|
|
|
|
|
2020-06-12 20:47:44 +00:00
|
|
|
id: popup
|
2020-07-06 20:39:55 +00:00
|
|
|
//% "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-30 20:01:37 +00:00
|
|
|
|
2020-06-12 20:47:44 +00:00
|
|
|
Input {
|
|
|
|
id: firstPasswordField
|
|
|
|
anchors.rightMargin: 56
|
|
|
|
anchors.leftMargin: 56
|
|
|
|
anchors.top: parent.top
|
|
|
|
anchors.topMargin: 88
|
2020-07-06 20:39:55 +00:00
|
|
|
//% "New password..."
|
|
|
|
placeholderText: qsTrId("new-password...")
|
2020-06-12 20:47:44 +00:00
|
|
|
textField.echoMode: TextInput.Password
|
2020-12-03 22:26:05 +00:00
|
|
|
onTextChanged: {
|
|
|
|
[firstPasswordFieldValid, passwordValidationError] =
|
2020-12-04 14:53:00 +00:00
|
|
|
Utils.validatePasswords("first", firstPasswordField, repeatPasswordField);
|
2020-12-03 22:26:05 +00:00
|
|
|
}
|
2020-06-12 20:47:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
Input {
|
|
|
|
id: repeatPasswordField
|
2020-12-03 22:26:05 +00:00
|
|
|
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
|
2020-07-02 15:14:31 +00:00
|
|
|
anchors.topMargin: Style.current.xlPadding
|
2020-07-06 20:39:55 +00:00
|
|
|
//% "Confirm password…"
|
|
|
|
placeholderText: qsTrId("confirm-password…")
|
2020-06-12 20:47:44 +00:00
|
|
|
textField.echoMode: TextInput.Password
|
|
|
|
Keys.onReturnPressed: {
|
|
|
|
submitBtn.clicked()
|
|
|
|
}
|
2020-12-03 22:26:05 +00:00
|
|
|
onTextChanged: {
|
|
|
|
[repeatPasswordFieldValid, repeatPasswordValidationError] =
|
2020-12-04 14:53:00 +00:00
|
|
|
Utils.validatePasswords("repeat", firstPasswordField, repeatPasswordField);
|
2020-12-03 22:26:05 +00:00
|
|
|
}
|
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
|
|
|
|
}
|
|
|
|
|
2020-06-19 18:06:58 +00:00
|
|
|
StyledText {
|
2020-07-06 20:39:55 +00:00
|
|
|
//% "At least 6 characters. You will use this password to unlock status on this device & sign transactions."
|
2020-07-07 19:25:20 +00:00
|
|
|
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
|
2020-07-02 15:14:31 +00:00
|
|
|
anchors.rightMargin: Style.current.xlPadding
|
2020-06-12 20:47:44 +00:00
|
|
|
anchors.left: parent.left
|
2020-07-02 15:14:31 +00:00
|
|
|
anchors.leftMargin: Style.current.xlPadding
|
2020-06-12 20:47:44 +00:00
|
|
|
horizontalAlignment: Text.AlignHCenter
|
|
|
|
anchors.bottom: parent.bottom
|
|
|
|
anchors.bottomMargin: 0
|
2020-09-29 06:39:29 +00:00
|
|
|
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 {
|
2021-01-13 19:15:52 +00:00
|
|
|
width: parent.width
|
|
|
|
height: submitBtn.height
|
2020-06-12 20:47:44 +00:00
|
|
|
|
2020-09-29 06:39:29 +00:00
|
|
|
StatusButton {
|
2020-06-22 19:32:00 +00:00
|
|
|
id: submitBtn
|
|
|
|
anchors.bottom: parent.bottom
|
2020-07-02 15:14:31 +00:00
|
|
|
anchors.topMargin: Style.current.padding
|
2020-06-22 19:32:00 +00:00
|
|
|
anchors.right: parent.right
|
2020-10-26 14:23:36 +00:00
|
|
|
state: loading ? "pending" : "default"
|
2020-07-06 20:39:55 +00:00
|
|
|
//% "Create password"
|
2020-10-26 14:23:36 +00:00
|
|
|
text: qsTrId("create-password")
|
2020-06-12 20:47:44 +00:00
|
|
|
|
2020-12-03 22:26:05 +00:00
|
|
|
enabled: firstPasswordFieldValid && repeatPasswordFieldValid && !loading
|
2020-06-22 19:32:00 +00:00
|
|
|
|
|
|
|
MessageDialog {
|
|
|
|
id: importError
|
2020-07-06 20:39:55 +00:00
|
|
|
//% "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
|
2020-07-06 20:39:55 +00:00
|
|
|
//% "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) {
|
2020-06-30 20:01:37 +00:00
|
|
|
errorSound.play()
|
2020-06-22 19:32:00 +00:00
|
|
|
loading = false
|
|
|
|
importLoginError.open()
|
|
|
|
}
|
|
|
|
}
|
2020-06-12 20:47:44 +00:00
|
|
|
}
|
2020-06-22 19:32:00 +00:00
|
|
|
|
2020-06-23 19:31:35 +00:00
|
|
|
onClicked: {
|
2020-06-22 19:32:00 +00:00
|
|
|
loading = true
|
2020-06-29 19:49:34 +00:00
|
|
|
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) {
|
2020-06-30 20:01:37 +00:00
|
|
|
errorSound.play()
|
2020-06-22 19:32:00 +00:00
|
|
|
importError.text += error
|
|
|
|
return importError.open()
|
|
|
|
}
|
2020-06-12 20:47:44 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*##^##
|
|
|
|
Designer {
|
|
|
|
D{i:0;formeditorColor:"#ffffff";height:500;width:400}
|
|
|
|
}
|
|
|
|
##^##*/
|