2020-08-04 22:22:51 +00:00
import QtQuick 2.14
import QtQuick . Layouts 1.3
import QtQuick . Controls 2.14
2021-09-28 15:04:06 +00:00
import utils 1.0
2021-10-25 14:33:41 +00:00
2021-10-27 21:27:49 +00:00
import shared . popups 1.0
import shared . status 1.0
2021-10-06 09:16:39 +00:00
import StatusQ . Core 0.1
import StatusQ . Core . Theme 0.1
import StatusQ . Controls 0.1
import StatusQ . Components 0.1
2020-08-04 22:22:51 +00:00
Item {
2021-10-06 09:16:39 +00:00
id: root
property var store
2020-08-26 21:13:26 +00:00
property string username: ""
signal backBtnClicked ( ) ;
2020-08-27 16:06:53 +00:00
signal usernameRegistered ( userName: string ) ;
2020-08-26 21:13:26 +00:00
2021-10-06 09:16:39 +00:00
StatusBaseText {
2020-08-04 22:22:51 +00:00
id: sectionTitle
//% "ENS usernames"
text: qsTrId ( "ens-usernames" )
anchors.left: parent . left
anchors.leftMargin: 24
anchors.top: parent . top
anchors.topMargin: 24
font.weight: Font . Bold
font.pixelSize: 20
}
2020-11-03 10:29:56 +00:00
Loader {
2020-08-27 16:06:53 +00:00
id: transactionDialog
2020-11-03 10:29:56 +00:00
function open ( ) {
this . active = true
this . item . open ( )
}
function closed ( ) {
this . active = false // kill an opened instance
}
2021-07-27 14:04:05 +00:00
sourceComponent: StatusSNTTransactionModal {
assetPrice: "10"
2021-10-06 09:16:39 +00:00
contractAddress: root . store . ensRegisterAddress
2021-07-27 14:04:05 +00:00
estimateGasFunction: function ( selectedAccount , uuid ) {
if ( username === "" || ! selectedAccount ) return 380000 ;
2021-10-06 09:16:39 +00:00
return root . store . registerEnsGasEstimate ( username , selectedAccount . address )
2021-07-27 14:04:05 +00:00
}
2021-07-05 12:34:56 +00:00
onSendTransaction: function ( selectedAddress , gasLimit , gasPrice , tipLimit , overallLimit , password ) {
2021-10-06 09:16:39 +00:00
return root . store . registerEns ( username ,
2021-07-27 14:04:05 +00:00
selectedAddress ,
gasLimit ,
2021-07-05 12:34:56 +00:00
tipLimit ,
overallLimit ,
2021-07-27 14:04:05 +00:00
gasPrice ,
password )
}
onSuccess: function ( ) {
usernameRegistered ( username ) ;
2021-07-19 21:57:57 +00:00
}
2020-11-03 10:29:56 +00:00
onClosed: {
transactionDialog . closed ( )
}
}
2020-08-27 16:06:53 +00:00
}
2021-10-06 09:16:39 +00:00
// TODO: Replace with StatusModal
2020-08-26 21:13:26 +00:00
ModalPopup {
id: popup
2020-09-14 12:12:47 +00:00
//% "Terms of name registration"
title: qsTrId ( "ens-terms-header" )
2020-08-26 21:13:26 +00:00
ScrollView {
ScrollBar.horizontal.policy: ScrollBar . AlwaysOff
ScrollBar.vertical.policy: ScrollBar . AlwaysOn
width: parent . width
height: parent . height
clip: true
Column {
spacing: Style . current . halfPadding
height: childrenRect . height
width: parent . width
2021-10-06 09:16:39 +00:00
StatusBaseText {
2020-09-14 12:12:47 +00:00
//% "Funds are deposited for 1 year. Your SNT will be locked, but not spent."
text: qsTrId ( "ens-terms-point-1" )
2020-08-26 21:13:26 +00:00
wrapMode: Text . WordWrap
anchors.left: parent . left
anchors.right: parent . right
}
2021-10-06 09:16:39 +00:00
StatusBaseText {
2020-09-14 12:12:47 +00:00
//% "After 1 year, you can release the name and get your deposit back, or take no action to keep the name."
text: qsTrId ( "ens-terms-point-2" )
2020-08-26 21:13:26 +00:00
wrapMode: Text . WordWrap
anchors.left: parent . left
anchors.right: parent . right
}
2021-10-06 09:16:39 +00:00
StatusBaseText {
2020-09-14 12:12:47 +00:00
//% "If terms of the contract change — e.g. Status makes contract upgrades — user has the right to release the username regardless of time held."
text: qsTrId ( "ens-terms-point-3" )
2020-08-26 21:13:26 +00:00
wrapMode: Text . WordWrap
anchors.left: parent . left
anchors.right: parent . right
}
2021-10-06 09:16:39 +00:00
StatusBaseText {
2020-09-14 12:12:47 +00:00
//% "The contract controller cannot access your deposited funds. They can only be moved back to the address that sent them."
text: qsTrId ( "ens-terms-point-4" )
2020-08-26 21:13:26 +00:00
wrapMode: Text . WordWrap
anchors.left: parent . left
anchors.right: parent . right
}
2021-10-06 09:16:39 +00:00
StatusBaseText {
2020-09-14 12:12:47 +00:00
//% "Your address(es) will be publicly associated with your ENS name."
text: qsTrId ( "ens-terms-point-5" )
2020-08-26 21:13:26 +00:00
wrapMode: Text . WordWrap
anchors.left: parent . left
anchors.right: parent . right
}
2021-10-06 09:16:39 +00:00
StatusBaseText {
2020-09-14 12:12:47 +00:00
//% "Usernames are created as subdomain nodes of stateofus.eth and are subject to the ENS smart contract terms."
text: qsTrId ( "ens-terms-point-6" )
2020-08-26 21:13:26 +00:00
wrapMode: Text . WordWrap
anchors.left: parent . left
anchors.right: parent . right
}
2021-10-06 09:16:39 +00:00
StatusBaseText {
2020-09-14 12:12:47 +00:00
//% "You authorize the contract to transfer SNT on your behalf. This can only occur when you approve a transaction to authorize the transfer."
text: qsTrId ( "ens-terms-point-7" )
2020-08-26 21:13:26 +00:00
wrapMode: Text . WordWrap
anchors.left: parent . left
anchors.right: parent . right
}
2021-10-06 09:16:39 +00:00
StatusBaseText {
2020-09-14 12:12:47 +00:00
//% "These terms are guaranteed by the smart contract logic at addresses:"
text: qsTrId ( "ens-terms-point-8" )
2020-08-26 21:13:26 +00:00
wrapMode: Text . WordWrap
anchors.left: parent . left
anchors.right: parent . right
font.weight: Font . Bold
}
2021-10-06 09:16:39 +00:00
StatusBaseText {
2020-09-14 12:12:47 +00:00
//% "%1 (Status UsernameRegistrar)."
2021-10-06 09:16:39 +00:00
text: qsTrId ( "-1--status-usernameregistrar--" ) . arg ( root . store . getEnsUsernameRegistrar ( ) )
2020-08-26 21:13:26 +00:00
wrapMode: Text . WordWrap
anchors.left: parent . left
anchors.right: parent . right
font.family: Style . current . fontHexRegular . name
}
2021-10-06 09:16:39 +00:00
StatusBaseText {
2021-02-18 16:36:05 +00:00
//% "<a href='%1%2'>Look up on Etherscan</a>"
2021-10-06 09:16:39 +00:00
text: qsTrId ( "-a-href---1-2--look-up-on-etherscan--a-" ) . arg ( root . store . etherscanLink . replace ( "/tx" , "/address" ) ) . arg ( root . store . getEnsUsernameRegistrar ( ) )
2020-08-26 21:13:26 +00:00
anchors.left: parent . left
anchors.right: parent . right
2020-12-29 20:33:54 +00:00
onLinkActivated: appMain . openLink ( link )
2020-08-26 21:13:26 +00:00
MouseArea {
anchors.fill: parent
acceptedButtons: Qt . NoButton // we don't want to eat clicks on the Text
cursorShape: parent . hoveredLink ? Qt.PointingHandCursor : Qt . ArrowCursor
}
}
2021-10-06 09:16:39 +00:00
StatusBaseText {
2020-09-14 12:12:47 +00:00
//% "%1 (ENS Registry)."
2021-10-06 09:16:39 +00:00
text: qsTrId ( "-1--ens-registry--" ) . arg ( root . store . getEnsRegistry ( ) )
2020-08-26 21:13:26 +00:00
wrapMode: Text . WordWrap
anchors.left: parent . left
anchors.right: parent . right
font.family: Style . current . fontHexRegular . name
}
2021-10-06 09:16:39 +00:00
StatusBaseText {
2021-02-18 16:36:05 +00:00
//% "<a href='%1%2'>Look up on Etherscan</a>"
2021-10-06 09:16:39 +00:00
text: qsTrId ( "-a-href---1-2--look-up-on-etherscan--a-" ) . arg ( root . store . etherscanLink . replace ( "/tx" , "/address" ) ) . arg ( root . store . getEnsRegistry ( ) )
2020-08-26 21:13:26 +00:00
anchors.left: parent . left
anchors.right: parent . right
2020-12-29 20:33:54 +00:00
onLinkActivated: appMain . openLink ( link )
2020-08-26 21:13:26 +00:00
MouseArea {
anchors.fill: parent
acceptedButtons: Qt . NoButton // we don't want to eat clicks on the Text
cursorShape: parent . hoveredLink ? Qt.PointingHandCursor : Qt . ArrowCursor
}
}
}
}
}
2020-08-04 22:22:51 +00:00
ScrollView {
id: sview
clip: true
ScrollBar.horizontal.policy: ScrollBar . AlwaysOff
contentHeight: contentItem . childrenRect . height
anchors.top: sectionTitle . bottom
anchors.topMargin: Style . current . padding
anchors.bottom: startBtn . top
anchors.bottomMargin: Style . current . padding
anchors.left: parent . left
anchors.right: parent . right
Item {
id: contentItem
anchors.right: parent . right ;
anchors.left: parent . left ;
2020-08-26 21:13:26 +00:00
Rectangle {
id: circleAt
2020-08-04 22:22:51 +00:00
anchors.top: parent . top
anchors.topMargin: 24
2020-08-26 21:13:26 +00:00
anchors.horizontalCenter: parent . horizontalCenter
width: 60
height: 60
radius: 120
color: Style . current . blue
2021-10-06 09:16:39 +00:00
StatusBaseText {
2020-08-26 21:13:26 +00:00
text: "@"
opacity: 0.7
font.weight: Font . Bold
font.pixelSize: 18
color: Style . current . white
anchors.horizontalCenter: parent . horizontalCenter
anchors.verticalCenter: parent . verticalCenter
}
}
2021-10-06 09:16:39 +00:00
StatusBaseText {
2020-08-26 21:13:26 +00:00
id: ensUsername
text: username + ".stateofus.eth"
2020-08-04 22:22:51 +00:00
font.weight: Font . Bold
2020-08-26 21:13:26 +00:00
font.pixelSize: 18
anchors.top: circleAt . bottom
anchors.topMargin: 24
2020-08-04 22:22:51 +00:00
anchors.left: parent . left
anchors.right: parent . right
horizontalAlignment: Text . AlignHCenter
2020-08-26 21:13:26 +00:00
}
2021-10-06 09:16:39 +00:00
StatusDescriptionListItem {
2020-08-26 21:13:26 +00:00
id: walletAddressLbl
2020-09-14 12:12:47 +00:00
//% "Wallet address"
2021-10-06 09:16:39 +00:00
title: qsTrId ( "wallet-address" )
subTitle: root . store . getWalletDefaultAddress ( )
tooltip.text: qsTr ( "Copied to clipboard!" )
icon.name: "copy"
iconButton.onClicked: {
root . store . copyToClipboard ( subTitle )
tooltip . visible = ! tooltip . visible
}
2020-08-26 21:13:26 +00:00
anchors.top: ensUsername . bottom
anchors.topMargin: 24
}
2021-10-06 09:16:39 +00:00
StatusDescriptionListItem {
2020-08-26 21:13:26 +00:00
id: keyLbl
2020-09-14 12:12:47 +00:00
//% "Key"
2021-10-06 09:16:39 +00:00
title: qsTrId ( "key" )
subTitle: {
let pubKey = root . store . pubKey ;
2020-08-26 21:13:26 +00:00
return pubKey . substring ( 0 , 20 ) + "..." + pubKey . substring ( pubKey . length - 20 ) ;
}
2021-10-06 09:16:39 +00:00
tooltip.text: qsTr ( "Copied to clipboard!" )
icon.name: "copy"
iconButton.onClicked: {
root . store . copyToClipboard ( root . store . pubKey )
tooltip . visible = ! tooltip . visible
}
2020-08-26 21:13:26 +00:00
anchors.top: walletAddressLbl . bottom
anchors.topMargin: 24
}
2020-11-27 19:32:49 +00:00
StatusCheckBox {
2020-08-26 21:13:26 +00:00
id: termsAndConditionsCheckbox
anchors.top: keyLbl . bottom
anchors.topMargin: Style . current . padding
anchors.left: parent . left
anchors.leftMargin: 24
}
2021-10-06 09:16:39 +00:00
StatusBaseText {
2020-09-14 12:12:47 +00:00
//% "Agree to <a href=\"#\">Terms of name registration.</a> I understand that my wallet address will be publicly connected to my username."
text: qsTrId ( "agree-to--a-href-------terms-of-name-registration---a--i-understand-that-my-wallet-address-will-be-publicly-connected-to-my-username-" )
2020-08-26 21:13:26 +00:00
anchors.left: termsAndConditionsCheckbox . right
anchors.right: parent . right
2020-08-04 22:22:51 +00:00
wrapMode: Text . WordWrap
2020-08-26 21:13:26 +00:00
anchors.top: termsAndConditionsCheckbox . top
onLinkActivated: popup . open ( )
MouseArea {
anchors.fill: parent
acceptedButtons: Qt . NoButton // we don't want to eat clicks on the Text
cursorShape: parent . hoveredLink ? Qt.PointingHandCursor : Qt . ArrowCursor
}
2020-08-04 22:22:51 +00:00
}
}
}
2020-09-29 08:51:16 +00:00
StatusButton {
2020-08-26 21:13:26 +00:00
anchors.bottom: parent . bottom
anchors.bottomMargin: Style . current . padding
anchors.left: parent . left
anchors.leftMargin: Style . current . padding
2020-09-14 12:12:47 +00:00
//% "Back"
2020-09-29 08:51:16 +00:00
text: qsTrId ( "back" )
2020-08-26 21:13:26 +00:00
onClicked: backBtnClicked ( )
}
Item {
anchors.top: startBtn . top
anchors.right: startBtn . left
anchors.rightMargin: Style . current . padding
width: childrenRect . width
Image {
id: image1
height: 50
2021-07-02 08:55:31 +00:00
width: height
2021-09-28 15:04:06 +00:00
source: Style . svg ( "status-logo" )
2021-07-02 08:55:31 +00:00
sourceSize: Qt . size ( width , height )
2020-08-26 21:13:26 +00:00
}
2021-10-06 09:16:39 +00:00
StatusBaseText {
2020-08-26 21:13:26 +00:00
id: ensPriceLbl
2020-09-14 12:12:47 +00:00
//% "10 SNT"
text: qsTrId ( "ens-10-SNT" )
2020-08-26 21:13:26 +00:00
anchors.left: image1 . right
anchors.leftMargin: 5
anchors.top: image1 . top
2021-10-06 09:16:39 +00:00
color: Theme . palette . directColor1
2020-08-26 21:13:26 +00:00
font.pixelSize: 14
}
2021-10-06 09:16:39 +00:00
StatusBaseText {
2020-09-14 12:12:47 +00:00
//% "Deposit"
text: qsTrId ( "ens-deposit" )
2020-08-26 21:13:26 +00:00
anchors.left: image1 . right
anchors.leftMargin: 5
anchors.topMargin: 5
anchors.top: ensPriceLbl . bottom
2021-10-06 09:16:39 +00:00
color: Theme . palette . directColor7
2020-08-26 21:13:26 +00:00
font.pixelSize: 14
}
}
2020-09-29 08:51:16 +00:00
StatusButton {
2020-08-04 22:22:51 +00:00
id: startBtn
anchors.bottom: parent . bottom
anchors.bottomMargin: Style . current . padding
2020-08-26 21:13:26 +00:00
anchors.right: parent . right
anchors.rightMargin: Style . current . padding
2021-10-06 09:16:39 +00:00
text: parseFloat ( root . store . getSntBalance ( ) ) < 10 ?
2020-09-14 12:12:47 +00:00
//% "Not enough SNT"
qsTrId ( "not-enough-snt" ) :
//% "Register"
qsTrId ( "ens-register" )
2021-10-06 09:16:39 +00:00
enabled: parseFloat ( root . store . getSntBalance ( ) ) >= 10 && termsAndConditionsCheckbox . checked
2021-08-25 08:09:33 +00:00
onClicked: appSettings . isWalletEnabled ? transactionDialog . open ( ) : confirmationPopup . open ( )
}
ConfirmationDialog {
id: confirmationPopup
showCancelButton: true
confirmationText: qsTr ( "This feature is experimental and is meant for testing purposes by core contributors and the community. It's not meant for real use and makes no claims of security or integrity of funds or data. Use at your own risk." )
confirmButtonLabel: qsTr ( "I understand" )
onConfirmButtonClicked: {
appSettings . isWalletEnabled = true
close ( )
transactionDialog . open ( )
}
onCancelButtonClicked: {
close ( )
}
2020-08-04 22:22:51 +00:00
}
2020-09-14 12:12:47 +00:00
}