2022-03-01 15:59:38 +00:00
import QtQuick 2.0
import QtQuick . Controls 2.13
import QtQuick . Layouts 1.12
import shared . controls 1.0
import shared 1.0
import shared . panels 1.0
2022-07-20 12:34:44 +00:00
import shared . stores 1.0
2022-03-01 15:59:38 +00:00
import utils 1.0
import StatusQ . Controls 0.1
import StatusQ . Core 0.1
import StatusQ . Core . Theme 0.1
import "../stores"
2022-03-07 22:59:38 +00:00
import "../controls"
2022-03-01 15:59:38 +00:00
2022-07-20 12:34:44 +00:00
Item {
2022-03-01 15:59:38 +00:00
id: root
2022-07-20 12:34:44 +00:00
property StartupStore startupStore
2022-03-01 15:59:38 +00:00
property string password
2022-07-20 12:34:44 +00:00
Component.onCompleted: {
root . password = root . startupStore . getPassword ( )
2022-07-28 14:04:37 +00:00
d . forcePasswordInputFocus ( )
2022-07-20 12:34:44 +00:00
}
2022-05-06 12:47:46 +00:00
QtObject {
id: d
function checkPasswordMatches ( ) {
if ( confPswInput . text !== root . password ) {
errorTxt . text = qsTr ( "Passwords don't match" )
return false
}
return true
}
function submit ( ) {
if ( ! checkPasswordMatches ( ) ) {
return
}
2022-07-20 12:34:44 +00:00
root . startupStore . doPrimaryAction ( )
2022-05-06 12:47:46 +00:00
}
2022-07-28 14:04:37 +00:00
function forcePasswordInputFocus ( ) { confPswInput . forceActiveFocus ( Qt . MouseFocusReason ) }
2022-05-06 12:47:46 +00:00
}
2022-03-01 15:59:38 +00:00
Column {
id: view
spacing: 4 * Style . current . padding
width: 416
anchors.centerIn: parent
StatusBaseText {
anchors.horizontalCenter: parent . horizontalCenter
text: qsTr ( "Have you written down your password?" )
font.pixelSize: 22
font.bold: true
color: Theme . palette . directColor1
}
Column {
anchors.horizontalCenter: parent . horizontalCenter
spacing: Style . current . padding
StatusBaseText {
anchors.horizontalCenter: parent . horizontalCenter
text: qsTr ( "You will never be able to recover your password if you lose it." )
2022-05-05 09:57:39 +00:00
font.pixelSize: 15
2022-03-01 15:59:38 +00:00
color: Theme . palette . dangerColor1
}
StatusBaseText {
anchors.horizontalCenter: parent . horizontalCenter
text: qsTr ( "If you need to, write it using pen and paper and keep in a safe place." )
2022-05-05 09:57:39 +00:00
font.pixelSize: 15
2022-03-01 15:59:38 +00:00
color: Theme . palette . baseColor1
}
StatusBaseText {
anchors.horizontalCenter: parent . horizontalCenter
2022-06-20 14:22:34 +00:00
text: qsTr ( "If you lose your password you will lose access to your Status profile." )
2022-05-05 09:57:39 +00:00
font.pixelSize: 15
2022-03-01 15:59:38 +00:00
color: Theme . palette . baseColor1
}
}
2022-05-05 09:57:39 +00:00
Column {
anchors.horizontalCenter: parent . horizontalCenter
spacing: Style . current . padding
width: parent . width
2022-03-01 15:59:38 +00:00
2022-05-05 09:57:39 +00:00
// TODO replace with StatusInput as soon as it supports password
Input {
id: confPswInput
property bool showPassword: false
width: parent . width
enabled: ! submitBtn . loading
2022-07-05 15:41:04 +00:00
placeholderText: qsTr ( "Confirm your password (again)" )
2022-05-05 09:57:39 +00:00
textField.echoMode: showPassword ? TextInput.Normal : TextInput . Password
textField.validator: RegExpValidator { regExp: /^[!-~]{0,64}$/ } // That incudes NOT extended ASCII printable characters less space and a maximum of 64 characters allowed
keepHeight: true
textField.rightPadding: showHideCurrentIcon . width + showHideCurrentIcon . anchors . rightMargin + Style . current . padding / 2
2022-05-06 12:47:46 +00:00
onTextChanged: { errorTxt . text = "" }
Keys.onReturnPressed: { if ( submitBtn . enabled ) d . submit ( ) }
2022-03-01 15:59:38 +00:00
2022-05-05 09:57:39 +00:00
StatusFlatRoundButton {
id: showHideCurrentIcon
visible: confPswInput . text !== ""
anchors.verticalCenter: parent . verticalCenter
anchors.right: parent . right
anchors.rightMargin: 16
width: 24
height: 24
icon.name: confPswInput . showPassword ? "hide" : "show"
icon.color: Theme . palette . baseColor1
onClicked: confPswInput . showPassword = ! confPswInput . showPassword
}
2022-04-05 19:12:30 +00:00
}
2022-03-01 15:59:38 +00:00
2022-05-05 09:57:39 +00:00
StatusBaseText {
id: errorTxt
anchors.horizontalCenter: parent . horizontalCenter
font.pixelSize: 12
color: Theme . palette . dangerColor1
onTextChanged: {
if ( text === "" ) filler . visible = true
else filler . visible = false
}
2022-03-01 15:59:38 +00:00
}
2022-05-09 14:14:30 +00:00
}
2022-03-01 15:59:38 +00:00
2022-05-09 14:14:30 +00:00
// Just a column filler to fit the design
Item {
height: Style . current . padding
width: parent . width
2022-03-01 15:59:38 +00:00
}
StatusButton {
id: submitBtn
2022-07-20 12:14:50 +00:00
objectName: "confirmPswSubmitBtn"
2022-03-01 15:59:38 +00:00
anchors.horizontalCenter: parent . horizontalCenter
2022-05-05 09:57:39 +00:00
text: qsTr ( "Finalise Status Password Creation" )
2022-05-09 14:14:30 +00:00
enabled: ! submitBtn . loading && ( confPswInput . text === root . password )
2022-03-01 15:59:38 +00:00
2022-05-06 12:47:46 +00:00
onClicked: { d . submit ( ) }
2022-03-07 22:59:38 +00:00
}
}
Connections {
2022-07-20 12:34:44 +00:00
target: RootStore . privacyModule
2022-03-07 22:59:38 +00:00
onPasswordChanged: {
if ( success ) {
submitBtn . loading = false
2022-03-15 22:27:36 +00:00
root . exit ( ) ;
2022-03-07 22:59:38 +00:00
}
}
}
2022-03-01 15:59:38 +00:00
}