159 lines
4.7 KiB
QML
159 lines
4.7 KiB
QML
import QtQuick 2.12
|
|
import QtQuick.Controls 2.12
|
|
import QtQuick.Layouts 1.14
|
|
|
|
import utils 1.0
|
|
import shared.panels 1.0
|
|
import shared.popups 1.0
|
|
import shared.controls 1.0
|
|
|
|
import StatusQ.Core 0.1
|
|
import StatusQ.Popups 0.1
|
|
import StatusQ.Controls 0.1
|
|
import StatusQ.Core.Theme 0.1
|
|
|
|
import AppLayouts.Profile.stores 1.0 as ProfileStores
|
|
|
|
import "backupseed"
|
|
|
|
StatusStackModal {
|
|
id: root
|
|
|
|
property ProfileStores.PrivacyStore privacyStore
|
|
|
|
onCurrentIndexChanged: {
|
|
//StatusAnimatedStack doesn't handle well items' visibility,
|
|
//keeping this solution for now until #8024 is fixed
|
|
if (currentIndex === 2) {
|
|
confirmFirstWord.forceInputFocus();
|
|
} else if (currentIndex === 3) {
|
|
confirmSecondWord.forceInputFocus();
|
|
}
|
|
}
|
|
|
|
QtObject {
|
|
id: d
|
|
|
|
readonly property int firstRandomNo: getRandomWordNumber()
|
|
readonly property int secondRandomNo: {
|
|
var num = firstRandomNo;
|
|
while (num === firstRandomNo) {
|
|
num = getRandomWordNumber();
|
|
}
|
|
return num;
|
|
}
|
|
|
|
readonly property alias seedHidden: confirmSeedPhrase.hideSeed
|
|
readonly property alias seedStored: confirmStoringSeedPhrase.seedStored
|
|
|
|
readonly property alias validFirstSeedWord: confirmFirstWord.inputValid
|
|
readonly property alias validSecondSeedWord: confirmSecondWord.inputValid
|
|
|
|
readonly property Item skipButton: StatusButton {
|
|
visible: currentIndex === 0
|
|
normalColor: "transparent"
|
|
borderColor: Theme.palette.baseColor2
|
|
text: qsTr("Not Now")
|
|
onClicked: root.close()
|
|
}
|
|
|
|
function getRandomWordNumber() {
|
|
return Math.floor(Math.random() * 12);
|
|
}
|
|
}
|
|
|
|
implicitHeight: 748
|
|
width: 480
|
|
headerSettings.title: qsTr("Back up your seed phrase")
|
|
rightButtons: [ d.skipButton, nextButton, finishButton ]
|
|
|
|
nextButton: StatusButton {
|
|
id: nextButton
|
|
objectName: "BackupSeedModal_nextButton"
|
|
enabled: {
|
|
switch (root.currentIndex) {
|
|
case 0:
|
|
return acknowledgment.allAccepted;
|
|
case 1:
|
|
return !d.seedHidden;
|
|
case 2:
|
|
return d.validFirstSeedWord;
|
|
case 3:
|
|
return d.validSecondSeedWord;
|
|
default:
|
|
return true;
|
|
}
|
|
}
|
|
text: {
|
|
switch (root.currentIndex) {
|
|
case 0:
|
|
case 1:
|
|
return qsTr("Confirm Seed Phrase");
|
|
case 2:
|
|
case 3:
|
|
return qsTr("Continue");
|
|
default:
|
|
return "";
|
|
}
|
|
}
|
|
onClicked: root.currentIndex++
|
|
}
|
|
|
|
finishButton: StatusButton {
|
|
text: qsTr("Complete & Delete My Seed Phrase")
|
|
objectName: "BackupSeedModal_completeAndDeleteSeedPhraseButton"
|
|
enabled: d.seedStored
|
|
onClicked: {
|
|
root.privacyStore.removeMnemonic();
|
|
root.close();
|
|
}
|
|
}
|
|
|
|
// split subHeaderPadding into clip and non-clip parts
|
|
subHeaderPadding: 8
|
|
readonly property int nonClipSubHeaderPadding: 8
|
|
|
|
subHeaderItem: SubheaderTabBar {
|
|
// Count without Acknowledgements
|
|
steps: root.itemsCount - 1
|
|
currentIndex: root.currentIndex - 1
|
|
visible: root.currentIndex > 0
|
|
height: visible ? implicitHeight + nonClipSubHeaderPadding - spacing : 0
|
|
|
|
Item {
|
|
Layout.fillHeight: true
|
|
}
|
|
}
|
|
|
|
stackItems: [
|
|
Acknowledgements {
|
|
id: acknowledgment
|
|
},
|
|
ConfirmSeedPhrasePanel {
|
|
id: confirmSeedPhrase
|
|
seedPhrase: root.privacyStore.getMnemonic().split(" ")
|
|
privacyStore: root.privacyStore
|
|
},
|
|
BackupSeedStepBase {
|
|
id: confirmFirstWord
|
|
objectName: "BackupSeedModal_BackupSeedStepBase_confirmFirstWord"
|
|
titleText: qsTr("Confirm word #%1 of your seed phrase").arg(d.firstRandomNo + 1)
|
|
wordRandomNumber: d.firstRandomNo
|
|
wordAtRandomNumber: root.privacyStore.getMnemonicWordAtIndex(d.firstRandomNo)
|
|
onEnterPressed: {
|
|
nextButton.clicked();
|
|
}
|
|
},
|
|
BackupSeedStepBase {
|
|
id: confirmSecondWord
|
|
objectName: "BackupSeedModal_BackupSeedStepBase_confirmSecondWord"
|
|
titleText: qsTr("Confirm word #%1 of your seed phrase").arg(d.secondRandomNo + 1)
|
|
wordRandomNumber: d.secondRandomNo
|
|
wordAtRandomNumber: root.privacyStore.getMnemonicWordAtIndex(d.secondRandomNo)
|
|
},
|
|
ConfirmStoringSeedPhrasePanel {
|
|
id: confirmStoringSeedPhrase
|
|
}
|
|
]
|
|
}
|