status-desktop/ui/app/AppLayouts/Profile/popups/ChangePasswordModal.qml

87 lines
2.4 KiB
QML
Raw Normal View History

2021-08-11 09:55:59 +00:00
import QtQuick 2.13
import QtQuick.Controls 2.13
import QtQuick.Layouts 1.12
import utils 1.0
import shared 1.0
import shared.panels 1.0
import shared.controls 1.0
2021-08-11 09:55:59 +00:00
import StatusQ.Popups 0.1
import StatusQ.Controls 0.1
import StatusQ.Core.Theme 0.1
import "../views"
StatusModal {
id: root
property var privacyStore
signal passwordChanged()
function onChangePasswordResponse(success) {
if (success) {
passwordChanged()
submitBtn.enabled = false
} else {
view.reset()
console.warn("TODO: Display error message when change password action failure! ")
}
submitBtn.loading = false
}
2021-08-11 09:55:59 +00:00
Connections {
target: root.privacyStore.privacyModule
onPasswordChanged: onChangePasswordResponse(success)
2021-08-11 09:55:59 +00:00
}
width: 480
height: 546
closePolicy: Popup.NoAutoClose
header.title: qsTr("Change password")
2021-08-11 09:55:59 +00:00
onOpened: view.reset()
2021-08-11 09:55:59 +00:00
PasswordView {
id: view
store: root.privacyStore
anchors.topMargin: Style.current.padding
anchors.centerIn: parent
titleVisible: false
introText: qsTr("Change password used to unlock Status on this device & sign transactions.")
createNewPsw: false
2021-08-11 09:55:59 +00:00
}
rightButtons: [
2021-08-11 09:55:59 +00:00
StatusButton {
id: submitBtn
text: qsTr("Change Password")
enabled: !submitBtn.loading && view.ready
property Timer sim: Timer {
id: pause
interval: 20
onTriggered: {
// Change current password call action to the backend
root.privacyStore.changePassword(view.currentPswText, view.newPswText)
}
}
2021-08-11 09:55:59 +00:00
onClicked: {
submitBtn.loading = true;
// ChangePassword operation blocks the UI so loading = true; will never have any affect until changePassword/createPassword is done.
// Getting around it with a small pause (timer) in order to get the desired behavior
pause.start();
}
2021-08-11 09:55:59 +00:00
}
]
// By clicking anywhere outside password entries fields or focusable element in the view, it is needed to check if passwords entered matches
MouseArea {
anchors.fill: parent
z: view.zBehind // Behind focusable components in the view
onClicked: { view.checkPasswordMatches() }
}
2021-08-11 09:55:59 +00:00
}