import QtQuick 2.14 import QtQuick.Layouts 1.14 import StatusQ.Controls 0.1 import StatusQ.Core 0.1 import StatusQ.Core.Theme 0.1 import StatusQ.Components 0.1 import utils 1.0 import AppLayouts.Wallet 1.0 ActivityNotificationBase { id: root property var community: null property var store: null property var tokenData: root.notification.tokenData // Community properties: required property string communityId required property string communityName required property string communityImage // Notification type related properties: property bool isFirstTokenReceived: root.tokenData.isFirst readonly property bool isAssetType: root.tokenType === Constants.TokenType.ERC20 // Token related properties: property string tokenAmount: { let amount = root.tokenData.amount // Double check if balance is string, then strip ending zeros (e.g. 1.0 -> 1) if (typeof amount === 'string' && amount.endsWith('0')) { amount = parseFloat(root.tokenData.amount) if (isNaN(amount)) amount = "1" // Cast to Number to drop trailing zeros amount = Number(amount).toString() } return amount } property string tokenName: root.tokenData.name property string tokenSymbol: root.tokenData.symbol property string tokenImage: root.tokenData.imageUrl property int tokenType: root.tokenData.tokenType // Wallet related: property string txHash: root.tokenData.txHash property string walletAccountName: !!root.store && !root.isFirstTokenReceived ? root.store.walletStore.getNameForWalletAddress(root.tokenData.walletAddress) : "" QtObject { id: d readonly property string formattedTokenName: root.isAssetType ? root.tokenSymbol : root.tokenName readonly property string ctaText: root.isFirstTokenReceived ? qsTr("Learn more") : qsTr("Transaction details") readonly property string title: root.isFirstTokenReceived ? (root.isAssetType ? qsTr("You received your first community asset") : qsTr("You received your first community collectible")) : qsTr("Tokens received") readonly property string info: { if (root.isFirstTokenReceived) { return qsTr("%1 %2 was airdropped to you from the %3 community").arg(root.tokenAmount).arg(d.formattedTokenName).arg(root.communityName) } else { return qsTr("You were airdropped %1 %2 from %3 to %4").arg(root.tokenAmount).arg(root.tokenName).arg(root.communityName).arg(root.walletAccountName) } } } bodyComponent: RowLayout { spacing: 8 StatusRoundedImage { Layout.preferredWidth: 44 Layout.preferredHeight: 44 Layout.alignment: Qt.AlignTop Layout.leftMargin: Style.current.padding Layout.topMargin: 2 radius: root.isAssetType ? width / 2 : 8 width: 44 height: width image.source: root.tokenImage showLoadingIndicator: false image.fillMode: Image.PreserveAspectCrop } ColumnLayout { spacing: 2 Layout.alignment: Qt.AlignTop Layout.fillWidth: true StatusMessageHeader { Layout.fillWidth: true displayNameLabel.text: d.title timestamp: root.notification.timestamp } RowLayout { spacing: Style.current.padding StatusBaseText { Layout.fillWidth: true text: d.info font.italic: true wrapMode: Text.WordWrap color: Theme.palette.baseColor1 } } } } ctaComponent: StatusFlatButton { size: StatusBaseButton.Size.Small text: d.ctaText onClicked: { root.closeActivityCenter() if(root.isFirstTokenReceived) { Global.openFirstTokenReceivedPopup(root.communityId, root.communityName, root.communityImage, root.tokenSymbol, root.tokenName, root.tokenAmount, root.tokenType, root.tokenImage); } else { Global.changeAppSectionBySectionType(Constants.appSection.wallet, WalletLayout.LeftPanelSelection.Address, WalletLayout.RightPanelSelection.Activity, {address: root.tokenData.walletAddress, txHash: root.txHash}) } } } }