status-desktop/ui/onboarding/GenKey.qml

367 lines
12 KiB
QML

import QtQuick 2.3
import QtQuick.Controls 2.4
import QtQuick.Layouts 1.11
import QtQuick.Window 2.11
import QtQuick.Dialogs 1.3
SwipeView {
id: swipeView
anchors.fill: parent
currentIndex: 0
// property string strGeneratedAccounts: onboardingLogic.generatedAddresses
// property var generatedAccounts: {}
// signal storeAccountAndLoginResult(response: var)
signal storeAccountAndLoginResult()
onCurrentItemChanged: {
currentItem.txtPassword.focus = true;
}
ListModel {
id: generatedAccountsModel
}
Item {
id: wizardStep2
property int selectedIndex: 0
ColumnLayout {
id: columnLayout
width: 620
height: 427
Text {
text: "Generated accounts"
font.pointSize: 36
anchors.top: parent.top
anchors.topMargin: 20
anchors.horizontalCenter: parent.horizontalCenter
}
// Item {
// Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
// transformOrigin: Item.Center
// anchors.top: parent.top
// anchors.topMargin: 50
Row {
Layout.fillHeight: true
Layout.fillWidth: true
spacing: 10
ButtonGroup {
id: accountGroup
}
Component {
id: addressViewDelegate
// Item {
// id: addressViewContainer
// height: 56
// anchors.right: parent.right
// anchors.rightMargin: 0
// anchors.left: parent.left
// anchors.leftMargin: 0
// Text {
// text: "address"
// font.pointSize: 24
// anchors.verticalCenter: parent.verticalCenter
// font.pixelSize: 14
// font.strikeout: false
// anchors.left: parent.left
// anchors.leftMargin: 72
// }
// }
Item {
height: 56
// anchors.leftMargin: 20
// anchors.rightMargin: 20
anchors.right: parent.right
anchors.rightMargin: 0
anchors.left: parent.left
anchors.leftMargin: 0
// Text {
// id: keyValue
// text: key
// anchors.verticalCenter: parent.verticalCenter
// font.pixelSize: 14
// font.strikeout: false
// anchors.left: parent.left
// anchors.leftMargin: 72
// }
Row {
RadioButton {
// checked: index == 0 ? true : false
checked: false
ButtonGroup.group: accountGroup
// onClicked: {
// wizardStep2.selectedIndex = index;
// }
}
Column {
Image {
source: identicon
// source: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAF0lEQVR42mPk+c9Qz0ACYBzVMKoBOwAA3IgShVgwlIUAAAAASUVORK5CYII="
}
}
Column {
Text {
text: username
}
Text {
text: key
width: 160
elide: Text.ElideMiddle
}
}
}
}
}
ListView {
id: addressesView
contentWidth: 200
model: onboardingModel
delegate: addressViewDelegate
Layout.fillHeight: true
Layout.fillWidth: true
anchors.topMargin: 36
anchors.fill: parent
// model: ListModel {
// ListElement {
// username: "Bill Smith"
// key: "0x123"
// }
// ListElement {
// username: "Slushy Welltodo Woodborer"
// key: "0x234"
// }
// }
}
// Repeater {
// model: generatedAccountsModel
// Rectangle {
// height: 32
// width: 32
// anchors.leftMargin: 20
// anchors.rightMargin: 20
// Row {
// RadioButton {
// checked: index == 0 ? true : false
// ButtonGroup.group: accountGroup
// onClicked: {
// wizardStep2.selectedIndex = index;
// }
// }
// Column {
// Image {
// source: identicon
// }
// }
// Column {
// Text {
// text: alias
// }
// Text {
// text: publicKey
// width: 160
// elide: Text.ElideMiddle
// }
// }
// }
// }
// }
}
// }
Button {
text: "Select"
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: parent.bottom
anchors.bottomMargin: 20
onClicked: {
console.log("button: " + wizardStep2.selectedIndex);
swipeView.incrementCurrentIndex();
}
}
}
}
Item {
id: wizardStep3
property Item txtPassword: txtPassword
Text {
text: "Enter password"
font.pointSize: 36
anchors.top: parent.top
anchors.topMargin: 20
anchors.horizontalCenter: parent.horizontalCenter
}
Rectangle {
color: "#EEEEEE"
anchors.left: parent.left
anchors.right: parent.right
anchors.centerIn: parent
height: 32
width: parent.width - 40
TextInput {
id: txtPassword
anchors.fill: parent
focus: true
echoMode: TextInput.Password
selectByMouse: true
}
}
Button {
text: "Next"
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: parent.bottom
anchors.bottomMargin: 20
onClicked: {
console.log("password: " + txtPassword.text);
swipeView.incrementCurrentIndex();
}
}
}
Item {
id: wizardStep4
property Item txtPassword: txtConfirmPassword
Text {
text: "Confirm password"
font.pointSize: 36
anchors.top: parent.top
anchors.topMargin: 20
anchors.horizontalCenter: parent.horizontalCenter
}
Rectangle {
color: "#EEEEEE"
anchors.left: parent.left
anchors.right: parent.right
anchors.centerIn: parent
height: 32
width: parent.width - 40
TextInput {
id: txtConfirmPassword
anchors.fill: parent
focus: true
echoMode: TextInput.Password
selectByMouse: true
}
}
MessageDialog {
id: passwordsDontMatchError
title: "Error"
text: "Passwords don't match"
icon: StandardIcon.Warning
standardButtons: StandardButton.Ok
onAccepted: {
txtConfirmPassword.clear();
swipeView.currentIndex = 1
txtPassword.focus = true
}
}
MessageDialog {
id: storeAccountAndLoginError
title: "Error storing account and logging in"
text: "An error occurred while storing your account and logging in: "
// icon: StandardIcon.Error
standardButtons: StandardButton.Ok
}
Button {
text: "Finish"
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: parent.bottom
anchors.bottomMargin: 20
onClicked: {
console.log("confirm clicked " + txtConfirmPassword.text + " : " + txtPassword.text);
if (txtConfirmPassword.text != txtPassword.text) {
return passwordsDontMatchError.open();
}
const selectedAccountIndex = wizardStep2.selectedIndex
const storeResponse = onboardingModel.storeAccountAndLogin(selectedAccountIndex, txtPassword.text)
// const storeResponse = onboardingModel.storeAccountAndLogin(JSON.stringify(selectedAccount), txtPassword.text)
// const selectedAccount = swipeView.generatedAccounts[wizardStep2.selectedIndex];
// const storeResponse = onboardingModel.storeAccountAndLogin(JSON.stringify(selectedAccount), txtPassword.text)
const response = JSON.parse(storeResponse);
// if (response.error) {
// storeAccountAndLoginError.text += response.error;
// return storeAccountAndLoginError.open();
// }
console.log("=======");
console.log(storeResponse);
console.log("=======")
// swipeView.storeAccountAndLoginResult(response);
swipeView.storeAccountAndLoginResult();
}
}
}
// handle the serialised result coming from node and deserialise into JSON
// TODO: maybe we should figure out a clever to avoid this?
// onStrGeneratedAccountsChanged: {
// if (generatedAccounts === null || generatedAccounts === "") {
// return;
// }
// swipeView.generatedAccounts = JSON.parse(strGeneratedAccounts);
// }
// handle deserialised data coming from the node
// onGeneratedAccountsChanged: {
// generatedAccountsModel.clear();
// generatedAccounts.forEach(acc => {
// generatedAccountsModel.append({
// publicKey: acc.publicKey,
// alias: onboardingLogic.generateAlias(acc.publicKey),
// identicon: onboardingLogic.identicon(acc.publicKey)
// });
// });
// }
}
/*##^##
Designer {
D{i:0;autoSize:true;height:480;width:640}
}
##^##*/