158 lines
6.5 KiB
QML
158 lines
6.5 KiB
QML
import QtQuick 2.14
|
|
import QtQuick.Controls 2.14
|
|
import QtQuick.Layouts 1.13
|
|
import QtQml 2.15
|
|
|
|
import StatusQ 0.1
|
|
import StatusQ.Popups 0.1
|
|
import StatusQ.Controls 0.1
|
|
import StatusQ.Core.Theme 0.1
|
|
import StatusQ.Core.Utils 0.1 as SQUtils
|
|
|
|
import utils 1.0
|
|
import shared.controls 1.0
|
|
import shared.stores.send 1.0
|
|
|
|
import "../controls"
|
|
import "../popups"
|
|
|
|
Rectangle {
|
|
id: root
|
|
|
|
readonly property alias anyActionAvailable: d.anyActionAvailable
|
|
|
|
property var walletStore
|
|
property var networkConnectionStore
|
|
required property TransactionStore transactionStore
|
|
|
|
// Community-token related properties:
|
|
required property bool isCommunityOwnershipTransfer
|
|
property string communityName: ""
|
|
|
|
signal launchShareAddressModal()
|
|
signal launchSendModal(string fromAddress)
|
|
signal launchBridgeModal()
|
|
signal launchSwapModal()
|
|
|
|
color: Theme.palette.statusAppLayout.rightPanelBackgroundColor
|
|
|
|
QtObject {
|
|
id: d
|
|
readonly property bool isCollectibleViewed: !!walletStore.currentViewedHoldingID &&
|
|
(walletStore.currentViewedHoldingType === Constants.TokenType.ERC721 ||
|
|
walletStore.currentViewedHoldingType === Constants.TokenType.ERC1155)
|
|
readonly property bool isCollectibleSoulbound: isCollectibleViewed && !!walletStore.currentViewedCollectible && walletStore.currentViewedCollectible.soulbound
|
|
|
|
readonly property var collectibleOwnership: isCollectibleViewed && walletStore.currentViewedCollectible ?
|
|
walletStore.currentViewedCollectible.ownership : null
|
|
|
|
readonly property string userOwnedAddressForCollectible: !!walletStore.currentViewedHoldingID ? getFirstUserOwnedAddress(collectibleOwnership, root.walletStore.nonWatchAccounts) : ""
|
|
|
|
readonly property bool hideCollectibleTransferActions: isCollectibleViewed && !userOwnedAddressForCollectible
|
|
|
|
/// Actions available
|
|
readonly property bool anyActionAvailable: sendActionAvailable
|
|
|| receiveActionAvailable
|
|
|| bridgeActionAvailable
|
|
|| buyActionAvailable
|
|
|| swapActionAvailable
|
|
|
|
readonly property bool sendActionAvailable: !walletStore.overview.isWatchOnlyAccount
|
|
&& walletStore.overview.canSend
|
|
&& !d.hideCollectibleTransferActions
|
|
|
|
readonly property bool receiveActionAvailable: !walletStore.showAllAccounts
|
|
|
|
readonly property bool bridgeActionAvailable: !walletStore.overview.isWatchOnlyAccount
|
|
&& !root.isCommunityOwnershipTransfer
|
|
&& walletStore.overview.canSend
|
|
&& !root.walletStore.showAllAccounts
|
|
&& !d.hideCollectibleTransferActions
|
|
|
|
readonly property bool buyActionAvailable: !root.isCommunityOwnershipTransfer && !root.walletStore.showAllAccounts
|
|
|
|
readonly property bool swapActionAvailable: Global.featureFlags.swapEnabled && !walletStore.overview.isWatchOnlyAccount && !d.hideCollectibleTransferActions
|
|
|
|
function getFirstUserOwnedAddress(ownershipModel, accountsModel) {
|
|
if (!ownershipModel) return ""
|
|
|
|
for (let i = 0; i < ownershipModel.rowCount(); i++) {
|
|
const accountAddress = SQUtils.ModelUtils.get(ownershipModel, i, "accountAddress")
|
|
if (SQUtils.ModelUtils.contains(accountsModel, "address", accountAddress, Qt.CaseInsensitive))
|
|
return accountAddress
|
|
}
|
|
return ""
|
|
}
|
|
}
|
|
|
|
StatusModalDivider {
|
|
anchors.top: parent.top
|
|
width: parent.width
|
|
}
|
|
|
|
RowLayout {
|
|
id: layout
|
|
anchors.centerIn: parent
|
|
height: parent.height
|
|
width: Math.min(root.width, implicitWidth)
|
|
spacing: Style.current.padding
|
|
|
|
StatusFlatButton {
|
|
id: sendButton
|
|
Layout.fillWidth: true
|
|
Layout.maximumWidth: implicitWidth
|
|
objectName: "walletFooterSendButton"
|
|
icon.name: "send"
|
|
text: root.isCommunityOwnershipTransfer ? qsTr("Send Owner token to transfer %1 Community ownership").arg(root.communityName) : qsTr("Send")
|
|
interactive: !d.isCollectibleSoulbound && networkConnectionStore.sendBuyBridgeEnabled
|
|
onClicked: {
|
|
root.transactionStore.setSenderAccount(root.walletStore.selectedAddress)
|
|
root.launchSendModal(d.userOwnedAddressForCollectible)
|
|
}
|
|
tooltip.text: d.isCollectibleSoulbound ? qsTr("Soulbound collectibles cannot be sent to another wallet") : networkConnectionStore.sendBuyBridgeToolTipText
|
|
visible: d.sendActionAvailable
|
|
}
|
|
|
|
StatusFlatButton {
|
|
icon.name: "receive"
|
|
text: qsTr("Receive")
|
|
visible: d.receiveActionAvailable
|
|
onClicked: function () {
|
|
root.transactionStore.setReceiverAccount(root.walletStore.selectedAddress)
|
|
launchShareAddressModal()
|
|
}
|
|
}
|
|
|
|
StatusFlatButton {
|
|
icon.name: "bridge"
|
|
text: qsTr("Bridge")
|
|
interactive: !d.isCollectibleSoulbound && networkConnectionStore.sendBuyBridgeEnabled
|
|
onClicked: root.launchBridgeModal()
|
|
tooltip.text: d.isCollectibleSoulbound ? qsTr("Soulbound collectibles cannot be bridged to another wallet") : networkConnectionStore.sendBuyBridgeToolTipText
|
|
visible: d.bridgeActionAvailable
|
|
}
|
|
|
|
StatusFlatButton {
|
|
id: buySellBtn
|
|
|
|
visible: d.buyActionAvailable
|
|
icon.name: "token"
|
|
text: qsTr("Buy")
|
|
onClicked: Global.openBuyCryptoModalRequested()
|
|
}
|
|
|
|
StatusFlatButton {
|
|
id: swap
|
|
|
|
interactive: !d.isCollectibleSoulbound && networkConnectionStore.sendBuyBridgeEnabled
|
|
visible: d.swapActionAvailable
|
|
tooltip.text: d.isCollectibleSoulbound ? qsTr("Soulbound collectibles cannot be swapped") : networkConnectionStore.sendBuyBridgeToolTipText
|
|
icon.name: "swap"
|
|
text: qsTr("Swap")
|
|
onClicked: root.launchSwapModal()
|
|
}
|
|
}
|
|
}
|
|
|
|
|