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 chainId: "" property string walletAddress: "-" property string key: "-" signal backBtnClicked(); signal usernameReleased() QtObject { id: d property double expirationTimestamp: 0 } 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 function onDetailsObtained(ensName: string, address: string, pubkey: string, isStatus: bool, expirationTime: int) { 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 removeButton.visible = true releaseBtn.enabled = expirationTime > 0 && (Date.now() / 1000) > expirationTime && root.ensUsernamesStore.preferredUsername !== username d.expirationTimestamp = expirationTime * 1000 } function onLoading(isLoading: bool) { loadingImg.active = isLoading if (!isLoading) return; walletAddressLbl.visible = false; keyLbl.visible = false; releaseBtn.visible = false; removeButton.visible = false; d.expirationTimestamp = 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: store.getAsset(releaseEnsModal.store.assets, "ETH") sendTransaction: function() { if(bestRoutes.length === 1) { let path = bestRoutes[0] let eip1559Enabled = path.gasFees.eip1559Enabled let maxFeePerGas = path.gasFees.maxFeePerGasM root.ensUsernamesStore.authenticateAndReleaseEns( root.chainId, 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 function onTransactionWasSent(txResult: string) { try { let response = JSON.parse(txResult) if (!response.success) { if (response.result.includes(Constants.walletSection.cancelledMessage)) { return } releaseEnsModal.sendingError.text = response.result return releaseEnsModal.sendingError.open() } for(var i=0; i