210 lines
7.7 KiB
QML
210 lines
7.7 KiB
QML
import QtQuick 2.14
|
|
import QtQuick.Layouts 1.3
|
|
import QtQuick.Controls 2.14
|
|
|
|
import StatusQ.Core 0.1
|
|
import StatusQ.Core.Theme 0.1
|
|
import StatusQ.Controls 0.1 as StatusQControls
|
|
import StatusQ.Components 0.1
|
|
|
|
import utils 1.0
|
|
import shared.status 1.0
|
|
import shared.popups 1.0
|
|
|
|
Item {
|
|
id: root
|
|
property var ensUsernamesStore
|
|
property var contactsStore
|
|
property string username: ""
|
|
property string walletAddress: "-"
|
|
property string key: "-"
|
|
property var expiration: 0
|
|
|
|
signal backBtnClicked();
|
|
signal usernameReleased(username: string);
|
|
|
|
StatusBaseText {
|
|
id: sectionTitle
|
|
text: username
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: 24
|
|
anchors.top: parent.top
|
|
anchors.topMargin: 24
|
|
font.weight: Font.Bold
|
|
font.pixelSize: 20
|
|
color: Theme.palette.directColor1
|
|
}
|
|
|
|
Component {
|
|
id: loadingImageComponent
|
|
StatusLoadingIndicator {}
|
|
}
|
|
|
|
Loader {
|
|
id: loadingImg
|
|
active: false
|
|
sourceComponent: loadingImageComponent
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: Style.current.padding
|
|
anchors.top: parent.top
|
|
anchors.topMargin: Style.currentPadding
|
|
}
|
|
|
|
Connections {
|
|
target: root.ensUsernamesStore.ensUsernamesModule
|
|
onDetailsObtained: {
|
|
if(username != (isStatus ? ensName + ".stateofus.eth" : ensName))
|
|
return;
|
|
walletAddressLbl.subTitle = address;
|
|
keyLbl.subTitle = pubkey.substring(0, 20) + "..." + pubkey.substring(pubkey.length - 20);
|
|
walletAddressLbl.visible = true;
|
|
keyLbl.visible = true;
|
|
releaseBtn.visible = isStatus
|
|
releaseBtn.enabled = (Date.now() / 1000) > expirationTime && expirationTime > 0 &&
|
|
root.ensUsernamesStore.preferredUsername != username
|
|
releaseBtn.enabled = true
|
|
expiration = new Date(expirationTime * 1000).getTime()
|
|
}
|
|
onLoading: {
|
|
loadingImg.active = isLoading
|
|
if(!isLoading) return;
|
|
walletAddressLbl.visible = false;
|
|
keyLbl.visible = false;
|
|
releaseBtn.visible = false;
|
|
expiration = 0;
|
|
}
|
|
}
|
|
|
|
StatusDescriptionListItem {
|
|
id: walletAddressLbl
|
|
title: qsTr("Wallet address")
|
|
visible: false
|
|
anchors.top: sectionTitle.bottom
|
|
anchors.topMargin: 24
|
|
asset.name: "copy"
|
|
tooltip.text: qsTr("Copied to clipboard!")
|
|
iconButton.onClicked: {
|
|
root.ensUsernamesStore.copyToClipboard(subTitle)
|
|
tooltip.visible = !tooltip.visible
|
|
}
|
|
}
|
|
StatusDescriptionListItem {
|
|
id: keyLbl
|
|
title: qsTr("Key")
|
|
visible: false
|
|
anchors.top: walletAddressLbl.bottom
|
|
anchors.topMargin: 24
|
|
asset.name: "copy"
|
|
tooltip.text: qsTr("Copied to clipboard!")
|
|
iconButton.onClicked: {
|
|
root.ensUsernamesStore.copyToClipboard(subTitle)
|
|
tooltip.visible = !tooltip.visible
|
|
}
|
|
}
|
|
|
|
Component {
|
|
id: transactionDialogComponent
|
|
SendModal {
|
|
id: releaseEnsModal
|
|
modalHeader: qsTr("Release your username")
|
|
interactive: false
|
|
sendType: Constants.SendType.ENSRelease
|
|
preSelectedRecipient: root.ensUsernamesStore.getEnsRegisteredAddress()
|
|
preDefinedAmountToSend: LocaleUtils.numberToLocaleString(0)
|
|
preSelectedAsset: {
|
|
let assetsList = releaseEnsModal.store.currentAccount.assets
|
|
for(var i=0; i< assetsList.count;i++) {
|
|
if("ETH" === assetsList.rowData(i, "symbol"))
|
|
return {
|
|
name: assetsList.rowData(i, "name"),
|
|
symbol: assetsList.rowData(i, "symbol"),
|
|
totalBalance: assetsList.rowData(i, "totalBalance"),
|
|
totalCurrencyBalance: assetsList.rowData(i, "totalCurrencyBalance"),
|
|
balances: assetsList.rowData(i, "balances"),
|
|
decimals: assetsList.rowData(i, "decimals")
|
|
}
|
|
}
|
|
return {}
|
|
}
|
|
sendTransaction: function() {
|
|
if(bestRoutes.length === 1) {
|
|
let path = bestRoutes[0]
|
|
let eip1559Enabled = path.gasFees.eip1559Enabled
|
|
let maxFeePerGas = (selectedPriority === 0) ? path.gasFees.maxFeePerGasL:
|
|
(selectedPriority === 1) ? path.gasFees.maxFeePerGasM:
|
|
path.gasFees.maxFeePerGasH
|
|
root.ensUsernamesStore.authenticateAndReleaseEns(
|
|
root.username,
|
|
selectedAccount.address,
|
|
path.gasAmount,
|
|
eip1559Enabled ? "" : path.gasFees.gasPrice,
|
|
eip1559Enabled ? path.gasFees.maxPriorityFeePerGas : "",
|
|
eip1559Enabled ? maxFeePerGas: path.gasFees.gasPrice,
|
|
eip1559Enabled,
|
|
)
|
|
}
|
|
}
|
|
Connections {
|
|
target: root.ensUsernamesStore.ensUsernamesModule
|
|
onTransactionWasSent: {
|
|
try {
|
|
let response = JSON.parse(txResult)
|
|
if (!response.success) {
|
|
if (Utils.isInvalidPasswordMessage(response.result)) {
|
|
releaseEnsModal.setSendTxError()
|
|
return
|
|
}
|
|
releaseEnsModal.sendingError.text = response.result
|
|
return releaseEnsModal.sendingError.open()
|
|
}
|
|
usernameReleased(username);
|
|
let url = `${releaseEnsModal.store.getEtherscanLink()}/${response.result}`;
|
|
Global.displayToastMessage(qsTr("Transaction pending..."),
|
|
qsTr("View on etherscan"),
|
|
"",
|
|
true,
|
|
Constants.ephemeralNotificationType.normal,
|
|
url)
|
|
} catch (e) {
|
|
console.error('Error parsing the response', e)
|
|
}
|
|
releaseEnsModal.close()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
StatusQControls.StatusButton {
|
|
id: releaseBtn
|
|
visible: false
|
|
enabled: false
|
|
anchors.top: keyLbl.bottom
|
|
anchors.topMargin: 24
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: 24
|
|
text: qsTr("Release username")
|
|
onClicked: {
|
|
Global.openPopup(transactionDialogComponent)
|
|
}
|
|
}
|
|
|
|
Text {
|
|
visible: releaseBtn.visible && !releaseBtn.enabled
|
|
anchors.top: releaseBtn.bottom
|
|
anchors.topMargin: 2
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: 24
|
|
text: qsTr("Username locked. You won't be able to release it until %1").arg(Utils.formatShortDateStr(new Date(expiration).toDateString()))
|
|
color: Style.current.darkGrey
|
|
}
|
|
|
|
|
|
StatusQControls.StatusButton {
|
|
anchors.bottom: parent.bottom
|
|
anchors.bottomMargin: Style.current.padding
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
text: qsTr("Back")
|
|
onClicked: backBtnClicked()
|
|
}
|
|
}
|