status-desktop/ui/app/AppLayouts/Onboarding2/UnblockWithPukFlow.qml
Michał Cieślak d1ac45ce6c Onboarding: KeycardCreatePinPage and SeedphrasePage refactored to be pure UI components
Now those components are not aware of any logic in the upper layer,
making the flows more structured and easier to follow.

Required for: #17232
2025-02-12 13:54:46 +01:00

103 lines
3.1 KiB
QML

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 StatusQ.Core.Backpressure 0.1
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 var tryToSetPukFunction
required property int remainingAttempts
required property int keycardPinInfoPageDelay
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
KeycardCreatePinPage {
onSetPinRequested: (pin) => {
Backpressure.debounce(root, root.keycardPinInfoPageDelay, () => {
root.setPinRequested(pin)
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)
}
]
}
}
}