status-desktop/ui/app/AppLayouts/Onboarding2/UnblockWithPukFlow.qml

102 lines
3.1 KiB
QML
Raw Normal View History

import QtQuick 2.15
import QtQuick.Controls 2.15
import StatusQ.Controls 0.1
import StatusQ.Core.Theme 0.1
import StatusQ.Core.Utils 0.1 as SQUtils
import AppLayouts.Onboarding2.pages 1.0
import AppLayouts.Onboarding.enums 1.0
SQUtils.QObject {
id: root
required property StackView stackView
required property int keycardState
required property int pinSettingState
required property var tryToSetPukFunction
required property int remainingAttempts
signal setPinRequested(string pin)
signal keycardFactoryResetRequested
signal finished(bool success)
function init() {
root.stackView.push(d.initialComponent())
}
QtObject {
id: d
function initialComponent() {
if (root.keycardState === Onboarding.KeycardState.BlockedPIN)
return keycardEnterPukPage
if (root.keycardState === Onboarding.KeycardState.Empty ||
root.keycardState === Onboarding.KeycardState.NotEmpty)
return keycardUnblockedPage
return keycardIntroPage
}
function finishWithFactoryReset() {
root.keycardFactoryResetRequested()
root.finished(false)
}
}
Component {
id: keycardIntroPage
KeycardIntroPage {
keycardState: root.keycardState
unblockWithPukAvailable: root.remainingAttempts > 0
unblockUsingSeedphraseAvailable: true
factoryResetAvailable: !unblockWithPukAvailable
onKeycardFactoryResetRequested: d.finishWithFactoryReset()
onEmptyKeycardDetected: root.stackView.replace(keycardUnblockedPage)
onNotEmptyKeycardDetected: root.stackView.replace(keycardUnblockedPage)
onUnblockWithPukRequested: root.stackView.push(keycardEnterPukPage)
}
}
Component {
id: keycardEnterPukPage
KeycardEnterPukPage {
tryToSetPukFunction: root.tryToSetPukFunction
remainingAttempts: root.remainingAttempts
onKeycardPukEntered: (puk) => root.stackView.replace(keycardCreatePinPage)
onKeycardFactoryResetRequested: d.finishWithFactoryReset()
}
}
Component {
id: keycardCreatePinPage
KeycardCreatePinDelayedPage {
pinSettingState: root.pinSettingState
authorizationState: Onboarding.ProgressState.Success // authorization not needed
onSetPinRequested: root.setPinRequested(pin)
onFinished: root.stackView.replace(keycardUnblockedPage,
{ title: qsTr("Unblock successful") })
}
}
Component {
id: keycardUnblockedPage
KeycardBasePage {
image.source: Theme.png("onboarding/keycard/success")
title: qsTr("Your Keycard is already unblocked!")
buttons: [
StatusButton {
anchors.horizontalCenter: parent.horizontalCenter
text: qsTr("Continue")
onClicked: root.finished(true)
}
]
}
}
}