import QtQuick 2.14
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.14
import "../../../../../imports"
import "../../../../../shared"
import "../../../../../shared/status"
Item {
property string username: ""
signal backBtnClicked();
signal usernameRegistered(userName: string);
StyledText {
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
}
Loader {
id: transactionDialog
function open() {
this.active = true
this.item.open()
}
function closed() {
this.active = false // kill an opened instance
}
sourceComponent: StatusSNTTransactionModal {
assetPrice: "10"
contractAddress: utilsModel.ensRegisterAddress
estimateGasFunction: function(selectedAccount, uuid) {
if (username === "" || !selectedAccount) return 380000;
return profileModel.ens.registerENSGasEstimate(username, selectedAccount.address)
}
onSendTransaction: function(selectedAddress, gasLimit, gasPrice, password) {
return profileModel.ens.registerENS(username,
selectedAddress,
gasLimit,
gasPrice,
password)
}
onSuccess: function(){
usernameRegistered(username);
}
onClosed: {
transactionDialog.closed()
}
}
}
ModalPopup {
id: popup
//% "Terms of name registration"
title: qsTrId("ens-terms-header")
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
StyledText {
//% "Funds are deposited for 1 year. Your SNT will be locked, but not spent."
text: qsTrId("ens-terms-point-1")
wrapMode: Text.WordWrap
anchors.left: parent.left
anchors.right: parent.right
}
StyledText {
//% "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")
wrapMode: Text.WordWrap
anchors.left: parent.left
anchors.right: parent.right
}
StyledText {
//% "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")
wrapMode: Text.WordWrap
anchors.left: parent.left
anchors.right: parent.right
}
StyledText {
//% "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")
wrapMode: Text.WordWrap
anchors.left: parent.left
anchors.right: parent.right
}
StyledText {
//% "Your address(es) will be publicly associated with your ENS name."
text: qsTrId("ens-terms-point-5")
wrapMode: Text.WordWrap
anchors.left: parent.left
anchors.right: parent.right
}
StyledText {
//% "Usernames are created as subdomain nodes of stateofus.eth and are subject to the ENS smart contract terms."
text: qsTrId("ens-terms-point-6")
wrapMode: Text.WordWrap
anchors.left: parent.left
anchors.right: parent.right
}
StyledText {
//% "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")
wrapMode: Text.WordWrap
anchors.left: parent.left
anchors.right: parent.right
}
StyledText {
//% "These terms are guaranteed by the smart contract logic at addresses:"
text: qsTrId("ens-terms-point-8")
wrapMode: Text.WordWrap
anchors.left: parent.left
anchors.right: parent.right
font.weight: Font.Bold
}
StyledText {
//% "%1 (Status UsernameRegistrar)."
text: qsTrId("-1--status-usernameregistrar--").arg(profileModel.ens.getUsernameRegistrar())
wrapMode: Text.WordWrap
anchors.left: parent.left
anchors.right: parent.right
font.family: Style.current.fontHexRegular.name
}
StyledText {
//% "Look up on Etherscan"
text: qsTrId("-a-href---1-2--look-up-on-etherscan--a-").arg(walletModel.utilsView.etherscanLink.replace("/tx", "/address")).arg(profileModel.ens.getUsernameRegistrar())
anchors.left: parent.left
anchors.right: parent.right
onLinkActivated: appMain.openLink(link)
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.NoButton // we don't want to eat clicks on the Text
cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
}
}
StyledText {
//% "%1 (ENS Registry)."
text: qsTrId("-1--ens-registry--").arg(profileModel.ens.getENSRegistry())
wrapMode: Text.WordWrap
anchors.left: parent.left
anchors.right: parent.right
font.family: Style.current.fontHexRegular.name
}
StyledText {
//% "Look up on Etherscan"
text: qsTrId("-a-href---1-2--look-up-on-etherscan--a-").arg(walletModel.utilsView.etherscanLink.replace("/tx", "/address")).arg(profileModel.ens.getENSRegistry())
anchors.left: parent.left
anchors.right: parent.right
onLinkActivated: appMain.openLink(link)
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.NoButton // we don't want to eat clicks on the Text
cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
}
}
}
}
}
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;
Rectangle {
id: circleAt
anchors.top: parent.top
anchors.topMargin: 24
anchors.horizontalCenter: parent.horizontalCenter
width: 60
height: 60
radius: 120
color: Style.current.blue
StyledText {
text: "@"
opacity: 0.7
font.weight: Font.Bold
font.pixelSize: 18
color: Style.current.white
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
}
}
StyledText {
id: ensUsername
text: username + ".stateofus.eth"
font.weight: Font.Bold
font.pixelSize: 18
anchors.top: circleAt.bottom
anchors.topMargin: 24
anchors.left: parent.left
anchors.right: parent.right
horizontalAlignment: Text.AlignHCenter
}
TextWithLabel {
id: walletAddressLbl
//% "Wallet address"
label: qsTrId("wallet-address")
text: walletModel.getDefaultAddress()
textToCopy: text
anchors.left: parent.left
anchors.leftMargin: 24
anchors.top: ensUsername.bottom
anchors.topMargin: 24
}
TextWithLabel {
id: keyLbl
//% "Key"
label: qsTrId("key")
text: {
let pubKey = profileModel.profile.pubKey;
return pubKey.substring(0, 20) + "..." + pubKey.substring(pubKey.length - 20);
}
textToCopy: profileModel.profile.pubKey
anchors.left: parent.left
anchors.leftMargin: 24
anchors.top: walletAddressLbl.bottom
anchors.topMargin: 24
}
StatusCheckBox {
id: termsAndConditionsCheckbox
anchors.top: keyLbl.bottom
anchors.topMargin: Style.current.padding
anchors.left: parent.left
anchors.leftMargin: 24
}
StyledText {
//% "Agree to Terms of name registration. 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-")
anchors.left: termsAndConditionsCheckbox.right
anchors.right: parent.right
wrapMode: Text.WordWrap
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
}
}
}
}
StatusButton {
anchors.bottom: parent.bottom
anchors.bottomMargin: Style.current.padding
anchors.left: parent.left
anchors.leftMargin: Style.current.padding
//% "Back"
text: qsTrId("back")
onClicked: backBtnClicked()
}
Item {
anchors.top: startBtn.top
anchors.right: startBtn.left
anchors.rightMargin: Style.current.padding
width: childrenRect.width
Image {
id: image1
height: 50
width: height
source: "../../../../../shared/img/status-logo.svg"
sourceSize: Qt.size(width, height)
}
StyledText {
id: ensPriceLbl
//% "10 SNT"
text: qsTrId("ens-10-SNT")
anchors.left: image1.right
anchors.leftMargin: 5
anchors.top: image1.top
color: Style.current.textColor
font.pixelSize: 14
}
StyledText {
//% "Deposit"
text: qsTrId("ens-deposit")
anchors.left: image1.right
anchors.leftMargin: 5
anchors.topMargin: 5
anchors.top: ensPriceLbl.bottom
color: Style.current.secondaryText
font.pixelSize: 14
}
}
StatusButton {
id: startBtn
anchors.bottom: parent.bottom
anchors.bottomMargin: Style.current.padding
anchors.right: parent.right
anchors.rightMargin: Style.current.padding
text: parseFloat(utilsModel.getSNTBalance()) < 10 ?
//% "Not enough SNT"
qsTrId("not-enough-snt") :
//% "Register"
qsTrId("ens-register")
enabled: parseFloat(utilsModel.getSNTBalance()) >= 10 && termsAndConditionsCheckbox.checked
onClicked: transactionDialog.open()
}
}