2022-03-07 22:59:38 +00:00
import QtQuick 2.13
import QtQuick . Layouts 1.12
import StatusQ . Components 0.1
import StatusQ . Controls 0.1
import StatusQ . Core 0.1
import StatusQ . Core . Theme 0.1
import shared . panels 1.0
import utils 1.0
import shared . controls 1.0
import "../popups"
import "../stores"
Item {
id: root
property string pubKey
property string address
property string displayName
signal createPassword ( )
state: "username"
2022-03-29 19:15:42 +00:00
Component.onCompleted: {
2022-03-15 22:27:36 +00:00
if ( ! ! OnboardingStore . onboardingModuleInst . importedAccountPubKey ) {
root . address = OnboardingStore . onboardingModuleInst . importedAccountAddress ;
2022-03-29 19:15:42 +00:00
root . pubKey = OnboardingStore . onboardingModuleInst . importedAccountPubKey ;
}
}
Loader {
2022-03-15 22:27:36 +00:00
active: ! OnboardingStore . onboardingModuleInst . importedAccountPubKey
2022-03-29 19:15:42 +00:00
sourceComponent: ListView {
model: OnboardingStore . onboardingModuleInst . accountsModel
delegate: Item {
Component.onCompleted: {
if ( index === 0 ) {
root . address = model . address ;
2022-03-15 22:27:36 +00:00
root . pubKey = model . pubKey ;
2022-03-29 19:15:42 +00:00
}
}
2022-03-07 22:59:38 +00:00
}
}
}
ColumnLayout {
anchors.centerIn: parent
spacing: Style . current . padding
StyledText {
id: usernameText
text: qsTr ( "Your profile" )
font.weight: Font . Bold
font.pixelSize: 22
Layout.alignment: Qt . AlignHCenter
}
StyledText {
id: txtDesc
Layout.preferredWidth: ( root . state === "username" ) ? 338 : 643
color: Style . current . secondaryText
text: qsTr ( "Longer and unusual names are better as they are less likely to be used by someone else." )
horizontalAlignment: Text . AlignHCenter
wrapMode: Text . WordWrap
Layout.alignment: Qt . AlignHCenter
font.pixelSize: 15
}
Item {
implicitWidth: 100
implicitHeight: 100
Layout.alignment: Qt . AlignHCenter
StatusSmartIdenticon {
id: userImage
2022-04-06 11:12:11 +00:00
image {
width: 80
height: 80
isIdenticon: false
}
icon {
width: 80
height: 80
letterSize: 32
color: Theme . palette . miscColor5
charactersLen: 2
}
ringSettings {
ringSpecModel: Utils . getColorHashAsJson ( root . pubKey )
}
2022-03-07 22:59:38 +00:00
}
StatusRoundButton {
id: updatePicButton
width: 40
height: 40
anchors.top: parent . top
anchors.right: parent . right
type: StatusFlatRoundButton . Type . Secondary
icon.name: "add"
onClicked: {
2022-04-08 09:49:32 +00:00
uploadProfilePicPopup . selectedImage = userImage . image . source
2022-03-07 22:59:38 +00:00
uploadProfilePicPopup . open ( ) ;
}
}
}
StatusInput {
id: nameInput
implicitWidth: 328
2022-04-01 08:06:39 +00:00
Layout.preferredHeight: 78
2022-03-07 22:59:38 +00:00
Layout.alignment: Qt . AlignHCenter
input.placeholderText: qsTr ( "Display name" )
input.edit.font.capitalization: Font . Capitalize
input.rightComponent: RoundedIcon {
width: 14
height: 14
iconWidth: 14
iconHeight: 14
2022-04-07 20:30:09 +00:00
visible: ( nameInput . input . text . length > 0 )
2022-03-07 22:59:38 +00:00
color: "transparent"
source: Style . svg ( "close-filled" )
onClicked: {
nameInput . input . edit . clear ( ) ;
}
}
2022-04-05 20:15:43 +00:00
errorMessageCmp.wrapMode: Text . NoWrap
errorMessageCmp.horizontalAlignment: Text . AlignHCenter
2022-04-01 08:06:39 +00:00
validators: Constants . validators . displayName
2022-03-07 22:59:38 +00:00
onTextChanged: {
userImage . name = text ;
}
}
StyledText {
id: chatKeyTxt
color: Style . current . secondaryText
2022-03-30 07:09:39 +00:00
text: qsTr ( "Chatkey:" ) + " " + Utils . getCompressedPk ( root . pubKey )
2022-03-07 22:59:38 +00:00
horizontalAlignment: Text . AlignHCenter
wrapMode: Text . WordWrap
Layout.alignment: Qt . AlignHCenter
font.pixelSize: 15
}
Item {
id: chainsChatKeyImg
Layout.alignment: Qt . AlignHCenter
Layout.preferredWidth: 181
Layout.preferredHeight: 84
Image {
anchors.horizontalCenter: parent . horizontalCenter
source: Style . png ( "onboarding/chains" )
}
EmojiHash {
anchors.bottom: parent . bottom
publicKey: root . pubKey
}
StatusSmartIdenticon {
id: userImageCopy
anchors.bottom: parent . bottom
anchors.right: parent . right
icon.width: 44
icon.height: 44
icon.color: "transparent"
ringSettings { ringSpecModel: Utils . getColorHashAsJson ( root . pubKey ) }
}
}
StatusButton {
Layout.alignment: Qt . AlignHCenter | Qt . AlignTop
Layout.topMargin: 125
2022-04-01 08:06:39 +00:00
enabled: ! ! nameInput . text && nameInput . valid
2022-03-07 22:59:38 +00:00
text: qsTr ( "Next" )
onClicked: {
if ( root . state === "username" ) {
if ( OnboardingStore . accountCreated ) {
OnboardingStore . updatedDisplayName ( nameInput . text ) ;
}
2022-03-15 22:27:36 +00:00
OnboardingStore . displayName = nameInput . text
2022-03-07 22:59:38 +00:00
root . displayName = nameInput . text ;
root . state = "chatkey" ;
} else {
createPassword ( ) ;
}
}
}
UploadProfilePicModal {
id: uploadProfilePicPopup
2022-04-07 20:07:52 +00:00
anchors.centerIn: parent
2022-04-06 11:12:11 +00:00
onProfileImageReady: {
userImage . image . source = croppedImg
2022-04-04 12:45:27 +00:00
}
2022-03-07 22:59:38 +00:00
}
}
states: [
State {
name: "username"
PropertyChanges {
target: usernameText
text: qsTr ( "Your profile" )
}
PropertyChanges {
target: txtDesc
text: qsTr ( "Longer and unusual names are better as they are less likely to be used by someone else." )
}
PropertyChanges {
target: chatKeyTxt
visible: false
}
PropertyChanges {
target: chainsChatKeyImg
visible: false
}
PropertyChanges {
target: userImageCopy
visible: false
}
PropertyChanges {
target: updatePicButton
visible: true
}
PropertyChanges {
target: nameInput
visible: true
}
} ,
State {
name: "chatkey"
PropertyChanges {
target: usernameText
text: qsTr ( "Your emojihash and identicon ring" )
}
PropertyChanges {
target: txtDesc
text: qsTr ( "This set of emojis and coloured ring around your avatar are unique and represent your chat key, so your friends can easily distinguish you from potential impersonators." )
}
PropertyChanges {
target: chatKeyTxt
visible: true
}
PropertyChanges {
target: chainsChatKeyImg
visible: true
}
PropertyChanges {
target: userImageCopy
visible: true
}
PropertyChanges {
target: updatePicButton
visible: false
}
PropertyChanges {
target: nameInput
visible: false
}
}
]
transitions: [
Transition {
from: "*"
to: "*"
SequentialAnimation {
PropertyAction {
target: root
property: "opacity"
value: 0.0
}
PropertyAction {
target: root
property: "opacity"
value: 1.0
}
}
}
]
}